リッチエディット1リッチエディットでメモ帳を作る1今回はリッチエディットでメモ帳を作ります。リッチエディットの場合、スクロールバーは自動でつきます。作成したソースを修正します。流れWM_CREATEWM_CREATEは、ウインドウが生成されたときに1回だけ実行されます。1.RICHED20.DLLをロードします。1.1.GetSystemDirectory()でWindowsシステムフォルダのパスを取得します。Windowsシステムフォルダは、Windowsのバージョンにより異なります。上記変数のサイズ);1.2.取得したWindowシステムフォルダのパスに、wsprintf()を使って、RICHED20.DLLを追加します。1.3.LoadLibrary()で、DLLをロードします。LoadLibrary(TEXT("RICHED20.DLL"))と1行にまとめても、見かけ上問題なく動作します。DLLが優先して読み込まれてしまうため、偽DLLに含まれた悪意あるコードが実行されてしまいます。これが「任意のDLL/実行ファイル読み込みに関する脆弱性」です。DLLは、必ずパスを指定するようにしましょう。1.4.FreeLibrary()を呼ぶ場合は、WinMain()の最後のreturnの前に入れてください。WM_DESTROYメッセージのところに入れても、実行エラーになります。これは、WM_DESTROYメッセージにいるときは、まだウィンドウが存在するため、RICHED20.DLLが実行中だからと思われます。FreeLibrary()がなくても、アプリケーション終了時にDLLが開放されるため、今回はFreeLibrary()を使いません。2.CreateWindowEx()で、リッチエディットのウインドウを生成します。ここでは、とりあえず、サイズが0×0のウインドウを生成します。ユーザーが最下行で[Enter]キーを押すと、テキストを自動的に上にスクロールします。ユーザーが行末に文字を入力すると、エディットコントロール内のテキストが自動的に右スクロールします。テキストの入力や編集不可。くぼんで見える境界を描きます。コントロールが入力フォーカスを失うときに、現在選択されている範囲が保存され、次にフォーカスを得たときに同じ領域が選択されている状態になります。縦書きWM_SIZEWM_SIZEは、ウインドウのサイズが変わったとき(ウインドウ初回生成時も)に、実行されます。MoveWindow()で、リッチエディットのウインドウサイズを変えます。ソースコードの入力ソースコードは下記のように入れてください。ウィンドウを作成します。グローバル変数にインスタンス処理を格納します。ウィンドウのメッセージを処理します。0;}上記の太線で示している箇所のみ追加です。101上記の太線で示している箇所のみ追加です。ENDEND任意のDLL/実行ファイル読み込みに関する脆弱性についてDLL読み込み脆弱性対策のため、本サイトを更新いたしました。RICHED20.DLLの呼び出し方を、絶対パス付きで呼ぶように変えました。修正前のアプリケーションでは、実行ファイルと同じフォルダに、RICHED20.DLLという同一ファイル名をもつファイルを置くと、こちらを読み込むという問題がありました。このサイトを見てアプリケーションを作成され、配布をされている方は、修正をお願いいたします。