他のView(CListView、CFormView等) にアクセスする方法 (2006.11.18)
1.アプリケーションクラスのパブリックメンバとして操作するビューのポインタ変数を定義、CSsView.hもinclude。
class CSsApp : public CWinApp
{
public:
CSsApp();
CSsView *view; // コレ。
2.該当するビューのOnInitialUpdate()辺りに下記を記述。
// includeも必要。
#include "ssDoc.h" // ドキュメントクラスヘッダも必要かも。
#include "ssView.h"
void CSsView::OnInitialUpdate()
{
CSsApp *ap = (CSsApp *)AfxGetApp();
ap->view = this; // 1で追加したアプリケーションクラスのメンバに自分のアドレスを書き込み。
以上。使い方は
CSsApp *ap = (CSsApp *)AfxGetApp(); // ap変数で今後アプリケーションクラスへアクセスする。
// 該当viewにあるIDC_BUTTON1 にアクセス。
// apからviewポインタのGetDlgItemメンバで IDC_BUTTON1にアクセス。(変な日本語)
CButton *v=(CButton *)ap->view->GetDlgItem(IDC_BUTTON1);
v->SetWindowText("AAA"); // ボタンにAAAと書く。
v->EnableWindow(FALSE); // ボタンを使用不可にしたり後は何時もの使い方。
CWnd *cb=(CWnd *)ap->view->GetDlgItem(IDC_EDIT1); // CWnd型でアクセス。非表示に変更。(未確認)
cb->ShowWindow(SW_HIDE);
パブリックメンバ関数にもアクセスできます。
ap->view->test();
応用、
CDC *cd = v->GetDC(); // ボタンのデバイスコンテキスト取得
cd->MoveTo(0,0); // ボタンの0,0にペンを移動
cd->LineTo(10,10); // 10,10の位置まで線を引く
ReleaseDC(cd); // CDC開放
これでボタンに線が引けます。他の使用法はCDCのメンバを調べて下さい。