Vistaでリッチエディットの動作が重くなってしまう – プログラミング – Home

Vistaでリッチエディットの動作が重...
 
通知
すべてクリア

[解決済] Vistaでリッチエディットの動作が重くなってしまう


たにし
 たにし
(@たにし)
ゲスト
結合: 23年前
投稿: 11
Topic starter  

開発環境 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では明らかに遅いです。
何かアドバイスをお願い致します。


引用未解決
トピックタグ
たにし
 たにし
(@たにし)
ゲスト
結合: 23年前
投稿: 11
Topic starter  

ちなみに、使用しているリッチエディットは
VC2005 Pro のリソースエディターで設置したものです。
デフォルトでRichEdit2.0というバージョンになっているようです。

また、プログラムの最初で次のようにライブライを読み込んでいます。
HINSTANCE hRichEdit = LoadLibrary(RICHED20.DLL);


返信引用
たのし
 たのし
(@たのし)
ゲスト
結合: 16年前
投稿: 1
 

自己解決しました。

原因は他の場所にありました。

このプログラムは、
MultilineをTRUEに設定しているリッチエディットと、
DefaultButtonをTRUEに設定しているボタンが同一ウインドウにあります。

つまり、リッチエディットの中でENTERキーを押すと
このボタンが押されるようにプログラムしていました。
XPはこれが快適に動作するのですが、Vistaではかなり重く動作します。

よくわかりませんが、ENTERキーの入力をリッチエディットと
ボタンで取り合いになってしまうのが原因のようです。

そこで、まずボタンのDefaultButtonをFALSEに設定しました。
これでENTERキー入力の取り合いは起きなくなりますが、
自前でMultilineリッチエディットでENTERキーを押したときにボタンが
押されるようにしなければいけません。

なのでリッチエディットをサブクラス化し、
ENTERキーが入力されたらSendMessageでWM_COMMANDを飛ばして
ボタンを押したときの処理に飛ぶことにしました。
今ではこれで快適に動作しています。

Vistaはめんどくさいですね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました