ソフト開発塾 |
VB上のCaptionでなく、TEXT BOXのTEXTに文字列を書き込むのは 簡単(可能)ですか?ウインドウのハンドルをVB側からVCコールの 引数で与えればVC側で書き込み可能だと聞きましたが本当ですか? 簡単な例題があれば幸いです。
A:VBのテキストボックスのハンドルを渡せば、コントロールは可能ですが、
VCで機械制御を割り込みで行っていて、その状態をVBのフォームに表示したいとか
特殊なことをするのでしょうか?
VCでVBのフォームに張り付けてあるテキストボックス(入力エリア)を見つけ、書き込む動作は
ウイルスみたいに思いますが...
Q:VCで機械制御を割り込みで行っていて、VCのプログラムから VBに戻らずにその制御中の状態をVBのフォームに表示したい と考えております。
A:本来の趣旨からはずれますが、VC側でVBが取得できるプロパティを用意しておいて、VBで1秒間隔ぐらいで監視するのがよいと思います。
ただ、メインがVBで作成する(=VBが終了すると機械制御が終わっても良い)のであれば、考え方が変わってくる。制御中の状態は、どれぐらいの項目があるのでしょう?数が少ないのであれば、テキストボックスのhWndをVCに渡しておいて、VCでhWndに対して変更すればよいと思います。
VB フォームのソース | |
---|---|
Option Explicit Private Sub Command1_Click() Me.C0121C1.Puls End Sub Private Sub Form_Load() Me.C0121C1.wk01hWnd = Me.Text1.hWnd End Sub |
VC側 OCXを作成するから、メソッドPulsを作成しました。これはVBでテストのためにOCXに指示するためです。
void CC0121CCtrl::Puls() { // TODO: ここにディスパッチ ハンドラ コードを追加してください。 CWnd myWnd; myWnd.Attach(m_wk01hWnd); myWnd.SetWindowText("XXXX"); myWnd.Detach(); } |
また、VC側でプロパティwk01hWndを作成しました。これは、VB側のテキストボックスのhWndを記憶するためです。
VC側で実際にVBのhWndを保管するため、プライベートのメンバ変数m_wk01hWndを追加しています。
VBのハンドルの保管 | |
---|---|
void CC0121CCtrl::SetWk01hWnd(long nNewValue) { // TODO: ここにプロパティ ハンドラを追加してください m_wk01hWnd=(HWND)nNewValue; SetModifiedFlag(); } |