MFCのSDIにコントロールを貼り付けます。
(注)TABキーで移動が反応しません



○WM_CREATEイベントをCS***View.cppに登録します。--------------------------------------------------

int CSditestestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CView::OnCreate(lpCreateStruct) == -1)
        return -1;
    
    // TODO: この位置に固有の作成用コードを追加してください

    //CRect(左,上,左+幅,上+高さ)

    CEdit* pEdit = new CEdit();
    pEdit->Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP,CRect(10,10,100,40), this,100);
    pEdit->ModifyStyleEx(0,WS_EX_CLIENTEDGE,SWP_DRAWFRAME);

    CButton*pButton =new CButton();
    pButton->Create("CButton",WS_CHILD | WS_VISIBLE | WS_TABSTOP,CRect(10,50,100,80),this,200);

    CStatic*pStatic = new CStatic();
    pStatic->Create("CStatic",WS_VISIBLE | WS_CHILD | WS_TABSTOP,CRect(10,90,100,120), this,300);

    return 0;
}
//GetDlgItem(200)->MoveWindow(CRect(20,50,110,80));//←動的な位置の変更も可能です


○表示はされましたが、しかしこの状態ではボタンのイベントがありませんので、登録します。---------------

CS***View.cpp ------------------------------

BEGIN_MESSAGE_MAP(CSditestestView, CView)
    〜ここにいろいろある。〜
    ON_BN_CLICKED(200, OnBnClicked1 )    //←追加
END_MESSAGE_MAP()

CS***View.h --------------------------------

// 生成されたメッセージ マップ関数
protected:
    //{{AFX_MSG(CSditestestView)
    〜ここにいろいろある。〜

    afx_msg void OnBnClicked1();      //←追加
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()

CS***View.cpp ------------------------------

上で指定したイベントによって読み出されるメソッドを書き込みます。
void C***View::OnBnClicked1(){
    MessageBox("ok");
}

テキストボックスのイベントを拾うときは、上に次の項目を追加します---------------------

afx_msg void OnChangeEdit1();

ON_EN_CHANGE(100, OnChangeEdit1)

void C***View::OnChangeEdit1(){
    MessageBox("edit");
}


■CEditを全面に貼り付ける+マルチライン&スクロールバー

CEdit*edit=new CEdit();

int OnCreate()
{
    edit->Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_VSCROLL | ES_MULTILINE,CRect(0,0,0,0), this,100);
    edit->ModifyStyleEx(0,WS_EX_CLIENTEDGE,SWP_DRAWFRAME);
    return 0;
}

サイズを最大に変更する
void OnSize()
{
    POINT pt=GetSize(this);
    code_edit->MoveWindow(0,0,pt.x,pt.y);
}

ウィンドウのサイズを取得する
POINT GetSize(CView*cv){
    RECT zRect;
    cv->GetClientRect( &zRect );
    POINT p;
    p.x=zRect.right - zRect.left;
    p.y=zRect.bottom - zRect.top;
    return p;
}



▲トップページ > Windows と C++