日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC半透明窗体

發布時間:2024/4/11 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC半透明窗体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Windows界面編程第二篇 半透明窗體

分類: Windows編程 Windows界面編程 9280人閱讀 評論(10)收藏舉報 SetLayeredWindowAttrWindows界面編程WS_EX_LAYERED半透明窗口透明度調節

Windows界面編程第二篇半透明窗體

??? 上一篇《Windows界面編程第一篇 位圖背景與位圖畫刷》介紹了通過WM_CTLCOLORDLG消息來來設置對話框的背景以及位圖畫刷的使用。本篇將介紹動態調節窗體透明度的方法。

??? 調節窗體透明度可以先使用SetWindowLong為窗體加上WS_EX_LAYERED屬性,再使用來SetLayeredWindowAttributes指定窗體的透明度。這樣就可以在程序運行時動態的調節窗體的透明度了。

??? 下面先介紹下SetWindowLongSetLayeredWindowAttributes函數。

SetWindowLong可以用來設置窗口的一些屬性,其函數原型如下:

LONGSetWindowLong(

??? HWNDhWnd,

??? intnIndex,

??? LONGdwNewLong

);

第一個參數表示窗口句柄。

第二個參數代表要設置的哪一種值,如GWL_STYLE表示將設置窗口的風格,這個參數還可以取GWL_EXSTYLEGWL_WNDPROCDWL_DLGPROCGWL_HINSTANCEGWL_USERDATA等等。

第三個參數表示要設置的值。

比如要設置對話框也能夠可調節窗口大小,可以用:

?//設置對話框大小可調節

SetWindowLong(hDlg,GWL_STYLE,GetWindowLong(hDlg,GWL_STYLE) |WS_SIZEBOX);

?

SetLayeredWindowAttributesMSDN上解釋如下:

The SetLayeredWindowAttributes function sets the opacity and transparency color key of a layered window.

其函數原型為:

BOOLSetLayeredWindowAttributes(

??? HWNDhwnd,

??? COLORREFcrKey,

??? BYTEbAlpha,

??? DWORDdwFlags

);

第一個參數表示窗口句柄。

第二個參數表示透明色。

第三個參數表示透明度。

第四個參數表示函數將完成什么樣的功能,設置成LWA_COLORKEY表示為窗口指定了透明色,設置成LWA_ALPHA表示將調整窗口的透明度,可以同時設置這兩種功能。

?

程序代碼還將用到Slider控件,這種控件可以有如下操作:

1.通過SendMessage+TBM_SETRANGE來設置滑塊變化的范圍。

2.通過SendMessage+TBM_SETPOS來設置滑塊當前位置。

3.通過SendMessage+TBM_GETPOS來獲得滑塊當前位置。

4.當滑塊位置發生變化時,在其父窗口中通過WM_HSCROLLWM_VSCROLL來響應消息。

?

下面給出完整的源代碼(下載地址:http://download.csdn.net/download/morewindows/4947386

[cpp] view plaincopy
  • //?可變透明度窗體?先加上WS_EX_LAYERED屬性再SetLayeredWindowAttributes設置透明度??
  • //By?MoreWindows-(http://blog.csdn.net/MoreWindows)??
  • #include?<windows.h>??
  • #include?<commctrl.h>??
  • #include?"resource.h"??
  • const?char?szDlgTitle[]?=?"可變透明度窗體?MoreWindows-(http://blog.csdn.net/MoreWindows)";??
  • //?對話框消息處理函數??
  • BOOL?CALLBACK?DlgProc(HWND?hDlg,?UINT?message,?WPARAM?wParam,?LPARAM?lParam);??
  • ??
  • int?APIENTRY?WinMain(HINSTANCE?hInstance,??
  • ?????????????????????HINSTANCE?hPrevInstance,??
  • ?????????????????????LPSTR?????lpCmdLine,??
  • ?????????????????????int???????nCmdShow)??
  • {??
  • ????DialogBox(hInstance,?MAKEINTRESOURCE(IDD_DIALOG1),?NULL,?DlgProc);??
  • ????return?0;??
  • }??
  • ??
  • ??
  • BOOL?CALLBACK?DlgProc(HWND?hDlg,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)??
  • {??
  • ????const?int?INIT_TRANSPARENT?=?200;?//窗體初始透明度??
  • ????static?HBRUSH????s_hBitmapBrush;?//位圖畫刷??
  • ??
  • ????switch?(message)??
  • ????{??
  • ????case?WM_INITDIALOG:??
  • ????????//?設置對話框標題??
  • ????????SetWindowText(hDlg,?szDlgTitle);??
  • ??
  • ????????//?加載背影圖片??
  • ????????HBITMAP?hBitmap;??
  • ????????hBitmap?=?(HBITMAP)LoadImage(NULL,?"005.bmp",?IMAGE_BITMAP,?0,?0,?LR_LOADFROMFILE?|?LR_CREATEDIBSECTION);??
  • ????????if?(hBitmap?==?NULL)??
  • ????????{??
  • ????????????MessageBox(hDlg,?"LoadImage?failed",?"Error",?MB_ICONERROR);??
  • ????????????exit(0);??
  • ????????}?????????
  • ??
  • ????????//?創建位圖畫刷??
  • ????????s_hBitmapBrush?=?CreatePatternBrush(hBitmap);??
  • ??
  • ????????//?設置分層屬性??
  • ????????SetWindowLong(hDlg,?GWL_EXSTYLE,?GetWindowLong(hDlg,?GWL_EXSTYLE)?|?WS_EX_LAYERED);??
  • ????????//?設置透明度?0?-?completely?transparent???255?-?opaque??
  • ????????SetLayeredWindowAttributes(hDlg,?0,?INIT_TRANSPARENT,?LWA_ALPHA);??
  • ??
  • ????????//?設置滑動條變化范圍??
  • ????????SendMessage(GetDlgItem(hDlg,?IDC_SLIDER_TRANSPARENT),?TBM_SETRANGE,?(WPARAM)FALSE,?MAKELONG(0,?255));??
  • ????????//?設置滑塊初始位置??
  • ????????SendMessage(GetDlgItem(hDlg,?IDC_SLIDER_TRANSPARENT),?TBM_SETPOS,?(WPARAM)TRUE,?INIT_TRANSPARENT);??
  • ????????return?0;??
  • ??
  • ??
  • ????case?WM_COMMAND:??
  • ????????switch?(LOWORD(wParam))??
  • ????????{??
  • ????????case?IDCANCEL:??
  • ????????????DeleteObject(s_hBitmapBrush);??
  • ????????????EndDialog(hDlg,?LOWORD(wParam));??
  • ????????????return?TRUE;??
  • ????????}??
  • ????????break;??
  • ??
  • ??
  • ????case?WM_HSCROLL:?//?slider?control?滑塊位置有變化時的響應函數??
  • ????????{??
  • ????????????//?獲取當前滑塊位置??
  • ????????????int?nTransparent?=?SendMessage(GetDlgItem(hDlg,?IDC_SLIDER_TRANSPARENT),?TBM_GETPOS,?0,?0);???
  • ????????????//?設置新透明度??
  • ????????????SetLayeredWindowAttributes(hDlg,?0,?nTransparent,?LWA_ALPHA);??
  • ????????}??
  • ????????break;??
  • ??
  • ??
  • ????case?WM_CTLCOLORDLG:??//對話框背影??
  • ????????return?(BOOL)s_hBitmapBrush;??
  • ????}??
  • ????return?FALSE;??
  • }??
  • 運行結果如下:

    ?

    在本篇文章中我們通過SetWindowLong為窗體加上WS_EX_LAYERED屬性,再使用SetLayeredWindowAttributes完成窗體的透明度調節。下面兩篇也將使用這兩個函數來完成另一個功能——異形窗口(異形窗體)。異形窗口可以使得窗口更加美觀,它能靈活的變動窗口的形狀。歡迎繼續瀏覽《Windows界面編程 第三篇異形窗體 普通版》和《Windows界面編程 第四篇異形窗體 高富帥版》

    ?

    ?

    本文配套程序下載地址為:hhttp://download.csdn.net/download/morewindows/4947386

    轉載請標明出處,原文地址:http://blog.csdn.net/morewindows/article/details/8451632

    歡迎關注微博:http://weibo.com/MoreWindows

    ?

    總結

    以上是生活随笔為你收集整理的VC半透明窗体的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。