Windows界面编程:半透明窗体(一)

2013-09-24 09:25:42 · 作者: · 浏览: 603

  上一篇介绍了通过WM_CTLCOLORDLG消息来来设置对话框的背景以及位图画刷的使用。本篇将介绍动态调节窗体透明度的方法。

  调节窗体透明度可以先使用SetWindowLong为窗体加上WS_EX_LAYERED属性,再使用来SetLayeredWindowAttributes指定窗体的透明度。这样就可以在程序运行时动态的调节窗体的透明度了。

  下面先介绍下SetWindowLong和SetLayeredWindowAttributes函数。

  SetWindowLong可以用来设置窗口的一些属性,其函数原型如下:

  LONGSetWindowLong(

  HWNDhWnd,

  int nIndex,

  LONGdwNewLong

  );

  第一个参数表示窗口句柄。

  第二个参数代表要设置的哪一种值,如GWL_STYLE表示将设置窗口的风格,这个参数还可以取GWL_EXSTYLE,GWL_WNDPROC,DWL_DLGPROC,GWL_HINSTANCE,GWL_USERDATA等等。

  第三个参数表示要设置的值。

  比如要设置对话框也能够可调节窗口大小,可以用:

  // 设置对话框大小可调节

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

  SetLayeredWindowAttributes在MSDN上解释如下:

  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_HSCROLL或WM_VSCROLL来响应消息。

  下面给出完整的源代码(下载地址:http://download.csdn.net/download/morewindows/4947386)