VC++深入详解·chapter07·笔记

1、堆上分配的内存,其生命周期是和整个应用程序的生命周期相同的。

2、在MFC中,对资源的操作通常都是通过一个与资源相关的类完成的。

3、创建一非模态对话框时,应在类中覆盖OnOk这个virtual function,然后在此虚函数内部
     调用DestroyWindow销毁窗口。并不再调用基类的OnOk函数(将其注释掉
    /*this->*/DestroyWindow();
    //CDialog::OnOK();
    因为基类的OnOk函数调用的是EndDialog函数,此函数适用于销毁模态对话框的,而对于
    非模态对话框,它的作用只是使其不可见,但并未销毁之。

4、非模态对话框的三种创建模式:
    1> CTestDlg dlg;//定义为视类的成员
       ...
       dlg.Create(IDD_DIALOG1, this);
       dlg.ShowWindow(SW_SHOW);
    2> CTestDlg* pDlg;//定义为视类的成员
       ...
       pDlg->Create(IDD_DIALOG1, this);
       pDlg->ShowWindow(SW_SHOW);
       ...
           delete pDlg;//在视类的析构函数中
    3> CTestDlg* pDlg;//非成员,即临时变量
       pDlg->Create(IDD_DIALOG1, this);
       pDlg->ShowWindow(SW_SHOW);
       ...
       delete this;//CTestDlg类中重载PostNcDestroy,并添加此行代码

5、动态创建按钮实现:
    1) CButton m_btn;成员
    2) m_btn.Create("ButtonCaption", BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD, CRect(0, 0, 100, 100), this, 123);
    3) m_btn.ShowWindow(SW_SHOWNORMAL);

6、对于一个窗口是否与一个对象相关联的判断:(防止多次关联操作)
    1) 设置一bool成员进行控制(或用一static局部成员控制也可)
    2) 通过对象的m_hWnd是否为空来判断(是否obj.m_hWnd==NULL)

7、为了使一个静态文本控件能够响应鼠标单击消息,那么需要进行两个特殊的步骤:
1) 改变它的ID
2) 在它的属性对话框中选中Notify选项

8、MFC提供了多种以DDX_为前缀的函数,这些函数分别用于不同控件的数据交换。(DDX:Dialog Data Exchange,对话框数据交换)
    MFC提供了多个以DDV_为前缀的数据校验函数。(DDV:Dialog Data Validation,对话框数据校验
    EM_开头的消息是指编辑框控件消息(Edit Control Message)

9、*显示:编辑框的属性中有一Password属性,将之设为true即可。

10、控件与成员变量数据交换是由DoDateExchange函数完成的,而在程序代码中从不直接调用此函数
而是通过CWnd类的另一个成员函数:UpdateData来调用。
    BOOL CWnd::UpdateData(BOOL bSaveAndValidate=TRUE);
    UpdateData(TRUE):函数正在获取对话框数据
    UpdateData(FALSE):函数正在初始化对话框控件

11、控件控制:
    获取控件上的文本:CWnd::GetWindowText (使用前先获取控件对象(指向控件对象的指针))
     设置控件上的文本:CWnd::SetWindowText (使用前先获取控件对象(指向控件对象的指针))
    获取空间对象:CWnd::GetDlgItem     [CWnd* GetDlgItem(int nID) const;]
    返回对话框中指定ID的控件上的文本:CWnd::GetDlgItemText   [GetDlgItem和GetWindowText的组合]
    设置对话框中指定ID的控件上的文本:CWnd::SetDlgItemText
    返回指定控件的文本,并将其转换为一整形数值:CWnd::GetDlgItemInt    [UINT GetDlgItemInt(int nID, BOOL* opTrans=NULL, BOOL bSigned=TRUE);]
    设置指定控件的文本,并将其转换为一整形数值:CWnd::SetDlgItemInt    [void SetDlgItemInt(int nID, UINT nValue, BOOL bSigned=TRUE);]

12、发送消息:
    ::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd, WM_GETTEXT, 10, (LPARAM)ch1);    (PlatForm SDK)   
    ::SendMessage(m_edit1->m_hWnd, WM_GETTEXT, 10, (LPARAM)ch1);    (PlatForm SDK)
    GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT, 10, (LPARAM)ch1);    (CWnd)
    m_edit1.SendMessage(WM_GETTEXT, 10, (LPARAM)ch1);    (CWnd)
    SendDlgItemMessage(IDC_EDIT1, WM_GETTEXT, 10, (LPARAM)ch1);

13、获取窗口文本的消息:WM_GETTEXT
    设置窗口文本的消息:WM_SETTEXT
    获得编辑框中复选的内容:WM_GETSEL
    设置编辑框中复选的内容:WM_SETSEL (对于EM_SETSEL消息,有一种特殊情况,如果这个消息的wParam参数为0,lParam参数威-1,那么编辑框控件中的所有内容都将被复选)

14、对话框伸缩功能的实现
    1) 用一个图像空间充当分隔符
    2) 通过GetWindowPos获得一个对话框或控件的位置
    3) CRect判空:IsRectEmpty(rect的宽度和高度都为0或者是一个负值,则返回true)和IsRectNull函数(四个坐标皆为0则返回true)
    4) 设置窗口的位置和大小的函数:SetWindowPos (注意各参数)
    5) Z-order

15、设置焦点:SetFocus

16、手动添加OK按钮:
    1) 拖入一按钮
    2) 将其ID设为IDOK(不是IDC_OK,也不是ID_OK)
    3) 为其添加消息响应函数,自动为OnOk函数

17、设置Tab order:Ctrl+D, 顺序单击

18、焦点传递:
    OK按钮的响应函数中(添加),注释掉OnOk()函数的调用,添加GetNextDlgTabItem(GetFocus())-> SetFocus();即可。

19、SetWindowLong: 改变指定窗口的属性

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值