日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

修改已经打开的对话框的浏览路径

發布時間:2025/4/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 修改已经打开的对话框的浏览路径 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?? 最近做的一個小東西要控制另外一個程序的文件保存對話框,目的是讓它只能保存到我指定的位置,:P,我要控制保存的數據。
?? 我們知道用CFileDialog很容易設置對話框的初始瀏覽路徑,只要在CFileDialog類的OPENFILENAME結構里用自己的目錄改變lpstrInitialDir就可以了:
CFileDialog dlg;
dlg.m_ofn.lpstrInitialDir="c://WINDOWS";//這里設置對話框的瀏覽目錄
dlg.DoModal();
可我要控制的是一個已經顯示的對話框,這個時候再用m_ofn.lpstrInitialDir來設置就沒有效果啦!我通過FindWindow找到了這個對話框的句柄,
CWnd * pWnd = FindWindow(NULL,"另存為");
?if(pWnd)
{
?? ....//這里該怎么改呢?
}
最開始想的方法就是用鉤子截獲對話框打開時的消息,在他顯示之前改變他的墨認路徑。呵呵,不想這么麻煩,等有時間再去試。后來找到了一種比較方便的方法。
在實際操作中,如果我們在那個文件名編輯框中輸入一個目錄名,然后按確定按鈕,那個對話框并沒有被關閉,而是切換到那個新的目錄。通過這個方法我們就可以改已經顯示了對話框的瀏覽目錄。具體步驟如下:
1、首先保存那個文件名編輯框的值
2、在那個編輯框中設置新的目錄名
3、模擬鼠標單擊“確定”按鈕,這時候對話框切換到新的目錄
4、恢復原來編輯框的值
這里還需要注意的一點就是第二步設置目錄的時候要發送WM_SETTEXT消息,而不能直接用SetWindowText函數,因為它在跨進程使用的時候有問題,沒有效果。
下面是部分關鍵代碼:
CWnd * pWnd = FindWindow(NULL,"另存為");
CString sCtrlName;
CWnd *pedit;
CString filename;
TCHAR BUF[512];
if(pWnd)
{
?????CWnd *pwnd=pWnd->GetWindow(GW_CHILD);//枚舉保存對話框的所有子控件
?????char *buf=new char[512];
?????while(pwnd!=NULL)
????{
?????????::GetClassName(pwnd->GetSafeHwnd(),buf,512);//得到枚舉的控件是什么類型的,
?????????CString str=buf;???
?????????str.TrimRight();???????????
?????????if(str=="Edit")//如果枚舉到保存文件名的EDIT
??????? {
????????????pedit=pwnd;//保存EDIT句柄用來發消息
????????????pwnd->SendMessage(WM_GETTEXT,sizeof(BUF)/sizeof(TCHAR),(LPARAM)(void*)BUF);
????????????filename=BUF;//完成第一步保存原始的文件名
????????}
??? ??? if(str=="Button")//枚舉到按鈕,有保存和取消按鈕
?????? {
??????????? pwnd->SendMessage(WM_GETTEXT,sizeof(BUF)/sizeof(TCHAR),(LPARAM)(void*)BUF);
??????????? //發消息得到按鈕的標題
??????????? CString str=BUF;
??????????? str.TrimRight();
??????????? if(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();
}
//發消息還原EDIT里的文件名,完工!
pedit->SendMessage(WM_SETTEXT,0,(LPARAM)filename);
delete buf;?
?
如果大家還有什么好的方法可以一起討論!

轉載于:https://www.cnblogs.com/hehe520/archive/2004/11/21/6330144.html

總結

以上是生活随笔為你收集整理的修改已经打开的对话框的浏览路径的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。