2010-02-21 41 views
2

我有一個小應用程序,它嵌入了網頁瀏覽器控件。在那個應用程序中,我創建了一個彈出式類。該彈出窗口用於顯示服務器生成的錯誤消息。渲染web瀏覽器控件離屏(或隱藏)

我想能夠調整彈出窗口來適應消息。這是一個簡短的信息不包含在一個超大的形式中,而一個大的信息不是一個小的形式。

而不是發送寬度和高度我想在飛行中計算尺寸。我也不想明顯調整表格的大小,這簡直太醜了。

一切我嘗試失敗:(

這就是我認爲應該工作

create the form 
move it offscreen by setting its left position to -1000 
show the form (offscreen) 
write the contents to the webrowser ctl 
get the width and height after it renders 
hide the form 
resize the form to fit the above width and height 
center it onscreen 
show the form 

這應該工作好了,除了WebBrowser控件拒絕渲染,所以我不能讓客戶端寬度和高度

有誰知道如何可以做到這一點?

DC

+0

你能告訴我們你的源代碼? –

+0

我必須建立一個模擬應用程序,目前的應用程序使用了大量的遺留代碼,只會造成更多混淆。至少你不是說它不能這樣做,這本身就是一件好事:) – DeveloperChris

回答

1

我解決了我遇到的問題。這是一個時機。

問題是我正在向web瀏覽器控件寫入內容。然後嘗試讀取寬度和高度。但控制沒有呈現,所以我沒有得到這些參數。

我早就意識到這一點,所以我把調整大小的代碼放在ondocumentcomplete事件中。遺憾的是我沒有意識到,當你直接寫文檔時,這個事件不會被調用。不知何故,我設法說服自己沒有被召喚,因爲控制是隱藏的。情況並非如此。

因此,一旦我設法弄清楚了,我在調用寫入函數之後並在調用show函數之前放入了一個消息泵。消息泵上繞一圈,直到控制返回完整(檢查readyState的標誌)

PopUp->Write(text.c_str()); 
while (!PopUp->Complete() && ProcessMessages()){ ; } 
popup_ctlDownloadComplete(0); 

現在當DownloadComplete等事件被稱爲手動,該文件已使我能得到的寬度和高度。

上面的代碼可能導致無限循環,如果有錯誤,所以我添加了一個計數器來殺死它應該發生。爲了簡潔和清楚起見,未示出。

哦,代碼遺留代碼沒有託管代碼

DC