我使用SetLayeredWindowAttributes函数把窗口设置为半透明时,能看到效果,但是当我拖动窗口或在标题栏上单击左键后,窗口变为不透明,这是何故?我处理WM_NCLBUTTONUP消息时重新调用SetLayeredWindowAttributes也不见效果,我该怎么办?(编程环境:WinXP SP2/VC.net 2003/ATL 7.1/WTL 7.1)
解决方案 »
- MFC 程序调用C#的dll
- 在CAsyncSocket中实现多客户端中,当客户端断开连接后,服务端怎样才知道呢?
- VC里没有现成的String类型吗?
- 有没有办法取出视频中的一帧图像(wmv或者其他视频格式)显示在View中啊?
- vc环境使用一问
- 刚买WINDOWS网络编程(第二版),请教几个问题
- 特急:怎样用三个combo box共同控制一个对话框。
- 如何给工具档添个图案(without draw)
- 我有一台仪器输出线用IEC625-1标准,PC机并口线是IEEE488标准(仪器说明书上如下描述)请问:需要在这两者之间使用Adapter?
- 请问如何截获WINDOWS输入输出的数据包?
- 定时关机函数???
- 什么情况下需要设置代理服务器?
atlSetLayeredWindowAttributes(m_hWnd, 0, 128, 2);inline BOOL atlSetLayeredWindowAttributes(
HWND hwnd, // handle to the layered window
COLORREF crKey, // specifies the color key
BYTE bAlpha, // value for the blend function
DWORD dwFlags // action
)
{
if( AtlIsOldWindows() )
return FALSE; BOOL bRes = FALSE;
DWORD dwErrCode = 0; HINSTANCE hInst = LoadLibrary(_T("user32.dll"));
if(hInst!=NULL)
{
// Get Layered Window functions
typedef BOOL (WINAPI *SETLAYEREDWINDOWATTRIBUTES)(HWND, COLORREF, BYTE, DWORD);
SETLAYEREDWINDOWATTRIBUTES pSetLayeredWindowAttributes =
(SETLAYEREDWINDOWATTRIBUTES)::GetProcAddress( hInst, "SetLayeredWindowAttributes");
if( pSetLayeredWindowAttributes!=NULL )
{
// Set Extended Window Style WS_EX_LAYERED
LONG nExStyle = ::GetWindowLong(hwnd, GWL_EXSTYLE);
nExStyle |= WS_EX_LAYERED;
::SetWindowLong(hwnd, GWL_EXSTYLE, nExStyle); bRes = pSetLayeredWindowAttributes(hwnd, crKey, bAlpha, dwFlags);
}
if(!bRes)
dwErrCode = ::GetLastError();
FreeLibrary(hInst);
}
if(dwErrCode)
::SetLastError(dwErrCode);
return bRes;
}
关键是当时有效果,但是当我拖动窗口或在标题栏上单击左键后,窗口变为不透明,这是何故?