MFC 移动并改变窗口大小、全屏窗口,去掉窗口边框、在桌面上画图(转)
1、改变窗口大小或全屏窗口可用下面的代码:
MoveWindow(hDlg,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),TRUE);
2、去掉窗口的边框可用下面的代码:
LONG nStyle= GetWindowLong( hDlg, GWL_STYLE); LONG newStyle= nStyle & (~(WS_CAPTION | WS_BORDER |WS_EX_CLIENTEDGE)); SetWindowLong( hDlg, GWL_STYLE, newStyle);
3、在桌面上画图(直线、圆之类),可仿写如下代码:
CWindowDC pDC(GetDesktopWindow()); CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); CBrush *pOldBrush=pDC.SelectObject(pBrush); pDC.Ellipse(CRect(fCx-fR, fCy-fR, fCx+fR,fCy+fR));
pDC.SelectObject(pOldBrush); ReleaseCapture();
需注意:3是在对话框里调用,如果在非对话框中调用CWindowDC pDC(GetDesktopWindow()),
则会提示GetDesktopWindow()无法转换成CWnd*的编译错误,再看GetDesktopWindow()的定义:
_AFXWIN_INLINE CWnd* PASCAL CWnd::GetDesktopWindow()
{ return CWnd::FromHandle(::GetDesktopWindow()); }
可见GetDesktopWindow()内部调用的是Cwnd的成员函数FromHandle,如果你调用GetDesktopWindow()的地方不再Cwnd或其派生类中,肯定编译不过,此时的解决办法是直接调用CWnd::FromHandle(::GetDesktopWindow())而不是GetDesktopWindow();也即:档你的代码不是在Cwnd及其派生类中时,需如下写:
CWindowDC pDC(CWnd::FromHandle(::GetDesktopWindow())); CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); CBrush *pOldBrush=pDC.SelectObject(pBrush); pDC.Ellipse(CRect(fCx-fR, fCy-fR, fCx+fR,fCy+fR)); pDC.SelectObject(pOldBrush); ReleaseCapture();
浙公网安备 33010602011771号