11. GyIK (FAQ)

2014.06.08. 20:24

Példa: dlg_three

 Ez egy rövidke fejezet lesz, a sokszor előforduló gondokkal.

Szín megváltoztatása

 

Érdemes kerülni a szöveg színezését, mert csak bántja a szemet. Mindazonáltal néha valóban hasznos dolog, például ha egy URL link működését szeretnénk szimulálni.

Képesek vagyunk megváltoztatni a színeket, hiszen ezek is a windóz üzenetei. Például a DialogBox színe a WM_CTLCOLORDLG segítségével módosítható.

Először létrehozunk egy ecsetet a háttér festésére, és tároljuk későbbre.

HBRUSH g_hbrBackground = CreateSolidBrush(RGB(0, 0, 0));

    case WM_CTLCOLORDLG:
        return (LONG)g_hbrBackground;
    case WM_CTLCOLORSTATIC:
    {
        HDC hdcStatic = (HDC)wParam;
        SetTextColor(hdcStatic, RGB(255, 255, 255));
        SetBkMode(hdcStatic, TRANSPARENT);
        return (LONG)g_hbrBackground;
    }
    break;

Figyeljük meg azt a sort, ami a hátteret beállítja átlátszóra! Ha elhagyjuk ezt a sort, akkor az ecset kifesti a megadott színnel a hátteret. Ekkor viszont ha a szöveget rajzolja, akkor felülírja az alap háttérszínnel. Állítsuk a szöveg rajzoló módot átlátszóra, hogy megoldjuk ezt a problémát!

 A hagyományos vezérlőknek nagyon sok színe megváltoztatható, ezek listáját megtaláljuk ha megnézzük a Win32 referenciát (pl MSDN). Egyszerűen keressünk rá a WM_CTLCOLOR* kulcsszóra! A vezérlő kétféle választ adhat. Vagy WM_CTLCOLOREDIT ha megáltoztatható, vagy WM_CTLCOLORSTATIC ha nem. Ha több STATIC vezérlőnk is van, amiknek eltér a színe, akkor az ID alapján tudjuk őket megkülönböztetni. A HWND-t kell nézni az lParam-ban, és a GetDlgCtlrID() segítségével kapjuk meg az ID-t. Ne feledjük, hogy a szerkesztő minden STATIC vezérlőnek IDC_STATIC (-1) értéket ad, tehát ha meg akarjuk őket különböztetni egymástól, akkor külön ID-t kell nekik adnunk.

 Az ikon beállítása

 

Ez viszonylag egyszerű feladat, csak ki kell adnunk a WM_SETICON üzenetet a párbeszéd ablaknak. Ezt kétszer kell megtennünk, egyszer a kis ikonnak az ablak sarkában, egyszer pedig a nagy ikonnak ha Alt+Tab-ot nyomna a user. Ha csak egy méretű ikonunk van, akkor elég ugyanazt a handlert elküldeni mindkét esetben.

Az alábbi kóddal beállíthatjuk az alkalmazás alapértelmezett ikonját:

 SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION)));
 SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION)));

Amikor saját ikonnal helyettesítjük a default ikont, nem szabad elfelejteni lecserélni a LoadIcon() HINSTANCE paraméterét az alkalmazásunk példányára (ha nincs eltárolva a WinMain()-ban, akkor a GetModuleHandle(NULL) segítségével kideríthetjük).

Miért nem működik a ComboBox-om?

 

Sokszor előforduló hiba, hogy létrehozunk egy kombinált listát, de az nem jelenik meg a program futásakor. Amikor megadjuk a magasságát, akkor az egész vezérlő magasságát adjuk meg, beleértve a legördülő lista méretét is! Ha például 100 pixelnek adjuk meg, akkor ebből 30 pixel (legyen ez most az alapértelmezett) a nyíl amire rákattintunk, és marad még 70 pixel a legördülő résznek. Ha VC++ erőforrás szerkesztőt használunk, akkor a függőleges méretet nem is adhatjuk meg. Rá kell bökni a nyílra, és a legördülő részt méretezhetjük tetszés szerint.

Referenciák

 

Érdemes a továbbiak ügyében szétnézni a Microsoft MSDN oldalán itt.
A kulcsszavak ezek: User Interface Services, Windows Controls, néha a Platform SDK.

 

 

 

 

 

 

A bejegyzés trackback címe:

https://win32learning.blog.hu/api/trackback/id/tr66288473

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása