• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Mfc

  • Автор темы Автор темы Mozzart
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
M

Mozzart

Уважаемые товарищи знающие!
Меня интересует название и автор лучшей книги по MFC
Я попытался прочитать Мешков, Тихомиров "VC++ и MFC"
и мне она страшно не понравилась там выпадают логические шаги
при создании приложений и их описания.
Последней каплей стало то, что я нашел идентичный
только на английском пример программы из книги в MSDN HELPe!
Другие книги пишут про создание на основе диалогового окна и инструментов
VC++! НО!!! мне нравится делать все руками (всмысле программировать :)))
и не ползоваться (почти) мастером!!!
Помогите плиз! А то я буду закидывать форум тем что мне стало НЕПОНЯТНО!!!
___________________________________________________________________
С ув. Mozzart
 
читай КРУГЛИНСКОГО для MFC
.
а если нравится все ручками то используй WTL но сперва почитай Педзольда "Программирование под виндовс" ... не пугайся если найдеш для 95 винды :) принципы все теже
 
WTL штучка интерестная, но вот больно уж узкоспециализированная. В случае с итрефейсом она даст с то очков вперед MFC, в основном засчет компактности. Но WTL это не альтернатива MFC, которая гораздо универсальнее.
 
Как на меня WTL более универсальнее.
А вот MFC болнее развитая и много всего готового уже есть.

MFC так же хорош как и плох. У него много функциональности но и много ошибок, а также нужно тащить за собой ище несколько метров DLL'ок. К ниму написано множество класов с разной функциональностю.

Но не стоит забывать, что WTL это "надстройка" над ATL, и тут сразу открываются все прелести ActiveX/COM. Плюс компактность и быстродествие. Так как код открыт то можно вносить свои изминения и плюс написано не мало собственых контролов. А при использовании SubClassing можно выводить свои контролы напорядок легче чем в MFC (IMHO и опыт).
При использовании WTL можно сотворить небывалей сложности интерфейс. Нужны только хорошие руки.
 
Очередной религиозной спор.Но все же поясню, что имел ввиду.
"Но WTL это не альтернатива MFC, которая гораздо универсальнее."
Применение WTL сугубо интерфейс, с чем она отлично справляется, MFC же монструозно создание с клссами чуть ли не на все случае жизни. Это библиотеки для различных задач. Да и прелести ActiveX/COM открываются из обоих библиотек. И еще, к сожелению, будующее WTL до сих пор не ястно, ей так и не нашлось место в официальных плнах мелкомягких.
 
Да нет и впринципе не может быть более развернутого описания МФЦ классов, чем в MSDN, все книги по данной тематике являются переводом и описанием классов из МСДН, +- несколько глав компиляции из разных источников (или самописных).

МФЦ - простая как грабли, достаточно взглянуть на иерархию класса и все понятно (если знаком с С++)

CObject
--- CWnd
------CDialog к примеру

это что касаемо интерфейса, что касается вспомагательных классов, алгоритмов и т.д. то тут
stl + boost - рулят
 
Помогите, если кто захочет...
Не получается организовать вывод в окно требуемого результата. То есть кнопка с окном связана, с кнопкой связаны переменные и программный код, в котором требуемый результат считается. А вот при запуске в окно результата ничего не выводится.
 
Для: Mozzart
Я начинал изучать MFC с книги Тихомирова "Самоучитель MFC". Книга так себе, но создание окон без визарда у него описано достаточно подробно.
Для: Yuniti_Death
Код в студию.

По поводу WTL - штука не плохая, но очень плохо документированная. Кто знает ссылки какие нибудь по WTL или литература, сообщите, самому интересно.
 
zubr
Спасибо, я сделала!)) Всего-то надо было еще один UpdateData добавить
 
У меня след. проблема в одной из функций вызываю DrawItem(lpDrawItemStruct); , где lpDrawItemStruct->itemID=(UINT)GetCurSel(); , но этот пункт не перерисовывается. Я та понимаю, что это из-за того, что не определены такие элементы структуры как lpDrawItemStruct->hDC и lpDrawItemStruct->hwndItem, но от куда их взять. Подскажите как решить данную проблему!
Спасибо!
 
Ну, lpDrawItemStruct->hwndItem - это хэндл контрола, а lpDrawItemStruct->hDC=GetDC(hwndItem)... наверно, попробуй.
 
Есть ли функция, позволяющая изменять текст в записи listbox, т.е. противоложность GetText() - что-то вроде "PutText()". InsertString - не хочется использовать, т.к. просто надо изменить текст.
 
Cisco
такой функции нет :(, но можно сделать так
создать listbox со стилями LBS_NODATA | LBS_OWNERDRAWFIXED, т.е. это будет что-то похожее на виртуальный listbox
только в таком случае необходимо будет самому рисовать текст элементов и соответсвенно поддерживать какую-нить структуру данных, зато при изменении данных они изменяются на экране при наступлении события перерисовки
 
Maxx спасибо, но у меня так и сделано, только структура данных у меня файл и каждый раз лезть в него не хочется, т.к. сама строка (если бы можно было ее менять:(((( ) и говорила бы о том как надо перерисовывать! Т.е. все таки придется делать некрасиво:(
 
Как можно сделать, чтобы диалоговое окно, например, каждые 15 минут выполняло какие-то действия?
Одно из решений, которое я вижу - это создание дополнительного потока, однако это не очень красиво. Подскажите пожалуйста как можно это сделать без вспомогательных потоков.
 
#define TIMER_EVENT 1

// ... BOOL CALLBACK DlgProc(...)
case WM_CREATE:
SetTimer(hDlg, TIMER_EVENT, 15*60*1000, NULL);
// fall through
case WM_TIMER:
switch (wParam){
case TIMER_EVENT: /*Твои действия здесь*/ break;
}
return 0;
//...

По крайней мере, это работало для главного окна приложения.
 
Спасибо Dest!n.
Если я правильно понял, то вызываем m_ListBox.SetTimer(1, 15*60*1000, NULL); в OnInitDialog() и т.к. в качестве адреса обработчика указан NULL - это означает, что он находится в этой же функции?
 
Для: Cisco
Все верно. Можно также указать вместо NULL имя функции вида

VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
где
hwnd - дескриптор окна, вызывающего таймер (то есть твое модальное окно - прим. ред.)
uMsg - определяет WM_TIMER
idEvent - определяет ID таймера (указывается с помощью #define - прим. ред.)
dwTime - количество миллисекунд, прошедших с момента запуска системы. Это значение возвращается функцией GetTickCount

(с) MSDN Library
Переведено мной.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab