利用SetLayeredWindowAttribute()可以使窗口半透明,但是例程用的都是对话框。而我想脱离对话框模板,用纯代码让一个更通用的窗口实现半透明,该怎么做?
试过直接实例化 CWnd,用了AfxRegisterWndClass()和CWnd::Create(),但是只能显示一个窗口的框架,中间部分是空的,而且框架也没有半透明效果。
试过直接实例化 CWnd,用了AfxRegisterWndClass()和CWnd::Create(),但是只能显示一个窗口的框架,中间部分是空的,而且框架也没有半透明效果。
CString szWnd=AfxRegisterWndClass(NULL);
m_wnd.Create(szWnd,"bingo",WS_VISIBLE|WS_CAPTION|WS_SYSMENU
|WS_OVERLAPPED,CRect(0,0,100,100),this,10006);
SetWindowLong(m_wnd.GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(m_wnd.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(m_wnd.GetSafeHwnd(),0,192,2);
FreeLibrary(hInst);
}
但是得到的窗口无法实现半透明,而是只有一个不透明的边框。我试过用对话框或者CFrameWnd都显示正常,不知道直接用 CWnd 还少做了什么事情。
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
} if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
} // TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar); 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->GetSafeHwnd() ,0,192,2);
FreeLibrary(hInst);
}
return 0;
}我用你的代码测试的 改动了句柄 其它的没有变 测试可以实现