2013-03-14 29 views
2

我最近在Win32上工作很多,但我對它很陌生,需要一些關於組織的建議。在C++中,雖然它在語法上用於聲明全局變量,但我一直覺得這是一個馬虎,因爲這個變量可以在任何地方被修改,所以跟蹤對它的修改變得更加困難。使用Win32進行組織的典型約定是什麼?

在我的Win32項目中,我有幾個變量需要在多個地方進行修改。例如,一個這樣的變量在WndProc函數中,也在對話過程函數中。由於它使用的方式,我能夠簡單地使用WndProc中的實際值,然後使用DialogBoxParam調用對話框,並通過lParam值將該值傳遞給對話框。

但是,還有其他值,例如我用於繪圖的某些位圖或用於多個不同窗口消息調用的變量,其中值需要在WndProc函數的多個實例中保留,或者多種功能。我可以控制我創建的函數的參數,但是如果我需要將一個變量傳遞給WndProc函數,以便我可以使用它而不管多個不同的窗口消息,該怎麼辦?如果我需要傳入多個值,該怎麼辦?

到目前爲止,我只是將所有東西都製作成全局的,並且它可以工作,但對我來說這種感覺很渺茫......但我知道一些變量通常是全局的,因爲這是一個常規問題 - 就像主窗口和實例變量。

你們都在想什麼?

+2

是的:全局變量是「壞」的。是的,在經典的Win32/C編程中,全局變量通常或多或少都是不可避免的。這是你的問題嗎? – paulsm4 2013-03-14 21:33:00

回答

0

除了使用全局變量外,還可以將窗口特定的數據存儲在與相關窗口關聯的C++對象中。

向C++對象與窗口相關聯,使用許多現有的C++類的框架中的任何(例如,例如,Microsoft ’ WTL或Torjo的Win32GUI),或自己動手通過使用SetWindowSubclass API函數。

對於自己動手™解決方案,我提出了a complete C++ example在另一個SO答案。

這就是說,對於一個微小的程序全局變量+對話框是最簡單的,並沒有出現問題。所以一般來說,使用正確的工具™作爲工作。對於更大的工作,使用更重的工具和hellip;

0

如果您在代碼中有特定示例,它可能會有所幫助。但我認爲你正在談論生命 - 你有一個資源(比如說一個位圖),你需要多次引用它以迴應不同的Windows消息。是的,你可以讓它成爲全球的,但我同意這是sl。。

那麼是誰創造了窗戶?可能你的「應用」類或沿着這些線。由於該類的生命週期在邏輯上比窗口長,因此它可以保存窗口所需的資源。

或者更好的方法是創建一個「Window」類。你的App實例化一個Window對象。 Window對象創建Win32窗口並保存HWND(現在您已將其從App中提取出來,因此它不需要知道這些細節),並且Window實例可以容納位圖資源。

相關問題