環境
VC2008 Express Edition
SDK
Vista SP1
エディットコントロールのスタイルを変更(ES_READONLYを追加・削除)したいのですが、
うまくいきません。
ES_XXXXXXXX系の場合のスタイル変更をご教授願います。
WS_XXXXXXX系は以下の関数でうまくいきます。
// ウィンドウスタイルを外す
LONG testRemoveWindowStyle(HWND hWnd, LONG style)
{
LONG old_style = GetWindowLong(hWnd, GWL_STYLE);
LONG new_style = old_style & ~style;
SetWindowLong(hWnd, GWL_STYLE, new_style);
return new_style;
}
// ウィンドウスタイルを追加する
LONG testSetWindowStyle(HWND hWnd, LONG style)
{
LONG old_style = GetWindowLong(hWnd, GWL_STYLE);
LONG new_style = old_style | style;
SetWindowLong(hWnd, GWL_STYLE, new_style);
return new_style;
}
「CEdit::SetReadOnly」はだめですか?
リッチエディットの方が色も変えられるのでいいと思います。
ITOさん、お返事ありがとうございます。
実は、ES_AUTOHSCROLLも変更したいのです。
あと、できればMFCでない回答だとありがたいです。
http://www.nitoyon.com/vc/reference/gui/edit.htm
http://gurigumi.s349.xrea.com/programming/visualcpp/sdk_redit1.html
http://www.kumei.ne.jp/c_lang/sdk3/sdk_225.htm
参考にどうぞ
SDKは詳しくないのですが、「EM_SETREADONLY」がカギみたいですね。
例
>SendMessage(SELF:Handle(), EM_SETREADONLY, DWORD(_CAST, lNewValue),
0L)
LRESULT SetReadOnly( HWND hWndEdit, BOOL bReadOnly)
{
return ::SendMessage( hWndEdit, EM_SETREADONLY, static_cast<WPARAM>(
bReadOnly), 0L)
}
リードオンリーにする場合は bReadOnly = TRUE、しない場合は FALSE;
参考までにですが、
非MFC使いにもMFCのヘルプとソースコードは役に立ちますよ。
まず、エディットコントロールのMFCラッパクラスである、CEditをMSDNで検索します。
CEditのメンバ をMSDNで検索すると日本語解説付きで非常に分かりやすいです。
で、すぐに、CEdit::SetReadOnly()が目に入ります。
その上で、MFCのソースコードフォルダ(VS2005なら C:Program Files\Microsoft
Visual Studio 8\VC\atlmfc\ 以下)から、[CEdit::SetReadOnly]の文字列をgrepしま
す。
すると以下の行が見つかります。
_AFXWIN_INLINE BOOL CEdit::SetReadOnly(BOOL bReadOnly )
{ ASSERT(::IsWindow(m_hWnd)); return (BOOL)::SendMessage(m_hWnd,
EM_SETREADONLY, bReadOnly, 0L); }
結果として、
SendMessage(<ウィンドウハンドル>, EM_SETREADONLY, TRUE, 0L);
を導き出せるわけです。
FlatWestさんもありがとうございます。
書籍とMSDN読んでみます。