windows api编程入门_WindowsAPI调用DLL

2022-10-01 16:49:23 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

TranslateMessage 是用来把虚拟键消息转换为字符消息。由于 Windows 对所有键盘编码都是采用虚拟键的定义,这样当按键按下时,并不得字符消息,需要键盘映射转换为字符的消息。

TranslateMessage 函数用于将虚拟键消息转换为字符消息。字符消息被投递到调用线程的消息队列中,当下一次调用 GetMessage 函数时被取出。当我们敲击键盘上的某个字符键时,系统将产生 WM_KEYDOWN 和 WM_KEYUP 消息。这两个消息的附加参数( wParam 和 lParam )包含的是虚拟键代码和扫描码等信息,而我们在程序中往往需要得到某个字符的 ASCII 码, TranslateMessage 这个函数就可以将 WM_KEYDOWN 和 WM_ KEYUP 消息的组合转换为一条 WM_CHAR 消息(该消息的 wParam 附加参数包含了字符的 ASCII 码),并将转换后的新消息投递到调用线程的消息队列中。注意, TranslateMessage 函数并不会修改原有的消息,它只是产生新的消息并投递到消息队列中。

也就是说 TranslateMessage 会发现消息里是否有字符键的消息,如果有字符键的消息,就会产生 WM_CHAR 消息,如果没有就会产生什么消息。

函数 TranslateMessage 声明如下:

WINUSERAPI

BOOL

WINAPI

TranslateMessage(

__in CONST MSG *lpMsg);

lpMsg 是检查需要转换的消息。

调用这个函数的例子如下:

#001 // 主程序入口

#002 //

#003 // 蔡军生 2007/07/19

#004 // QQ: 9073204

#005 //

#006 int APIENTRY _tWinMain(HINSTANCE hInstance,

#007 HINSTANCE hPrevInstance,

#008 LPTSTR lpCmdLine,

#009 int nCmdShow)

#010 {

#011 UNREFERENCED_PARAMETER(hPrevInstance);

#012 UNREFERENCED_PARAMETER(lpCmdLine);

#013

#014 //

#015 MSG msg;

#016 HACCEL hAccelTable;

#017

#018 // 加载全局字符串。

#019 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

#020 LoadString(hInstance, IDC_TESTWIN, szWindowClass, MAX_LOADSTRING);

#021 MyRegisterClass(hInstance);

#022

#023 // 应用程序初始化 :

#024 if (!InitInstance (hInstance, nCmdShow))

#025 {

#026 return FALSE;

#027 }

#028

#029 hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TESTWIN));

#030

#031 // 消息循环 :

#032 BOOL bRet;

#033 while ( (bRet = GetMessage(&msg, NULL, 0, 0)) != 0)

#034 {

#035 if (bRet == -1)

#036 {

#037 // 处理出错。

#038

#039 }

#040 else if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

#041 {

#042 TranslateMessage(&msg);

#043 DispatchMessage(&msg);

#044 }

#045 }

#046

#047 return (int) msg.wParam;

#048 }

#049

第 42 行是调用函数 TranslateMessage 作消息转换工作。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/194550.html原文链接:https://javaforall.cn

0 人点赞