MFC笔记1:对话框学习

一、       对话框伸缩功能的实现

1、 常用函数

(1)       GetDlgItemText:返回对话框中指定ID的控件上的文本;

如:char ch1[10];  CString str;

GetDlgItemText(IDC_BUTTON1,str);                           GetDlgItemText(IDC_BUTTON1,ch1);

(2)       SetDlgItemText:设置对话框中指定ID的空间上的文本;

如:SetDlgItemText(IDC_EDIT3,ch3);               SetDlgItemText(IDC_BUTTON1,"扩展>>");

(3)       GetWindowRect:获得图像控件窗口的大小和位置;

如:static CRect rectLarge; //初始值为0,保存大矩形坐标

   if (rectLarge.IsRectNull())

   {

            CRect rectSeparator;

            GetWindowRect(&rectLarge);//获得大窗口的矩形大小

            GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);

}

(4)       SetWindowPos:设置对话框的收缩和扩展之后的大小;

SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE|SWP_NOZORDER);//维持窗口当前位置,当前Z次序

二、       输入焦点的传递

1、常用函数

(1)       SetWindowLong:修改窗口已指定的过程函数;如果为指定窗口设定一个新的窗口过程,则该函数将返回先前为该窗口类指定的窗口过程地址。

注意:在程序运行时,当对话框及其上的子控件创建完成,将要显示之前会发送的一个消息:WM_INITDIALOG.因此,在此消息的响应函数中修改编辑框控件的窗口过程比较合适。

(2)       GetWindow:获得窗口句柄,返回与指定窗口有特定关系的窗口句柄;第一个参数是开始查找的窗口句柄,第二个参数指定hWnd参数指定的窗口与要获得的窗口之间的关系,取值为:GW_HWNDNEXT,GW_HWNDPREV;

(3)       WM_INITDIALOG消息响应函数:

BOOLCTestDlg::OnInitDialog()

{

   CDialog::OnInitDialog();

  

   // TODO: Add extra initialization here

   prevProc=(WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_WNDPROC,(LONG)NewEditProc);

   return TRUE; // return TRUE unless you set the focus to a control

                // EXCEPTION: OCX Property Pages should return FALSE

}

(4)       重写窗口过程函数:

WNDPROCprevProc;//定义先前的窗口处理

LRESULTCALLBACK NewEditProc(

                                                           HWNDhwnd,      // handle to window

                                                           UINTuMsg,      // message identifier

                                                           WPARAMwParam,  // first message parameter

                                                           LPARAMlParam   // second message parameter

                                                           )   //重写窗口过程函数

{

   if (uMsg==WM_CHAR && wParam==0x0d)

   {

            SetFocus(::GetWindow(hwnd,GW_HWNDNEXT));   //注意,编辑框一般不接受多行,所以在属性中要先选中Multiline,否则回车没反应;

            return 1;

   }

   else

   {

            returnprevProc(hwnd,uMsg,wParam,lParam);

   }

}

(5)       GetNextDlgTabItem函数:返回指定控件前面或后面的一个具有WS_TABSTOP风格的控件;如果设置了这个Tabstop,则在对话框中按下Tab键后,输入焦点可以转移到此控件上。

(6)       ::表示调用SDK中的全局函数。

(7)       在MFC中,默认情况下,当在对话框窗口中按下回车键时,会调用对话框的默认按钮的响应函数,我们可以再次默认按钮的响应函数中把焦点依次向下传递。但是首先要取消第一个编辑框中的Multiline选项。

如:void CTestDlg::OnOK()

{

   // TODO: Add extra validation here

   GetNextDlgTabItem(GetFocus())->SetFocus();//获得当前焦点窗口指针的下一个窗口指针,并设置焦点

   //CDialog::OnOK();

}              默认OK按钮的ID是:IDOK

三、       逃跑按钮的实现

1、从CButton类派生一个新类,把按钮控件与一个自定义的按钮窗口类关联起来;详见P166-267.

(1)鼠标移动响应中: ShowWindow(SW_HIDE); m_pBtn->ShowWindow(SW_SHOW);

四、属性表单和向导的创建

1、MFC类库作为一个共享库(As a sharedDLL)来使用,编译后生成的文件比较小,但移植到其他系统下有可能因为缺少MFC类库而导致程序不能运行;但作为一个静态链接库(As a statically linked library)来使用,就不会出现这种问题。如果MFC作为共享库使用的,产品开发完成后,发布时可将相关的MFC类库一起打包到产品发布包中。

2、创建属性表单

         为了创建一个属性表单,首先需要创建一个CPropertySheet对象,在此对象中为每一个属性页创建一个对象(CPropertyPage类型),并调用AddPage函数添加每一个属性页,然后调用DoModal函数显示一个模态属性表单,或者调用create函数创建一个非模态属性表单。

3、步骤:

(1)为prop程序创建一个属性表单对象;

(2)在属性表单对象中添加属性页;

(3)显示属性表单;

4、向导的创建

         创建一个向导类型的对话框,应该遵循创建一个标准属性表单的步骤来实现,但在调用属性表单对象的DoModal函数之前,应该调用SetWizardMode这一函数;

5、UpdateData(TRUE)函数:为真时从对话框获取数据;FALSE时,将数据赋给对话框。

6、控件:组框(Group Box) 单选按钮(Radio Button) 列表框(List Box)  复选框

7、CPropertySheet类提供SetWizardButtons成员函数,用来设置向导对话框上的按钮。

         SetWizardButtons(DWORDdwFlags)    参数取值:

PSWIZB_BACK:设置上一个按钮;                  PSWIZB_NEXT:设置下一个按钮;

PSWIZB_FINISH:设置完成按钮;               PSWIZB_DISABLEDFINISH:设置一个禁用按钮;

   注意:

                   在属性页的OnSetActive函数中调用SetWizardButtons这个函数,属性页被选中成为一个活动的页面时,应用程序框架就会调用OnSetActive这个函数,它为一个虚函数,应该在属性页子类中重写这个函数。

8、对一组单选按钮来说,需要设置该组中第一个单选按钮的Group属性,属性中选中该选项。只能增加一个int类型的变量,选中该第一个按钮时,变量m_occupation为0,第二个为1,第三个为2;

9、在MFC编程中,对控件的操作都是通过相关的MFC类来完成的;

10、对于列表框,对应的MFC类为:CListBox;   组合框控件由一个编辑框和一个列表框组成,其对应的MFC类是CComboBox, 有成员函数AddString,用来向组合框控件的列表框中添加字符串选项。  列表框添加字符串在WM_INITDIALOG消息的响应函数中添加。

         ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("3000元以上");

         ((CComboBox*)GetDlgItem(IDC_COMBO1))->SetCurSel(0);//选择组合框中列表框中的一项

11、接收用户在向导中的选择

         (1)view类中定义变量保存属性页中选择项;

         (2)memset(m_bLike,0,sizeof(m_bLike));//字符数组初始化;

         (3)一般情况下,CPropertySheet类的DoModal函数的返回值是IDOK或IDCANCEL,但是如果属性表单已经被创建为向导了,该函数返回值为ID_WIZFINISH或IDCANCEL;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值