回 帖 发 新 帖 刷新版面

主题:[请教]关于Windows程序设计中涉及到硬件底层的一些定义

各位朋友你们好!我是初学Windows程序设计的新手,基本的概念已经了解了,只是有一点还想不明白:比如像一些消息的ID:WM_PAINT  WM_MOUSEMOVE……以及一些关于各个属性的标志像:窗口类风格的CS_HREDRAW | CS_VREDRAW,还有SM_CXMAXIMIZED之类的, 我发现他们的类型都是被定义了的宏:#define ……  ……  包含的一些头文件里就有…… 
   但是我一直不清楚这些宏的功能是怎样实现的? 比如说关于键盘的:WM_KEYDOWN,一个宏怎样能知道有按键被按下呢? 我也可以自己定义一个宏啊:#define MACRO_KEY 0
但是他却一点作用也没有,我是说不能控制到硬件的底层去……
还有:
cxClientMax = GetSystemMetrics (SM_CXMAXIMIZED);

SM_CXMAXIMIZED 在WINUSER.H中是被这样定义的:#define SM_CXMAXIMIZED 61

我看只是一个普普通通的宏而已啊  和我自己定义任意一个没什么语法上的区别呀  但是他怎么就能表示一些关于硬件的一些属性信息呢??  
这是为什么啊? 还有特殊的实现方法吗?请指教,多谢各位高手了啊!!

回复列表 (共12个回复)

11 楼

GetSystemMetrics() 跟踪下就明白了,反汇编看了一眼,没涉及到底层,也
就是说没有调用 INT 2E/SYSENTER 进行特权级切换。都是在 ring 3 完成的。
关于能够获取到屏幕值,是直接从 PEB 中取得的偏移。

看到题目“硬件底层” 才进来溜达了一圈。

12 楼

那些只是消息的一个代号!

我来回复

您尚未登录,请登录后再回复。点此登录或注册