MFC介面設計

來源:互聯網
上載者:User

前兩天boss讓寫寫介面,看程式看的頭暈腦轉,就在網上瞎搜搜,寫些關於MFC的介面設計。

包括:表單背景圖、表單大小、按鈕背景圖、控制項透明、編輯框重影、exe表徵圖、托盤程式。

下面逐一代碼解析:

表單背景圖:

背景圖,要在OnPaint() 函數中進行修改。表單不再使用預設,在else中添加代碼

//改變表單大小MoveWindow(0,0,500,400,TRUE);//設定背景CPaintDC dc(this);CBitmap   bitmap;bitmap.LoadBitmap(IDB_BITMAP2);//在資源裡添加的位元影像名  CBrush   brush;brush.CreatePatternBrush(&bitmap);CBrush*   pOldBrush   =   dc.SelectObject(&brush);dc.Rectangle(0,0,600,400);  //寬、長;dc.SelectObject(pOldBrush);//CDialog::OnPaint();

按鈕背景圖:

CBitmapButton  m_BitmapButton;//聲明按鈕位元影像對象

實現代碼:

//按鈕添加圖片m_BitmapButton.LoadBitmaps(IDB_BITMAP1);//位元影像名稱m_BitmapButton.SubclassDlgItem(IDC_BConn,this);//按鈕ID,控制代碼m_BitmapButton.SizeToContent();//把按鈕設定成位元影像大小

控制項透明:

重載OnCtlColor函數。

有的控制項需要修改OwnerDraw屬性為True。

afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);//透明

添加訊息函數:

BEGIN_MESSAGE_MAP(CClientDlg, CDialog)//......ON_WM_CTLCOLOR()//透明//}}AFX_MSG_MAP//......END_MESSAGE_MAP()

實現:

//重載——透明HBRUSH CClientDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH   hBrush   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);   //  CTLCOLOR_BTN   Button control//按鈕//CTLCOLOR_DLG   Dialog box//對話方塊//CTLCOLOR_EDIT   Edit control//編輯框//CTLCOLOR_LISTBOX   List-box control//列表框//CTLCOLOR_MSGBOX   Message box//訊息框//CTLCOLOR_SCROLLBAR   Scroll-bar control//CTLCOLOR_STATIC   Static control//——這些控制項都能設定透明if(nCtlColor == CTLCOLOR_EDIT){pDC->SetBkMode(TRANSPARENT);   //設定透明pDC->SetTextColor(RGB(255, 0, 255));  // 設定文本顏色 return   (HBRUSH)::GetStockObject(NULL_BRUSH);   }return hBrush;

編輯框重影:

添加訊息框的事件處理函數OnEnChange,

//方法1CRect rtlbl;GetDlgItem(IDC_EPort)->GetWindowRect(&rtlbl);ScreenToClient(&rtlbl); //轉到用戶端介面InvalidateRect(&rtlbl);//重新整理對話方塊背景////方法二GetDlgItem(IDC_EPort)->GetParent()->RedrawWindow();//會閃動

exe表徵圖:

如果資源裡的表徵圖有多個,exe會自動選擇較小的作為自己的表徵圖。

在表單的建構函式中修改表徵圖名即可

m_hIcon = AfxGetApp()->LoadIcon(AFX_IDI_STD_MDIFRAME);//資源裡添加的表徵圖名

托盤程式:

#define WM_USER_NOTIFYICON WM_USER+1//可以隨意定義個private: NOTIFYICONDATA m_notify;//添加托盤類對象afx_msg LRESULT CClientDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam);//設定托盤表徵圖afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM IParam);//響應滑鼠函數,單擊表徵圖顯示程式

設定對象

m_notify.cbSize=sizeof NOTIFYICONDATA;m_notify.hWnd=this->m_hWnd;//控制代碼m_notify.uID=AFX_IDI_STD_MDIFRAME;//托盤表徵圖m_notify.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(AFX_IDI_STD_MDIFRAME));strcpy(m_notify.szTip,"侯颯颯托盤程式測試");//托盤的提醒內容m_notify.uCallbackMessage=WM_USER_NOTIFYICON;//m_notify.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;  Shell_NotifyIcon(NIM_ADD,&m_notify);//顯示托盤

托盤的訊息處理

LRESULT CClientDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {switch(message) //判斷訊息類型{ case WM_USER_NOTIFYICON:  if(lParam==WM_LBUTTONDBLCLK){ //滑鼠雙擊,主視窗出現 if(AfxGetApp()->m_pMainWnd->IsWindowVisible()) //判斷視窗目前狀態{AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE); //隱藏視窗}else{AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW); //顯示視窗}} else if(lParam==WM_RBUTTONDOWN){ //滑鼠右鍵單擊彈出選單 CMenu menu; menu.LoadMenu(IDD_CLIENT_DIALOG); //載入事先定義的選單 CMenu *pMenu=menu.GetSubMenu(0); CPoint pos; GetCursorPos(&pos); pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,AfxGetMainWnd()); } break; case WM_SYSCOMMAND: //如果是系統訊息 if(wParam==SC_MINIMIZE){ //接收到最小化訊息時主視窗隱藏 AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE); return 0; } if(wParam==SC_CLOSE){::Shell_NotifyIcon(NIM_DELETE,&m_notify); //關閉時刪除系統托盤表徵圖}break;}return CDialog::WindowProc(message, wParam, lParam);}void CClientDlg::OnNotifyIcon(WPARAM wParam,LPARAM IParam)    {         if ((IParam == WM_LBUTTONDOWN) || (IParam == WM_RBUTTONDOWN))         {               ModifyStyleEx(0,WS_EX_TOPMOST);              ShowWindow(SW_SHOW);              Shell_NotifyIcon(NIM_DELETE, &m_notify);//消除托盤表徵圖         }    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.