VB6でVC++6のocxコントロールを表示するには?

解決


kiRoi  2012-10-11 17:34:07  No: 73539  IP: [192.*.*.*]

VC++6.0でocxコントロールを作成しました
これをVB6.0で使用したいのですが、
コントロールの登録とフォームへの貼り付けは行えるのですが、
コントロールの中身が何も表示されません
デバッグモードで見たところでは、
コントロール側のコードを通っていないようなのですが・・・

VCでは動作確認済みです
ただ登録して貼り付ければ表示はしてくれると思っていたのですが、
何か他に必要な手順があるのでしょうか?

編集 削除
オショウ  2012-10-11 19:41:45  No: 73540  IP: [192.*.*.*]

xxxxxxCtl.cpp に、OnDrawのコードはあるんですか?

コードは示せないと思いますが、どうやってコードの元を
作ったのでしょうか・・・

今はもう参考本も廃版になってますので入手不能ですし、
既に忘れてしまっているので、昔作ったコードを見てみま
したが、何か細工(宣言)が必要だったのかどうか・・・
もう記憶の彼方・・・

以上。

編集 削除
kiRoi  2012-10-12 09:03:49  No: 73541  IP: [192.*.*.*]

基本的な部分はこちらのサイトを元にして作りました
http://www.koutou-software.co.jp/junk/howto-mfcdlg.html

OnDrawについては、一応宣言だけしてあるのですが、現在は中身は特に記述していません
コントロールの中身については以下のような記述があります
①FORMVIEWダイアログのクラス内でOnInitDialogを使用し、
  FORM上に表示するピクチャコントロールの大きさをFORMの表示領域に合わせて変更する処理
②ピクチャコントロール上でマウスドラッグのイベントを起こすため、サブクラス化
  ドラッグ移動したピクチャコントロールの描画には、OnPaintを使用している
③xxxCtlでは、FORMVIEWダイアログのクラスインスタンスの生成のみ行っている

以上です
何かおかしな点、必要な情報がありましたらご指摘お願いします

編集 削除
オショウ  2012-10-14 22:40:18  No: 73542  IP: [192.*.*.*]

OnDrawの処理が無いなら、フォームに貼っても何も表示
されません。当たり前かと思いますが・・・

void CxxxxxxCtrl::OnDraw(
      CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
//  pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
//  pdc->Ellipse(rcBounds);

  CBitmap      bitmap;
  BITMAP      bmp;
  CRect      rcWBounds;
  CPictureHolder  picHolder;

  if ( !AmbientUserMode() ){
    // デザイン時のOCXの表示
    bitmap.LoadBitmap( IDB_XXXXXXXX );
    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 );
  }
}

上記コードなら、VB6のフォームのデザイン時にOCXの絵が
表示されます。実行時は、何も表示されません。

お解りになりますか?

以上。参考まで

編集 削除
kiRoi  2012-10-15 08:36:33  No: 73543  IP: [192.*.*.*]

OnDrawに記述することで表示ができました
この時、this->GetParent()などの
thisを全てAfxGetMainWnd()しなければならないという問題もありましたが
これに関しては勉強しておきます

C++の方ではOnCreateに記述すれば表示されたので、それでOkだと思っていました
逆にVBの方ではOnCreateを通りませんでした
まだ勉強不足なので、いくつか壁にぶつかったりしていますが、
VB6での表示についてはできましたので、解決とさせていただきます

ありがとうございました

編集 削除