代码如下:
BOOL CModellessDlg::PreCreateWindow(CREATESTRUCT& cs) 
{
cs.dwExStyle = cs.dwExStyle | WS_EX_TOPMOST;
cs.style = cs.style&~WS_CAPTION;

return CDialog::PreCreateWindow(cs);
}
而PreCreateWindow在创建MDI的程序中是有效的呀

解决方案 »

  1.   

    对话框类不会调用PreCreateWindow
      

  2.   

    为什么不能调用,如果我要修改基于CDialog类的窗体的风格,那该怎么办?
      

  3.   

    如果我只是为了   选择风格而已的话,我也就不再会动此PreCreateWindow函数了,问题是,既然它提供了此虚拟函数,我为何修改后会无效呢?如果我要作一个不要标题栏,但是能通过拖动边框而能改变大小的窗体,那该如何办?
      

  4.   

    PreCreateWindow是一般窗口用来注册窗口类用的。对话框的窗口类是己经注册过的(类名为#32770),所有对话框类不用调用PreCreateWindow.作一个不要标题栏的窗口,只要去掉WS_CPATION属性就行了。
      

  5.   

    BOOL ModifyStyle( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 );
    BOOL ModifyStyleEx( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 );
    试试这两个函数!
      

  6.   

    还是不行,我是在WM_CREATE消息函数里面来处理的,代码如下:
    int CPutPictureDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (CDialog::OnCreate(lpCreateStruct) == -1)
    return -1;

    ModifyStyle(WS_CAPTION,WS_POPUP);
    return 0;
    }
      

  7.   

    WS_EX_TOPMOST在窗口创建之后不能直接用SetWindowLong等来改变,只能用SetWindowPos;
    创建对话框窗口不会调用PreCreateWindow,只能在创建之后修改窗口风格。
    要得到你要的效果,可以在OnInitDialog里加入这两行:ModifyStyle(WS_CAPTION, 0);
    SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_DRAWFRAME|SWP_NOMOVE|SWP_NOSIZE);
      

  8.   

    在OnInitDialog中加入下面的代码
    //除去标题栏和边框
    SetWindowLongPtr(m_hWnd, GWL_STYLE, 
    GetWindowLongPtr(m_hWnd, GWL_STYLE) & 
    (~(WS_CAPTION | WS_BORDER)));