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的窗口程序的起点。