乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      對話框動態(tài)控件的創(chuàng)建

       君王之王 2015-12-03

      [ MFC ] 


      1 MFC對話框之上的動態(tài)控件的創(chuàng)建

      在對話框上的控件是MFC類的一個具體對象,其對應(yīng)的變量內(nèi)包含了類的數(shù)據(jù)成員和函數(shù)成員。當在對話框之上使用靜態(tài)控件時,可以根據(jù)類向?qū)頌槊總€控件添加消息、響應(yīng)函數(shù)以及變量。當需要在對話框中動態(tài)的創(chuàng)建某個控件時,就需要手動為動態(tài)控件添加消息、響應(yīng)函數(shù)及變量,即是手動來代替類向?qū)А?br>


      動態(tài)創(chuàng)建控件時,可按照以下步驟進行:

      (1) 明確控件所屬于的類

      每一個控件都對應(yīng)著一個類,如按鈕Button所屬于的類為CButton。在程序中我們需要用CButton類創(chuàng)建一個具體的按鈕對象,并用函數(shù)指示它在對話框之上的位置及大小。由于指針的眾多好處,可用一個CButton *類型的變量來管理所創(chuàng)建的按鈕。但要謹慎使用指針變量,防止內(nèi)存泄露,野指針。


      (2) 確定控件的ID號

      在對話框中的每一個控件都有一個獨一無二的ID號。當用控件類來創(chuàng)建具體的控件對象時也需要這個ID來作為標識。ID號其實是一個宏,為了控件ID的有序性,可以到VS2012“資源管理器”下的String Table下為每一個控件定義ID值。這些ID號會自動的被保存到Resource.h文件中形成宏。


      (3) 動態(tài)創(chuàng)建控件的一般流程

      在明確了控件類和其ID號之后,就可以在合適的函數(shù)內(nèi)編寫動態(tài)創(chuàng)建控件的代碼。動態(tài)生成按鈕(Button)、文本框(Staic Text)、編輯框(Edit Control)、聯(lián)合框(Combo Box)等控件的流程可表述如下(以創(chuàng)建文本框為例筆記):

      1. //動態(tài)創(chuàng)建一個靜態(tài)文本框  
      2. CStatic *CMFCDialogDlg::CreateOneStatic(LPCTSTR str, CRect Coord, UINT IDC)  
      3. {  
      4.         CStatic *pStatic = NULL;  
      5.       
      6.         pStatic = new CStatic;  
      7.         ASSERT_VALID(pStatic);  
      8.         pStatic->Create(str,  WS_CHILD|WS_VISIBLE|SS_CENTER, Coord, this, IDC);  
      9.   
      10.         return pStatic;  
      11. }  

      以上是創(chuàng)建一個文本框的函數(shù)。首先明確文本框類為CStatic,然后用C++的動態(tài)分配函數(shù)分配一個文本框?qū)ο?,最后利用文本此對象的Create函數(shù)將對象按照指定風(fēng)格(標題str,文本框顯示外表,坐標,ID號)顯示在對話框之上。最后將創(chuàng)建的控件地址返回給調(diào)用函數(shù)以管理。動態(tài)創(chuàng)建控件的核心就是每個控件類的對象中的create函數(shù),不同的控件類的create函數(shù)需要的參數(shù)可能不同。當需要釋放創(chuàng)建的動態(tài)按鈕時,用delete語句釋放動態(tài)按鈕的地址即可(這也屬于new-delete動態(tài)分配必須的搭配),在對畫框之上創(chuàng)建的控件也會隨之消失。


      (4) 動態(tài)控件大小隨對話框比例變化

      利用控件內(nèi)的Create函數(shù)動態(tài)創(chuàng)建控件到對話框上時,可以不要將坐標都用常值。因為對話框窗口可以跟隨用戶的需要發(fā)生變化。MFC中指定了對話框大小發(fā)生變化的消息ON_WM_SIZE(),只要在ON_WM_SIZE()消息對應(yīng)的響應(yīng)函數(shù)OnSize()中獲取到大小變化后的對話框的尺寸大小,那么就能夠按照動態(tài)控件與對話框的比例來決定當前控件的大小了。這樣,動態(tài)控件也能夠跟隨對話框成比例的變化了。


      2 Picture Control控件顯示圖片

      在MFC中,CImage類中包含了載入圖片、繪制圖片到某區(qū)域的成員函數(shù)。而Picture  Control控件正是為CImage對象提供了一個平臺。也就是說經(jīng)CImage對象載入到內(nèi)存中的圖片可以在Picture Control控件之上繪制出來。所以,CImage類和Picture Control控件類可以搭配使用。


      (1) 準備Picture  Control控件

      直接切換到對話框文件下,往對話框中拖入一個PictureControl控件。記住其ID號。


      (2) Picture Control控件顯示圖片的代碼

      只從顯示圖片這個角度上說。Picture Control控件只是為圖片顯示提供了一個平臺,載入圖片及繪制圖片的操作都是由CImage對象的成員函數(shù)完成的,另外還會用到一些其它的常用函數(shù)。

      1. int cx, cy;  
      2. CImage  image;  
      3. CRect   rect;  
      4.       
      5. //根據(jù)路徑載入圖片  
      6. image.Load(_T("E:\\MyLibrayPhotoShop\\log.jpg"));  
      7. //獲取圖片的寬 高度  
      8. cx  = image.GetWidth();  
      9. cy  = image.GetHeight();  
      10.       
      11. //獲取Picture Control控件的大小  
      12. GetDlgItem(IDC_PICTURE)->GetWindowRect(&rect);  
      13. //將客戶區(qū)選中到控件表示的矩形區(qū)域內(nèi)  
      14. ScreenToClient(&rect);  
      15. //窗口移動到控件表示的區(qū)域  
      16. GetDlgItem(IDC_PICTURE)->MoveWindow(rect.left, rect.top, cx, cy, TRUE);  
      17. CWnd *pWnd = NULL;  
      18. pWnd    = GetDlgItem(IDC_PICTURE);//獲取控件句柄  
      19. pWnd->GetClientRect(&rect);//獲取句柄指向控件區(qū)域的大小  
      20.       
      21. CDC *pDc = NULL;  
      22. pDc = pWnd->GetDC();//獲取picture的DC  
      23.       
      24. image.Draw(pDc->m_hDC, rect);//將圖片繪制到picture表示的區(qū)域內(nèi)  
      25.       
      26. ReleaseDC(pDc);  

      讀這段代碼。

      [1] CImage內(nèi)的Load方法將指定路徑下的圖片載入,然后在利用其內(nèi)的GetWidth和GetHeight方法獲取到圖片的寬度和高度。

      [2] GetDlgItem通過PictureControl控件的ID獲取到它的句柄后調(diào)用Picture Control中的GetWindRect方法來獲取它本身在對話框中所占用的范圍。然后利用ScreenToClient方法將客戶區(qū)轉(zhuǎn)到Picture Control內(nèi),目的是利用Picture Control內(nèi)的MoveWindow方法重新設(shè)置Picture Control控件在對話框上所占的位置,是它適應(yīng)圖片的大小。

      [3] 再重新設(shè)獲取picture Control在對話框中占用的面積。用pDc來管理Picture Control中的DC。然后CImage的Draw方法就可以利用獲取的參數(shù)在rect區(qū)域繪制圖片了。


      程序運行如下:

      如果程序需要多次運行以上代碼時才能夠準確的顯示圖片,那么可以先一次性(如在OnInitDialog()函數(shù)中)載入圖片。然后在OnPaint()函數(shù)中編寫繪制圖片的函數(shù),讓它得到多次運行。

      MFC Note Over.

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多