9512.net
甜梦文库
当前位置:首页 >> 数学 >>

部分函数



Win32 消息处理 API---GetMessage
GetMessage 功能说明
? WinCE 下:该函数从呼叫进程的消息队列中检索消息,并且将所检索到的消 息放入到一个指定的结构体(即 MSG 结构)中; Win32 下:该函数从呼叫进程的消息队列中检索消息,如果被检索到的消息 为可分派消息,则该函数就分派该消息,如果被检索到的消息为不可分派消 息,

则 GetMessage 返回非正值,导致消息循环的结束。例如可分派的消息 有: WM_PAINT、 WM_SIZE、 WM_CREATE 等, 不可分派的消息有 WM_QUIT 等。

?

函数格式
BOOL GetMessage( LPMSG lpMsg, // 检索到的消息 HWND hWnd, // 窗口指向 UINT wMsgFilterMin, // 消息范围的下界限参数 UINT wMsgFilterMax // 上界限参数 );

参数说明
1>、lpMsg, 【out】
指向 MSG 结构的指针,该结构用于存放从进程消息队列里检索(接收)到的消息。

2>、hWnd, 【in】
窗口句柄,如果非零,则 GetMessage 只检索该窗口(也包括其子窗口)消息,如果为零, 则 GetMessage 检索整个进程内的消息。非零窗口句柄必须属于 GetMessage 所属的进程。

3>、wMsgFilterMin, 【in】
指 定 被 检 索 的 最 小 消 息 值 的 整 数 , 通 常 使 用 WM_KEYFIRST 指 定 第 一 键 盘 消 息 或 WM_MOUSEFIRST 指定鼠标消息。Windows XP 中:在此处使用的是 WM_INPUT,同时 wMsgFilterMax 指定的消息也只有 WM_INPUT。

4>、wMsgFilterMax, 【in】
指 定 被 检 索 的 最 大 消 息 值 的 整 数 , 通 常 使 用 WM_KEYLAST 指 定 最 末 键 盘 消 息 或 WM_MOUSELAST 指定最末鼠标消息。Windows XP 中:在此处使用的是 WM_INPUT,同 时 wMsgFilterMin 指定的消息也只有 WM_INPUT。 如果 wMsgFilterMin 和 wMsgFilterMax 都为零, 则 GetMessage 检索所有有效的信息(即, 没有进行消息过滤,没有范围限制) ;同时,如果 hWnd 非零,则检索属于 hWnd 窗口的消 息;如果 hWnd 为零,就是整个进程内的所有消息。

返回值
如果 GetMessage 检索到的消息不为 WM_QUIT,则返回一个正值,如果检索到 WM_QUIT 消息,返回值是零,如果在检索消息时出现了错误,则返回值是-1。例如,当 hWnd 是无效 的窗口句柄或 lpMsg 是空指针时。警示:因为返回值的三种状态,即:> 0、= 0、< 0,在使 用 GetMessage 写程序时尽量避免如下格式的代码: while (GetMessage(lpMsg, hWnd, 0, 0)) ... 因为当返回值为-1 时,while 循环还会继续执行的(读者可以自行验证) ,这样会导致应用 程序出现致命错误而引起系统崩溃。所以建议写代码时应如下格式所示: BOOL bRet = FALSE; while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0) { if (bRet == -1) { // handle the error and possibly exit } else { TranslateMessage(&msg); DispatchMessage(&msg); } }

备注
1、应用程序在进行的消息循环内,通常用返回值来确定是否终止主消息循环并退出程序; 2、GetMessage 函数获取消息之后,将会使该消息被消息队列所删除(WM_PAINT 消息除 外,至于 WM_PAINT 则只有在其被合并处理之后才被删除) ; 3、GetMessage 只检索呼叫进程的消息,不检索属于其它进程的消息。 4、常数 WM_KEYFIRST 和 WM_KEYAST 可作为过滤值检索与键盘输入相关的所有消息, 常数 WM_MOUSEFIRST 和 WM_MOUSELST 可用来检索所有的鼠标消息;而在 Windows XP 中,二参数均使用 WM_INPUT 作为检索键盘和鼠标的输入。 5、当消息检索对象为进程消息队列时,如果进程消息队列正在进行消息存放操作,则 GetMessage 会等待这个存放操作结束后,再检索消息;如果消息队列为空,GetMessage 也 会等待的。 6、应用程序只能使用 wMsgFilterMin 和 wMsgFilterMax 参数的低字节,而高字节是保留给 系统使用的。

适用
Windows NT: 3.1 及以上版本;Windows:95 及以上版本;Windows CE:1.0 及以上版本: 头文件: winuser.h; 输入库: user32.Iib; Unicode: Windows NT 环境下以 Unicode 和 ANSI 在 方式实现。

应用举例
这是一个 Win32 程序的创建,在创建该 Win32 程序时,初始化程序入口函数:包括注册应 用程序主窗口、注册主窗口事件发布函数、创建窗体和消息循环体。 HINSTANCE hinst; HWND hwndMain; LPSTR

int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, lpszCmdLine, int nCmdShow) { MSG msg; BOOL bRet; WNDCLASS wc;

UNREFERENCED_PARAMETER(lpszCmdLine); // 告诉编译器, 该参数没有被引用, 不 要报警告 // Register the window class for the main window. if (!hPrevInstance) { wc.style = 0; wc.lpfnWndProc = (WNDPROC)WndProc; // 注册窗口事件发布函数 wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance wc.hIcon = hInstance;

= LoadIcon((HINSTANCE)NULL, IDI_APPLICATION);

wc.hCursor = LoadCursor((HINSTANCE)NULL, IDC_ARROW); wc.hbrBackground = GetStockObject(WHITE_BRUSH); wc.lpszMenuName = _T("MainMenu"); wc.lpszClassName = _T("MainWndClass");

if (!RegisterClass(&wc)) return FALSE; // 注册进程主窗口类 } hinst = hInstance; // save instance handle // Create the main window. hwndMain = CreateWindow(_T("MainWndClass"), _T("Sample"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, (HWND)NULL, (HMENU)NULL, hinst, (LPVOID)NULL);

// If the main window cannot be created, terminate the application. if (!hwndMain) return FALSE; // Show the window and paint its contents. ShowWindow(hwndMain, nCmdShow); UpdateWindow(hwndMain); // Start the message loop. while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0) { // 注册消息循环体 if (bRet == -1) { } else { TranslateMessage(&msg); DispatchMessage(&msg); } } // handle the error and possibly exit

// Return the exit code to the system. return msg.wParam; }

TranslateMessage
是用来把虚拟键消息转换为字符消息。由于 Windows 对所有键盘编码都是采用 虚拟键的定义,这样当按键按下时,并不得字符消息,需要键盘映射转换为字符 的消息。 TranslateMessage 函数用于将虚拟键消息转换为字符消息。字符消息被投递到调 用线程的消息队列中,当下一次调用 GetMessage 函数时被取出。当我们敲击键 盘上的某个字符键时,系统将产生 WM_KEYDOWN 和 WM_KEYUP 消息。这 两个消息的附加参数 (wParam 和 lParam) 包含的是虚拟键代码和扫描码等信息, 而我们在程序中往往需要得到某个字符的 ASCII 码,TranslateMessage 这个函 数就可以将 WM_KEYDOWN 和 WM_ KEYUP 消息的组合转换为一条 WM_CHAR 消息(该 消息的 wParam 附加参数包含了字符的 ASCII 码) 并将转换后的新消息投递到调 , 用线程的消息队列中。注意,TranslateMessage 函数并不会修改原有的消息,它 只是产生新的消息并投递到消息队列中。 也就是说 TranslateMessage 会发现消息里是否有字符键的消息,如果有字符键的 消息,就会产生 WM_CHAR 消息,如果没有就会产生什么消息。

DispatchMessage(&msg);
将消息发送到窗口过程来处理。 (略)

DefWindowProc:呼叫 DefWindowProc 来为视窗讯息处理程式不予处理的所有
讯息提供内定处理(略)



更多相关文章:
c++函数部分练习题
c++函数部分练习题_计算机软件及应用_IT/计算机_专业资料。1. 编写函数 fun,它的功能是 :利用以下所示的简单迭代方法求方 程 cos(x)-x=0 的一个实根。 Xn...
离散函数部分定义
若 f 是部分函数且〈x , y〉∈f,则称 y 是 f 在 x 处的值(在 f 作用下 x 的像点),记为 y = f (x), 并称 x 为 y 的一个源像点。 定义...
函数部分
函数总复习一 .反比例函数、一次函数部分 1. 下列函数中,自变量 x 的取值范围是 x ≥3 的是( (A) y ? 1 x?3 ) (B) y ? 1 x?3 (C) y ? x...
高三数学函数部分复习题
高三数学函数部分复习题_数学_高中教育_教育专区。江苏徐州沛县高三复习函数部分专题湖西中学高三联赛数学试题 20120928 ...一、填空题:本大题共 14 小题,每小题 ...
Tableau部分函数解析_图文
Tableau部分函数解析_计算机软件及应用_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档Tableau部分函数解析_计算机软件及应用_IT/计算机_专业资料。TABLEAU...
函数部分
一次函数大题部分 5页 2财富值 函数(初中部分) 66页 10财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...
高一数学必修一函数知识点总结
(5)如果函数是由一些基本函数通过四则运算结合而成的.那么,它的定义域是使各部分都有意义 的 x 的值组成的集合. (6)指数为零底不可以等于零, (7)实际问题...
高考函数部分经典大题解析
解集. 解 本小题主要考查函数的概念、性质、图象及解一元二次不等式等基础知识,考查 灵活运用数形结合、分类讨论的思想方法进行探索、分析与解决问题的综合能力...
MATLAB部分函数使用方法
MATLAB部分函数使用方法_IT/计算机_专业资料。MATLAB图像,矩阵及函数使用方法 读取图像:用 imread 函数读取图像文件,文件格式可以是 TIFF、JPEG、GIF、BMP、PNG 等。...
2015中考数学函数专题复习
它的种植成本 y2 与上市时间 x 的关系可用图(b)中的抛物 线的一部分来表示. (1)求出图(a)中表示的市场售价 y1 与上市时间 x 的函数关系式. (2)求出...
更多相关标签:
偏函数    什么是部分函数    配分函数    全函数    部分函数依赖    excel取小数部分函数    一个函数由两部分组成    什么是部分函数依赖    

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图