`
yuanjinxiu
  • 浏览: 658651 次
文章分类
社区版块
存档分类
最新评论

Windows API一日一练(13)TranslateMessage函数

 
阅读更多
TranslateMessage是用来把虚拟键消息转换为字符消息。由于Windows对所有键盘编码都是采用虚拟键的定义,这样当按键按下时,并不得字符消息,需要键盘映射转换为字符的消息。
TranslateMessage函数用于将虚拟键消息转换为字符消息。字符消息被投递到调用线程的消息队列中,当下一次调用GetMessage函数时被取出。当我们敲击键盘上的某个字符键时,系统将产生WM_KEYDOWNWM_KEYUP消息。这两个消息的附加参数(wParamlParam)包含的是虚拟键代码和扫描码等信息,而我们在程序中往往需要得到某个字符的ASCII码,TranslateMessage这个函数就可以将WM_KEYDOWNWM_ 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//
#006int APIENTRY _tWinMain(HINSTANCE hInstance,
#007 HINSTANCE hPrevInstance,
#008 LPTSTR lpCmdLine,
#009 int nCmdShow)
#010{
#011UNREFERENCED_PARAMETER(hPrevInstance);
#012UNREFERENCED_PARAMETER(lpCmdLine);
#013
#014 //
#015MSG msg;
#016HACCEL hAccelTable;
#017
#018// 加载全局字符串。
#019LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
#020LoadString(hInstance, IDC_TESTWIN, szWindowClass, MAX_LOADSTRING);
#021MyRegisterClass(hInstance);
#022
#023// 应用程序初始化:
#024if (!InitInstance (hInstance, nCmdShow))
#025{
#026 return FALSE;
#027}
#028
#029hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TESTWIN));
#030
#031// 消息循环:
#032BOOL bRet;
#033while ( (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
#047return (int) msg.wParam;
#048}
#049
42行是调用函数TranslateMessage作消息转换工作。
分享到:
评论

相关推荐

    Windows API一日一练TXT版

    Windows API 一日一练(13)TranslateMessage 函数----------------------------------------28 Windows API 一日一练(14)DispatchMessage 函数------------------------------------------30 Windows API 一日一练...

    用API编写简单的Windows程序

    (5) 对窗口函数进行编写(窗口函数是一个回调(CALLBACK)函数,操作系统会自动调用该函数对窗口的消息进行处理),用一个switch…case语句对从消息队列中取出的消息进行处理,注意各个消息在switch中都要找到归宿,...

    易语言API创建窗口

    易语言API创建窗口源码,API创建窗口,创建窗口,窗口函数,CreateWindowEx,RegisterClassEx,ShowWindow,UpdateWindow,GetModuleHandle,DefWindowProc,DispatchMessage,GetMessage,TranslateMessage,LoadCursor,LoadIcon...

    易语言纯API创建窗口

    易语言纯API创建窗口源码,纯API创建窗口,窗口过程函数,GetClientRect,UpdateWindow,ShowWindow,DefWindowProc,RegisterClassEx,LocalSize_WNDCLASSEX,GetModuleHandle,LoadCursor,LoadIcon,CreateWindowEx,...

    易语言api绘制文本

    易语言api绘制文本源码,api绘制文本,窗口主程序,窗口回调函数,GetModuleHandle,GetCommandLine,LoadIcon,LoadCursor,RegisterClassEx,CreateWindowEx,ShowWindow,UpdateWindow,BeginPaint,GetClientRect,DrawText,...

    易语言API创建视频窗口

    易语言API创建视频窗口源码,API创建视频窗口,创建主窗口,注册窗口类名,主窗口消息处理,创建退出按钮,退出按钮消息处理,创建连接按钮,连接按钮消息处理,创建视频窗口,CreateWindowEx,RegisterClassEx,LocalSize,...

    Delphi Pascal API创建窗体

    Windows, Messages; var TheMessage: TMsg; const ClassName = 'MainForm_FOrm1'; // 窗体过程回调函数 function FormProc(hForm, MsgID, WParam, LParam: LongWord): LongWord; stdcall; const {$J+} ...

    c语言贪吃蛇源码(带注释)

    用windows api 做的贪吃蛇 #include<Windows.h> #include"resource.h" #include"Node.h" #include #include TCHAR szAppname[] = TEXT("Snack_eat"); #define SIDE (x_Client/80) #define x_Client 800 #define y_...

    最全的WinAPI手册

    第一章 Win32 API概论 14 为什么使用 Wiu32 API 14 Win32 API 简介 15 第二章 窗口管理函数 16 第一节 易用特性函数(Accessibility Features) 20 SoundSentryProc 20 SystemParametersinfo 21 第二节 按钮函数...

    易语言API创建窗口详解

    API创建窗口详解,创建窗口,注册窗口类,WindowProcess,LocalSize_取内存大小,RegisterClassEx_注册窗口类,GetModuleHandle_取模块句柄,DefWindowProc,CreateWindowEx_创建窗口,GetMessage,TranslateMessage,...

    TranslateMessage、CLOSE和DESTROY、GetAsyncKeyState和GetKeyState1

    1. 点击窗口右上角的关闭按钮,发送 WM_CLOSE 消息 2. WM_CLOSE 消息处理中调用 DestroyWindow 函数,发送 WM_DESTRO

    MFC的程序框架剖析

    1、以“::”开始的函数是一个全局函数,表示调用的是Platform SDK的函数 2、如果我们关闭了一个窗口,这个窗口就销毁了,那么该窗口对应的C++窗口类对象销毁了吗? (1)当一个窗口销毁时,它会调用CWnd::...

    C++MFC教程

    了解和MFC各个类功能相近的API函数。 3、一定要理解MFC中消息映射的作用。 4、训练自己在编写代码时不使用参考书而是使用Help Online。 5、记住一些常用的消息名称和参数的意义。 6、学会看别人的代码。 7、多看书,...

    Window 消息大全

    消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。 消息本身是作为一个记录传递给应用程序的,这个记录中...

    易语言-API实现动态窗口类

    动态窗口类,源码是易语言API的应用教程。 调用了以下API: PlaySound BeginPaint GetClientRect DrawText EndPaint PostQuitMessage DefWindowProc LoadIcon LoadCursor GetStockObject RegisterClass CreateWindow...

    *号查看器v0.11

    很简单,使用WindowFormPoint API函数。该函数接受一个POINT类结构的参数, 并返回包含该点的窗口句柄,函数原型如下: HWND WindowFromPoint(POINT point) ; 知识准备充足,代码如下: /*-------------------...

    Windows消息机制要点

    Windows消息机制要点 1. 窗口过程 2 消息类型 3 消息队列(Message Queues) 4 队列消息(Queued Messages)和非队列消息(Non-Queued Messages) 5 PostMessage(PostThreadMessage), SendMessage 6 GetMessage, ...

    2023 最新 windows 系统剪贴板监控 / 篡改工具

    VC编写,通过循环读取windows消息来监控系统的剪贴板并篡改其内容。 static DWORD WINAPI GetMessage(LPVOID pParam) { // 注册窗口类 MyRegisterClass(hInst); // 创建窗口 HWND hWnd = CreateWindow(...

    PT80-NEAT开发指南v1.1

    第一章 关于本手册........................................................................................................................................ 1 简介 ..........................................

    易语言处理事件

    易语言处理事件源码,处理事件,处理事件_,PeekMessage,DispatchMessage,TranslateMessage,GetInputState

Global site tag (gtag.js) - Google Analytics