Witam po raz kolejny! Mam dwa problemy związane z oknem WinAPI pierwszy z nich to to, że nie mogę poradzić sobie z wstawieniem ikonki w menu a drugi z nich to obsługa menu za każdym razem wywala mi jakiś błąd. Albo ja nie w tym miejscu wkleiłem kod albo o czymś zapomniałem?
kod który wklejam do ikonki w menu:
HBITMAP hbmzakoncz = (HBITMAP)LoadImage(hThisInstance, “zakoncz.bmp”,
IMAGE_BITMAP, 0,0, LR_LOADFROMFILE|LR_LOADTRANSPARENT);
SetMenuItemBitmaps(hMenu, 3, MF_BYCOMMAND, hbmzakoncz, hbmzakoncz);
tu wywala błąd: HBITMAP hbmzakoncz = (HBITMAP)LoadImage(hThisInstance, “zakoncz.bmp”,
kod który wklejam do obsługi menu:
case WM_COMMAND:
{
if(LOWORD(wParam) == 3)
PostQuitMessage(0);
else
MessageBox(hwnd, “Dziękujemy za skorzystanie z naszego menu ;-P”,
“Zakończ”, MB_ICONINFORMATION);
}
break;
tu wywala błąd: case WM_COMMAND:
A oto kod programu:
#include
BOOL InitWindow();
LRESULT CALLBACK WndEventProc(HWND,UINT,WPARAM,LPARAM); // do komunikatów
LRESULT CloseWnd(HWND hwnd);//funkcja pyta się czy zamknąc program
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
if(InitWindow()==FALSE) return 0;
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
BOOL InitWindow()
{
//uchwyt programu pobrany za pomocą funkcji GetModuleHandle()
HINSTANCE hInstance=GetModuleHandle(0);
WNDCLASSEX wndcls;
char strClassName[]=“Klasa okna programu”;
wndcls.cbSize=sizeof(WNDCLASSEX);
wndcls.hInstance=hInstance;
wndcls.lpszClassName=strClassName;
wndcls.lpfnWndProc=WndEventProc;
wndcls.style=CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW | CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wndcls.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(500));
wndcls.hIconSm=NULL;
wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);
wndcls.hbrBackground=(HBRUSH)COLOR_WINDOW;
wndcls.lpszMenuName=“MENU_PROGRAMU”;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
if(RegisterClassEx(&wndcls))
{
HWND hwnd=CreateWindowEx(WS_EX_CLIENTEDGE | WS_EX_COMPOSITED,
strClassName,“www.awdc.yoyo.pl”,WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE,
CW_USEDEFAULT,CW_USEDEFAULT,640,480,NULL,NULL,hInstance,NULL);
if(hwnd!=NULL) return TRUE;
//w przypadku błędu utworzenia okna, wyświetlenie treści błędu
else MessageBox(NULL,“Błąd tworzenia okna!.”,NULL,MB_OK | MB_ICONERROR);
}
//w przypadku błędu rejestarcji klasy okna, wyświetlenie treści błędu
else MessageBox(NULL,“Błąd rejestarcji klasy!.”,NULL,MB_OK | MB_ICONERROR);
return FALSE;
}
case WM_COMMAND:
{
if(LOWORD(wParam) == 3)
PostQuitMessage(0);
else
MessageBox(hwnd, “Dziękujemy za skorzystanie z naszego menu ;-P”,
“Zakończ”, MB_ICONINFORMATION);
}
break;
HBITMAP hbmzakoncz = (HBITMAP)LoadImage(hThisInstance, “zakoncz.bmp”,
IMAGE_BITMAP, 0,0, LR_LOADFROMFILE|LR_LOADTRANSPARENT);
SetMenuItemBitmaps(hMenu, 3, MF_BYCOMMAND, hbmzakoncz, hbmzakoncz);
LRESULT CALLBACK WndEventProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE://obsługa komunikatu WM_CLOSE
return CloseWnd(hwnd);//obsługa tego zdarzenia-wykonuje się funckja CloseWnd
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
}
return 0;
}
LRESULT CloseWnd(HWND hwnd)
{
int UserResult=MessageBox(hwnd,“Czy na pewno chcesz zakończyć i opuścić program?”,“www.awdc.yoyo.pl”,MB_ICONEXCLAMATION | MB_YESNO);
if(UserResult==IDYES) DestroyWindow(hwnd);// użytkownik wybrał tak - zamykam
return 0;
}
Proszę o pomoc w rozwiązaniu tych problemów