• 全部
  • 问答

关于SDK的两个问题~~~~

cssin 2001-08-03 05:13:54
1、我按照Windows程序设计一书的方法学习在客户区写字,
但是我在sysmets.h里定义的SM_MOUSEWHEELPRESENT在编译的时候告诉我说未定义
我看了winuser.h里面是这样的:
#if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
#define SM_MOUSEWHEELPRESENT 75
#endif
我用的是WIN2K为什么回出这种问题??

2、GetMessage函数的第二个参数为什么一定要是NULL,我用hwnd虽然可以运行
可是当我关闭窗口的时候,总在任务管理器里发现还有这个程序的进程呢??
...全文
81 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
SingleStar 2001-08-03
不是中文msdn,是电子版的"新编windows api参考大权",不过好像缺了几章的内容。
回复
_STLer 2001-08-03
关于中文MSDN的问题吗?...我也要!
回复
yoci 2001-08-03
SingleStar你的msdn怎么是中文的?
回复
SingleStar 2001-08-03
函数功能:该函数向系统表明有个线程有终止请求。通常用来响应WM_DESTROY消息。
函数原型:VOID PostQuitMessage(int nExitCode);
参数:
pExitCode:指定应用程序退出代码。此值被用作消息WM_QUIT的wParam参数。
返回值:无。
备注:PostQuitMessage寄送一个WM_oUT消息给线程的消息队列并立即返回;此函数向系统表明有个线程请求在随后的某一时间终止。
当线程从消息队列里取得WM_QUIT消息时,应当退出消息循环并将控制返回给系统。返回给系统的退出值必须是消息WM_QUIT的wParam参数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;输入库:user32,lib:Uhicode:在Wihdows NT环境下以Unicode和ANSI方式实现。

想来就是线程没有接受到此函数,不知各位是否同意
回复
SingleStar 2001-08-03
函数功能:该函数从调用线程的消息队列里取得一个消息并将其放于指定的结构。此函数可取得与指定窗口联系的消息和由PostThreadMesssge寄送的线程消息。此函数接收一定范围的消息值。GetMessage不接收属于其他线程或应用程序的消息。
函数原型:BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilteMax
参数:
lpMsg:指向MSG结构的指针,该结构从线程的消息队列里接收消息信息。
hWnd:取得其消息的窗口的句柄。这是一个有特殊含义的值(NULL)。GetMessage为任何属于调用线程的窗口检索消息,线程消息通过PostThreadMessage寄送给调用线程。
wMsgFilterMin:指定被检索的最小消息值的整数。
wMsgFilterMax:指定被检索的最大消息值的整数。
返回值:如果函数取得WM_QUIT之外的其他消息,返回非零值。如果函数取得WM_QUIT消息,返回值是零。如果出现了错误,返回值是_1。例如,当hWnd是无效的窗口句柄或lpMsg是无效的指针时。若想获得更多的错误信息,请调用GetLastError函数。
备注:应用程序通常用返回值来确定是否终止主消息循环并退出程序。
GetMesssge只接收与参数hWnd标识的窗口或子窗口相联系的消息,子窗口由函数IsChild决定,消息值的范围由参数wMsgFilterMin和wMsgFilterMax给出。如果hWnd为NULL,则GetMessage接收属于调用线程的窗口的消息,线程消息由函数PostThreadMessage寄送给调用线程。GetMessage不接收属于其他线程或其他线程的窗口的消息,即使hWnd为NULL。由PostThreadMessage寄送的线程消息,其消息hWnd值为NULL。如果wMsgFilterMin和wMsgFilterMax都为零,GetMessage返回所有可得的消息(即,无范围过滤)。
常数 WM_KEYFIRST和WM_KEYAST可作为过滤值取得与键盘输入相关的所有消息:常数WM_MOUSEFIRST和WM_MOUSELST可用来接收所有的鼠标消息。如果wMsgFilterMin和wMsgFilterMax都为零,GetMessage返回所有可得的消息(即,无范围过滤)。
GetMessage不从队列里清除WM.PAINT消息。该消息将保留在队列里直到处理完毕。
注意,此函数的返回值可非零、零或-1,应避免如下代码出现:
while(GetMessage(IpMsg,hwnd,0,0))…
-1返回值的可能性表示这样的代码会导致致命的应用程序错误。
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本:头文件:winuser.h;输入库:user32.Iib;Unicode:在Windows NT环境下以Unicode和ANSI方式实现。

想来问题的原因和PostThreadMessage有点关系
回复
yoci 2001-08-03
msdn指出while(GetMessage(&msg,hwnd,0,0))这种写法是不可以的,会导致程序的严重错误,应该避免
回复
cssin 2001-08-03
第一个问题我已经明白了,
对于第二个问题,我只用了一个窗体啊我在处理消息循环的时候用了下面的语句:
while(GetMessage(&msg,hwnd,0,0))...
导致了进程未结束
但用while(GetMessage(&msg,NULL,0,0))。。。
就可以了,不知道为什么??
回复
hucong 2001-08-03
现在好像好几本书出来了,都是讲api的,其实那些书都是msdn翻译过来的,当然了,只是部分而已
回复
joe_fox1025 2001-08-03
是呀,那革新编的windows API参考大权不完整就翻译了一点,很不详细
回复
Chice_wxg 2001-08-03
1. 你在#include 前 #define WINVER 0x0500 就可以了
2. 你用了多个窗体或多线程吧?这样就会有部分线程无法结束。
回复
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2001-08-03 05:13
社区公告
暂无公告