求救:CFileDialog的显示位置,在线等

lnk 2004-12-08 09:02:24
我继承了一个CFileDialog的派生类,用来自定义打开的对话框,
怎样才能使打开对话框显示在某固定位置,且不能移动和改变大小?
BOOL CPreviewFileDialog::OnInitDialog()
{
CFileDialog::OnInitDialog();

CWnd *wndDlg =GetParent();
RECT Rect;
wndDlg->GetWindowRect(&Rect);
wndDlg->SetWindowPos(NULL,100,100,Rect.right-Rect.left,Rect.bottom-Rect.top,SWP_NOMOVE);//只能改变大小,不能改变位置

return TRUE;
}
...全文
249 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
echoxue 2004-12-08
learn from and up
回复
lnk 2004-12-08
多谢chuanke(程序人生) ,
我在.h中加了
afx_msg void OnMoving(UINT fwSide, LPRECT pRect);

.cpp
ON_WM_MOVING()

void CPreviewFileDialog::OnMoving(UINT fwSide, LPRECT pRect)
{
CDialog::OnMoving(fwSide, pRect);
int h = 300;//pRect->bottom - pRect->top;
int w = 400;//pRect->right - pRect->left;

if (pRect->left <= 100)
{
pRect->left = 100;
pRect->right = 100 +w;
}
if (pRect->top <= 100)
{
pRect->top = 100;
pRect->bottom = 100 + h;
}
if (pRect->right >= 500)
{
pRect->right = 500;
pRect->left = 500 - w;
}
if (pRect->bottom >= 400)
{
pRect->bottom = 400;
pRect->top = 400 - h;
}
}
在调试时,拖动或改变大小都不执行,请指点
回复
kyh1234567 2004-12-08
UP
回复
chuanke 2004-12-08
BOOL CPreviewFileDialog::OnInitDialog()
{
CFileDialog::OnInitDialog();

CWnd *wndDlg =GetParent();
RECT Rect;
wndDlg->GetWindowRect(&Rect);
wndDlg->SetWindowPos(NULL,100,100,400,300,SWP_NOMOVE);
return TRUE;
}

void CPreviewFileDialog::OnMoving(UINT fwSide, LPRECT pRect)
{
CDialog::OnMoving(fwSide, pRect);
int h = 300;//pRect->bottom - pRect->top;
int w = 400;//pRect->right - pRect->left;

if (pRect->left <= 100)
{
pRect->left = 100;
pRect->right = 100 +w;
}
if (pRect->top <= 100)
{
pRect->top = 100;
pRect->bottom = 100 + h;
}
if (pRect->right >= 500)
{
pRect->right = 500;
pRect->left = 500 - w;
}
if (pRect->bottom >= 400)
{
pRect->bottom = 400;
pRect->top = 400 - h;
}
}
回复
chuanke 2004-12-08
错了是WM_MOVING
回复
chuanke 2004-12-08
映射WM_MOVEING消息
回复
lnk 2004-12-08
vcleaner(我没做大哥已经很久了.......) :MoveWindow(100,100,150,20,TRUE);只能改变大小,不能改变位置,用wndDlg->SetWindowPos(NULL,100,100,Rect.right-Rect.left,Rect.bottom-Rect.top,SWP_NOSIZE);就可以。不知为什么。

chuanke(程序人生):WM_MOVEING是什么。
回复
lnk 2004-12-08
多谢各位,刚才网络有问题,把SWP_NOMOVE改成SWP_NOSIZE。可以改变位置,但要怎样才能使打开对话框不能拖动和改变大小。我在OnPaint中设置了上面的代码也不行。
回复
chuanke 2004-12-08
“怎样才能使打开对话框显示在某固定位置,且不能移动和改变大小?”?????????????
相应WM_MOVEING后wndDlg->SetWindowPos(NULL,100,100,Rect.right-Rect.left,Rect.bottom-Rect.top,SWP_NOMOVE);
回复
老夏Max 2004-12-08
MoveWindow不行吗?
回复
danyueer 2004-12-08
用SetWindowPos试试
回复
flyelf 2004-12-08
要改变位置,怎么能加上SWP_NOMOVE的标志呢
回复
Kudeet 2004-12-08
处理WM_SIZE消息试试
回复
oyljerry 2004-12-08
重载CFileDialog的OnMoving
回复
lnk 2004-12-08
多谢chuanke(程序人生),我刚才试了,我新建一个对话框的工程,OnMoving可以使窗口不能移动和改变大小,但在CFileDialog的派生类的就无反映,不知为什么?
我的意思是打开文件对话框,初始时显示在某一固定位置,以后要使打开文件对话框的拖动无效,改变其大小也无效。
回复
chuanke 2004-12-08
没明白!“怎样才能使打开对话框显示在某固定位置,且不能移动和改变大小?”你不是要“固定位置”“且不能移动和改变大小”吗?这就对了三
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-12-08 09:02
社区公告

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