VC自绘窗口WIN7中边框异常问题的解决方案
需要分两步操作
第一步:在窗口的OnCreate中添加以下代码
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; // 下面一段代码就是用来去掉WIN7或者WIN8旁边的透明边框 HINSTANCE hInst = LoadLibrary(_T("UxTheme.dll")); if (hInst) { typedef HRESULT (WINAPI *PFUN_SetWindowTheme)(HWND, LPCTSTR, LPCTSTR); PFUN_SetWindowTheme pFun = (PFUN_SetWindowTheme)GetProcAddress(hInst, "SetWindowTheme"); if (pFun) { pFun(m_hWnd, _T(""), _T("")); //去掉xp主题 } FreeLibrary(hInst); } hInst = LoadLibrary(_T("dwmapi.dll")); if (hInst) { typedef HRESULT (WINAPI * TmpFun)(HWND,DWORD,LPCVOID,DWORD); TmpFun DwmSetWindowAttributeEX = (TmpFun)::GetProcAddress(hInst, "DwmSetWindowAttribute"); if (DwmSetWindowAttributeEX) { DWORD dwAttr = 1; DwmSetWindowAttributeEX(GetSafeHwnd(), 2, &dwAttr, 4); //去掉vista或win7特效 } FreeLibrary(hInst); } return 0; }
第二步:响应WM_NCACTIVATE消息
BOOL CMainFrame::OnNcActivate(BOOL bActive) { // 这里直接返回TRUE,避免每次激活时重画边框 return TRUE; }

浙公网安备 33010602011771号