void CStockControlDlg::OnBnClickedButtonpricearea()
{
// TODO: 在此添加控件通知处理程序代码
price_area_flag = 1;
ShowWindow(SW_SHOWMAXIMIZED);
/* method1
//加入WS_EX_LAYERED扩展属性,以下用于对话框透明显示
BYTE byteAlpha = 150;
LONG nRet = ::GetWindowLong(m_hWnd, GWL_EXSTYLE);
nRet = nRet | WS_EX_LAYERED;
::SetWindowLong(m_hWnd, GWL_EXSTYLE, nRet);
SetLayeredWindowAttributes(nRet, byteAlpha,LWA_ALPHA );
*/
/* method 2
//加入WS_EX_LAYERED扩展属性,以下用于对话框透明显示
SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE) ^ 0x80000);
wchar_t Str[]=L"User32.DLL";
HINSTANCE hInst = LoadLibrary(Str);
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//取得SetLayeredWindowAttributes函数指针
fun = (MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if (fun)
{
fun(this->GetSafeHwnd(), RGB(100, 255, 0), 100, LWA_ALPHA);
//fun(m_hWnd, RGB(0, 0, 0), 200, 0x1 | 0x2);
}
FreeLibrary(hInst);
}
*/
{
// TODO: 在此添加控件通知处理程序代码
price_area_flag = 1;
ShowWindow(SW_SHOWMAXIMIZED);
/* method1
//加入WS_EX_LAYERED扩展属性,以下用于对话框透明显示
BYTE byteAlpha = 150;
LONG nRet = ::GetWindowLong(m_hWnd, GWL_EXSTYLE);
nRet = nRet | WS_EX_LAYERED;
::SetWindowLong(m_hWnd, GWL_EXSTYLE, nRet);
SetLayeredWindowAttributes(nRet, byteAlpha,LWA_ALPHA );
*/
/* method 2
//加入WS_EX_LAYERED扩展属性,以下用于对话框透明显示
SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE) ^ 0x80000);
wchar_t Str[]=L"User32.DLL";
HINSTANCE hInst = LoadLibrary(Str);
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//取得SetLayeredWindowAttributes函数指针
fun = (MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if (fun)
{
fun(this->GetSafeHwnd(), RGB(100, 255, 0), 100, LWA_ALPHA);
//fun(m_hWnd, RGB(0, 0, 0), 200, 0x1 | 0x2);
}
FreeLibrary(hInst);
}
*/
}
这是一个按钮控件消息,这两种写法都可以达到相同的效果,使窗口透明,但是问题是,窗口透明的同时也使得鼠标穿透到了下方的窗口,这是个讨厌的问题。
本文探讨了在MFC中如何实现窗口透明,同时指出透明窗口可能导致的鼠标穿透到下方窗口的问题,这是一个在实际应用中需要注意的细节。
632

被折叠的 条评论
为什么被折叠?



