主题:[请教]关于Windows程序设计中涉及到硬件底层的一些定义
CPoint
[专家分:60] 发布于 2006-03-16 00:40:00
各位朋友你们好!我是初学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个回复)
沙发
aaronwang [专家分:16870] 发布于 2006-03-14 16:49:00
实现这些功能的不是你看到的这些宏,而是消息处理函数.
兄弟,你真的对WINDOWS程序设计的基本概念有了解了吗????你能用API写出一个WINDOWS程序了吗?你能说出这个程序中每一部分代码的作用吗?
板凳
CPoint [专家分:60] 发布于 2006-03-15 23:59:00
像这样的宏(SM_CXMAXIMIZED)为什么可以反映一些硬件底层的信息 还比如说屏幕像素的数目,鼠标在屏幕上的点(Point.x,POINT.y) 这些能反映硬件的信息 楼上的说是消息处理函数 这和消息处理有什么关系啊?
3 楼
aaronwang [专家分:16870] 发布于 2006-03-16 09:19:00
WM_KEYDOWN是消息.不论它是怎么定义的,在WINDOWS处理过程中,它都是一个消息.这就是WINDOWS的核心,事件驱动,消息机制.既然楼主认为我什么都不懂那我也不再说什么了.
4 楼
CPoint [专家分:60] 发布于 2006-03-17 20:49:00
我可没这意思,发了贴的人是有问题虚心求教的,迫切心情应该可以理解。我只是说不解答可以 但是对一个新手冷*热讽的 未免让人心寒了…… 我都是对事而不对人的…… 只是虚心求解答 真成的友好的解答 不求一种炫耀卖弄式的解答 但时候这也无所谓如果你真是高手的话 因为你有资本 只要为我解答明白了 讽刺贬低我也无所谓…… 只为求学……
5 楼
CPoint [专家分:60] 发布于 2006-03-17 20:58:00
可能我问得很罗嗦 没切中要害 干脆先问这个:
cxScreen = GetSystemMetrics (SM_CXSCREEN) ;
cyScreen = GetSystemMetrics (SM_CYSCREEN) ;
其中SM_CXSCREEN 和 SM_CYSCREEN 这2个宏在WINUSER.h中定义为:
/*
* GetSystemMetrics() codes
*/
#define SM_CXSCREEN 0
#define SM_CYSCREEN 1
这只是简单定义的2个宏,但为什么可以反映屏幕分辨率的象素点数?一个宏怎样来反映电脑硬件的信息的??? 我自己定义一个和上边的2个一样的宏就不可以……这是为什么??
6 楼
aaronwang [专家分:16870] 发布于 2006-03-18 10:16:00
宏只明定义了一个数值,其实就是一个常数(在本例中).真正实现反映电脑硬件信息的是:GetSystemMetrics()这个函数.在这里宏只是传递了一个参数给这个函数.分别是0和1.函数根据传递的参数决定执行方法和返回值.以及其他.这下应该明白了吧.
你如果不相信你可以直接调用GetSystemMetrics(0)和GetSystemMetrics(1),看看结果是不是和调用GetSystemMetrics (SM_CXSCREEN)和GetSystemMetrics (SM_CYSCREEN)一样.(有的函数对类型有强制要求就必须进行转换).
7 楼
CPoint [专家分:60] 发布于 2006-03-18 11:10:00
多谢楼上高手的解答! 非常地感谢!
先前我真的只是求解心切,有言语冒犯实属无心,请不要见怪……
原来不是宏的作用 只是作为参数传给函数啊! 那也就是说:Windows编程中的所有有关的宏真的就是普普通通的宏而以,之所以起作用是那些把宏作为参数调用的函数所实现的功能,是这样吗?
那么就是这些函数去调用硬件的驱动程序来反映硬件的信息,至于怎样调用硬件的驱动……那就又是一门知识:我估计大概叫会叫作 驱动编程 之类的吧,而对于我们写Windows程序的来说知哪来这些定义好的使用就可以,没必要去管硬件驱动的事,就好像 DC类的一些绘图的函数,(对于新手)先只是拿来用就可以了,是这样的吗??
8 楼
aaronwang [专家分:16870] 发布于 2006-03-18 13:57:00
在我的知识范围来说.处理了消息就已经足够了.至于消息是怎么产生的.怎么传递的.应该是由WINDOWS系统在维护.再深研下去应该就到了WINDOWS的底层了吧.
9 楼
CPoint [专家分:60] 发布于 2006-03-19 11:10:00
是啊 我也是这样想的。 其实我们自己写的占用的还不是全部 甚至只能算一个小部分 那么些函数,变量名,类型还有宏等等……都是被微软给定义好了的让我们拿来用而以, 我刚刚学程序不久,我们老是天天要求写代码要规范,命名规则要遵守,要写注释,至少要让人看懂…… 但是怎么我就发现微软给出的那些 .H 中的定义都搞得那么玄,不只是看得眼花缭乱而以,有的一个类型竟然可以被他用 typedef 重新定义好几遍,char 就有很多个 typedef 的定义:TCHAR,CHAR……
总是觉得微软在故弄玄虚,故意写的不那么规范,至少不是让人一目了然的规范,
可能这样才能让我们感觉到微软技术的卓越,估计他们就是这个目的,
而且还希望只要我们会用他们的东西写他得平台的程序就够了,不让我们掌握关键性的实质的东西。
10 楼
fucker [专家分:680] 发布于 2006-03-20 02:32:00
这不是什么硬件底层代码 win32 消息定义而已
我来回复