MFC对话框应用程序 如何在对话框窗口显示前获取窗口(控件)的屏幕坐标位置

  对于MFC对话框应用程序,如果要在窗口显示之前对窗口控件赋值,一般都是在OnInitDialog()函数中编写相关代码。这是正确的,因为在调用OnInitDialog()函数的时候,对话框应用程序已经建立好了窗口及其子控件,只是还没有显示出来,窗口控件的句柄值是有效的。如果你需要获取窗口控件相对于屏幕的坐标位置呢?通过实验可以得知,在主对话框的OnInitDialog()中调用GetWindowRect()函数,得到窗口大小值(宽高)是正确的,但是左上角的坐标点是(0,0)值,而我们的对话框窗口不是在(0,0)点。同样,在主对话框的OnInitDialog()函数中获取其他控件的屏幕坐标也是与显示之后的坐标有一定差异。

  在调用主对话框的OnInitDialog()函数时,对话框窗口已经创建好了,我们获取的左上点的坐标值为(0,0),说明MFC对话框在创建对话框窗口的时候指定的左上角坐标就是(0,0)点,那为什么最终显示的对话框窗口不在(0,0)点了呢?因为MFC在显示我们的窗口之前将其移动到了屏幕的中间。这样为了获取最终显示时的屏幕坐标,我们应该处理WM_SHOWWINDOW消息,这样获取的坐标值就是对话框最终显示的屏幕坐标位置。对于对话框中的控件,也可以在这个消息处理函数中获取其最终显示位置。

  如果你是使用Win32 SDK程序编写对话框程序,在WM_INITDIALOG消息处理函数中获取的对话框的位置就是最终显示的位置。因为MFC对话框程序被移动到了屏幕中间,那是MFC框架中的代码,Afx小组写的。对于纯的Win32 SDK程序,我们没有额外地添加窗口移动代码,对话框窗口当然不会在创建后被移动到屏幕中间去了。

posted @ 2012-10-14 20:36  pzxbc  阅读(6647)  评论(0编辑  收藏  举报