Programming/MFC

MFC 다이얼로그 기반 툴바 붙이기

acidpop 2007. 4. 27. 16:52
반응형

www.devpia.com김동천(winicon)님이 올려주신 글 내용 중 일부

--------------------------------------------------------------


인터넷에서 겨우 구한겁니다. 도움이 되었으면 합니다.
CDLGTOOLBAR1Dlg의 헤더에



CToolBar cToolBar;


BOOL CDLGTOOLBAR1Dlg::OnInitDialog()
{
    ~
                      ~
                      ~
    mInitToolbar();

void CDLGTOOLBAR1Dlg::mInitToolbar()
{
    if (!cToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
         | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
        !cToolBar.LoadToolBar(IDR_TOOLBAR1))

    {
        TRACE0("Failed to Create Dialog Toolbar\n");
        EndDialog(IDCANCEL);
    }
CRect    rcClientNew; // New Client Rect with Tollbar Added
    GetClientRect(rcClientOld); // Retrive the Old Client WindowSize

    // Called to reposition and resize control bars in the client area of a window
    // The reposQuery FLAG does not really traw the Toolbar.  It only does the calculations.
    // And puts the new ClientRect values in rcClientNew so we can do the rest of the Math.
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rcClientNew);

    // All of the Child Windows (Controls) now need to be moved so the Tollbar does not cover them up.
    // Offest to move all child controls after adding Tollbar
    CPoint ptOffset(rcClientNew.left-rcClientOld.left,rcClientNew.top-rcClientOld.top);

    CRect    rcChild;
    CWnd*    pwndChild = GetWindow(GW_CHILD);  //Handle to the Dialog Controls

    while(pwndChild) // Cycle through all child controls
    {

        pwndChild->GetWindowRect(rcChild); //  Get the child control RECT
        ScreenToClient(rcChild); 
        rcChild.OffsetRect(ptOffset); // Changes the Child Rect by the values of the claculated offset
        pwndChild->MoveWindow(rcChild,FALSE); // Move the Child Control
        pwndChild = pwndChild->GetNextWindow();

    }

    CRect    rcWindow;
    GetWindowRect(rcWindow); // Get the RECT of the Dialog
    rcWindow.right += rcClientOld.Width() - rcClientNew.Width(); // Increase width to new Client Width
    rcWindow.bottom += rcClientOld.Height() - rcClientNew.Height(); // Increase height to new Client Height
    MoveWindow(rcWindow,FALSE); // Redraw Window

    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);


} 



 

출처 : www.devpia.com

반응형