cs.styleの設定を実行中に変更したいのですが、PreCreateWindowは
最初に1回しか実行されない様なのです。
下記のようにPreCreateWindowを記載し
BOOL CXXXXXCtrl::PreCreateWindow(CREATESTRUCT& cs)
{
cs.lpszClass = _T("EDIT");
if ( m_appearance == 1){
cs.dwExStyle = WS_EX_CLIENTEDGE;
}
if ( m_enabled == TRUE ){
cs.style =WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT;
}
else{
cs.style =WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT | ES_READONLY;
};
return COleControl::PreCreateWindow(cs);
}
void CXXXXXCtrl::SetAppearance(short nNewValue) に
RedrawWindow();
UpdateWindow();
InvalidateRect();
InvalidateRgn();
のどれ書いても OnDraw が実行され、PreCreateWindowは実行されません
でした、CreateWindow なので最初の一回しか実行されないのかも
しれませんが、CreateWindow後のcs.styleの変更方法を押しててください。
CWnd::ModifyStyle
しかしウィンドウスタイル変更に適切に対応しないものが多い。
一部のコントロールの一部のウィンドウスタイルを除いて
ウィンドウスタイルが実行途中で変更されることを想定していないからね。
WS_VISIBLEならShowWindowを使う。
ModifyStyle試しましたが、だめでした。(T_T)
やりたいのは、エディットボックスの、フラットと3Dを切り替えないの
ですが、他に方法は無いものでしょうか?(^_^;)
エディットボックスのフラットと3Dって具体的になにをどう変えるの?
調べるの面倒
というか不明瞭
SetAppearanceって何?
スタイル変えてフレームごとの再描画(SWP_DRAWFRAMEや
SWP_FRAMECHANGEDだと思うがよく知らん)させても
だめならあきらめるしかないな。
http://msdn.microsoft.com/ja-jp/library/bb775464(en-us).aspx
には、ES_READONLYはEM_SETREADONLYってあるけど。
BOOL CXXXXCtrl::PreCreateWindow(CREATESTRUCT& cs) で
cs.dwExStyle に WS_EX_CLIENTEDGE をセットすると 3Dの
エディットボックスが作成っされるのですが。
SetAppearanceはオートメーションのプロパティの追加で
作成された部分です(^_^;)
VBのテキストボックスのようなOCXを作りたいのです。
VBのテキストボックスを使うと項目毎に数値の編集などが面倒なので
OCXで数値に編集まで行い、VBのテキストボックスと同じような機能
を持たせようとしているのですが。
やりたい事、分かって頂けたでしょうか?
ストックプロパティで定義すればOKでした。
VBのプロパティ設定で 0-フラット 1-3D と表示されないので。
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200901/09010029.txt
を参考にSetAppearanceを追加しました
ストックプロパティの値の取得は
http://msdn.microsoft.com/ja-jp/library/6hx27e5c(VS.80).aspx
http://support.microsoft.com/kb/199516/ja
を参考にしました。
ツイート | ![]() |