• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    修改已經打開的對話框的瀏覽路徑

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 10次 | 進入軟件測試論壇討論

    領測軟件測試網    最近做的一個小東西要控制另外一個程序的文件保存對話框,目的是讓它只能保存到我指定的位置,: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();
    }
    pedit->SendMessage(WM_SETTEXT,0,(LPARAM)filename);//發消息還原EDIT里的文件名
    delete buf; 

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>