1.如果在SDI中要调用对话框 a.先插入一个对话框资源; b.然后在ClassWizards中为其创建一个类。其目的是比较方便为添加按纽和消息响应函数。 c.然后实例化它。在实例化时,必须将其头文件包含进去。2.创建非模态对话框,注意它不能是局部变量。当 点击非模态对话框的OnOK按纽时,它并没有关闭,而是隐藏了。需要调用destroyWindow().3.一个对象只能一个按纽。为什么?因为在Wincore.cpp的628行有代码 ASSERT(pWnd->m_hWnd == NULL); // only do once而创建后它的m_hWnd就不为0了。此处ASSERT的用法是如果括号里面不为真,则程序崩溃。4.如何为静态文本框增加消息响应?首先将IDC_STATIC改名。同时还需要将Notify特性复选中。5.完成加法功能。 a.GetDlgItem(); b.GetDlgItemText(); c.GetDlgItemInt(); d.将IDC_EDIT1关联CEDIT类型变量 e.将IDC_EDIT1关联int型变量。注意调用 UpdateData(); f. //::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);//::SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);//GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,(LPARAM)ch1);m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1); g. SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);SendDlgItemMessage(IDC_EDIT2,WM_GETTEXT,10,(LPARAM)ch2);6.点击按纽改变窗口尺寸 if(GetDlgItemText(IDC_BUTTON2,str),str=="收缩<<"){ SetDlgItemText(IDC_BUTTON2,"扩展>>");static CRect rectLarge;static CRect rectSmall;if(rectLarge.IsRectNull()){ CRect rectSeparator; GetWindowRect(&rectLarge); GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator); rectSmall.left=rectLarge.left; rectSmall.top=rectLarge.top; rectSmall.right=rectLarge.right; rectSmall.bottom=rectSeparator.bottom;}if(str=="收缩<<"){ SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(), SWP_NOMOVE | SWP_NOZORDER);}else{ SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(), SWP_NOMOVE | SWP_NOZORDER);}7.回车时将输入焦点移动到下一个控件SetWindowLong()改变窗口的属性。方法1:改变控件的回调函数,注意IDC_EDIT1的MultiLine要复选上。WNDPROC prevProc;LRESULT CALLBACK WinSunProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter){if(uMsg==WM_CHAR && wParam==0x0d){ //::SetFocus(::GetNextWindow(hwnd,GW_HWNDNEXT)); //SetFocus(::GetWindow(hwnd,GW_HWNDNEXT)); CString str; str.Format("%d",hwnd); AfxMessageBox(str);//, UINT nType = MB_OK, UINT nIDHelp = 0 );// AfxGetApp()-> SetFocus(::GetNextDlgTabItem(::GetParent(hwnd),hwnd,FALSE)); return 1;}else{ return prevProc(hwnd,uMsg,wParam,lParam);}}BOOL CTestDlg::OnInitDialog() {CDialog::OnInitDialog();// TOD Add extra initialization hereprevProc=(WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_WNDPROC, (LONG)WinSunProc);//设置回调函数return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE}方法2:在OnOK响应函数中加入代码//GetDlgItem(IDC_EDIT1)->GetNextWindow()->SetFocus();//GetFocus()->GetNextWindow()->SetFocus();//GetFocus()->GetWindow(GW_HWNDNEXT)->SetFocus();GetNextDlgTabItem(GetFocus())->SetFocus();

评论