Icon auf Button funzt net, inkl. Code
-
Hi,
bin neu hier und hab die ganze Zeit nur Konsolenanwednungen unter C und C++ programmiert.
Nun möchte ich mein Wissen auf MFC Anbwendungen erweitern. Ich hab schon eine Reihe von Tutorials durchgearbeitet und bin heute bei einem stecken geblieben, da ich absolut nicht weis, warum der Compiler mir eine Fehlermeldung bringt.
Ich wollte einen Button mit einem Icon erzeugen. Den Button habe ich ohne neue Klasse erstellt!
Da ich eine MDI Anwendung habe und ich nicht genau weis, wohin ich den Code schreiben muss, habe ich ihn in die Application Datei (In meinem Fall CBrowserApp), in die Funktion "InitInstance" geschrieben.
Ist das richtig oder muss er woanders hin?
Hier der Code:
// Icon-Button initialisieren HICON hOwnIcon = AfxGetApp()->LoadIcon(IDI_ICON1); CButton *pBtn = static_cast<CButton*>(GetDlgItem(IDC_BUTTON1)); pBtn->SetIcon(hOwnIcon);Der Button wurde vorher nirgends initalisiert.
Der Compiler spukt jetzt den Fehler aus:
error C2660: 'GetDlgItem' : Funktion akzeptiert keine 1 Parameter
Leider weis ich nicht warum? Im Tutorial wurde der Code auch genauso geschrieben! Was ist falsch?
-
Das Problem ist, dass du mit GetDlgItem nur ein Steuerelement aus einem Dialog ansprechen kannst. (vgl. MSDN "The GetDlgItem function retrieves a handle to a control in the specified dialog box"). Das heißt nun, dass du den Code in deine Dialogfeld-Klasse schreiben musst die zu dem Dialog gehört, in dem der Button ist.
Alternativ brauchst du einen Zeiger (vom Typ HWND) auf dein Dialog. Dann musst du deinen Code noch folgendermaßen ändern:
// Icon-Button initialisieren HICON hOwnIcon = AfxGetApp()->LoadIcon(IDI_ICON1); CButton *pBtn = static_cast<CButton*>(zeiger_auf_Dialog, GetDlgItem(IDC_BUTTON1)); pBtn->SetIcon(hOwnIcon);
-
Also das hat leider nicht funktioniert. Ich habe folgendes versucht:
HWND icon=((CMainFrame*)AfxGetApp()->m_pMainWnd)->m_wndFKT;m_wndFKT ist eine Variable für die Dialogleiste des Buttons.
HICON hOwnIcon = AfxGetApp()->LoadIcon(IDI_ICON1); CButton *pBtn = (CButton*)(icon, GetDlgItem(IDC_BUTTON1)); pBtn->SetIcon(hOwnIcon);Der Compiler bringt keinen Fehler mehr aber die Anwendung bricht direkt mit einem Fehler ab.
Deshalb hab ich folgendes versucht:
Ich hab eine Funktion "DoDataExchange" in die Klasse Mainframe eingefügt, da die Dialogleiste in der Funktion WM_CREATE erzeugt wird und folgenden Code reingeschrieben:
HICON hOwnIcon = AfxGetApp()->LoadIcon(IDI_ICON1); CButton *pBtn = static_cast<CButton*>(GetDlgItem(IDC_BUTTON1)); pBtn->SetIcon(hOwnIcon);Das Proggi geht nun auch, nur leider wird kein Symbol angezeigt! Der Button wurde in den Eigentschaften auf Symbol umgesetzt!