MFC ActiveX Control で cs.style 変更後の再描画

解決


げんさん  2009-02-07 19:30:02  No: 69631  IP: 192.*.*.*

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の変更方法を押しててください。

編集 削除
wclrp ( 'o')  2009-02-07 20:58:23  No: 69632  IP: 192.*.*.*

CWnd::ModifyStyle

しかしウィンドウスタイル変更に適切に対応しないものが多い。
一部のコントロールの一部のウィンドウスタイルを除いて
ウィンドウスタイルが実行途中で変更されることを想定していないからね。

WS_VISIBLEならShowWindowを使う。

編集 削除
げんさん  2009-02-09 00:25:51  No: 69633  IP: 192.*.*.*

ModifyStyle試しましたが、だめでした。(T_T)
やりたいのは、エディットボックスの、フラットと3Dを切り替えないの
ですが、他に方法は無いものでしょうか?(^_^;)

編集 削除
wclrp ( 'o')  2009-02-09 02:35:00  No: 69634  IP: 192.*.*.*

エディットボックスのフラットと3Dって具体的になにをどう変えるの?
調べるの面倒
というか不明瞭
SetAppearanceって何?

スタイル変えてフレームごとの再描画(SWP_DRAWFRAMEや
SWP_FRAMECHANGEDだと思うがよく知らん)させても
だめならあきらめるしかないな。

http://msdn.microsoft.com/ja-jp/library/bb775464(en-us).aspx
には、ES_READONLYはEM_SETREADONLYってあるけど。

編集 削除
げんさん  2009-02-09 14:05:54  No: 69635  IP: 192.*.*.*

BOOL CXXXXCtrl::PreCreateWindow(CREATESTRUCT& cs) で
cs.dwExStyle  に WS_EX_CLIENTEDGE をセットすると  3Dの
エディットボックスが作成っされるのですが。
SetAppearanceはオートメーションのプロパティの追加で
作成された部分です(^_^;)

編集 削除
げんさん  2009-02-09 14:14:13  No: 69636  IP: 192.*.*.*

VBのテキストボックスのようなOCXを作りたいのです。
VBのテキストボックスを使うと項目毎に数値の編集などが面倒なので
OCXで数値に編集まで行い、VBのテキストボックスと同じような機能
を持たせようとしているのですが。
やりたい事、分かって頂けたでしょうか?

編集 削除
げんさん  2009-02-09 17:50:27  No: 69637  IP: 192.*.*.*

ストックプロパティで定義すれば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
を参考にしました。

編集 削除