GetWindowRect()参数的问题?

normalnotebook 2003-08-24 10:21:00
GetWindowRect (AfxGetMainWnd()->GetSafeHwnd (),&ClientRect);是对的
GetWindowRect (AfxGetMainWnd()->m_hWnd,&ClientRect);是错的呢?

第一个参数都是CWnd类型的参数啊,也都是获得句柄啊
我实在是想不明白,请各位解释一下?
...全文
188 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
atEleven 2003-09-03
  • 打赏
  • 举报
回复
搞笑.

两种方法编译都通过的.效果一样.

但是当窗口还没创建的时候,AfxGetMainWnd()->m_hWnd有运行时错误.


还有看调用的时机
如果恰好在CXXXApp::InitInstance()
{
...
m_pMainWnd被初始化之前调用,则运行时出错,因为AfxGetMainFrame()得到的是空指针.
}

normalnotebook 2003-08-25
  • 打赏
  • 举报
回复
为什么可以直接传m_hWnd呢?
normalnotebook 2003-08-24
  • 打赏
  • 举报
回复
是私有变量好像有点说不通,如果我改成这样就是对的:
GetWindowRect (m_hWnd,&ClientRect);但我试过,是可以通过的,也达到了我的要求
zhaolaoxin 2003-08-24
  • 打赏
  • 举报
回复
AfxGetMainWnd()->m_hWnd是私有变量,不能直接读取。
akiko 2003-08-24
  • 打赏
  • 举报
回复
CWnd::GetSafeHwnd
HWND GetSafeHwnd( ) const;

Return Value
Returns the window handle for a window. Returns NULL if the CWnd is not attached to a window or if it is used with a NULL CWnd pointer.
bcpl 2003-08-24
  • 打赏
  • 举报
回复
第二句也没错吧
关于GetSafeHwnd与m_hWnd的区别,见
http://expert.csdn.net/Expert/topic/2172/2172590.xml?temp=.6769678
.版本 2 .程序集 窗口程序集_启动窗口 .子程序 __启动窗口_创建完毕 窗口_回归98风格 (取窗口句柄 ()) .子程序 窗口_回归98风格 .参数 hWnd, 整数型 .局部变量 hRgn, 整数型, , , '  .局部变量 Rc, RECT GetWindowRect (hWnd, Rc) hRgn = CreateRectRgn (0, 0, Rc.Right - Rc.Left, Rc.Bottom - Rc.Top) SetWindowRgn (hWnd, hRgn, 真) DeleteObject (hRgn).版本 2 .DLL命令 CreateRectRgn, 整数型, "gdi32", "CreateRectRgn", , 创建一个由点X1,Y1和X2,Y2描述的矩形区域  执行成功为区域句柄,失败则为零     .参数 X1, 整数型, , 矩形左上角X,Y坐标     .参数 Y1, 整数型, , 同上     .参数 X2, 整数型, , 矩形右下角X,Y坐标;     .参数 Y2, 整数型, , 同上; .DLL命令 SetWindowRgn, 整数型, "user32", "SetWindowRgn", , 这是那些很难有人注意到的对编程者来说是个巨大的宝藏的隐含的API函数中的一个。本函数允许您改变窗口的区域。     .参数 hWnd, 整数型     .参数 hRgn, 整数型     .参数 bRedraw, 逻辑型 .DLL命令 DeleteObject, 整数型, "gdi32", "DeleteObject", , 用这个函数删除GDI对象,比如画笔、刷子、字体、位图、区域以及调色板等等。对象使用的所有系统资源都会被释放  非零表示成功,零表示失败     .参数 hObject, 整数型, , 一个GDI对象的句柄; .DLL命令 GetWindowRect, 整数型, "user32", "GetWindowRect", , 获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内  非零表示成功,零表示失败。会设置GetLastError     .参数 hwnd, 整数型, , 想获得范围矩形的那个窗口的句柄     .参数 lpRectRECT, , RECT,屏幕坐标中随同窗口装载的矩形;
.版本 2 .程序集 程序集1 .程序集变量 图标句柄, 整数型 .程序集变量 hbmAbout, 整数型 .程序集变量 hbmAboutHover, 整数型 .程序集变量 hbmAboutDown, 整数型 .程序集变量 hbmGenerate, 整数型 .程序集变量 hbmGenerateHover, 整数型 .程序集变量 hbmGenerateDown, 整数型 .程序集变量 hbmExit, 整数型 .程序集变量 hbmExitHover, 整数型 .程序集变量 hbmExitDown, 整数型 .程序集变量 prev_proc, 整数型 .程序集变量 bMouseOverGenerateButton, 逻辑型 .程序集变量 bMouseOverAboutButton, 逻辑型 .程序集变量 bMouseOverExitButton, 逻辑型 .程序集变量 rExit, RECT .程序集变量 rAbout, RECT .程序集变量 rGenerate, RECT .程序集变量 rWindow, RECT .程序集变量 hExit, 整数型 .程序集变量 hAbout, 整数型 .程序集变量 hGenerate, 整数型 .程序集变量 hWindow, 整数型 .程序集变量 实例句柄, 整数型 .程序集变量 lf, LOGFONT .程序集变量 hKeygen, 整数型 .程序集变量 hSerial, 整数型 .子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行 实例句柄 = GetModuleHandle (0) 图标句柄 = LoadIcon (实例句柄, #FFF_ICON) InitCommonControls () ' 这个是初始化共用控件API,凡是用到月历框,选择夹,XP风格等等扩展组件的,都必须调用这个API ' 这里调用的是资源对话框模板来创建窗口,在易的调试模式下无效 DialogBoxParam (实例句柄, #IDD_KEYGEN, 0, &DlgProc, 0) ' 这个API内部有消息循环泵,直到对话框被关闭才返回 返回 (0) ' 可以根据您的需要返回任意数值 .子程序 DlgProc, 整数型 .参数 hwnd, 整数型 .参数 msg, 整数型 .参数 wparam, 整数型 .参数 lparam, 整数型 .局部变量 点击控件ID, 整数型 .局部变量 lpdis, DRAWITEMSTRUCT .局部变量 hdc, 整数型 .局部变量 hdcMem, 整数型 .局部变量 hFont, 整数型 .局部变量 hFontOld, 整数型 .局部变量 szProgname, 文本型 .局部变量 hdcSerial, 整数型 .局部变量 xmid, 整数型 .判断开始 (msg = #WM_INITDIALOG) ' 初始化对话框 置随机数种子 (取启动时间 ()) ' 因为大鸟的黑月不支持播放MIDI、XM格式的音乐,所以用偶写的DLL播放吧先~~。等大鸟支持了改下就OK了。 xmid = 取随机数 (1, 40) .如果 (xmid > 20) playxm (#XM音乐2, 取字节集长度 (#XM音乐2)) .否则 playxm (#XM音乐1, 取字节集长度 (#XM音乐1)) .如果结束 SendMessage (hwnd, #WM_SETICON, 0, 图标句柄) ' 设置标题栏上的图标 SendMessage (hwnd, #WM_SETICON, 1, 图标句柄) SetWindowText (hwnd, “only test”) AnimateWindow (hwnd, 1000, 524288) hGenerate = GetDlgItem (hwnd, #IDC_GENERATE) hAbout = GetDlgItem (hwnd, #IDC_ABOUT) hExit = GetDlgItem (hwnd, #IDC_EXIT) GetWindowRect (hwnd, rWindow) GetWindowRect (hGenerate, rGenerate) GetWindowRect (hAbout, rAbout)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧