11. september 2006 - 13:29
Der er
16 kommentarer og 1 løsning
Mangler Ikon oppe i venstre hjørne af applikation
Jeg kan som sagt ikke få vist ikonet oppe i venstre hjørne af min applikation. Jeg har følgende i min .rc fil: IDD_MAIN DIALOG DISCARDABLE 0, 0, 207, 156 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Setup" FONT 8, "MS Sans Serif" BEGIN LTEXT "bla.. bla..",IDC_STATIC,7,10,180,80 PUSHBUTTON "&Start",IDC_START,7,130,50,14 PUSHBUTTON "&Afslut",IDC_AFSLUT,60,130,50,14 PUSHBUTTON "&Mere",IDC_MERE,113,130,50,14 END IDI_MYICON ICON "E:\\ikon.ico" og jeg laver vinduet på følgende måde: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { return DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc); } Den vil godt vise ikonet på applikationen i stifinderen, men ikke i selve applikationens vindue, når applikationen er startet. Hvad gør jeg galt? Og har I et forslag til en løsning?
Annonceindlæg fra Computerworld it-jobbank
11. september 2006 - 13:43
#1
kan filen være for stor ? - det har jeg oplevet i Java-swing.
11. september 2006 - 13:58
#2
Hmmm... umiddelbart så tror jeg ikke at det er der problemet er. Jeg har på fornemmelsen at man både skal initialisere det ikon som vises i stifinderen og det ikon som vises i selve programmets titellinie. Men jeg er lidt i tvivl om hvordan man gør. Jeg har læst at man kan initialisere ikonerne når man registrere vinduet, ligesom herunder: wc.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON)); wc.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON), IMAGE_ICON, 16, 16, 0); Men jeg registrerer slet ikke mit vindue på denne måde og hvis jeg forsøger at gøre det på den måde, så mister jeg skrifttypen og skriftstørrelsen på knapperne.
11. september 2006 - 20:42
#3
Prøv at sende en WM_SETICON fra din DlgProc, noget i stil med: HICON SmallIcon = LoadIcon(hInstance, MAKEINTRESOURCE(180)); HICON LargeIcon = LoadIcon(hInstance, MAKEINTRESOURCE(181)); SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM )SmallIcon); SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM )LargeIcon);
12. september 2006 - 10:51
#4
Jeg har lavet følgende: case WM_CREATE: { HICON SmallIcon = LoadIcon(hInstance, MAKEINTRESOURCE(201)); HICON LargeIcon = LoadIcon(hInstance, MAKEINTRESOURCE(201)); SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM )SmallIcon); SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM )LargeIcon); } break; hvor 201 er ID'en på mit ikon, men den fejler da den mangler hInstance som bliver initialiseret i WinMain. Hvordan løser jeg lige det?
12. september 2006 - 19:51
#5
Du kan lave en global variabel og initialisere den til hInstance i din WinMain. Eller du kan bruge GetModuleHandle() i stedet for hInstance.
12. september 2006 - 20:23
#6
Argh... jeg er vist lige nødt til at få et eksempel på den globale variabel :( Det vil ikke rigtig lykkedes for mig.
12. september 2006 - 20:27
#7
I toppen af filen, efter #include ..., skriver du: HINSTANCE InstanceHandle; Så bruger du: case WM_CREATE: { HICON SmallIcon = LoadIcon(InstanceHandle, MAKEINTRESOURCE(201)); HICON LargeIcon = LoadIcon(hInstanceHandle, MAKEINTRESOURCE(201)); SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM )SmallIcon); SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM )LargeIcon); } break; Og i toppen af WinMain skriver du: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { InstanceHandle = hInstance;
12. september 2006 - 20:34
#8
Ok nu fejler den ikke når jeg kompilerer, men jeg får stadig ikke mit ikon vist. Har du nogle gode ideer? :)
12. september 2006 - 20:45
#9
Prøv at poste hele koden
12. september 2006 - 20:53
#10
jeg har lige sendt en mail til den mail du har på din hjemmeside...
12. september 2006 - 21:13
#11
Du skal bruge WM_INITDIALOG og ikke WM_CREATE. Dialogboxe der laves med DialogBox modtager ikke WM_CREATE, men WM_INITDIALOG. (Det er vist for længe siden jeg har lavet dialogboxe på den måde.)
12. september 2006 - 21:23
#12
Har du prøvet kompilere det? Altså hvor du får ikonet vist? Det virker nemlig ikke på min. :(
12. september 2006 - 21:32
#13
jeg har prøvet at fjerne DS_MODALFRAME fra style i rc-filen og det gør at der vises det der standard ikon fra windows.
12. september 2006 - 21:38
#14
Du har det til at stå under WM_COMMAND, det skal det ikke. Prøv at flytte det op i starten af DlgProc så der kommer til at stå: BOOL CALLBACK DlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { case WM_INITDIALOG: { HICON SmallIcon = LoadIcon(InstanceHandle, MAKEINTRESOURCE(201)); HICON LargeIcon = LoadIcon(InstanceHandle, MAKEINTRESOURCE(201)); SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM )SmallIcon); SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM )LargeIcon); } break; case WM_COMMAND: switch(LOWORD(wParam))
12. september 2006 - 21:43
#15
hold kæft hvor jeg sover!!! Det gør det da også. Og der var også her fejlen var. Nu virker det. Tusind tak for hjælpen. :) Vil du stadig ikke have points?
12. september 2006 - 21:46
#16
Nej tak.
12. september 2006 - 21:52
#17
ok - men du får stadig et kæmpe tak herfra!
Kurser inden for grundlæggende programmering