お世話になっております。
VC++7.0の ATL COMウィザートを利用してCOMサーバ(属性付き)を作成しました。
COMの表示スタイルは「none」を選択しました。
これにより、OCXは無事作成されたのですが実際にVBのフォームに貼り付けを行う場合、2インチ四方の大きな正方形として表示されてしまいます。
できれば、もっと小さな正方形を初期値としてもちたいのですがどのようにすればよいのでしょうか?(OnDrawが怪しい・・?)
ご教授のほどよろしくお願いいたします。
昔作ったソースを見て・・・
※ MFCのCOMとして作成したはずで、ATL COMでは
なかったはず。あくまで参考ということで・・・
クラスのコンストラクタで、SetInitialSize( 32 , 32 );
とすれば、大きさを指定できます。
また、表示される正方形ですが、ビットマップイメージを貼り付けたければ
OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
で、
CBitmap bitmap;
BITMAP bmp;
CRect rcWBounds;
CPictureHolder picHolder;
if ( !AmbientUserMode() ){
// デザイン時のOCXの表示
bitmap.LoadBitmap( IDB_COM1UTIL );
bitmap.GetObject( sizeof( BITMAP ) , &bmp );
rcWBounds.left = 0;
rcWBounds.top = 0;
rcWBounds.right = bmp.bmWidth;
rcWBounds.bottom = bmp.bmHeight;
picHolder.CreateFromBitmap( ( HBITMAP )bitmap.m_hObject , NULL );
picHolder.Render( pdc , rcBounds , rcWBounds );
}
とすれば、ビットマップを貼り付けられます。
ただしこの場合、デザインモード時のみ表示させ、実行時は非表示に
していますので、AmbientUserMode()でモードの確認をしています。
フォーム上でその貼り付けたコントロールの属性を指定したければ、
PreCreateWindow(CREATESTRUCT& cs)
で、
cs.lpszClass = _T("STATIC");
return COleControl::PreCreateWindow(cs);
として指定しています。
あくまで参考・・・
※ この手の情報、いろいろ書籍も探しましたが、なかなか見つからなく
苦労したのを思い出しました。頑張って下さい。
以上。
オショウさま :
ご回答ありがとうございます。
コンストラクタで、サイズを設定する方法は、実は試みたことがあります。
//サイズ変更不可
m_bAutoSize = TRUE ;
//基本サイズ設定
m_sizeNatural.cx = 10 ;
m_sizeNatural.cy = 20 ;
//実参照サイズ設定
m_sizeExtent.cx = 10 ;
m_sizeExtent.cy = 20 ;
これで、初期値を設定できたと思ったのですが、実際の表示サイズは、やっぱり2インチ四方で表示されてしまいました。
SetInitialSizeは、MFCなので残念ながら使用できませんし・・・
引き続き調査します!
ATL COMプログラミング
ISBN4-88135-699-2 \4800
この書籍のp.508 に記載がありました。
要は、OnCreateで、rc構造体にサイズを指定して、そのコントロールの
.Create(...)で、その設定したrcを渡してやるそうです。
また、親ウィンドウが変化した場合に動的に追従させるには、・・・
そのコントロールに、::SetObjectRects(...)を追加して、コントロール
の位置、サイズを変化に追従させることができるとありました。
この書籍が今入手可能かどうかは、解りませんが・・・日夜ATL COMと
戦っておられるなら、なんとかなるかと・・・
少ない情報ですが、参考にして下さい。
以上。
ツイート | ![]() |