首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

自绘Dialog的两个有关问题

2012-01-19 
自绘Dialog的两个问题我自绘Dialog,在PreSubclassWindow中调用了ModifyStyle(WS_CAPTION,0),之后,标题栏确

自绘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:我的样式改变了,窗口位置和大小保持原来不变! 

热点排行