如何得到一个对话框窗口的句柄? 如果你用MFC, CWnd的m_hWnd成员变量指明了CWnd对象对应的窗口句柄 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 兄弟们,其实我的问题是这样的: 点击某按钮,显示一对话框,并使得对话框按预先设定好的尺寸来显示.应如何来用MoveWindow()一定给分 谢谢 你也可以使用FindWindow(Ex)或者 EnumWindows来查找窗口句柄.普通 Dialog 的窗口类为 "#32770 (Dialog)"EnumWindow 用起来稍微复杂,但很灵活,当调用 EnumWindow 时,操作系统枚举系统中所有的窗口,对每一个窗口都会调用以参数传入的回调函数,并将当前窗口的句柄作为回调函数的一个参数传入,你可以在回调函数中判断是否是你要找的窗口和将其句柄保存下来,回调函数返回 TRUE 时继续枚举, 返回 FALSE 停止枚举...以上的API都可以在 MSDN 中找到详细说明. 在对话框消息处理中的WM_INITDIALOG里面调用 模式对话框会在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! Anaki(九天) 兄弟你这样做效果跟在oninitdialog()中调用movewindow()差不多但我想要在视图类的一个消息函数中来显示对话框.类似代码是:CDibDlg dlg;dlg.domodal() ,现在我将视图的类成员变量rect传给dlg.movewindow(..)movewindow()是我自己加的,其内调用的是MoveWindow()关注 如果你的代码像这样: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(...) 对了,你确定可以在模式对话框的 OnInitDialog 函数中 MoveWindow 成功吗?奇怪了,呵呵... socket接收数据显示问题? VC常用数据类型的使用 那位大虾能提供windows核心编程的光盘下载!!! 如何去掉win32程序的控制台程序的控制台窗口 MFC怎样获得浏览器当前页面的URL和当前页面的名字? 如何有一个消息启动另外一个窗口? 着急上火只是为了一个单文档多视图! 关于dx9和dx11下开发的问题 CString类型的字符串分隔问题 为了vc,我要对付我的硬盘!!!!!!请指点。 ODBC高手请进:如何获取SQL SERVER服务器IP地址? 录音程序 请高手指教 急急急!!!
普通 Dialog 的窗口类为 "#32770 (Dialog)"EnumWindow 用起来稍微复杂,但很灵活,当调用 EnumWindow 时,操作系统枚举系统中所有的窗口,对每一个窗口都会调用以参数传入的回调函数,并将当前窗口的句柄作为回调函数的一个参数传入,你可以在回调函数中判断是否是你要找的窗口和将其句柄保存下来,回调函数返回 TRUE 时继续枚举, 返回 FALSE 停止枚举...以上的API都可以在 MSDN 中找到详细说明.
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!
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(...)