专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »VB教程 » vc路径选择对话框:修改已经打开的对话框的浏览路径 »正文

vc路径选择对话框:修改已经打开的对话框的浏览路径

来源: 发布时间:星期五, 2008年12月26日 浏览:2次 评论:0
   最近做个小东西要控制另外文件保存对话框是让它只能保存到我指定位置:P,我要控制保存数据
   我们知道用CFileDialog很容易设置对话框浏览路径只要在CFileDialog类OPENFILENAME结构里用自己目录改变lpstrInitialDir就可以了:
CFileDialog dlg;
dlg.m_ofn.lpstrInitialDir="c:\\WINDOWS";//这里设置对话框浏览目录
dlg.DoModal;
可我要控制个已经显示对话框这个时候再用m_ofn.lpstrInitialDir来设置就没有效果啦!我通过FindWindow找到了这个对话框句柄
CWnd * pWnd = FindWindow(NULL,"另存为");
(pWnd)
{
   ....//这里该如何改呢?
}
最开始想思路方法就是用钩子截获对话框打开时消息在他显示的前改变他墨认路径呵呵不想这么麻烦等有时间再去试后来从个回帖里找到了种比较方便思路方法
在实际操作中如果我们在那个文件名编辑框中输入个目录名然后按确定按钮那个对话框并没有被关闭而是切换到那个新目录通过这个思路方法我们就可以改已经显示了对话框浏览目录具体步骤如下:
1、首先保存那个文件名编辑框
2、在那个编辑框中设置新目录名
3、模拟鼠标单击“确定”按钮这时候对话框切换到新目录
4、恢复原来编辑框
这里还需要注意点就是第 2步设置目录时候要发送WM_SETTEXT消息而不能直接用SetWindowText它在跨进程使用时候有问题没有效果
下面是部分关键代码:
CWnd * pWnd = FindWindow(NULL,"另存为");
CString sCtrlName;
CWnd *pedit;
CString filename;
TCHAR BUF[512];
(pWnd)
{
     CWnd *pwnd=pWnd->GetWindow(GW_CHILD);//枚举保存对话框所有子Control控件
     char *buf= char[512];
     while(pwnd!=NULL)
    {
         ::GetClassName(pwnd->GetSafeHwnd,buf,512);//得到枚举Control控件是什么类型
         CString str=buf;   
         str.TrimRight;           
         (str"Edit")//如果枚举到保存文件名EDIT
        {
            pedit=pwnd;//保存EDIT句柄用来发消息
            pwnd->SendMessage(WM_GETTEXT,(BUF)/(TCHAR),(LPARAM)(void*)BUF);
            filename=BUF;//完成第步保存原始文件名
        }
        (str"Button")//枚举到按钮有保存和取消按钮
       {
            pwnd->SendMessage(WM_GETTEXT,(BUF)/(TCHAR),(LPARAM)(void*)BUF);
            //发消息得到按钮标题
            CString str=BUF;
            str.TrimRight;
            (str"保存(&S)")//如果是保存按钮
            {   
               lstrcpy(BUF,(LPCTSTR)sPath);//sPath表示我们要设置对话框浏览目录
               //发消息设置文件名EDIT为我们路径名
               pedit->SendMessage(WM_SETTEXT,0,(LPARAM)BUF);
               //发消息模拟点击保存按钮
               ::SendMessage(pwnd->GetSafeHwnd,WM_LBUTTONDOWN,0,0);
               ::SendMessage(pwnd->GetSafeHwnd,WM_LBUTTONUP,0,0);
            }
        }
    }
     pwnd = pwnd->GetNextWindow;
}
pedit->SendMessage(WM_SETTEXT,0,(LPARAM)filename);//发消息还原EDIT里文件名
delete buf; 

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: