自绘Dialog的两个有关问题

自绘Dialog的两个问题
我自绘Dialog,在PreSubclassWindow中调用了ModifyStyle(WS_CAPTION,0),之后,标题栏确实没了,但是对话框下面却多出了点,多出的这些该怎么除掉,如果在编辑对话框,右键属性里面去掉Title Bar属性后,运行窗口大小和原来的一样大,而第一种则不一样,下面长处了点,多出的大小等于标题栏的大小,这个问题该如何处理,也就是说想不然他多出这么些个东西,该如何处理呢

------解决方案--------------------
上移是正常的,因为改变窗口风格并不改变窗口坐标和尺寸,当去掉标题和边框之后,变成把客户区调整到原来整个窗口的位置和尺寸,所以看起来所有控件都上移了。可以这样处理: 
RECT rt; 
GetClientRect(&rt); 
ClientToScreen(&rt); 
ModifyStyle(WS_CAPTION ¦WS_BORDER, 0, SWP_NOREDRAW); 
MoveWindow(&rt);

本篇文章来源于 IT者 | www.itzhe.cn 原文链接:http://www.itzhe.cn/news/20080620/159993.html
------解决方案--------------------
//放OnInitDialog()中就可以:
ModifyStyle(WS_CAPTION,0,SWP_FRAMECHANGED);

------解决方案--------------------
BOOL CAboutDlg::OnInitDialog() 
{
CDialog::OnInitDialog();
//
ModifyStyle(WS_CAPTION,0,SWP_FRAMECHANGED);

// TODO: Add extra initialization here

return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
// 我试过的,完全可以
------解决方案--------------------
//明白了17楼的可以
void CAboutDlg::OnPaint() 
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here
CRect rect;
GetClientRect(rect);
ClientToScreen(rect);
rect.InflateRect(2,2);
ModifyStyle(WS_CAPTION,0);//
MoveWindow(rect);

// Do not call CDialog::OnPaint() for painting messages
}

------解决方案--------------------
按常规窗口的话一般这样修改成无边框无标题栏即可:
C/C++ code

ModifyStyle(WS_CAPTION | WS_THICKFRAME, 0, SWP_FRAMECHANGED);

------解决方案--------------------
上面是针对dialog的,更优雅更一般的方法是
C/C++ code

    DWORD dwStyle = GetStyle();//获取旧样式
    DWORD dwNewStyle = WS_OVERLAPPED | WS_VISIBLE| WS_SYSMENU |WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
    dwNewStyle&=dwStyle;//按位与将旧样式去掉
    SetWindowLong(m_hWnd,GWL_STYLE,dwNewStyle);//设置成新的样式
    DWORD dwExStyle = GetExStyle();//获取旧扩展样式
    DWORD dwNewExStyle = WS_EX_LEFT |WS_EX_LTRREADING |WS_EX_RIGHTSCROLLBAR;
    dwNewExStyle&=dwExStyle;//按位与将旧扩展样式去掉
    SetWindowLong(m_hWnd,GWL_EXSTYLE,dwNewExStyle);//设置新的扩展样式
    SetWindowPos(NULL,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED);//告诉windows:我的样式改变了,窗口位置和大小保持原来不变!