天天看點

MFC 顔色對話框 字型對話框 WM_CTLCOLOR消息總結

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)設定背景模式