回 帖 发 新 帖 刷新版面

主题:[请教]关于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个回复)

沙发

实现这些功能的不是你看到的这些宏,而是消息处理函数.
兄弟,你真的对WINDOWS程序设计的基本概念有了解了吗????你能用API写出一个WINDOWS程序了吗?你能说出这个程序中每一部分代码的作用吗?

板凳

像这样的宏(SM_CXMAXIMIZED)为什么可以反映一些硬件底层的信息  还比如说屏幕像素的数目,鼠标在屏幕上的点(Point.x,POINT.y)  这些能反映硬件的信息  楼上的说是消息处理函数  这和消息处理有什么关系啊?

3 楼

WM_KEYDOWN是消息.不论它是怎么定义的,在WINDOWS处理过程中,它都是一个消息.这就是WINDOWS的核心,事件驱动,消息机制.既然楼主认为我什么都不懂那我也不再说什么了.

4 楼

我可没这意思,发了贴的人是有问题虚心求教的,迫切心情应该可以理解。我只是说不解答可以 但是对一个新手冷*热讽的  未免让人心寒了……  我都是对事而不对人的……  只是虚心求解答  真成的友好的解答  不求一种炫耀卖弄式的解答  但时候这也无所谓如果你真是高手的话  因为你有资本 只要为我解答明白了  讽刺贬低我也无所谓……  只为求学……

5 楼

可能我问得很罗嗦  没切中要害  干脆先问这个:
    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 楼

宏只明定义了一个数值,其实就是一个常数(在本例中).真正实现反映电脑硬件信息的是:GetSystemMetrics()这个函数.在这里宏只是传递了一个参数给这个函数.分别是0和1.函数根据传递的参数决定执行方法和返回值.以及其他.这下应该明白了吧.
你如果不相信你可以直接调用GetSystemMetrics(0)和GetSystemMetrics(1),看看结果是不是和调用GetSystemMetrics (SM_CXSCREEN)和GetSystemMetrics (SM_CYSCREEN)一样.(有的函数对类型有强制要求就必须进行转换).

7 楼

多谢楼上高手的解答! 非常地感谢!
   先前我真的只是求解心切,有言语冒犯实属无心,请不要见怪……

   原来不是宏的作用  只是作为参数传给函数啊!  那也就是说:Windows编程中的所有有关的宏真的就是普普通通的宏而以,之所以起作用是那些把宏作为参数调用的函数所实现的功能,是这样吗?  

   那么就是这些函数去调用硬件的驱动程序来反映硬件的信息,至于怎样调用硬件的驱动……那就又是一门知识:我估计大概叫会叫作 驱动编程 之类的吧,而对于我们写Windows程序的来说知哪来这些定义好的使用就可以,没必要去管硬件驱动的事,就好像 DC类的一些绘图的函数,(对于新手)先只是拿来用就可以了,是这样的吗??

8 楼

在我的知识范围来说.处理了消息就已经足够了.至于消息是怎么产生的.怎么传递的.应该是由WINDOWS系统在维护.再深研下去应该就到了WINDOWS的底层了吧.

9 楼

是啊  我也是这样想的。  其实我们自己写的占用的还不是全部  甚至只能算一个小部分  那么些函数,变量名,类型还有宏等等……都是被微软给定义好了的让我们拿来用而以, 我刚刚学程序不久,我们老是天天要求写代码要规范,命名规则要遵守,要写注释,至少要让人看懂……   但是怎么我就发现微软给出的那些 .H 中的定义都搞得那么玄,不只是看得眼花缭乱而以,有的一个类型竟然可以被他用 typedef 重新定义好几遍,char 就有很多个 typedef 的定义:TCHAR,CHAR……  
总是觉得微软在故弄玄虚,故意写的不那么规范,至少不是让人一目了然的规范,
可能这样才能让我们感觉到微软技术的卓越,估计他们就是这个目的,
而且还希望只要我们会用他们的东西写他得平台的程序就够了,不让我们掌握关键性的实质的东西。

10 楼

这不是什么硬件底层代码 win32 消息定义而已

我来回复

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