天天看點

MFC圖檔控件-加載位圖以及添加消息響應

1.    在類向導中添加類Picture1,以CStatic為基類。(建立類以便添加消息響應,若隻是主對話框的一個對象,隻能添加幾個有限的消息,無右鍵點選,滑鼠懸停等) 2. 為圖檔控件添加變量,先修改ID,由IDC_STATIC改為IDC_PIC_STATIC(不改加不了變量),變量類型改為Picture,變量名m_Pic1。控件屬性中的Notify設定為true(預設false,觸發事件不會傳入父視窗)。

3.    在資源視圖中導入位圖IDB_BITMAP1             

MFC圖檔控件-加載位圖以及添加消息響應

4.    加載位圖(寫在程式需要加載的地方,例如點選按鈕)               CBitmap bitmap1;                                                      // CBitmap對象,用于加載位圖  

         HBITMAP hBmp1;                                                    // 儲存CBitmap加載的位圖的句柄            bitmap1.LoadBitmap(IDB_BITMAP1);                      // 将位圖IDB_BITMAP1加載到bitmap  

         hBmp1 = (HBITMAP)bitmap1.GetSafeHandle();      // 擷取bitmap加載位圖的句柄  

         m_Pic1.SetBitmap(hBmp1);                                    // 設定圖檔控件m_jzmPicture的位圖圖檔為IDB_BITMAP1  

       若為靜态文本框,加載位圖需要多一行代碼

          CBitmap bitmap2;                                                     

          HBITMAP hBmp2;             m_Pic2.ModifyStyle(0, SS_BITMAP); //修改樣式為位圖

         bitmap2.LoadBitmap(IDB_BITMAP2);

         hBmp2 = (HBITMAP)bitmap2.GetSafeHandle();  

         m_Pic2.SetBitmap(hBmp2); 5.    添加消息響應         (1)右鍵控件彈出菜單:                  在類向導中選擇類Picture1,添加OnRButtonDown消息                 

MFC圖檔控件-加載位圖以及添加消息響應

                先建一個菜單 IDR_MENU1,注意菜單要有兩級,父級菜單不會顯示,是以把要顯示的菜單項都寫在子級菜單中。                 處理程式代碼如下:                 void Picture1::OnRButtonDown(UINT nFlags, CPoint point)

                {

                 // TODO: 在此添加消息處理程式代碼和/或調用預設值

                 CMenu menu; //定義下面要用到的cmenu對象

                 menu.LoadMenu(IDR_MENU1); //裝載自定義的右鍵菜單

                 CMenu *pPopup = menu.GetSubMenu(0); //擷取第一個彈出菜單,是以第一個菜單必須有子菜單                  CPoint point1;//定義一個用于确定光标位置的位置

                 GetCursorPos(&point1);//擷取目前光标的位置,以便使得菜單可以跟随光标                  pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point1.x, point1.y, GetParent());//在指定                      位置顯示彈出菜單

                 CStatic::OnRButtonDown(nFlags, point);

                }          (2)滑鼠懸停                   添加消息OnMouseMove。(若用OnMouseHover沒有反應)