請問如何將應用程式(例如:word) 嵌入至表單當中 |
答題得分者是:jow
|
linly
一般會員 發表:42 回覆:37 積分:15 註冊:2007-10-07 發送簡訊給我 |
做出來的效過類似 download.yousendit.com/2A1E363E2D468F90
查了書、看了網頁、BBS 也試了一些方法仍舊是無法達到我的需求,在其 他地方請教也是不告而終,連續弄了四五天還是失敗,希望在貴站可以獲 得一些解決,拜託了。目前為止的寫法是,使用者選擇一個要開啟的應用 程式,在按下 button 後啟動 runApp,目的除了開啟應用程式外,也把它 嵌入到我的表單元件當中。 以下的程式碼中 EnumWindows 的部份原先是使用 FindWindow , 但似乎它不能把之中的兩個參數都設成 NULL(會發生存取被拒的錯誤代碼)。 另外,EnumWindows 搜尋的是 top-level 的視窗,這種視窗指的是沒有 Parent?我本來也有使用 GetParent 來作為判斷視窗的依據。 以下為程式碼: [註] 我是使用 .NET 作為開發環境,不過這部份用到都是純 Win32 的 API, 希望有經驗的大大可以指點我一下,不要不理我。 [code cpp] static STARTUPINFO si; // 全域變數,CreateProcess 所需的參數 static PROCESS_INFORMATION pi; // 全域變數,CreateProcess 所需的參數 ... ... // 初始化上面兩個全域變數 ZeroMemory(&si,sizeof(STARTUPINFO)); ZeroMemory(&pi,sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWNORMAL; // 呼叫 CrreateProcess 開始應用程式 CreateProcess(lpApplicationName,NULL,NULL,NULL,false,0,NULL,NULL,&si,&pi) ; // 函式等候,直到參數之處理緒進入待機狀態 WaitForInputIdle(pi.hProcess,INFINITE); // 列舉所有 TOP Level 視窗(這指的是沒有父視窗的嗎?) EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)(HANDLE)hwnd); // 設定那個應用程式的父視窗以及位置大小,已達到嵌入的結果 SetParent(childHwnd, hwnd); SetWindowPos(childHwnd, HWND_TOP, 30, 30, maxW, maxH, 4); ... ... // EnumWindows 所需要的 CALLBLACK function BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lparam ) { GetWindowThreadProcessId(hwnd,&lpdwProcessId); if( lpdwProcessId == pi.dwProcessId ) { childHwnd = hwnd; } return true; } [/code] |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
如果我沒弄錯你的需求, 你是不是要在應用程式A內去
開啟另一個應用程式B,然後B的parent設定成A, 由A來 負責承載整個需求的顯示工作? 然後A做A的, B做B的,再Pass B 的HANDLE 給 A做一些控制? 可是你如何得知B開放哪些功能給A叫用? 建議你去研究COM/DCOM 中對於 In-Place Activation 的應用方式, 這種應用程式內坎的方式, 不過這種方式或許和你的需求有些不同. 個人看法,僅供參考.
編輯記錄
jow 重新編輯於 2007-10-07 18:37:40, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |