特定の文字を選択する方法について取り上げます。次のエディットコントロールを見てください。上図では、bという文字が現在選択されています。このような選択をアプリケーションから行うには、EM_SETSELを送信します。2);EM_SETSELのWPARAMには、選択を開始する文字の位置を指定します。文字の位置はゼロベースで表され、bという文字はこのエディットコントロールの1番目の文字なので、1を指定しています。2番目の文字であるcの前まで(つまりbだけ)が選択されることになります。逆に、cも選択したい場合は、LPARAMに3を指定することになります。WPARAMとLPARAMが同じ値である場合は、キャレットが指定位置に移動するだけで文字が選択されることはありません。それでは上記でeという文字を選択するにはどうすればよいでしょうか。eという文字は4番目に存在しますから、WPARAMに4を指定すればよいように思えますが、実はそうではありません。abcとdefの間には改行文字が存在しており、このような文字も文字数としてカウントされることになっているからです。上図のエディットコントロールに設定されている文字列は、次のように表すことができます。TEXT("abc\r\ndef")改行コードは\rと\nで表すことができ、これらは文字数としてカウントされることになっています。eという文字を選択する場合はWPARAMに6、LPARAMに7を指定することになります。先頭からの文字数によって表され、行や列という単位で表されないことに注意してください。選択されている文字の位置を取得したい場合は、EM_GETSELを送信します。(LPARAM)&dwEnd);dwStartに選択の開始位置が返り、dwEndに選択の終了位置が返ります。両者の値が同一である場合は、文字が選択されていないことを意味します。その文字が何行目に存在するかを特定できることになります。今回のプログラムは、エディットコントロール上に入力された文字列の終端に文字を追加します。Enterキーの押下を改行と見なすためにES_WANTRETURNを指定します。スクロールバーを表示したい場合はWS_VSCROLLやWS_HSCROLLを指定することもできます。拡張スタイルにWS_EX_CLIENTEDGEを指定するとウインドウに枠が表示されるようになります。ボタンが押された場合は、文字列の終端に;が追加されることになります。これをEM_SETSELに指定します。EM_REPLACESELは、現在のキャレットの位置にLPARAMの文字列を追加します。