1. 程式人生 > >WTL環境中CEdit或Cstatic控制元件中修改字型大小和顏色

WTL環境中CEdit或Cstatic控制元件中修改字型大小和顏色

      本文主要介紹只讀模式的下的CEdit控制元件和CStatic控制元件的字型的大小和顏色的修改,編輯模式下的CEdit控制元件的原理是一樣的只是訊息變了。

      1. 修改字型顏色

        只讀模式下的CEdit控制元件和CSataic控制元件通過傳送WM_CTLCOLORSTATIC給主視窗來進行重繪,這時主視窗可以在重繪前設定字型顏色(編輯模式的Cedit通過WM_CTLCOLOREDIT )。具體實現如下:

        1.1  在主視窗的訊息迴圈中新增如下程式碼(紅色部分):

                 BEGIN_MSG_MAP(CMainDlg)
                            .......
                       MESSAGE_HANDLER(WM_CTLCOLORSTATIC,OnEditColor)


                 END_MSG_MAP()
        1.2   然後新增OnEditColor方法:

                LRESULT CMainDlg::OnEditColor(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
                 {
                          HBRUSH hbr;
                       HDC  hdc =(HDC) wParam;
                     HWND  hwnd = (HWND) lParam;

                      //獲得當前控制元件的畫刷,因為改變字型顏色後,需要返回自身的畫刷才能生效
                    hbr= (HBRUSH) GetCurrentObject(hdc,OBJ_BRUSH);
             
                     if(hwnd == m_fr_status.m_hWnd) //判斷是否需要修改的控制元件
                     {//如果是,修改字型顏色
                             SetTextColor(hdc,m_fr_cl);
                             SetBkMode(hdc,TRANSPARENT);
                        }else
                       {//如果不是,返回主視窗預設畫刷。
                                hbr= (HBRUSH) GetCurrentObject(NULL,OBJ_BRUSH);
                        }
                         return (LRESULT)hbr;
                }
   2.    修改字型
         在主視窗類裡新增一個CFont類的成員函式,因為我們修改後的字型需要儲存起來,如果定義為區域性變數,在設定完成後,函式返回後,字型就會失效。
                 class CMainDlg : public CDialogImpl<CMainDlg>
                {
                  private:

                             ......
                            CFont  m_font;

                           CEdit   m_fr_sn;

                            ......
                 }

在OnInitDialog方法中新增如下紅色程式碼,設定字型:
                     ......
               m_fr_sn = (CEdit)GetDlgItem(IDC_EDIT_FR_SN);  
              m_font.Attach(m_fo_sn.GetFont());  
              m_font.CreatePointFont(220,_T("微軟雅黑"));

               m_fr_sn.SetFont(m_font.m_hFont);
                 .......