如何得到一个对话框窗口的句柄?

liushan 2002-05-14 11:20:28
谢谢
...全文
687 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
码农猿圈圈 2002-05-16
  • 打赏
  • 举报
回复
对了,你确定可以在模式对话框的 OnInitDialog 函数中 MoveWindow 成功吗?奇怪了,呵呵...
码农猿圈圈 2002-05-15
  • 打赏
  • 举报
回复
如果你的代码像这样:
void CxxView::OnXXX(...) // 某个消息响应
{
CDibDlg dlg;
dlg.domodal();

...
dlg.moveWindow(rect); // moveWindow 为自定义函数,其中调用 CDialog 的 MoveWindow, 参数 rect 指明位置
...
}

是无法达到你要的目的的, 因为在模式对话框结束之前, 即 dlg.domodal() 语句执行完之前,是不会执行它后面的语句的.

如果代码类似这样:
...
CDibDlg dlg;
dlg.moveWindow(rect); // moveWindow 为自定义函数,其中调用 CDialog 的 MoveWindow, 参数 rect 指明位置
dlg.domodal();
...
我估计会报错,因为CDialog 的 MoveWindow需要使用到窗口句柄,而在dlg.domodal()之前dlg的窗口句柄是无效的

解决方法之一是
CDibDlg dlg;
dlg.m_rcInit = rect; // m_rcInit是保存初始化位置的CRect或者RECT
然后在 OnInitDialog 中 CDialog::OnInitDialog 语句之后调用MoveWindow(...)
liushan 2002-05-14
  • 打赏
  • 举报
回复
Anaki(九天) 兄弟

你这样做效果跟在oninitdialog()中调用movewindow()差不多

但我想要在视图类的一个消息函数中来显示对话框.类似代码是:CDibDlg dlg;

dlg.domodal() ,现在我将视图的类成员变量rect传给dlg.movewindow(..)

movewindow()是我自己加的,其内调用的是MoveWindow()

关注
码农猿圈圈 2002-05-14
  • 打赏
  • 举报
回复
模式对话框会在CreateDialogIndirect最后调用CenterWindow. CenterWindow的最后一行会以 -1,-1 作为宽高参数调用 SetWindowPos ,所以解决方法之一就是响应 WM_WINDOWPOSCHANGING 消息:
void CAppDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
if (lpwndpos->cx = -1)
if (lpwndpos->cy = -1) // 正在初始化
{
lpwndpos->x = 0; // 改变到你想要得坐标
lpwndpos->y = 0;
// 或者大小
lpwndpos->cx = 100;
lpwndpos->cy = 100;
}
CDialog::OnWindowPosChanging(lpwndpos);
}

Enjoy!
liaocao 2002-05-14
  • 打赏
  • 举报
回复
在对话框消息处理中的WM_INITDIALOG里面调用
码农猿圈圈 2002-05-14
  • 打赏
  • 举报
回复
你也可以使用FindWindow(Ex)或者 EnumWindows来查找窗口句柄.
普通 Dialog 的窗口类为 "#32770 (Dialog)"

EnumWindow 用起来稍微复杂,但很灵活,当调用 EnumWindow 时,操作系统枚举系统中所有的窗口,对每一个窗口都会调用以参数传入的回调函数,并将当前窗口的句柄作为回调函数的一个参数传入,你可以在回调函数中判断是否是你要找的窗口和将其句柄保存下来,回调函数返回 TRUE 时继续枚举, 返回 FALSE 停止枚举...

以上的API都可以在 MSDN 中找到详细说明.
liushan 2002-05-14
  • 打赏
  • 举报
回复
兄弟们,其实我的问题是这样的:

点击某按钮,显示一对话框,并使得对话框按预先设定好的尺寸来显示.

应如何来用MoveWindow()

一定给分 谢谢
码农猿圈圈 2002-05-14
  • 打赏
  • 举报
回复
如果你用MFC, CWnd的m_hWnd成员变量指明了CWnd对象对应的窗口句柄
码农猿圈圈 2002-05-14
  • 打赏
  • 举报
回复
::GetWindow()

16,470

社区成员

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

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

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