• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • MFC屏幕標記之透明窗體

    發表于:2013-06-21來源:Csdn作者:terrycanny點擊數: 標簽:軟件測試
    經過查閱資料,要實現屏幕標記,了解到兩種辦法:一種是通過對當前屏幕進行截圖,然后對截圖進行相關的標記來實現對當前屏幕的標記;而另外一種則是通過建立一個透明的窗體,將窗體進行置頂,然后對這個透明的窗體進行標記操作,從而實現對當前屏幕的標記。下

      經過查閱資料,要實現屏幕標記,了解到兩種辦法:一種是通過對當前屏幕進行截圖,然后對截圖進行相關的標記來實現對當前屏幕的標記;而另外一種則是通過建立一個透明的窗體,將窗體進行置頂,然后對這個透明的窗體進行標記操作,從而實現對當前屏幕的標記。下面要講的就是第二種方法的實現:

      首先是建立一個MFC對話框程序,然后要將這個窗口透明,實現方法如下:

      [cpp] view plaincopyprint?

      //點擊按鈕實現窗口透明函數

      void CScreenMarkerDlg::OnButtonTransparent()

      {

      HINSTANCE hInst = GetModuleHandle("User32.dll");

      if (hInst)

      {

      //獲取模塊里的函數

      BOOL (WINAPI *SetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD)=

      (BOOL (WINAPI*) (HWND,COLORREF,BYTE,DWORD))GetProcAddress(hInst,"SetLayeredWindowAttributes");

      //函數指針正確獲取

      if(SetLayeredWindowAttributes)

      {

      //讓窗口具透明的特性

      ::SetWindowLong(m_hWnd,GWL_EXSTYLE, GetWindowLong(m_hWnd,GWL_EXSTYLE)|WS_EX_LAYERED);

      //設置窗口透明。第4參數為1時,第二個參數是被透明的顏色

      SetLayeredWindowAttributes(m_hWnd,GetSysColor(COLOR_3DFACE),0,0x1);

      }

      FreeLibrary(hInst); //釋放調模塊句柄

      }

      }

      //點擊按鈕實現窗口透明函數

      void CScreenMarkerDlg::OnButtonTransparent()

      {

      HINSTANCE hInst = GetModuleHandle("User32.dll");

      if (hInst)

      {

      //獲取模塊里的函數

      BOOL (WINAPI *SetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD)=

      (BOOL (WINAPI*) (HWND,COLORREF,BYTE,DWORD))GetProcAddress(hInst,"SetLayeredWindowAttributes");

      //函數指針正確獲取

      if(SetLayeredWindowAttributes)

      {

      //讓窗口具透明的特性

      ::SetWindowLong(m_hWnd,GWL_EXSTYLE, GetWindowLong(m_hWnd,GWL_EXSTYLE)|WS_EX_LAYERED);

      //設置窗口透明。第4參數為1時,第二個參數是被透明的顏色

      SetLayeredWindowAttributes(m_hWnd,GetSysColor(COLOR_3DFACE),0,0x1);

      }

      FreeLibrary(hInst); //釋放調模塊句柄

      }

      }

      1.獲得SetLayeredWindowAttributes()函數

      該函數是Windows 2000新增的一個API函數,它所在的模塊為USER32.DLL。在用GetModuleHandle()裝載USER32.DLL模塊并調用GetProcAddress()得到函數 SetLayeredWindowAttributes()在User32.dll中的指針后就可以通過SetLayeredWindowAttributes()函數將窗體設置為透明了。

      2.賦予窗口透明特性

      要使使窗體擁有透明效果,首先要有WS_EX_LAYERED(舊的sdk沒有定義WS_EX_LAYERED,開頭加#define WS_EX_LAYERED 0x00080000即可)擴展屬性,方法是先聲明GetWindowLong和SetWindowLong

      3.透明窗口函數使用

      SetLayeredWindowAttributes(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags)

      hwnd:透明窗口的句柄

      crKey:顏色值,可用RGB來表示

      bAlpha:透明度,取值為0到255

      dwFlags:透明方式,取值又三種情況(LWA_ALPHA = 0x2,LWA_COLORKEY=0x1):

      當取值為LWA_ALPHA時,crKey參數無效,bAlpha參數有效;

      當取值為LWA_COLORKEY時,窗體中的所有顏色為crKey的地方將變為透明,bAlpha參數無效。

      當取兩個值的組合:LWA_ALPHA | LWA_COLORKEY,顏色值為crKey的地方將變為全透明,而其它地方根據bAlpha參數的數值確定透明度。

      4.使用舉例:

      SetLayeredWindowAttributes(m_hWnd, 0, 200, 0x2)即創建的窗體透明度為200;

      SetLayeredWindowAttributes(m_hWnd, GetSysColor(COLOR_3DFACE), 0, 0x1)即建立窗口上為系統顏色的地方為全透明;

      SetLayeredWindowAttributes(m_hWnd, RGB(255,0,0), 80, 0x1 | 0x2)即顏色為RGB(255,0,0)

    原文轉自:http://blog.csdn.net/terrycanny/article/details/8168307

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>