2014-05-13MFC对话框:改变MFC中按钮的文字,更改窗体的大小,通过类名能够查找到该类对应的对话框,MFC中获取文本框中的内容,updatedata函数,两种对话框比较,oncreate起点

1、改变MFC中按钮的文字,可以使用GetDlgItem(IDC_BTN_NETSET)->SetWindowText("打开网络");语句,或者是

GetDlgItemText(IDC_BTN_NETSET,str);SetDlgItemText(IDC_BTN_NETSET,"dakai网络");

前提是注意区别GetDlgItem和GetDlgItemText,千万别用混。

void CInfoDlg::OnBtnNetset() 
{
	// TODO: Add your control notification handler code here

	if(IsExplore)		//是否伸缩(打开网络)标志,默认为TRUE
	{
	    m_strrc.bottom-=150;
		GetDlgItem(IDC_BTN_NETSET)->SetWindowText("打开网络");
		IsExplore=FALSE;
	
	}
	else
	{
		m_strrc.bottom+=150;
		GetDlgItem(IDC_BTN_NETSET)->SetWindowText("关闭网络");
		IsExplore=TRUE;
	}
或者是

2、MFC中,更改窗体的大小后,要使用SetWindowsPos函数进行更新。要不然窗口的大小不会变化,例如:

m_strrc.bottom+=150;
SetWindowPos(NULL,m_strrc.left,m_strrc.top,m_strrc.Width(),m_strrc.Height(),SWP_NOMOVE|SWP_SHOWWINDOW);

3、通过类名能够查找到该类所对应的对话框。如看到CAppIdDlg dlg;if(dlg.DoModal()==IDOK)知道,这是一个模态对话框(只有被关闭后才能执行它的父窗口,类似于c#的dialog方法),转到CAppIdDlg 的定义,有如下代码,其中的IDD即该对话框的ID,从vc左侧resource视图中寻找ID为IDD_DIALOG5 的对话框,肯定能找到。

class CAppIdDlg : public CDialog
{
// Construction
public:
	CAppIdDlg(CWnd* pParent = NULL);   // standard constructor

// Dialog Data
	//{{AFX_DATA(CAppIdDlg)
	enum { IDD = IDD_DIALOG5 };
	CString	m_username;
	UINT	m_usercode;
	//}}AFX_DATA


// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAppIdDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:

	// Generated message map functions
	//{{AFX_MSG(CAppIdDlg)
	afx_msg void OnButton1();
	// afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
	virtual void OnOK();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};


4、MFC中获取文本框中的内容方法之一:

CString str;
GetDlgItem(IDC_EDIT1)->GetWindowText(str);//或GetDlgItemText(IDC_EDIT1,str);
MessageBox(str);

5、MFC中获取文本框中的内容方法之二:

某对话框所在的内是CAppIdDlg,在该类的DoDataExchange方法中,做如下的代码:

void CAppIdDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAppIdDlg)
	DDX_Text(pDX, IDC_EDIT1, m_username);
	DDX_Text(pDX, IDC_EDIT2, m_usercode);
	//}}AFX_DATA_MAP
}
将用户名的编辑框IDC_EDIT1控件与m_username变量做了关联,然后在提交用户名的按钮中的响应事件中,使用 m_username代表IDC_EDIT1
msg.Format("%d#%s@%d",msgType,dlg.m_username,dlg.m_usercode);	//在CAppIdDlg类中通过注释宏获取的用户名和密码

6、下列语句中的::表示直接调用win32的API函数,即平台SDK的函数。

	HWND hwnd;
	hwnd=CreateWindowEx();
	::ShowWindow(hwnd,SW_SHOWNORMAL);
	::UpdateWindow(hwnd);

7、对于upadatedata(),

UpdateData(FALSE),将对话框对象的成员变量值拷至对话框控件 ,用于向用户显示数据。
UpdateData(TRUE)将对话框控件中数据拷贝至对话框对象成员变量,缺省值是TRUE。

如果选择对话框的 OK按钮关闭对话框,会自动调用UpdateData()。 

8、Windows中有两种对话框,模态对话框和非模态对话框,构造两种对话框的大多数工作都相同,只是两者的显示和数据处理有些不同。

对于模态对话框,调用其 DoModal函数显示,按OK或Cancel按钮关闭对话框,并作相应数据处理。如CMyDialog dlg ; dlg.DoModal();

DoModal返回用户按下的按钮ID值(如IDOK或IDCANCEL),按下OK或CANCEL按钮后,自动调用CDialog::EndDialog关闭对话框。


对于非模态对话框,调用Create函数创建并显示对话框,用DestroyWindow关闭对话框。如:CMyDialog dlg; dlg.Create();

  用户按下 OK或CANCEL按钮不会关闭对话框,可重定义OnOK和OnCancel函数,调用DestroyWindow关闭对话框:

        void CMyDialog::OnOK() { … 
        DestroyWindow(); } 
        void CMyDialog::OnCancel() { 
        DestroyWindow(); }

9、新建一个对话框,可以为其建立类向导,形成一个类,并可以被其他控件的某些事件在响应时调用,调用时,直接新建对象,用DoModal或create函数显示即可。


10、CXXXframe中的oncreate函数,一般是程序的第一个窗口create产生时,发送消息CW_CREATE后的相应函数,因此,可以间接地把它看成是MFC的窗口程序的起点。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值