读书人

窗体下覆盖一个窗体

发布时间: 2012-09-10 11:02:32 作者: rapoo

窗体上覆盖一个窗体
需求是这样:有一个窗体A ,在它加载东西时,为了防止对它操作,现在要求我弄一个半透明的窗体B 覆盖在 A 的上面。


该怎么实现?


[解决办法]

探讨
需求是这样:有一个窗体A ,在它加载东西时,为了防止对它操作,

[解决办法]

设置半透明在弹出的窗体OnInitDialog中加入下面代码即可
SetWindowLong(m_hWnd,GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
SetLayeredWindowAttributes(0,100,2);
[解决办法]
弹出一个窗体的代码:
RECT rect;
GetClientRect(&rect);

dlgLoading = new CLoading();
dlgLoading->Create(IDD_DIALOG2, this);
dlgLoading->MoveWindow(0, 0, rect.right-rect.left, rect.bottom-rect.top);
[解决办法]
SetLayerWindowAttribute在MSDN里面这没有,要想调用这个函数,你得这样:
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary("User32.DLL");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//取得SetLayeredWindowAttributes函数指针
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun)fun(this->m_hWnd,0,220,2);
FreeLibrary(hInst);
}

读书人网 >VC/MFC

热点推荐