Новичок
Профиль
Группа: Участник
Сообщений: 1
Регистрация: 8.5.2013
Репутация: нет Всего: нет
|
Здравствуйте! На новом проекте решил изучить MFC, соответственно только начинаю в ней копаться и сразу же возникли проблемы при создании панели инструментов. Кое-как я разобрался как ее отобразить в приложении, но беда в том, что кнопки никак не хотят отрисовываться (вместо них просто серые квадраты), более того они даже не активны, нажать по ним нельзя. Собственно сама панел должна выглядеть так:  На деле же получается так:  Код который приводит к такому результату следующий: Код | int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;
// create a view to occupy the client area of the frame if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)){ TRACE0("Failed to create view window\n"); return -1; }
if (!m_wndStatusBar.Create(this)){ TRACE0("Failed to create status bar\n"); return -1; // fail to create } m_toolbar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_toolbar.LoadToolBar(IDR_TOOLBAR1);//IDR тулбар ресурса
//InitToolBar();
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
//это позволит тулбар перетаскивать /*m_toolbar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_toolbar);*/
return 0; }
|
Помня как все это делается на winapi, добавил функцию InitToolBar(). Дефайны: Код | //#define ID_TOOLBAR 201 #define IDC_TB_EDITX 202 #define IDC_TB_EDITY 203 //#define NUM_BUTTONS 17 #define EDIT_WIDTH 60 #define EDIT_HEIGHT 25 #define SEPARATOR_WIDTH 10
|
сама функция InitToolBar(): Код | void CMainFrame::InitToolBar() { const int NUM_BUTTONS = 25; UINT buttonID[NUM_BUTTONS] = {ID_FILE, ID_SEP, ID_UNDO, ID_REDO, ID_SEP, ID_GRID, ID_SCHEMATIC, ID_SEP, ID_SELECT, ID_MOVE, ID_ROTATE, ID_SCALE, ID_SEP, ID_SEP, ID_SEP, ID_SEP, ID_SEP, ID_PLAY, ID_PAN, ID_SET, ID_EXT, ID_NormZoom, ID_SEP, ID_LAYERS, ID_MERGE};
UINT buttonStyle[NUM_BUTTONS] = {TBSTYLE_BUTTON, TBSTYLE_SEP, TBSTYLE_BUTTON, TBSTYLE_BUTTON, TBSTYLE_SEP, TBSTYLE_CHECK, TBSTYLE_CHECK, TBSTYLE_SEP, TBSTYLE_CHECKGROUP, TBSTYLE_CHECKGROUP, TBSTYLE_CHECKGROUP, TBSTYLE_CHECKGROUP, TBSTYLE_SEP, TBSTYLE_SEP, TBSTYLE_SEP, TBSTYLE_SEP, TBSTYLE_SEP, TBSTYLE_BUTTON, TBSTYLE_CHECKGROUP, TBSTYLE_CHECKGROUP, TBSTYLE_BUTTON, TBSTYLE_BUTTON, TBSTYLE_SEP, TBSTYLE_BUTTON, TBSTYLE_BUTTON};
TBBUTTON tbb[NUM_BUTTONS]; memset(tbb, 0, sizeof(tbb));
for(int i = 0; i < NUM_BUTTONS; ++i){ if(i == 13 || i == 14){ tbb[i].iBitmap = EDIT_WIDTH; } else if(buttonID[i] == ID_SEP){ tbb[i].iBitmap = SEPARATOR_WIDTH; } else{ tbb[i].iBitmap = i; }
tbb[i].idCommand = buttonID[i]; tbb[i].fsState = TBSTATE_ENABLED; tbb[i].fsStyle = buttonStyle[i]; }
m_toolbar.SetButtons((UINT *)buttonID, NUM_BUTTONS); for(int i = 0; i < NUM_BUTTONS; i++){ m_toolbar.SetButtonStyle(i, buttonStyle[i]); }
m_toolbar.EnableWindow(1); }
|
Результат такой:  т.е. никакого толку. Приложение Single document без архитектуры документ/представление, с такими настройками интерфейса: Помогите разобраться, все делаю как в туториалах, не пойму в чем проблема.
|