Witam uprzejmie!
Za pomocą Dev C++ wygenerowałem programik wyświetlający puste okno Windowsowe. Następnie, w oparciu o kurs http://cpp0x.pl/kursy/Kurs-WinAPI-C++/Podstawy/Podstawy-WinAPI/168 umieściłem deklarację globalnego uchwytu (przed funkcją WinMain )
HWND g_hPrzycisk;
a następnie - wewnątrz WinMain , zaraz po instrukcji tworzącej okienko główne - wstawiłem kod
g_hPrzycisk = CreateWindowEx( 0, "BUTTON", "Nasz przycisk", WS_CHILD | WS_VISIBLE,100, 100, 150, 30, hwnd, NULL, hInstance, NULL );
. Spowodowało to wyświetlenie w oknie żądanego przycisku. Następnie dodałem (tuż poniżej poprzedniego) kod:
case WM_COMMAND:
if(( HWND ) lParam == g_hPrzycisk )
MessageBox( hwnd, "Nacisnąłeś przycisk!", "Ha!", MB_ICONINFORMATION );
break;
który - według wspomnianego kursu - powinien spowodować reakcję na “naciśnięcie” przycisku. Niestety - przy próbie kompilacji wskazywany jest błąd w pierwszej linii powyższego kodu. Zaznaczam, że to moje pierwsze nieśmiałe kroki w próbie programowania i wykonuję je metodą prób i błędów - dlatego osoby chcące ewentualnie poświęcić mi nieco swojego cennego czasu proszę o możliwie “łopatologiczną” pomoc. Poniżej daję jeszcze większe fragmenty mojego “programu” żeby uwidocznić gdzie co dopisałem.
#include
/* This is where all the input to the window goes to */
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
switch(Message) {
/* trap the WM_CLOSE (clicking X) message, and actually tell the window to close */
case WM_CLOSE: {
DestroyWindow(hwnd);
break;
}
/* Upon destruction, tell the main thread to stop */
case WM_DESTROY: {
PostQuitMessage(0);
break;
}
/* All other messages (a lot of them) are processed using default procedures */
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}
HWND g_hPrzycisk;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wc; /* A properties struct of our window */
HWND hwnd; /* A 'HANDLE', hence the H, or a pointer to 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);
if(!RegisterClassEx(&wc)) {
MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Jacek - ćwiczenie pierwsze",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, /* x */
CW_USEDEFAULT, /* y */
650, /* width */
480, /* height */
NULL,NULL,hInstance,NULL);
g_hPrzycisk = CreateWindowEx( 0, "BUTTON", "Kontrolka pierwsza", WS_CHILD | WS_VISIBLE,
5, 5, 150, 30, hwnd, NULL, hInstance, NULL );
case WM_COMMAND:
if(( HWND ) lParam == g_hPrzycisk )
MessageBox( hwnd, "Nacisnąłeś przycisk!", "Ha!", MB_ICONINFORMATION );
break;