視窗控制語系問題 |
答題得分者是:wjhsu
|
epoch
一般會員 發表:4 回覆:6 積分:2 註冊:2004-09-16 發送簡訊給我 |
|
wjhsu
初階會員 發表:9 回覆:32 積分:48 註冊:2004-06-13 發送簡訊給我 |
"假設" OpenDialog出現時各元件的"相對位置"都相同, 那提供一個方法試試...
主要是利用GetWindowPlacement()這個API, 先"off-line"找出所需元件的"位置", 並記錄下來, 然後每次在OpenDialog出現並且用FindWindow()找到後, 就用"比較位置"的方法找到它內部元件的Handle, 這方法對於沒有Caption的元件(如:空白的Edit)也行... 需注意的是, GetWindowPlacement()找到的位置是相對於它的Parent的值, 例如: 放在Panel裏的按鈕, 在搜尋位置時, 就要先找到Panel, 再找出按鈕.... 之前, 我有做類似的東西, 你可以下載看看... http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=93988 主要在 ..tComponent\tComponent.cpp 檔裏 1. off-line找出主視窗下所有元件的位置(含元件的Parent) ==> bool __fastcall tForm::SaveConfiguration(HWND hwnd,AStr FileName) 2. on-line時要用元件的位置找出其Handle ==> bool __fastcall tComponent::FindHandle(HWND TopForm, TStringList *List, int index) ===================引 用 epoch 文 章=================== 小弟需要對他人的程式做控制, 使用FindWindow以視窗title為參數取得視窗handle, 但在控制OpenDialog時出現了問題. 我的OS為繁體中文版, OpenDialog的標題列為"開啟", 但如果將程式拿到簡體中文版執行,OpenDialog的標題列為"打開". 程式將取不到視窗handle, 若拿到英文的OS上又是同樣的狀況, 請問有什麼一勞永逸的解決方法嗎? |
epoch
一般會員 發表:4 回覆:6 積分:2 註冊:2004-09-16 發送簡訊給我 |
謝謝大大的回覆. 您說 "每次在OpenDialog出現並且用FindWindow()找到後, 就用"比較位置"的方法找到它內部元件的Handle" 但我的問題正是在於使用FindWindow()有困難,FindWindow()是用視窗標題為參數來取得handle, 不同語系的作業系統OpenDialog的視窗標題都不一樣啊>"<, 換個問法好了, 那有無其他方法不需要視窗標題就可以取得OpenDialog的handle嗎?
編輯記錄
epoch 重新編輯於 2008-06-27 10:06:31, 註解 無‧
|
wjhsu
初階會員 發表:9 回覆:32 積分:48 註冊:2004-06-13 發送簡訊給我 |
|
epoch
一般會員 發表:4 回覆:6 積分:2 註冊:2004-09-16 發送簡訊給我 |
|
epoch
一般會員 發表:4 回覆:6 積分:2 註冊:2004-09-16 發送簡訊給我 |
|
wjhsu
初階會員 發表:9 回覆:32 積分:48 註冊:2004-06-13 發送簡訊給我 |
我想, 會出現OpenDialog, 應該都有一個主視窗, 假設如此的話, 剛剛試了下面的程式, 可以找到
其中, ParentWin就是打開OpenDialog的主視窗, Note: 下面程式找到的不一定是OpenDialog, 所以前提是主視窗下的OpenDialog要已經出現時才可以用, 目前試的結果, 是都會找到主視窗下最後的焦點視窗, 例"開啟舊檔", "開新檔"的對話框.... [code cpp] HWND OpenDialog; OpenDialog = ::GetTopWindow(NULL); while(OpenDialog!=NULL) { if ( ParentWin != NULL && ParentWin == ::GetParent(OpenDialog) && ::IsWindowEnabled(OpenDialog)) break; OpenDialog = ::GetNextWindow(OpenDialog,GW_HWNDNEXT); Application->ProcessMessages(); } [/code] |
epoch
一般會員 發表:4 回覆:6 積分:2 註冊:2004-09-16 發送簡訊給我 |
===================引 用 wjhsu 文 章=================== 我想, 會出現OpenDialog, 應該都有一個主視窗, 假設如此的話, 剛剛試了下面的程式, 可以找到 其中, ParentWin就是打開OpenDialog的主視窗, Note: 下面程式找到的不一定是OpenDialog, 所以前提是主視窗下的OpenDialog要已經出現時才可以用, 目前試的結果, 是都會找到主視窗下最後的焦點視窗, 例"開啟舊檔", "開新檔"的對話框.... [code cpp] HWND OpenDialog; OpenDialog = ::GetTopWindow(NULL); while(OpenDialog!=NULL) { if ( ParentWin != NULL && ParentWin == ::GetParent(OpenDialog) && ::IsWindowEnabled(OpenDialog)) break; OpenDialog = ::GetNextWindow(OpenDialog,GW_HWNDNEXT); Application->ProcessMessages(); } [/code] 謝謝wjhsu大大, 這個方法確實可行^^~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |