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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97