交织如何去掉CMainframe系统标题栏
西双版纳旅游攻略必去景点1、首先在xxxApp文件中的InitInstance()
// 初始化窗体
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
InitCtrls.dwICC = ICC_WIN95_CLASSES;
// 注册窗口
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
// 创建主窗口
CMainFrame* pFrame = new CMainFrame;
if (!pFrame)
官宣的文案return FALSE;
CRect rect;
::SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0);
rect.left *= 0.8;
我为什么而活着作文rect.right *= 0.8;
p *= 0.9;
rect.bottom *= 0.9;
pFrame->CreateEx(0, _T("xxxx"), _T("xxxx"), WS_OVERLAPPEDWINDOW, rect, NULL, NULL);
m_pMainWnd = pFrame;
pFrame->ShowWindow(SW_SHOW);
pFrame->CenterWindow();
pFrame->UpdateWindow();
pFrame->MaxSize();
pFrame->BringWindowToTop();
2、在CMainFrame中添加PreCreateWindow
设置窗体属性
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CAsbCtrlContainer::PreCreateWindow(cs) )
return FALSE;
WNDCLASS wndcls;
ZeroMemory(&wndcls, sizeof(wndcls));
wndcls.style = CS_DBLCLKS;
wndcls.lpfnWndProc = ::DefWindowProc;
wndcls.hInstance = AfxGetInstanceHandle();
wndcls.hCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
wndcls.lpszClassName = cs.lpszClass;
wndcls.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
wndcls.hbrBackground = 0;
AfxRegisterClass(&wndcls);
return TRUE;
}
3、在OnCreate中设置窗口模式
ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED);
4、在OnSize中,创建其它控件之前要先判断窗体是否创建成功
if ( m_wndDeviceInfo.GetSafeHwnd() != NULL &&
m_wndTitleBar.GetSafeHwnd() != NULL &&
m_wndStatusBar.GetSafeHwnd() != NULL &&
m_wndMainView.GetSafeHwnd() !=NULL )
{
CRect rcClient;
GetClientRect(rcClient);
if (rcClient.IsRectEmpty())
return;
....................
....................
取乎其上}
完成这几步后就可以去掉系统标题栏,不管放大还是缩小,系统标题栏都不会出现
但是,会发现窗口外面有一层白色的框框,现在来去掉白色框框
5、在PreCreateWindow函数设置了一个窗口消息
颐和园
wndcls.lpfnWndProc = ::DefWindowProc;
利用在这个消息可以去掉白色边框
在CMainFrame添加虚函数
virtual LRESULT DefWindowProc( UINT message, WPARAM wParam, LPARAM lParam );
LRESULT CMainFrame::DefWindowProc( UINT message, WPARAM wParam, LPARAM lParam )
{
LRESULT lrst=CAsbCtrlContainer::DefWindowProc(message, wParam, lParam);
责任成本if (!::IsWindow(m_hWnd))
return lrst;
if (message==WM_MOVE||message==WM_PAINT||message==WM_NCPAINT||message==WM_NCACTIVATE ||message == WM_NOTIFY)
{
//如果已经最大化,则不再需要绘制边框,以免挡住了图标。
CRect rtWnd,rect;
GetWindowRect(&rtWnd);
::SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0);
if (rtWnd.Height() == rect.Height())
{
return lrst;
}
CDC* pWinDC = GetWindowDC();
if (pWinDC)
DrawBorder(pWinDC);
ReleaDC(pWinDC);
//InvalidateRect(NULL);
}
return lrst;
}
素描人物画6、然后在DrawBorder(pWinDC);中把边框用颜色填充