且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

MFC 颜色对话框 字体对话框 WM_CTLCOLOR消息总结

更新时间:2022-08-13 08:18:13

 

   
1.
    颜色对话框
   
    CHOOSECOLOR  结构体来设置获取颜色对话框的相关信息 
    成员变量m_cc
    m_cc.rgbResult  在IDOK之后保存的是选择的颜色RGB值
  

   
    COLORREF choose_color;
    CColorDialog  dlg;  //创建颜色对话框 
   dlg.m_cc.Flags|=CC_RGBINIT ;//以用户选择的颜色进行初始化颜色打开对话框
   dlg.m_cc.Flags|=CC_FULLOPEN; //全部打开 包括用户自定义
   dlg.m_cc.rgbResult=choose_color;  //使用我们上次选择的颜色进行初始化
   if(IDOK==dlg.DoModal()) //创建模态对话框
   {
    choose_color=dlg.m_cc.rgbResult;   //保存颜色选择   颜色选择会反映到 CHOOSECOLOR结构体中的 regResult变量中
   }


2.  字体对话框 CFontDialog   
      
     CHOOSEFONT   结构体保存字体设置 
     LOGFONT 结构体 间接创建字体
  
  
    DeleteObject  删除与windows  GDI 相关的所有存储       这是资源

   CGDIObject是GDI类  判断类是否与某种资源相关联我们可以判断句柄  

  


        CFont m_font;  //定义CFont对象
        CString FontName; //字体名字

   
        CFontDialog dlg;  //定义 CFontDialog对象
 
 if(IDOK==dlg.DoModal())  //创建模态对话框
 {
  if(m_font.m_hObject)  //判断句柄是否存在
   m_font.DeleteObject();  //相关资源
 m_font.CreateFontIndirect(dlg.m_cf.lpLogFont);  //通过CHOOSEFON结构体的LOGFON 成员创建字体
 FontName=dlg.m_cf.lpLogFont->lfFaceName; //字体名字
      


 Invalidate();  //引起窗体无效 重画 进入OnDraw函数   

 

4.  GetWindowRect 是获取到屏幕矩形区域的  我们获取控件矩形要用GetClientRect 来获得 

   SCreenToClient()  屏幕坐标转换到客户坐标 
   ClientToSCreen()  客户坐标转换成屏幕坐标

 

5.WM_CTLCOLOR 消息响应  我们可以通过这个消息函数来设置控件的背景颜色    函数必须返回一个画刷  这个函数被调用多次  每次对应一个控件
afx_msg HBRUSH OnCtlColor(
CDC* pDC,   //控件设备描述 
CWnd* pWnd,  //指向控件的指针
UINT nCtlColor );   //控件的类型

CWnd::GetDlgCtrlID() //CWnd类的成员函数 通过对象来获取 一个控件的ID  包括对话框 ID 子窗口  顶层窗口返回值无效
CDC::SetBkMode(TRANSPARENT)设置背景模式