none
CWnd创建的窗口为什么不能去除标题栏 RRS feed

  • 问题

  • 我在win7下用vs2010测试了一个简单项目,代码如下。为什么在create的时候已经没有用ws_caption了,却还有标题栏

    ////////Hello.h文件//////// class CMyApp : public CWinApp { public: virtual BOOL InitInstance (); }; class CMainWindow : public CFrameWnd { public: CMainWindow (); DECLARE_MESSAGE_MAP(); }; ////////Hello.cpp文件//////// #include <afxwin.h> #include "Hello.h" #include "Math.h" CMyApp myApp; ///////////////////////////////////////////////////////////////////////// // CMyApp member functions BOOL CMyApp::InitInstance () { m_pMainWnd = new CMainWindow; m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow (); return true; } ///////////////////////////////////////////////////////////////////////// // CMainWindow message map and member functions BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd) END_MESSAGE_MAP () CMainWindow::CMainWindow () { Create (NULL, _T ("The Hello Application"),WS_VISIBLE|WS_HSCROLL|WS_VSCROLL);

    }


    希望大家帮帮忙,谢谢了
    • 已编辑 FunnyLeo 2012年4月11日 6:02
    2012年4月10日 15:02

答案

  • 这样写窗口风格试试WS_VISIBLE|WS_POPUP

    新浪微博http://weibo.com/xianglitian,欢迎围观

    • 已建议为答案 Helen Zhao 2012年4月13日 7:57
    • 已标记为答案 Helen Zhao 2012年4月18日 1:44
    2012年4月11日 0:34
  • 在CMainWindow::CMainWindow函数就是窗口创建前的函数,调用Create才是创建窗口吧。要窗口显示前修改好窗口可以去除WS_VISIBLE标记,等修改好窗口风格后调用ShowWindow(SW_SHOW)显示窗口。
    • 已建议为答案 Helen Zhao 2012年4月13日 7:57
    • 已标记为答案 Helen Zhao 2012年4月18日 1:44
    2012年4月11日 6:35
  • 把CMainWindow::CMainWindow ()这个函数修改如下所示:
    CMainWindow::CMainWindow ()
    {
     VERIFY(Create (NULL, _T ("The Hello Application"), WS_VISIBLE|WS_HSCROLL|WS_VSCROLL));
     m_nNextChar = 0;
     VERIFY(ModifyStyle(WS_CAPTION, 0));
     VERIFY(SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOZORDER | SWP_NOSIZE | SWP_FRAMECHANGED));
    }


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已建议为答案 Helen Zhao 2012年4月13日 7:57
    • 已标记为答案 Helen Zhao 2012年4月18日 1:44
    2012年4月11日 2:02
    版主

全部回复

  • 这样写窗口风格试试WS_VISIBLE|WS_POPUP

    新浪微博http://weibo.com/xianglitian,欢迎围观

    • 已建议为答案 Helen Zhao 2012年4月13日 7:57
    • 已标记为答案 Helen Zhao 2012年4月18日 1:44
    2012年4月11日 0:34
  • 把CMainWindow::CMainWindow ()这个函数修改如下所示:
    CMainWindow::CMainWindow ()
    {
     VERIFY(Create (NULL, _T ("The Hello Application"), WS_VISIBLE|WS_HSCROLL|WS_VSCROLL));
     m_nNextChar = 0;
     VERIFY(ModifyStyle(WS_CAPTION, 0));
     VERIFY(SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOZORDER | SWP_NOSIZE | SWP_FRAMECHANGED));
    }


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已建议为答案 Helen Zhao 2012年4月13日 7:57
    • 已标记为答案 Helen Zhao 2012年4月18日 1:44
    2012年4月11日 2:02
    版主
  • 这个方法可以,但WS_POPUP风格的窗口无法通过GetWindowRgn获取窗体区域,重载非客户区有些麻烦,看来是没什么特别好的办法了,谢谢
    2012年4月11日 6:15
  • 谢谢,这样是可以,但我是想有没有办法在创建时就建立一个符合要求的无边框窗体,而不用通过后期修改。不过还是谢谢您
    2012年4月11日 6:16
  • 在CMainWindow::CMainWindow函数就是窗口创建前的函数,调用Create才是创建窗口吧。要窗口显示前修改好窗口可以去除WS_VISIBLE标记,等修改好窗口风格后调用ShowWindow(SW_SHOW)显示窗口。
    • 已建议为答案 Helen Zhao 2012年4月13日 7:57
    • 已标记为答案 Helen Zhao 2012年4月18日 1:44
    2012年4月11日 6:35
  • 谢谢,这个思路不错
    2012年4月11日 16:14