`
paulfzm
  • 浏览: 891224 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

CDialog::OnInitDialog() ----转

    博客分类:
  • vc++
阅读更多

BOOL CmapfileDlg::OnInitDialog()
{
CDialog::OnInitDialog();

。。。。。。。

}

作用:是响应WM_INITDIALOG消息的处理函数.
       声明:OnInitDialog()说明:
这里主要说明一个它与构造函数的一些相同点和不同点.
相同点:
               都可以进行初始化的工作.
不同点:
               InitDialog是响应WM_INITDIALOG消息的函数.构造函数,是当你对一个对象实例话的时候,调用的函数. 在这里,构造函数早于InitDialog的调用。
               构造函数:对话框还不存在,使用hwnd之类的东西会不管用  
               InitDialog:对话框已存在.而且如果你初始话时需要分配很大的内存,那么放在OnInitDialog()会更合适。
               控件的初始化要放在OnInitDialog  
               普通成员变量的初始化可以放在构造函数中
       但是它的return   TRUE与return FALSE有什么区别呢?
       MSDN上面:
       Return Value
Specifies whether the application has set the input focus to one of the controls in the dialog box. If OnInitDialog returns nonzero, Windows sets the input focus to the first control in the dialog box. The application can return 0 only if it has explicitly set the input focus to one of the controls in the dialog box.
       至于应用场合:假设这个Dialog上要求输入内容,如果dialog一弹出来就自动把输入焦点放在第一个编辑框上不就很方便嘛,可以直接输入内容了。这时候OnInitDialog()就需要返回TRUE。
       个人总结是:当返回TRUE时表明Windows自动的将输入焦点置于序列上排第一的 某个空件上;而当返回FALSE时只是表明你将输入焦点人为的改变在其他的某个控件上。

问题:CDialog::OnInitDialog() 遇到错误 弹出 “试图执行系统不支持的操作“

有百分之八十的原因是你使用了一个资源,比如一个EDIT,同时你又在类中建了一个成员,如CEdit m_editTest;但是现在你把这个EDIT删除了,而m_editTest却没有删除。你只要在ClassWizard中找到这个定义,将其删除就一切OK了。

虽然屏蔽CDialog::OnInitDialog()   这一句话可以让程序通过编译,但是会导致一系列BUG

比如:

1.

((CTabCtrl*)GetDlgItem(IDC_TAB1))->InsertItem(0,"WMS本地");

// CTab.InsertItem(0,"WMS本地");        //屏蔽后,如此添加标签有错,必须如上所示方法使用
((CTabCtrl*)GetDlgItem(IDC_TAB1))->InsertItem(1,"WFS在线");

2.TABCTRL控件的切换

if(CTab.GetCurSel() == 0)
{
WMS_Page.ShowWindow(SW_SHOW);
WFS_Page.ShowWindow(SW_HIDE);
}
else if (CTab.GetCurSel() == 1)
{
WFS_Page.ShowWindow(SW_SHOW);
WMS_Page.ShowWindow(SW_HIDE);
}
//屏蔽会导致按标签切换时出错

CDialog::OnInitDialog() 初始化之后,一些定义的控件变量(即对象名如:CTab)可用。否则就必须像下面的用法

((CTabCtrl*)GetDlgItem(IDC_TAB1))->InsertItem(0,"WMS本地");   // ((CTabCtrl*)的作用是告诉那种控件调用的GetItem()。返回该控件的句柄后,才能使用其相关函数(如:InsertItem())

 

AfxGetMainWnd()->m_hWnd,AfxGetMainWnd()是获得与线程相依附的主窗口,在回调函数中无法获得获得想要的主窗口


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shiwei0124/archive/2009/09/07/4527252.aspx

分享到:
评论

相关推荐

    VC 超多Dialog对话框操作源码大全.rar

    VC 超多Dialog对话框操作源码实例大全,这些例子是:创建模式对话框  创建消息对话框  改变对话框中控件的颜色  关闭非模式对话框  扩展对话框的大小  实现对话框在桌面工作区的停靠 ...

    mfc对话框间传变量

    BOOL CDialog2::OnInitDialog() { CDialog::OnInitDialog(); // 读取共享变量 sharedValue = GetDlgItemInt(IDC_EDIT1); } ``` #### 方法二:通过CWinApp对象 ```cpp // 在CWinApp派生类中声明成员变量 class ...

    mfc载入图片方法

    CDialog::OnInitDialog(); CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP2); m_brBk.CreatePatternBrush(&bmp); bmp.DeleteObject(); return TRUE; } HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT ...

    基于MFC报表打印动态连接库

    CDialog::OnInitDialog(); SetIcon(m_hIcon, FALSE); // TODO: Add extra initialization here // 开始时定位打印界面在右上角 MoveWindow(GetSystemMetrics(SM_CXFULLSCREEN)-640, 0, 640, 480, TRUE); ...

    对话框.pdf对话框.pdf

    - `CDialog::OnInitDialog()`:响应`WM_INITDIALOG`消息,通常在此函数中进行对话框的初始化工作。 - `CDialog::OnCancel()`:当用户点击“取消”按钮或按下Esc键时被调用。 - `CDialog::OnOK()`:当用户点击“确定...

    VC++ MFC 修改界面菜单添加与获取系统信息

    CDialog::OnInitDialog(); // 加载菜单 m_menu.LoadMenu(IDR_MENU1); // 设置当前菜单 SetMenu(&m_menu); } }; ``` #### 三、往基于Dialog的程序添加工具栏 要在基于对话框的程序中添加工具栏,同样需要经过...

    C语言资料课件

    // send this notification unless you override the CDialog::OnInitDialog() // function and call CRichEditCtrl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. // TODO: Add your ...

    VC++对话框(CDialog)的全屏显示及控件居中显示

    在CDialog的子类中,我们需要重写 OnInitDialog() 函数。OnInitDialog() 是在对话框初始化时调用的,是我们设置对话框初始状态的理想位置。在该函数中,我们可以获取屏幕的宽度和高度,并将对话框的大小设置为屏幕的...

    windows编程基础——对话框2

    - `CDialog::OnInitDialog()`:响应`WM_INITDIALOG`消息,常用于初始化对话框控件。 - `CDialog::OnCancel()`:当用户点击“取消”按钮或按ESC键时被调用,内部会调用`EndDialog()`函数。 - `CDialog::OnOK()`:...

    VC--常用的系统函数

    - `CDialog::OnInitDialog`:初始化对话框。 - `CButton::Create`:创建按钮。 - `CWnd::GetDlgItem`:获取指定控件的句柄。 - `CWnd::GetWindowText`:获取窗口标题文本。 - `C::atoi`:字符串转整数。 - `itoa`:...

    VS,点击按钮打开窗口

    CDialog::OnInitDialog(); SetDlgItemText(IDC_STATIC_1, g_str); // 显示全局变量中的文本 } ``` ### 3. 实现多次打开非模态对话框并保留数据 若希望在多次点击主对话框的“打开”按钮时,非模态对话框能够显示...

    VC PICTURE控件的使用

    CDialog::OnInitDialog(); CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP2); m_brBk.CreatePatternBrush(&bmp); bmp.DeleteObject(); return TRUE; } HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT ...

    VC++编的随机数产生器简单版

    CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX );...

    MFC设置字体及颜色

    CDialog::OnInitDialog(); // 创建字体 m_Font = new CFont(); m_Font->CreateFont( -11, 0, 0, 0, 100, // 字体高度为11,宽度为0,粗细100 FALSE, FALSE, 0, // 不斜体,不带下划线,不带删除线 ANSI_...

    酒店管理系统20130529

    CDialog::OnInitDialog(); // TODO: Add extra initialization here m_oTabBase.AddPage(" 商品类别 ", &m_oClassdlg, IDD_DIALOG_CLASS); m_oTabBase.AddPage(" 商品资料 ", &m_...

    FreeCode2008.rar

    CDialog::OnInitDialog(); // Set the small icon for this dialog SetIcon(AfxGetApp()->LoadIcon(IDI_ICOBTN_SHELL), FALSE); CenterWindow(); // TODO: Add extra initialization here TCHAR szIp[100]; ...

    班级查询系统,可以完成录入查询你删除

    CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX );...

    用LED显示时间的类

    类名:CDigitalClock 说明:时钟的LED显示类(用来显示当前时间97*22效果最佳) 版本:V1.0 ...日期:2011.3.15 QQ号:490096006,需要更多类请与... 5,在DLG文件CDialog::OnInitDialog()函数中调用SetTimer(1,10,NULL);

    第七章--对话框编程(C 教程课件).doc

    CDialog::OnInitDialog(); UpdateData(FALSE); // 初始化时,将成员变量的值传给控件 // ... } void CMyDialog::OnOK() { if (!UpdateData(TRUE)) // 关闭时,如果数据验证失败,返回FALSE return; // ... ...

    juesDlgSize

    3.在初始化函数中(如 OnInitDialog 函数最后 )加入: m_juesSize.FindID( this->m_hWnd ); 4.在( 重载 ) OnSize 函数加入 // CDialog::OnSize(nType, cx, cy); m_DlgSize.OnSize(nType, cx, cy); ---------------...

Global site tag (gtag.js) - Google Analytics