MFC(3):对话框创建基础知识

模态对话框:创建后不能对其他窗口进行操作
非模态对话框:创建后仍可以对其他窗口进行操作

新建项目-->MFC应用程序-->基于对话框、MFC标准-->完成
默认生成的类有:应用程序类、对话框类
误操作关闭对话框的解决办法:解决方案管理器-->点击*.rc文件会进入资源视图-->项目名称-->Dialog--> IDD_项目名大写_DIALOG

右键对话框任意位置-->属性
Caption:设置对话框标题
默认控件不想要的,选中直接delete即可;(CTRL + A, delete可以删除对话框内的所有控件)
添加按钮: 模态对话框 和 非模态对话框, 选中-->右键属性-->Caption:设置对话框标题

资源视图-->Dialog-->插入Dialog,插入后对其ID右键-->ID:设置对话框的ID值(纯大写)

创建模态对话框IDD_EXEC和非模态对话框IDD_SHOW
以IDD_EXEC为例:
生成对话框对应的类:资源视图-->Dialog-->双击对话框ID,打开对应对话框-->任意位置右键-->添加类-->设置类名CDialogExec-->确定
在类视图中,会看到自己刚创建的类CDialogExec;类中通过enum{IDD_EXEC}建立起类与对话框的关联
注意:此时出现"Error: 未定义标识符IDD_EXEC",直接忽略;

回到主对话框:选中"模态对话框"按钮,添加点击事件的方法:
添加事件方法一:右键-->属性-->控件事件(闪电标识)-->BN_CLICKED,右侧下箭头-->Add
添加事件方法二:右键-->添加事件处理程序-->选择消息类型(BN_CLICKED)-->添加编辑
添加事件方法三:双击

//创建模态对话框
void CmfcDialogDlg::OnBnClickedButton1()
{
    //弹出模态对话框
    CDialogExec dlg;
    dlg.DoModal();
}
注意:进入函数后首先添加头文件,在MFC中引用的头文件类名以C开头,引用时省去C;使用的时候还要把C带上

LNK1123解决方案:
LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
方案一:(1)项目\属性\配置属性\清单工具\输入和输出\嵌入清单:原来是“是”,改成“否”。
方案二:将..\Microsoft Visual Studio 10.0\VC\bin路径下的cvtres.exe改个名字就OK
方案三:官方解决方案,下载安装新的VS2010 SP1

LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library  
方案一:【项目】->【属性】->【配置属性】->【连接器】->【输入】->【忽略指定库】,输入:msvcrt.lib
方案二:【项目】->【属性】->【配置属性】->【连接器】->【命令行】,输入:/NODEFAULTLIB:msvcrt.library

//创建非模态对话框
void CmfcDialogDlg::OnBnClickedButton2()
{
    // TODO: 在此添加控件通知处理程序代码
    CDialogShow dlg;
    dlg.Create(IDD_SHOW);
    dlg.ShowWindow(SW_SHOWNORMAL);
}
这种创建方式,得到的对话框一闪而过;解决方案是:将其作为以成员的形式创建

在C*Dlg类中,引用头文件,定义成员变量CDialogShow的对象dlg;此法弊端在于只能创建一次,解决办法为:
在OnInitDialog函数中;创建非模态对话框,dlg.Create(IDD_SHOW);保证创建一次

小结:
修改按钮名称:选中,直接输
触发按钮点击事件:双击,进入单击事件
插入窗口:右键,添加类
模态创建:DoModal()函数
非模态对话框:定义私有成员dlg,dlg.Create(IDD_*)写到OnInitDialog()函数中,在按钮的点击事件中调用显示窗口函数dlg.ShowWindow()
 

猜你喜欢

转载自blog.csdn.net/m1m2m3mmm/article/details/83475079
今日推荐