我正在為我的應用程式創建一個登錄螢屏,我創建了按鈕,但我不知道如何讓我的程式在其中一個按鈕被按下時做什么。
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam){
switch(Message) {
case WM_CREATE:
CreateWindow(TEXT("button") 。TEXT("CONFIRM"/span>), WS_VISIBLE | WS_CHILD, 355, 400, 95, 35, hwnd, NULL, NULL , NULL)。
CreateWindow(TEXT("button") 。TEXT("SIGN UP"/span>), WS_VISIBLE | WS_CHILD, 50, 400, 95, 35, hwnd, NULL, NULL, NULL)。
CreateWindow(TEXT("static"), TEXT("username: "), WS_VISIBLE | WS_CHILD, 50, 40, 80, 15, hwnd, NULL, NULL, NULL);
CreateWindow(TEXT("static"/span>), TEXT("EMAIL: "), WS_VISIBLE | WS_CHILD, 85, 100, 45, 15, hwnd, NULL, NULL, NULL)。
創建視窗(TEXT("static"), TEXT("PASSWORD: "), WS_VISIBLE | WS_CHILD, 50, 160, 83, 15, hwnd, NULL, NULL, NULL);
CreateWindow(TEXT("edit") 。TEXT("), WS_VISIBLE | WS_CHILD, 135, 40, 200, 17, hwnd, NULL, NULL, NULL)。)
CreateWindow(TEXT("edit") 。TEXT("), WS_VISIBLE | WS_CHILD, 135, 100, 200, 17, hwnd, NULL, NULL, NULL)。)
CreateWindow(TEXT("edit") 。TEXT("), WS_VISIBLE | WS_CHILD, 135, 160, 200, 17, hwnd, NULL, NULL, NULL)。)
break。
/* 銷毀時,告訴主執行緒停止*/。
case WM_DESTROY: {
PostQuitMessage(0)。
break;
}
/* 所有其他的訊息(很多)都是使用默認程式處理的 */
default。
return DefWindowProc(hwnd, Message, wParam, lParam)。
}
return 0;
}
/* Win32 GUI程式的'main'函式:這是執行的開始 */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wc; /* 我們視窗的一個屬性結構 */{
HWND hwnd; /* 一個 "HANDLE",因此是H,或者說是我們視窗的指標 */.
MSG msg; /* 所有資訊的臨時位置*/。
/* 清空結構并設定我們要修改的內容 */
memset(&wc,0,sizeof(wc))。
wc.cbSize = sizeof(WNDCLASSEX)。
wc.lpfnWndProc = WndProc; /* 這就是我們要發送訊息的地方 */LoadCursor(NULL, IDC_ARROW);
/* 白色,COLOR_WINDOW只是一個系統顏色的#define,嘗試Ctrl 點擊它 */ 。
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW 1) 。
wc.lpszClassName = "WindowClass";
wc.hIcon = LoadIcon(NULL,"XBM LOGO.png"); /*加載一個標準圖示 */.
wc.hIconSm = LoadIcon(NULL, "A"); /* 使用名稱 "A "的專案圖示 */
if(!RegisterClassEx(&wc)) {
MessageBox(NULL, "視窗注冊失敗!","錯誤!", MB_ICONEXCLAMATION|MB_OK) 。
return 0;
}
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass"," Verification",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
400, /* x */.
75, /* y */.
500, /* 寬度 */
600, /* 高度 */
NULL,NULL,hInstance,NULL)。
if(hwnd == NULL) {
MessageBox(NULL, "視窗創建失敗!","錯誤!", MB_ICONEXCLAMATION|MB_OK) 。
return 0;
}
/*
這是我們程式的核心部分,所有的輸入都在這里被處理并發送給WndProc。
發送給WndProc。請注意,GetMessage會阻止代碼流,直到它收到一些東西,因此
這個回圈不會產生不合理的高CPU使用率。
*/
while(GetMessage(&。 msg, NULL, 0, 0) > 0) { /* 如果沒有收到錯誤。*/
TranslateMessage(&msg); /* 如果有的話,將關鍵代碼翻譯成字符 */
DispatchMessage(&msg); /* Send it to WndProc */
}
return msg.wParam;
} 注意:包括windows.h和iostream,但沒有任何其他庫。 謝謝你:)
uj5u.com熱心網友回復:
你需要改變的第一件事是為你的按鈕CreateWindow呼叫指定一個ID,這是通過HMENU引數完成的。你需要做的下一件事是為這些ID和BN_CLICKED命令識別符號處理WM_COMMAND。
例如,將ID 1分配給你的確認按鈕:
CreateWindow(TEXT("button")。TEXT("CONFIRM") 。WS_VISIBLE | WS_CHILD, 355, 400, 95, 35, hwnd, (HMENU)1, NULL, NULL)。
然后要處理的是,當點擊時:
case WM_COMMAND:
{
UINT uID = LOWORD(wParam), uCmd = HIWORD(wParam);
switch(uID)
{
case 1:
if(BN_CLICKED == uCmd)
{
/* 這里的動作*/。
break;
}
else; }
return DefWindowProc(hWnd, uMsg, wParam, lParam)。
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam)。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/320312.html
標籤:
