開発環境 WindowsXP / VC2005Pro / C言語 / SDK / Win32 API
たにしです。こんにちわ。
質問をさせて頂きます。
いままでXPで開発、使用していたプログラムの動作が、
Vistaではかなり遅くなることが判明しました。
具体的には、リッチエディット(RichEdit)の動作がかなり遅いです。
以下、コード例です。
case IDOK:
// 入力されたテキストを取得
GetDlgItemText(hWnd, IDC_REDIT_OUT, str, sizeof(str)-1);
// 入力されたテキストを表示
MessageBox(hWnd, str, テキスト, MB_OK);
// IDC_REDIT_OUT を空にする
SetDlgItemText(hWnd, IDC_REDIT_OUT, ");
// IDC_REDIT_OUT にフォーカスを戻す
SetFocus(hReditOut);
return FALSE;
これはダイアログプロシージャの1部を抜粋したものです。
Enterキーが入力されるとこのIDOKに処理が移り、
リッチエディットの文章を取得 -> 表示 -> リッチエディットを空にする
といった動作をしています。
しかし、GetDlgItemText()やSetDlgItemText()あたりの動作がいまいち遅いのです。
Enterキーを押した後、0.5~1.0秒たってリッチディットが空になります。
XPでは快適に動作するのですが、Vistaでは明らかに遅いです。
何かアドバイスをお願い致します。
ちなみに、使用しているリッチエディットは
VC2005 Pro のリソースエディターで設置したものです。
デフォルトでRichEdit2.0というバージョンになっているようです。
また、プログラムの最初で次のようにライブライを読み込んでいます。
HINSTANCE hRichEdit = LoadLibrary(RICHED20.DLL);
自己解決しました。
原因は他の場所にありました。
このプログラムは、
MultilineをTRUEに設定しているリッチエディットと、
DefaultButtonをTRUEに設定しているボタンが同一ウインドウにあります。
つまり、リッチエディットの中でENTERキーを押すと
このボタンが押されるようにプログラムしていました。
XPはこれが快適に動作するのですが、Vistaではかなり重く動作します。
よくわかりませんが、ENTERキーの入力をリッチエディットと
ボタンで取り合いになってしまうのが原因のようです。
そこで、まずボタンのDefaultButtonをFALSEに設定しました。
これでENTERキー入力の取り合いは起きなくなりますが、
自前でMultilineリッチエディットでENTERキーを押したときにボタンが
押されるようにしなければいけません。
なのでリッチエディットをサブクラス化し、
ENTERキーが入力されたらSendMessageでWM_COMMANDを飛ばして
ボタンを押したときの処理に飛ぶことにしました。
今ではこれで快適に動作しています。
Vistaはめんどくさいですね。