Возникли проблемы с функцией LoadToolBarEx класса CMFCToolBar и установленным идентификатором для класса COpenGLControl
Я создал новый пустой диалог для проверки кода. Некоторые заметки о CMFCToolBar - закрепление больших кнопок и использование MDIClientArea, но я вижу, что эта строка производит false
:
bool b = m_FirstToolbar.LoadToolBarEx(IDR_MAINFRAME, tbi, TRUE);
и это ресурсы моего проекта:
в чем проблема и что я должен добавить к ресурсам?
Помогите мне, пожалуйста. это третий вопрос, который я задаю сегодня о панелях инструментов в приложении, основанном на диалогах MFC.
Моя панель инструментов в диалоговом приложении mfc не отображается
после написания кода для добавления панели инструментов в основанную на диалоге MFC диалог не запускается
и я прочитал много вопросов на этом сайте, а также изучил много страниц в Интернете. наконец-то я пришел к тому, чтобы использовать CMFCToolBar
класс вместо CToolbar
для поддержки 32-битных 24x24 иконок для панели инструментов, но ни одна из страниц не помогла на самом деле, и я до сих пор не видел панель инструментов в верхней части моего диалога.
Не могли бы вы помочь мне представить ссылку, видеоурок и т. Д., Который научил добавлять панели инструментов, поддерживающие значки 32-битных изображений в Visual Studio 2010, в диалоговое приложение mfc **
** Я бы предпочел учебник, который начался с нуля и полезен как для начинающих, так и для aguru.
Спасибо. Я был бы рад здесь ваши ответы.
Отредактированный раздел моего вопроса на основе полезных руководств @Edward Clements
это файл Resource.h моего проекта
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by InitialJobProject2.rc
//
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDD_INITIALJOBPROJECT2_DIALOG 102
#define IDR_MAINFRAME 128
#define IDB_BITMAP1 130
#define IDR_TOOLBAR1 132
#define IDI_ICON1 135
#define IDC_NewBtnTbr 135
#define IDC_ZoomInBtnTbr 136
#define IDC_ZoomOutBtnTbr 137
#define IDI_ICON2 138
#define IDC_PanBtnTbr 138
#define IDC_TXTDataFile 1001
#define IDC_EDTDataPath 1002
#define IDC_BTNBrowse 1003
#define IDC_RICHEDTHeader 1005
#define IDC_OPENGL 1009
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 139
#define _APS_NEXT_COMMAND_VALUE 32776
#define _APS_NEXT_CONTROL_VALUE 1010
#define _APS_NEXT_SYMED_VALUE 104
#endif
#endif
Я не знаю, как установлены цифры? и как мне рассчитать номер, чтобы присвоить новый идентификатор?
В чем разница между _APS_NEXT_RESOURCE_VALUE
, _APS_NEXT_COMMAND_VALUE
, _APS_NEXT_CONTROL_VALUE
а также _APS_NEXT_SYMED_VALUE
?
и если я назначу номер 1010 новому идентификатору, то что я должен написать перед _APS_NEXT_CONTROL_VALUE
?
и еще один вопрос, который возник, вот этот:
Я использовал вспомогательный класс MFC/C++ для изменения размера окна из кода проекта, чтобы привязать к нему элементы управления диалога. Этот класс использует ID элементов управления. и я добавил COpenGLControl из codeguru для настройки OpenGL в элементе управления MFC, который не требует идентификатора в своем конструкторе, но, поскольку он является производным от класса CWnd, он имеет функцию setHelpID
Могу ли я добавить этот способ IDM,IDB,IDD,IDR,IDS,IDI or IDC
(Я не знаю, какой из них, пожалуйста, помогите мне, как выбрать между ними and then assign this ID through function
setHelpID to the instance of the class
COpenglControl ? and then use this ID to hook the openGL window to the main window through class
CWndResizer`?
Задача решена
способ, который я предложил для установки идентификатора для окна opengl, работает, за исключением того, что вы должны использовать функцию-член SetDlgCtrlID вместо SetHelpID
1 ответ
Я не знаком с загрузкой панелей инструментов в диалоге, но вам нужно создать ресурс панели инструментов с идентификатором (я бы не стал использовать IDR_MAINFRAME
себя, так как это сбивает с толку, и вам может понадобиться несколько панелей инструментов) и использовать этот идентификатор в LoadToolBarEx
; панель инструментов будет содержать кнопки с собственными изображениями и идентификаторами. Вам понадобится ON_COMMAND
а также ON_UPDATE_COMMAND_UI
в вашей карте сообщений, чтобы включить / отключить кнопки и реагировать на нажатия кнопок.
В этом сообщении на форуме MSDN упоминается, что ваш диалог должен быть получен из CDialogEx
вместо CDialog
,
Существует очень мало четкой документации по элементам управления MFC Featurepack (например, CMFCToolbar), эта статья CodeProject может помочь (несмотря на то, что речь идет о переносе унаследованного приложения, в нем все еще есть много полезных функций и недостатков).
Еще немного информации в этой статье, посвященной динамическому созданию панелей инструментов (без ресурса панели инструментов).