有关对话框的问题

折腾了一早上,想在文档类中获得对话框用户交互的数据:

CTestDlg dlg;
if(IDOK==dlg.DoModal())
{
  //get datas of the dialog
}

首先想到的是利用窗口类对象自身的句柄m_hWnd,错误有二:

1. 定义了对象而为进行任何操作,所以里面的句柄为空

2. 调用DoModal()后对话框窗口已经销毁了,再对该对话框操作,当然就会出现非法访问,具体是在:ASSERT(::IsWindow(m_hWnd))出错


关于GetDlgItem();

以前使用它基本上都是在窗口类中,直接调用从来也没思考,现在在文档类中调用,倒一下子不会用了,它有三种形式(不算CWindows中的):

1.SDK形式,返回对话框中控件的句柄

HWND GetDlgItem(      

    HWND hDlg,
    int nIDDlgItem
);

hDlg:对话框句柄

nIDDlgItem:控件ID


2.CWnd的成员函数:

virtual CWnd* GetDlgItem(
int
nID
) const;

直接由对话框指针调用


3.CWnd的成员函数:

virtual void GetDlgItem(
int
nID,
HWND*
phWnd
) const;

phWnd:对话框的句柄


另:几个小知识

1.CWindow和CWnd的区别: CWindow封装了ATL得窗口类,CWnd封装了MFC的窗口类。

2.从窗口句柄到窗口指针的转换:  CWnd * pWnd=CWnd::FromHandle(m_hWnd);

3.找到顶层活动窗口: ::FindWindow(类名,窗口title);

4.DoModal调用时,对话框成员函数的调用顺序

OnInitDialog->DoDataExchange->返回,销毁对话框窗口



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值