如何修改dlg的大小

comana 2012-10-12 09:23:48
新建了一个dialog,size在.rc文件里面预设好了,但是想在程序启动的时候判断一下屏幕分辨率,根据不同分辨率来设置dialog的size,但是用PostMessage(WM_SIZE,NULL ,MAKELPARAM(120,500));去重新设置onsize,debug发现onsize能进得去,参数也正确,但是dlg的size没有任何变化。还试过SetWindowPos以及MoveWindow,发现都只能移动dlg,不能改变dlg的大小,还请各位帮忙看一下,多谢!
rc文件:
IDD_SETTINGS DIALOGEX 0, 0, 279, 570
STYLE DS_MODALFRAME | WS_POPUP | WS_SYSMENU
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
LTEXT "",IDC_PROP,0,7,277,564
END

IDD_PPG_GENERAL DIALOG DISCARDABLE 0, 0, 341, 227
STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Sans Serif"


dlg代码:
BOOL CSettingsDlg::OnInitDialog()
{
if(!CDialog::OnInitDialog())
return FALSE;
// SetWindowPos(NULL, 479, 670, 0, 0, DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_SYSMENU);

//SetWindowPos(&wndTop,479, 200, 0, 0,DS_MODALFRAME | WS_POPUP | WS_SYSMENU);

m_PropCtrl.Create(this, IDC_PROP);
//PostMessage(WM_SIZE,NULL ,MAKELPARAM(120,500));
//SetWindowPos(&wndTop,479, 200, 0, 0,DS_MODALFRAME | WS_POPUP | WS_SYSMENU);
//CDialog::OnSize(SIZE_MAXIMIZED, 200, 300);
return TRUE;
}

void CSettingsDlg::SetPropPointer(IPropertyHost *pHost)
{
if(pHost !=NULL){
m_pCurrentHost = pHost;
m_PropCtrl.SetPropertyHost(pHost);
}
else
{
m_pCurrentHost = NULL;
m_PropCtrl.SetPropertyChangeListener(NULL);
m_PropCtrl.SetPropertyHost(NULL);
}
}

void CSettingsDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
}

...全文
743 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
comana 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

2种方法:

1.ON_WM_NCLBUTTONDBLCLK 消息
void CXXXXView::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
{
// TODO: Add your message handler code here and/or call default

//CView::OnNcLButtonDblClk(n……
[/Quote]
截取消息,搞定了,多谢!
傻X 2012-10-12
  • 打赏
  • 举报
回复
2种方法:

1.ON_WM_NCLBUTTONDBLCLK 消息
void CXXXXView::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
{
// TODO: Add your message handler code here and/or call default

//CView::OnNcLButtonDblClk(nHitTest, point); 这行注释掉
}

2.PretranslateMessage中WM_NCLBUTTONDBLCLK
截获掉

2种方法都可以,尝试下吧
oyljerry 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
我现在修改了PreCreateWindow,已经可以做到不显示最大化,但是双击标题栏,程序还是会窗口化,如何修改?

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window……
[/Quote]
MoveWindow设置窗口到最大,然后处理标题栏双击事件
Eleven 2012-10-12
  • 打赏
  • 举报
回复
MoveWindow/SetWindowPos()就行了
comana 2012-10-12
  • 打赏
  • 举报
回复
我现在修改了PreCreateWindow,已经可以做到不显示最大化,但是双击标题栏,程序还是会窗口化,如何修改?

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.hMenu = NULL;//去掉菜单
cs.style&=~WS_MAXIMIZEBOX; //禁用按动最大化按钮
cs.style&=~WS_THICKFRAME;//禁止用户改变窗口大小

cs.style&=~FWS_ADDTOTITLE;//将FWS_ADDTOTITLE去掉

cs. lpszName = "标题";//改变标题,替换自己的标题

return TRUE;
}
comana 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SetWindowPos你参数也用错了

//SetWindowPos(&wndTop,479, 200, 0, 0,DS_MODALFRAME | WS_POPUP | WS_SYSMENU);

479,是X坐标
200,是Y坐标

都是描述出现的位置的

后面第一个0 表示宽度
后面第二个0 表示高度

你都没填写,所以大小不变
[/Quote]
你好,现在可以了,多谢!
多问一个问题,请问如何保证主程序永远最大化,禁止窗口化?
Gloveing 2012-10-12
  • 打赏
  • 举报
回复
SetWindowPos
MoveWindow
vc_qing 2012-10-12
  • 打赏
  • 举报
回复
MoveWindow可以改变大小
傻X 2012-10-12
  • 打赏
  • 举报
回复
SetWindowPos你参数也用错了

//SetWindowPos(&wndTop,479, 200, 0, 0,DS_MODALFRAME | WS_POPUP | WS_SYSMENU);

479,是X坐标
200,是Y坐标

都是描述出现的位置的

后面第一个0 表示宽度
后面第二个0 表示高度

你都没填写,所以大小不变

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧