Dziwne obramowania przycisków

0

Niedawno chciałem dodać mojemu programowi nieco wyglądu, więc w opcjach projektu zaznaczyłem "Wspieraj tematy Windows XP" (DevC++). Wszystko ładnie, wygenerował się plik .MANIFEST, wygląda nowocześniej, gdyby nie te dziwne niebieskie obramowania przycisków... Jak to usunąć? (Screen przedstawia stan na Win8)
user image
Podejrzewam, że jest to jakiś "fokus", bo gdy przeleciałem po przyciskach TABem, te obramowania zniknęły.

0

Podejrzewam, że jest to jakiś "fokus", bo gdy przeleciałem po przyciskach TABem, te obramowania zniknęły.

Pokaż kod.
Jak tworzysz kontrolki - z kodu (CreateWindow) czy w designerze?

0

CreateWindow().

	HWND g_pLogZaloguj = CreateWindowEx( 0, "BUTTON", "Zaloguj się", WS_CHILD | WS_VISIBLE | SS_CENTER,
10, 285, 430, 30, hwndLog, ( HMENU ) pLogZaloguj, hInstance, NULL );
	
	HWND g_pLogZapomnialem = CreateWindowEx( 0, "BUTTON", "Zapomniałeś hasła / nie znasz danych logowania?", WS_CHILD | WS_VISIBLE | SS_CENTER,
10, 325, 430, 30, hwndLog, ( HMENU ) pLogZapomnialem, hInstance, NULL );

Ogólnie nie mam nic przeciwko temu fokusowi, ale czemu na obu przyciskach naraz?

0

spróbuj zrobić SetFocus() na którąś kontrolkę.

0

Wówczas oprócz niebieskiego obramowania na danym przycisku tworzą się także szare kropeczki.
user image

0

Żadna z powyższych funkcji nie rozwiązała problemu. :/

0

Możesz wrzucić cały kod tworzenia okna i jego elementów?

0

Ogólnie sprawa jest dość skomplikowana, bo rzecz się dzieje w oknie potomnym, które jest wyświetlane przed wyświetleniem okna głównego. Oto kod:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
	WNDCLASSEX wc; /* A properties struct of our window */
	MSG Msg; /* A temporary location for all messages */

	/* zero out the struct and set the stuff we want to modify */
	memset(&wc,0,sizeof(wc));
	wc.cbSize		 = sizeof(WNDCLASSEX);
	wc.lpfnWndProc	 = WndProc; /* This is where we will send messages to */
	wc.hInstance	 = hInstance;
	wc.hCursor		 = LoadCursor(NULL, IDC_ARROW);
	
	/* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wc.lpszClassName = "WindowClass";
	wc.hIcon		 = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */
	wc.hIconSm		 = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon */
	
	INITCOMMONCONTROLSEX icc;
	icc.dwSize = sizeof( INITCOMMONCONTROLSEX );
	icc.dwICC = ICC_BAR_CLASSES; // toolbary, statusbary i tooltipy
	InitCommonControlsEx( & icc );
		
	log.open( "log.txt", std::ios::in | std::ios::out | std::ios::trunc );
	log<<"Log rozpoczęty.\n";
	
	if(!RegisterClassEx(&wc)) {
		log<<"Error1.\n";
		MessageBox(NULL, "Window Creation Failed! Error no. = 2\nNie można zarejstrować klasy.","Error! (1)",MB_ICONERROR|MB_OK);
		return 0;
	}

	HMENU hMenu = LoadMenu( hInstance, MAKEINTRESOURCE( 200 ) );

	hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Okno główne",SWP_NOMOVE | SWP_NOSIZE | WS_MAXIMIZE | WS_MINIMIZEBOX | WS_SYSMENU,
		CW_USEDEFAULT, /* x */
		CW_USEDEFAULT, /* y */
		9999, /* width */
		9999, /* height */
		NULL,hMenu,hInstance,NULL);

	RECT rcl;
    GetClientRect( hwnd, & rcl );

	if(hwnd == NULL) {
		log<<"Error2.\n";
		MessageBox(NULL, "Window Creation Failed! Error no. = 2\nNie można wygenerować okienka.","Error! (2)",MB_ICONERROR|MB_OK);
		return 0;
	}
	
	LOGFONT lf = {};
    lf.lfHeight = -70;
    strcpy(lf.lfFaceName, "Lato light");
    HFONT hFontLl = CreateFontIndirect(&lf);
	
    lf.lfHeight = -15;
    strcpy(lf.lfFaceName, "Lato light");
    HFONT hFontLs = CreateFontIndirect(&lf);
    
    lf.lfHeight = -19;
    strcpy(lf.lfFaceName, "Segoe UI");
    HFONT hFontSl = CreateFontIndirect(&lf);
    
    lf.lfHeight = -13;
    strcpy(lf.lfFaceName, "Segoe UI");
    HFONT hFontSs = CreateFontIndirect(&lf);
    
	//LOGOWANIE.START
    
    hwndLog = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Okno logowania", WS_SYSMENU | WS_VISIBLE,
	CW_USEDEFAULT, /* x */
	CW_USEDEFAULT, /* y */
	460, /* width */
	400, /* height */
	hwnd,NULL,hInstance,NULL);
	
	SetWindowPos(hwndLog, HWND_TOPMOST, CW_USEDEFAULT, CW_USEDEFAULT, 460, 400, SWP_NOMOVE);
	
	log<<"Okno logowania pomyślnie utworzone i pokazane.\n";
    
    HWND hStatic = CreateWindowEx( 0, "STATIC", "Aby uzyskać dostęp do programu,\nzaloguj się:", WS_CHILD | WS_VISIBLE |
SS_CENTER, 0, 10, 460, 60, hwndLog, NULL, hInstance, NULL );
	
	HWND hStatic2 = CreateWindowEx( 0, "STATIC", "Wprowadź login:", WS_CHILD | WS_VISIBLE |
SS_LEFT, 10, 80, 200, 30, hwndLog, NULL, hInstance, NULL );
	
	HWND hStatic3 = CreateWindowEx( 0, "STATIC", "—", WS_CHILD | WS_VISIBLE |
SS_LEFT, 65, 121, 10, 10, hwndLog, NULL, hInstance, NULL );
	
	HWND hText = CreateWindowEx( 0, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 80, 114, 32, 30,
hwndLog, ( HMENU ) tLogLogin, hInstance, NULL );
	
	HWND hStatic4 = CreateWindowEx( 0, "STATIC", "Hasło:", WS_CHILD | WS_VISIBLE |
SS_LEFT, 10, 170, 60, 30, hwndLog, NULL, hInstance, NULL );
	
	HWND hText2 = CreateWindowEx( 0, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_PASSWORD, 10, 200, 175, 30,
hwndLog, ( HMENU ) tLogHaslo, hInstance, NULL );

	HWND g_cZapamietaj = CreateWindowEx( 0, "BUTTON", "Zapamiętaj mnie na tym komputerze", WS_CHILD | WS_VISIBLE | BS_CHECKBOX | BS_AUTOCHECKBOX,
10, 240, 430, 30, hwndLog, ( HMENU ) cLogZapamietaj, hInstance, NULL );
	
	HWND g_pLogZaloguj = CreateWindowEx( 0, "BUTTON", "Zaloguj się", WS_CHILD | WS_VISIBLE | SS_CENTER,
10, 285, 430, 30, hwndLog, ( HMENU ) pLogZaloguj, hInstance, NULL );
	
	HWND g_pLogZapomnialem = CreateWindowEx( 0, "BUTTON", "Zapomniałeś hasła / nie znasz danych logowania?", WS_CHILD | WS_VISIBLE | SS_CENTER,
10, 325, 430, 30, hwndLog, ( HMENU ) pLogZapomnialem, hInstance, NULL );

	
	
	HWND hCombo = CreateWindowEx( WS_EX_CLIENTEDGE, "COMBOBOX", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | CBS_DROPDOWNLIST,
10, 113, 50, 200, hwndLog, NULL, hInstance, NULL );
	
	SendMessage( hCombo, CB_ADDSTRING, 0,( LPARAM ) "A"  );
	SendMessage( hCombo, CB_ADDSTRING, 0,( LPARAM ) "B" );
	SendMessage( hCombo, CB_ADDSTRING, 0,( LPARAM ) "C" );
	SendMessage( hCombo, CB_ADDSTRING, 0,( LPARAM ) "D" );
	SendMessage( hCombo, CB_ADDSTRING, 0,( LPARAM ) "E" );
	
	SendMessage( hCombo, CB_SETCURSEL, 4, 0 );
    
	SendMessage( hStatic      , WM_SETFONT, (WPARAM)hFontSl, false );
	SendMessage( hStatic2     , WM_SETFONT, (WPARAM)hFontSl, false );
	SendMessage( hStatic4     , WM_SETFONT, (WPARAM)hFontSl, false );
	SendMessage( hText        , WM_SETFONT, (WPARAM)hFontSl, false );
	SendMessage( hText2       , WM_SETFONT, (WPARAM)hFontLs, false );
	SendMessage( g_pLogZaloguj, WM_SETFONT, (WPARAM)hFontSl, false );
	SendMessage( hCombo       , WM_SETFONT, (WPARAM)hFontSl, false );
	SendMessage( g_pLogZapomnialem, WM_SETFONT, (WPARAM)hFontSl, false );
	SendMessage( g_cZapamietaj, WM_SETFONT, (WPARAM)hFontSs, false );
	
	//LOGOWANIE.KONIEC
	
	//TWORZENIE OKNA GŁÓWNEGO
    
    HWND hInfoData = CreateWindowEx( 0, "STATIC", "tutaj data dzisiejsza", WS_CHILD | WS_VISIBLE | ES_CENTER,
    0, 120, rcl.right, 100, hwnd, NULL, hInstance, NULL );
    
    HWND hInfo = CreateWindowEx( 0, "STATIC", "Przykładowy tekst", WS_CHILD | WS_VISIBLE | ES_CENTER,
    0, 300, rcl.right, rcl.bottom-100-120, hwnd, NULL, hInstance, NULL );

    HWND hKursRamka = CreateWindowEx( 0, "BUTTON", "ramka", WS_CHILD | WS_VISIBLE | BS_GROUPBOX | ES_CENTER,
    100, 100, rcl.right-100-100, rcl.bottom-100-100, hwnd, NULL, hInstance, NULL );

	SendMessage(hInfoData, WM_SETFONT, (WPARAM)hFontLl, false); 
	SendMessage(hInfo, WM_SETFONT, (WPARAM)hFontLl, false); 
	SendMessage(hKursRamka, WM_SETFONT, (WPARAM)hFontLs, false); 

	time_t czas;
    struct tm * data;
    char godzina[ 80 ];
    char plik[ 80 ];

	time( & czas );
    data = localtime( & czas );
    
    strftime( godzina, 80, "%d.%m.20%yr.", data );
    
    SetWindowText( hInfoData, godzina );
	g_hBrush = CreateSolidBrush( RGB( 255, 255, 255 ) );
	
    //ShowWindow( hwnd, SW_SHOW );

	log<<"Wszystkie kontrolki wczytane. Koniec WINAPI WinMain. Oczekiwanie na zdarzenia.\n";
	
	/*
		This is the heart of our program where all input is processed and 
		sent to WndProc. Note that GetMessage blocks code flow until it receives something, so
		this loop will not produce unreasonably high CPU usage
	*/
	while(GetMessage(&Msg, NULL, 0, 0) > 0) { /* If no error is received... */
		TranslateMessage(&Msg); /* Translate key codes to chars if present */
		DispatchMessage(&Msg); /* Send it to WndProc */
	}
	return Msg.wParam;
}
2

stałej SS_CENTER używa się wyłącznie z kontrolkami typu STATIC (SS od Static Style).
style buttonów określa się stałymi BS_

wartość SS_CENTER wynosi 1, tyle samo co BS_DEFPUSHBUTTON.

0

No proszę, niby taka błaha rzecz a była sprawcą takiego problemu. :D Bardzo dziękuję za pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1