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

解決


げんさん  2009-02-08 04:30:02  No: 69631

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-08 05:58:23  No: 69632

CWnd::ModifyStyle

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

WS_VISIBLEならShowWindowを使う。


げんさん  2009-02-09 09:25:51  No: 69633

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


wclrp ( 'o')  2009-02-09 11:35:00  No: 69634

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

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

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


げんさん  2009-02-09 23:05:54  No: 69635

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


げんさん  2009-02-09 23:14:13  No: 69636

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


げんさん  2009-02-10 02:50:27  No: 69637

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加