首页
/
每日頭條
/
科技
/
win32編程實例
win32編程實例
更新时间:2025-11-30 19:15:03

總有一天你會明白,能治愈你的,從來都不是時間,而是心理的那股釋懷和淡然。。。。

---- 網易雲熱評

一、鍵盤消息

1、鍵盤消息

WM_KEYDOWN:按鍵被按下時産生 WM_KEYUP:按鍵被放開時産生 WM_SYSKEYDOWN:系統鍵按下時産生 比如ALT、F10 WM_SYSKEYUP:系統鍵放開時産生 WM_CHAR :字符消息(TranslateMessage函數發送的)

2、消息參數

按鍵消息:

WPARAM:按鍵的Virtual Key

LPARAM:按鍵的參數,例如按下次數

WM_CHAR消息:

WPARAM:輸入的字符的ASCII字符編碼值

LPARAM:按鍵的相關參數

3、消息的使用

KEYDOWN可以重複出現,KEYUP隻能在按鍵松開時出現1次

TranslateMessage在轉換WM_KEYDOWN消息時,對于可見字符可以産生WM_CHAR,不可見字符無此消息。

WM_KEYDOWN/UP的wParam是表示的按鍵的虛拟鍵碼值

WM_CHAR的wParam是表示輸入的字符的ASCII編碼值。

4、相關代碼

#include <windows.h> #include <stdio.h> HINSTANCE g_hInstance = 0;//接收當前程序實例句柄 HANDLE g_輸出句柄 = 0;//接收标準輸出句柄 void 按下鍵(HWND hWnd,WPARAM wParam) { wchar_t s[256] = {0}; swprintf_s(s, L"按下:X\n", wParam); WriteConsole(g_輸出句柄, s, wcslen(s), NULL, NULL); return; } void 放開鍵(HWND hWnd, WPARAM wParam) { wchar_t s[256] = { 0 }; swprintf_s(s, L"松開:X\n", wParam); WriteConsole(g_輸出句柄, s, wcslen(s), NULL, NULL); return; } void 字符消息(HWND hWnd, WPARAM wParam) { wchar_t s[256] = { 0 }; swprintf_s(s, L"字符消息:X\n", wParam); WriteConsole(g_輸出句柄, s, wcslen(s), NULL, NULL); return; } //2、窗口處理函數 LRESULT CALLBACK WndProc(HWND hWnd, UINT msgID, WPARAM wParam, LPARAM lParam) { //7、處理消息 switch (msgID) { case WM_CHAR: 字符消息(hWnd, wParam); break; case WM_KEYUP: 放開鍵(hWnd, wParam); break; case WM_KEYDOWN: 按下鍵(hWnd,wParam); break; case WM_DESTROY: PostQuitMessage(0);//銷毀窗口 break; } return DefWindowProc(hWnd, msgID, wParam, lParam); } //3、注冊函數,第一個參數,窗口類名稱,第二個參數,指向窗口處理函數的函數指針 void Register(LPCWSTR lpClassName, WNDPROC winProc) { WNDCLASSEX wc = { 0 }; wc.cbSize = sizeof(wc);//結構體大小 wc.cbClsExtra = 0;//窗口類的申請緩存區,0表示不開啟緩存 wc.cbWndExtra = 0;//窗口的申請緩存區,0表示不開啟緩存 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW 1);//背景顔色,一般白色 wc.hCursor = NULL;//設置光标。null表示默認 wc.hIcon = NULL;//默認左上角的圖标 wc.hInstance = g_hInstance;//第一個參數實例句柄,可以找到進程在那塊内存 wc.lpfnWndProc = winProc; //lp 一般都是指針,處理函數名或指針 wc.lpszClassName = lpClassName;//窗口類名稱,比如公司名字 wc.lpszMenuName = NULL;//沒有菜單用null wc.style = CS_HREDRAW | CS_VREDRAW;//窗口變化,會重繪,窗口類的一般風格 RegisterClassEx(&wc); } //4、創建窗口,(窗口類名稱,窗口标題欄名稱) HWND CreateMain(LPCWSTR lpClassName, LPCWSTR lpWindowName) { HWND hWnd = CreateWindowExW(0, lpClassName, lpWindowName, WS_OVERLAPPEDWINDOW, 100, 100, 500, 600, NULL, NULL, g_hInstance, NULL); return hWnd; } //5、顯示窗口(窗口句柄) void Display(HWND hWnd) { ShowWindow(hWnd, SW_SHOW);//句柄,顯示方式 UpdateWindow(hWnd);//調用一次刷新窗口 } //6、消息循環 void Message() { MSG nMsg = { 0 }; while (GetMessage(&nMsg, nullptr, 0, 0)) { TranslateMessage(&nMsg); DispatchMessage(&nMsg); } } //1、入口函數 int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevIns, LPSTR lpCmdLine, int nCmdShow) { AllocConsole();//顯示dos窗口 g_輸出句柄 = GetStdHandle(STD_OUTPUT_HANDLE); g_hInstance = hInstance; Register(L"主", WndProc); HWND hWnd = CreateMain(L"主", L"主窗口"); Display(hWnd); Message(); return 0; }

5、運行結果

win32編程實例(win32編程--鍵盤消息)1

win32編程實例(win32編程--鍵盤消息)2

歡迎關注公衆号:順便編點程​

win32編程實例(win32編程--鍵盤消息)3

win32編程實例(win32編程--鍵盤消息)4

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
湖南衛視雲中歌直播
湖南衛視雲中歌直播
《雲中歌》接檔《花千骨》在湖南衛視首播,而曝光的收視數據顯示,《雲中歌》播出開始,湖南衛視的收視率直線下滑,暴跌一半。不少網友感歎,想必baby一定很難過吧!沒想到,《雲中歌》收視率暴跌竟是因為360手機助手。芒果台傷透粉絲,為抵制電視網友...
2025-11-30
小米手機現在能用什麼輸入法安全
小米手機現在能用什麼輸入法安全
以前手機上一直用拼音9鍵(九宮格)輸入。手指太粗,26鍵(全鍵盤)總是誤觸。九宮格輸入一般不會誤觸,記得功能機時代常有大神在課堂上盲發短信的傳說。但重碼率确實高,打字效率比較低。去年疫情在家呆了挺長時間,學會了雙拼輸入法,手機上打字的效率明...
2025-11-30
會計表格大全模闆
會計表格大全模闆
【16張财務常用表格模闆,錄入數據即可自動生成,會計新手需要】今日分享:16張财務常用表格模闆!水電用量分析表财務年度利潤表年度财務收入報表年度财務費用支出管理統計表年度收支表—收支彙總财務流水賬現金日記賬财務記賬本分店收入統計對比表月度對...
2025-11-30
win10外接藍牙接收器連不上手柄
win10外接藍牙接收器連不上手柄
Windows10版本2004(2020年5月更新)重新引入了對藍牙A2DP接收器的支持,使用戶可以通過藍牙連接将音樂從手機流式傳輸到PC揚聲器。過去,Windows7支持藍牙A2DP接收器,使你可以從其他藍牙設備接收音頻,并将音樂從藍牙手...
2025-11-30
國外洗劫超市
國外洗劫超市
(觀察者網訊)當地時間19日,洛杉矶警察局公開了一段“快閃族”洗劫7-11便利店的視頻,并向市民征集線索。視頻中,快閃族進入便利店後如入無人之境,又搶又拿,便利店大量零食、香煙、被搶走……警方介紹,事情發生在本月15日中午12:40左右,當...
2025-11-30
Copyright 2023-2025 - www.tftnews.com All Rights Reserved