MFC笔记


为控件添加变量会在此函数进行交换:



void CAdditionDlg::DoDataExchange(CDataExchange* pDX)    
{    
    // 处理MFC默认的数据交换    
    CDialogEx::DoDataExchange(pDX);    
    // 处理控件IDC_SUMMAND_EDIT和变量m_editSummand之间的数据交换    
    DDX_Text(pDX, IDC_SUMMAND_EDIT, m_editSummand);    
    // 处理控件IDC_ADDEND_EDIT和变量m_editAddend之间的数据交换    
    DDX_Text(pDX, IDC_ADDEND_EDIT, m_editAddend);    
    // 处理控件IDC_SUM_EDIT和变量m_editSum之间的数据交换    
    DDX_Text(pDX, IDC_SUM_EDIT, m_editSum);    
}  


数据交换机制中,DoDataExchange()并不是被自动调用的,而是需要我们在程序中调用CDialogEx::UpdateData()函数,由UpdateData()函数再去自动调用DoDataExchange()的。
       CDialogEx::UpdateData()函数的原型为:
       BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
       参数:bSaveAndValidate用于指示数据传输的方向,TRUE表示从控件传给变量,FALSE表示从变量传给数据。默认值是TRUE,即从控件传给变量。
       返回值:CDialogEx::UpdateData()函数的返回值表示操作是否成功,成功则返回TRUE,否则返回FALSE。


为按钮添加处理函数:



 1.使用Class Wizard添加消息处理函数

2.通过“Add Event Handler...”添加消息处理函数

3.在按钮的属性视图中添加消息处理函数

 4.双击按钮添加消息处理函数



改变TAB顺序



按快捷键Ctrl+D

对话框:



一.模态对话框和非模态对话框
       Windows对话框分为两类:模态对话框和非模态对话框。
       模态对话框是这样的对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。
       非模态对话框则是,它弹出后,本程序其他窗口仍能响应用户输入。非模态对话框一般用来显示提示信息等。

BOOL CMFC002App::InitInstance()
{
	// 如果一个运行在 Windows XP 上的应用程序清单指定要
	// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
	//则需要 InitCommonControlsEx()。否则,将无法创建窗口。
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// 将它设置为包括所有要在应用程序中使用的
	// 公共控件类。
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();


	AfxEnableControlContainer();

	// 创建 shell 管理器,以防对话框包含
	// 任何 shell 树视图控件或 shell 列表视图控件。
	CShellManager *pShellManager = new CShellManager;

	// 标准初始化
	// 如果未使用这些功能并希望减小
	// 最终可执行文件的大小,则应移除下列
	// 不需要的特定初始化例程
	// 更改用于存储设置的注册表项
	// TODO: 应适当修改该字符串,
	// 例如修改为公司或组织名
	SetRegistryKey(_T("应用程序向导生成的本地应用程序"));

	CMFC002Dlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: 在此放置处理何时用
		//  “确定”来关闭对话框的代码
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: 在此放置处理何时用
		//  “取消”来关闭对话框的代码
	}

	// 删除上面创建的 shell 管理器。
	if (pShellManager != NULL)
	{
		delete pShellManager;
	}

	// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
	//  而不是启动应用程序的消息泵。
	return FALSE;
}



弹出对话框比较关键的一个函数,就是对话框类的DoModal()函数。


返回值:整数值,指定了传递给CDialog::EndDialog(该函数用于关闭对话框)的nResult参数值。如果函数不能创建对话框,则返回-1;如果出现其它错误,则返回IDABORT。
举例:

void CAdditionDlg::OnBnClickedAddButton()    
{    
    // TODO: Add your control notification handler code here    
    INT_PTR nRes;             // 用于保存DoModal函数的返回值    
   
    CTipDlg tipDlg;           // 构造对话框类CTipDlg的实例    
    nRes = tipDlg.DoModal();  // 弹出对话框    
    if (IDCANCEL == nRes)     // 判断对话框退出后返回值是否为IDCANCEL,如果是则return,否则继续向下执行    
        return;    
   
    // 将各控件中的数据保存到相应的变量    
    UpdateData(TRUE);    
   
    // 将被加数和加数的加和赋值给m_editSum    
    m_editSum = m_editSummand + m_editAddend;    
   
    // 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值    
    UpdateData(FALSE);    
}  




未完待续。。。。。。。。。。。。。












  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC中,OnCtrlColor是一个消息处理函数,用于控制对话框中控件的颜色。当对话框绘制控件时,将调用该函数来获取控件的背景色和文本色。 OnCtrlColor函数的原型如下: HBRUSH OnCtrlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); 其中,pDC是与控件相关联的设备上下文,pWnd是指向控件的指针,nCtlColor是控件的类型。nCtlColor可以是以下之一: - CTLCOLOR_MSGBOX:消息框 - CTLCOLOR_EDIT:编辑框 - CTLCOLOR_LISTBOX:列表框 - CTLCOLOR_BTN:按钮 - CTLCOLOR_DLG:对话框 - CTLCOLOR_SCROLLBAR:滚动条 - CTLCOLOR_STATIC:静态文本 OnCtrlColor的返回值是一个HBRUSH类型的句柄,用于绘制控件的背景。如果返回NULL,则使用系统颜色作为控件的背景。 下面是一个OnCtrlColor函数的例子: ```cpp HBRUSH CMyDlg::OnCtrlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { switch (nCtlColor) { case CTLCOLOR_EDIT: pDC->SetTextColor(RGB(255, 0, 0)); // 设置文本颜色为红色 pDC->SetBkColor(RGB(255, 255, 255)); // 设置背景颜色为白色 return (HBRUSH)GetStockObject(WHITE_BRUSH); // 返回白色画刷 case CTLCOLOR_STATIC: pDC->SetTextColor(RGB(0, 0, 255)); // 设置文本颜色为蓝色 pDC->SetBkMode(TRANSPARENT); // 设置背景为透明 return (HBRUSH)GetStockObject(NULL_BRUSH); // 返回透明画刷 default: return CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); // 调用默认处理函数 } } ``` 这个例子中,当控件类型为编辑框时,设置文本颜色为红色,背景颜色为白色,并返回一个白色画刷;当控件类型为静态文本时,设置文本颜色为蓝色,背景为透明,并返回一个透明画刷;对于其他控件类型,调用默认的处理函数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值