エディットコントロールのスタイル変更 – プログラミング – Home

エディットコントロールのスタイル変更
 
通知
すべてクリア

[解決済] エディットコントロールのスタイル変更


nfs
 nfs
(@nfs)
ゲスト
結合: 16年前
投稿: 48
Topic starter  

環境
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;
}


引用未解決
トピックタグ
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

「CEdit::SetReadOnly」はだめですか?
リッチエディットの方が色も変えられるのでいいと思います。


返信引用
nfs
 nfs
(@nfs)
ゲスト
結合: 16年前
投稿: 48
Topic starter  

ITOさん、お返事ありがとうございます。

実は、ES_AUTOHSCROLLも変更したいのです。
あと、できればMFCでない回答だとありがたいです。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

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)


返信引用
FlatWest
 FlatWest
(@FlatWest)
ゲスト
結合: 15年前
投稿: 17
 

LRESULT SetReadOnly( HWND hWndEdit, BOOL bReadOnly)
{
return ::SendMessage( hWndEdit, EM_SETREADONLY, static_cast<WPARAM>(
bReadOnly), 0L)
}

リードオンリーにする場合は bReadOnly = TRUE、しない場合は FALSE;


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

参考までにですが、
非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);
を導き出せるわけです。


返信引用
nfs
 nfs
(@nfs)
ゲスト
結合: 16年前
投稿: 48
Topic starter  

FlatWestさんもありがとうございます。
書籍とMSDN読んでみます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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