WM_command-catch-Taste, drücken Sie im c++ - win32 -
Ich versuche, den Knopf drücken-Ereignis in c++ win32-mit WM_Command
HWND hBtn;
HWND hBtnParent = HWND("UploadVideo");
HWND SelectVideoBTN, UploadBTN;
HWND hWnd;
HINSTANCE hUpload;
WNDCLASSEX wcexUpload;
int nCmdShowUpload = 1;
using namespace std;
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
loader::alert("rrr");
switch (message)
{
case WM_COMMAND:
if (LOWORD(wParam) == WORD(SelectVideoBTN)) {
loader::alert("hello");
}
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
SelectVideoBTN = CreateWindow(
L"BUTTON", //Predefined class; Unicode assumed
L"Select Video's", //Button text
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, //Styles
10, //x position
460, //y position
100, //Button width
25, //Button height
hWnd, //Parent window
NULL, //No menu.
(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
NULL); //Pointer not needed.
UploadBTN = CreateWindow(
L"BUTTON", //Predefined class; Unicode assumed
L"Upload", //Button text
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, //Styles
390, //x position
460, //y position
100, //Button width
25, //Button height
hWnd, //Parent window
NULL, //No menu.
(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
NULL); //Pointer not needed.
Ich gesucht habe an diesem Beispiel - http://forums.devshed.com/programming-42/create-button-clicked-148407.html - aber ich kann es nicht ganz verstanden, um zu arbeiten, es nicht selbst nennen sich die CALLBACK WindowProcedure
- gibt es jemand, der mir helfen könnte?
Sind die Schaltflächen vorhanden auf das window
ich erstellt habe, erstelle ich die window
- by-doing -
WNDCLASSEX vidUploader;
vidUploader.cbSize = sizeof(WNDCLASSEX);
vidUploader.style = CS_HREDRAW | CS_VREDRAW;
vidUploader.lpfnWndProc = WndProc;
vidUploader.cbClsExtra = 0;
vidUploader.cbWndExtra = 0;
vidUploader.hInstance = hUpload;
vidUploader.hIcon = LoadIcon(hUpload, MAKEINTRESOURCE(IDI_P2GOVIDEOUPLOADER20));
vidUploader.hCursor = LoadCursor(NULL, IDC_ARROW);
vidUploader.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
vidUploader.lpszMenuName = MAKEINTRESOURCE(IDC_P2GOVIDEOUPLOADER20);
vidUploader.lpszClassName = (LPCWSTR)(L"UploadVideo");
vidUploader.hIconSm = LoadIcon(wcexUpload.hInstance, MAKEINTRESOURCE(IDI_SMALL));
RegisterClassEx(&vidUploader);
hInst = hUpload; //Store instance handle in our global variable
und dann, um das Fenster
hWnd = CreateWindow((LPCWSTR)(L"UploadVideo"), (LPCWSTR)(L"Upload Video's"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 100, NULL, NULL, hUpload, NULL);
if (!hWnd)
{
MessageBox(NULL, _T("Call to CreateWindow failed!"), _T("Win32 Guided Tour"), NULL);
return 1;
}
//The parameters to ShowWindow explained:
//hWnd: the value returned from CreateWindow
//nCmdShow: the fourth parameter from WinMain
ShowWindow(hWnd,
nCmdShowUpload);
UpdateWindow(hWnd);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Child-windows (also windows mit der
WS_CHILD
Fenster-Stil) werden identifiziert durch einen eindeutigen numerischen Wert, der oft als " Steuerelement-ID oder Fenster-ID. Es wird an den Elternteil, erhält es einenWM_COMMAND
Nachricht, zum Beispiel. Ihnen nie vergeben Sie ein Steuerelement-ID auf Ihrem button-Steuerelemente, obwohl, und das übergeordnete Fenster Sie nicht identifizieren können. Im Falle eines untergeordneten Fensters, der hMenu parameter im Aufruf CreateWindow überlastet ist, um zu tragen das unique identifier:In anderen Worten, Ihre Anwendung wählt einen numerischen Wert zuweisen Steuerelemente. Da die unteren IDs verwendet werden, durch die der dialog-manager bereits (z.B.
IDOK
), ist es üblich, die Zuordnung von Steuerelement-IDs, beginnend bei 100 (siehe Warum dialog-Editors starten Sie die Zuordnung von Steuerelement-IDs mit 100?).In Ihrem WM_COMMAND - handler können Sie dann vergleichen
LOWORD(wParam)
auf den Bezeichner zugewiesen, um Ihren button-Steuerelemente.Müssen Sie die folgenden änderungen an Ihrem code.
Ändern Sie Ihre Fenster erstellen code:
Überprüfen Sie die Steuerelement-ID in Ihrem
WM_COMMAND
handler:Wenn Ihr Fenster-Prozedur nicht aufgerufen, denn das könnte bedeuten, dass Sie nicht mit dem verteilen von Nachrichten auf dem aufrufenden thread. Ein GUI-thread muss immer eine message-loop. Die standard-message-Schleife genügt:
WM_COMMAND
undWM_NOTIFY
Nachrichten, die gesendet werden, zu einem übergeordneten Fenster tragen das untergeordnete SteuerelementHWND
wie gut, zB:case WM_COMMAND: if (HWND(lParam) == SelectVideoBTN) { ... }