2008-09-17 70 views
3

豐富編輯控件的文檔確實與其看起來一樣糟糕(錯誤?)?現在我正在手動調用LoadLibrary(「riched20.dll」)以顯示Rich Edit Control。 Rich Edit的文檔在使用Rich Edit控件的第一個代碼示例中很糟糕地演示了這一點。原始Win32中的豐富編輯控件

它談論調用INITCOMMONCONTROLSEX()添加視覺樣式,但並沒有提及這標誌中傳遞。

有沒有更好的方式來加載了豐富的編輯控制?

http://msdn.microsoft.com/en-us/library/bb787877(VS.85).aspx

這裏是唯一的代碼,我可以寫,使其工作:

#include "Richedit.h" 
#include "commctrl.h" 

INITCOMMONCONTROLSEX icex; 
icex.dwSize = sizeof(INITCOMMONCONTROLSEX); 
icex.dwICC = ICC_USEREX_CLASSES; //Could be 0xFFFFFFFF and it still wouldn't work 
InitCommonControlsEx(&icex); //Does nothing for Rich Edit controls 

LoadLibrary("riched20.dll"); //Manually? For real? 
hWndRichEdit = CreateWindowEx(
    ES_SUNKEN, 
    RICHEDIT_CLASS, 
    "", 
    WS_BORDER | WS_VISIBLE | WS_CHILD, 
    2, 2, 100, 24, 
    hWnd, (HMENU) ID_RICH_EDIT, hInst, NULL); 

回答

2

使用MFC,RichEdit控件只是工作。

使用InitCommonControlsEx()加載 - ICC_USEREX_CLASSES不加載RichEdit AFAIK,您不需要它,因爲它只執行不包含richedit的「標準」公共控件。顯然你只需要調用它來在Windows中啓用「視覺樣式」,而不是讓RichEdits工作。

如果您使用的是2008,則需要包含Msftedit.dll,並使用MSFTEDIT_CLASS(MS有時是向後兼容的垃圾)。

docs確實表明您正在爲Win32編程做正確的事情。

+0

僅適用於unicode應用程序的MSFTEDIT_CLASS? – user16408 2008-09-17 17:28:09

1

是不是有一個導入庫(也許riched20.lib),您可以鏈接到。然後,您不必在運行時「手動」加載它。這就是所有標準控件的工作原理。創建項目時,VS會自動添加對user32.lib的引用。

0

我想你必須在創建任何常用控件之前調用CoInitializeEx。

LoadLibrary不是必需的。如果你鏈接到正確的.lib文件,exe-loader會爲你處理這些細節。

+4

需要CoInitializeEx()來初始化COM。這對於win32通用控件不是必需的。你可能一直在想着InitCommonControlsEx()。 – Ferruccio 2008-09-17 17:26:27

2

很多年前,我遇到了同樣的問題,是的,答案是手動加載.dll。據我記憶,原因是RichEdit窗口類在riched20.dll的DllMain中註冊。

相關問題