请问如何修改WizardSheet对话框的大小?

zhaolinger 2000-06-09 09:51:00
好像向导对话框的大小是预先设定的,与每一个page对话框的大小无关;
...全文
153 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaolinger 2000-06-15
  • 打赏
  • 举报
回复
我这两天实在太忙, 除了做报告还要考英语。
等忙过这一阵在为诸位评分吧。
sun2000的办法估计是可行的,只是我眼下没时间试一下。
我还有一个问题,我在编辑对话框时没法知道显示的WizadSheet的大小,怎么办呀?
zheng_rui 2000-06-14
  • 打赏
  • 举报
回复
具体怎么改,我现在忘了,好像是
CWnd* hwnd = GetDlgItem(AFX_IDC_TAB_CONTROL);
hwnd->movewindow();
我查查告诉你
sun2000 2000-06-13
  • 打赏
  • 举报
回复
当然你也可以用同样的方法得到按钮"下一步"CButton *pButton;
pButton=pWizard->GetDlgItem(0x00003024);
//用Spy++查得“下一步”的ID号为0x00003024,“上一步”为0x00003023
pButton->MoveWindow(...);
  • 打赏
  • 举报
回复
关注
zhaolinger 2000-06-13
  • 打赏
  • 举报
回复
首先谢谢sun2000.但是用MoveWindow()是不行的,我上次贴文章时忘了说了。因为右下角的“下一步”等按钮无法按比例改动,搞不好就被切掉了。
zheng_rui的法子我用了,但有些函数找不到比如_countof和_afxPropSheetButtons是不是内部函数?而且包含它们的头文件CHPPYVW.H VC里找不到,能否得到进一步帮助?

Sniper 2000-06-10
  • 打赏
  • 举报
回复
关注。
sun2000 2000-06-10
  • 打赏
  • 举报
回复
得到WizardSheet的指针pWizard
if (pWizard){
CRect r;
pWizard->GetWindowRect(r);
//修改r,如r.right+=100;
pWizard->MoveWindow(r...);
}
目的达到
zheng_rui 2000-06-10
  • 打赏
  • 举报
回复
本人择自MFC源码如下:
看了你就给分吧

BOOL CPropertySheet::OnInitDialog()
{
// change tab style if scrolling tabs desired (stacked tabs are default)
if (!m_bStacked)
{
HWND hWndTab = (HWND)::GetDlgItem(m_hWnd, AFX_IDC_TAB_CONTROL);
if (hWndTab != NULL)
CWnd::ModifyStyle(hWndTab, TCS_MULTILINE, TCS_SINGLELINE, 0);
}

if (!IsWizard())
{
// resize the tab control so the layout is less restrictive
HWND hWnd = (HWND)::GetDlgItem(m_hWnd, AFX_IDC_TAB_CONTROL);
ASSERT(hWnd != NULL);
CRect rectOld;
::GetWindowRect(hWnd, &rectOld);
ScreenToClient(rectOld);
CRect rectNew(0, 0, 0, 32);
::MapDialogRect(m_hWnd, &rectNew);
if (rectNew.bottom < rectOld.bottom)
{
// move tab control
int cyDiff = rectOld.Height() - rectNew.bottom;
::SetWindowPos(hWnd, NULL, 0, 0, rectOld.Width(), rectNew.bottom,
SWP_NOMOVE and SWP_NOZORDER and SWP_NOACTIVATE);

// move buttons by similar amount
for (int i = 0; i < _countof(_afxPropSheetButtons); i++)
{
hWnd = ::GetDlgItem(m_hWnd, _afxPropSheetButtons[i]);
if (hWnd != NULL)
{
::GetWindowRect(hWnd, &rectOld);
ScreenToClient(&rectOld);
::SetWindowPos(hWnd, NULL,
rectOld.left, rectOld.top - cyDiff,
0, 0, SWP_NOSIZE and SWP_NOZORDER and SWP_NOACTIVATE);
}
}

// resize property sheet itself similarly
GetWindowRect(&rectOld);
SetWindowPos(NULL, 0, 0, rectOld.Width(), rectOld.Height() - cyDiff,
SWP_NOMOVE and SWP_NOZORDER and SWP_NOACTIVATE);
}
}

BOOL bResult = (BOOL)Default();

if (m_bModeless && !IsWizard())
{
// layout property sheet so button area is not accounted for
CRect rectWnd;
GetWindowRect(rectWnd);
CRect rectButton;
HWND hWnd = ::GetDlgItem(m_hWnd, IDOK);
ASSERT(hWnd != NULL);
::GetWindowRect(hWnd, rectButton);
SetWindowPos(NULL, 0, 0,
rectWnd.Width(), rectButton.top - rectWnd.top,
SWP_NOMOVE and SWP_NOZORDER and SWP_NOACTIVATE);

// remove standard buttons for modeless dialogs
for (int i = 0; i < _countof(_afxPropSheetButtons); i++)
{
HWND hWnd = ::GetDlgItem(m_hWnd, _afxPropSheetButtons[i]);
if (hWnd != NULL)
{
::ShowWindow(hWnd, SW_HIDE);
::EnableWindow(hWnd, FALSE);
}
}
}

// center the property sheet relative to the parent window
if (!(GetStyle() & WS_CHILD))
CenterWindow();

return bResult;
}
zheng_rui 2000-06-09
  • 打赏
  • 举报
回复
可以更改,参看mfc的源码就明白了,我改过

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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