Domenik
Гость
|
|
« : 13-11-2009 07:05 » |
|
Здравствуйте, впервые столкнулся с необходимостью написания графического интерфейса на Win32 API, пойском искал, но ничего конкретного не нашел.
Вопрос заключается вот в чем: "Как сделать ToolBar со своими(нарисованными вручную) кнопками?"
Буду благодарен за любую информацию по данному вопросу... Среда разработки VS2008
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #1 : 13-11-2009 08:03 » |
|
Как? - Очень геморрно. Лёшка скоро закончит статью по созданию графического контрола. Но он на базе MFC. С Win API ещё муторней. Но можно. А в чём собственно проблема? Теория очень простая - окошко с обработчиком WM_PAINT, отлавливание сообщений мыши и клавы, выдача собственных сообщений. Начать и кончить. Да, самый главнй момент - кнопки Toolbar не получают фокус - это пожалуй самое сложное.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 13-11-2009 08:12 » |
|
дык там всё легко переводится на АПИ, если опыт с ним, АПИ, работы есть
|
|
|
Записан
|
|
|
|
Domenik
Гость
|
|
« Ответ #3 : 13-11-2009 08:34 » |
|
MFC к сожалению не использую... Как? - Очень геморрно. Лёшка скоро закончит статью по созданию графического контрола. Но он на базе MFC. С Win API ещё муторней. Но можно. А в чём собственно проблема? Теория очень простая - окошко с обработчиком WM_PAINT, отлавливание сообщений мыши и клавы, выдача собственных сообщений. Начать и кончить. Да, самый главнй момент - кнопки Toolbar не получают фокус - это пожалуй самое сложное.Пожалуй этим и придется воспользоваться, а на счет получения фокуса, то этого и не требуется, при нажатии на кнопку должно выскакивать окно диалога в котором происходит соединение, после чего кнопка становится неакитивной...
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #4 : 13-11-2009 10:00 » |
|
Эмммм... тогда почему собственно Toolbar? Какие именно ф-ции Toolbar необходимы? Пока получается просто графическая кнопка. Или?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Domenik
Гость
|
|
« Ответ #5 : 13-11-2009 10:26 » |
|
Да в принципе можно придумать вариант с графической кнопкой... но тулбар нужен чтобы открывтьфайлы сохранять без лишних вопросов, чтобы пользователи меньше задавали вопросов. На тулбаре очень удобно использовать кнопки вперед и назад для пролистывания данных с которыми работает програмка.
Соответственно вопрос, как сделать просто кнопку с рисунком? (и можно ли как - то организовать псевдо ToolBar, состоящий из своих кнопок, кроме как вариантом отрисовки вручную?)
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #6 : 13-11-2009 10:32 » |
|
Чёт я всё больше и больше запутываюсь... Если нужна кнопка кнопка Toolbar, то надо её и использовать на стандартном виндовском. А картинки на кнопках всё-равно определяются программером. В чём проблема?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Domenik
Гость
|
|
« Ответ #7 : 13-11-2009 10:36 » |
|
А картинки на кнопках всё-равно определяются программером. В чём проблема?
Тогда вопрос такой, как изменить картинку на кнопке ToolBar? Скажем сделать на ToolBar кнопку с красным шариком?
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #8 : 13-11-2009 11:33 » |
|
Если ты работаешь в VS, то там это всё делается в редакторе ресурсов.
Если ты собираешь вручную, то добавляешь кнопку в ресуров файле (например в конце) и добавляешь (расширяешь) картинку с изображениями для Toolbar. Сначла смотришь её размеры. Например у тебя 6 кнопок по 16 (обычно) пикселей каждая, значит твоя картинка - 16*6 = 96 пикселей. В паинтбраше добавляешь к ней ещё 16 пикселей и рисуешь в этой области красный шарик. Обрати внимание, если фон остальных картинок например розовый, то и тебе надо залить новую область этим же цветом - он будет использоваться в качестве маски, другими словами области залитые этим цветом будут прозрачными. Ну ессно следи за тем, чтобы в твоём "шарике" тоже не было этого цвета, иначе получится "дырка".
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Domenik
Гость
|
|
« Ответ #9 : 13-11-2009 11:57 » |
|
Если ты работаешь в VS, то там это всё делается в редакторе ресурсов.
работаю в VS но проект пишу руками полностью, имею слабое представление о том как пользоваться ресурсами... Если ты собираешь вручную, то добавляешь кнопку в ресуров файле (например в конце) и добавляешь (расширяешь) картинку с изображениями для Toolbar.
А где находится эта картинка? или как ее получить? HWND CreateToolBar(HWND hWnd, DWORD dwStyle, UINT uCom) { static TBBUTTON but[6]; but[0].fsStyle = TBSTYLE_SEP;
but[1].iBitmap = STD_FILEOPEN; but[1].idCommand = CM_FILE_OPEN; but[1].fsState = TBSTATE_ENABLED; but[1].fsStyle = TBSTYLE_GROUP;
but[2].iBitmap = STD_FILESAVE; but[2].idCommand = CM_FILE_SAVE; but[2].fsState = TBSTATE_ENABLED; but[2].fsStyle = TBSTYLE_GROUP;
but[3].fsStyle = TBSTYLE_SEP;
but[4].iBitmap = STD_FILENEW; but[4].idCommand = CM_FILE_NEW; but[4].fsState = TBSTATE_ENABLED; but[4].fsStyle = TBSTYLE_GROUP;
but[5].iBitmap = STD_REDOW; but[5].idCommand = CM_FILE_REDOW; but[5].fsState = TBSTATE_ENABLED; but[5].fsStyle = TBSTYLE_GROUP;
return CreateToolbarEx(hWnd, dwStyle, uCom, 0, HINST_COMMCTRL, IDB_STD_SMALL_COLOR, but, 6, 0, 0, 0, 0, sizeof(TBBUTTON));
}
Вот так я создаю кнопки на ToolBar(стандартные), насколько я понимаю нужно будет добавить but[6].iBitmap = ??? but[6.idCommand = ??? but[6].fsState = ??? but[6].fsStyle = ???
Возможно я задаю глупые вопросы, но что делать дальше не могу понять... У вас случайно нет примера проекта, или хотябы более подробной информации? Как вы и сказали сделал в папке ресурсов файл MyName.bmp размером 96*16, залил весь красным фоном, а что делать дальше. ( даже не предствляю в каком направлении двигаться )
|
|
« Последнее редактирование: 13-11-2009 12:13 от Domenik »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #10 : 13-11-2009 12:13 » |
|
Посмотри внимательно. У тебя в проектной папке должен быть файл с расширением .rc
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Domenik
Гость
|
|
« Ответ #11 : 13-11-2009 12:18 » |
|
Как вы и сказали, сделал в папке ресурсов файл MyName.bmp размером 96*16, залил весь красным фоном, а что делать дальше. ( даже не предствляю, в каком направлении двигаться )
Файла с расширением .rc нету. 100% создавал пустой проект (сам я этот файл не создавал, да и при просмотре я его не нашел)
Если это поможет, могу проект послать...
|
|
« Последнее редактирование: 16-11-2009 08:23 от Sel »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #12 : 13-11-2009 12:24 » |
|
Давай. Можешь прицепить к посту. Удали только сначала временные файлы, размер прицепа ограничен.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Domenik
Гость
|
|
« Ответ #13 : 16-11-2009 06:31 » |
|
Джон, спасибо за помощь, кнопку сделать получилось. Как вы и говорили создал файл с расширением .rc внутри него создал bitmap, в котором отрисовал требуемыекнопки.
Думаю тему можн закрыть.
|
|
|
Записан
|
|
|
|
|