Mfc

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

Mozzart

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

eBit

#2
читай КРУГЛИНСКОГО для MFC
.
а если нравится все ручками то используй WTL но сперва почитай Педзольда "Программирование под виндовс" ... не пугайся если найдеш для 95 винды :) принципы все теже
 

Kmet

Java Team
25.05.2006
1 036
8
#3
WTL штучка интерестная, но вот больно уж узкоспециализированная. В случае с итрефейсом она даст с то очков вперед MFC, в основном засчет компактности. Но WTL это не альтернатива MFC, которая гораздо универсальнее.
 
E

eBit

#4
Как на меня WTL более универсальнее.
А вот MFC болнее развитая и много всего готового уже есть.

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

Но не стоит забывать, что WTL это "надстройка" над ATL, и тут сразу открываются все прелести ActiveX/COM. Плюс компактность и быстродествие. Так как код открыт то можно вносить свои изминения и плюс написано не мало собственых контролов. А при использовании SubClassing можно выводить свои контролы напорядок легче чем в MFC (IMHO и опыт).
При использовании WTL можно сотворить небывалей сложности интерфейс. Нужны только хорошие руки.
 

Kmet

Java Team
25.05.2006
1 036
8
#5
Очередной религиозной спор.Но все же поясню, что имел ввиду.
"Но WTL это не альтернатива MFC, которая гораздо универсальнее."
Применение WTL сугубо интерфейс, с чем она отлично справляется, MFC же монструозно создание с клссами чуть ли не на все случае жизни. Это библиотеки для различных задач. Да и прелести ActiveX/COM открываются из обоих библиотек. И еще, к сожелению, будующее WTL до сих пор не ястно, ей так и не нашлось место в официальных плнах мелкомягких.
 
G

Guest

#6
Да нет и впринципе не может быть более развернутого описания МФЦ классов, чем в MSDN, все книги по данной тематике являются переводом и описанием классов из МСДН, +- несколько глав компиляции из разных источников (или самописных).

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

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

это что касаемо интерфейса, что касается вспомагательных классов, алгоритмов и т.д. то тут
stl + boost - рулят
 
Y

Yuniti_Death

#7
Помогите, если кто захочет...
Не получается организовать вывод в окно требуемого результата. То есть кнопка с окном связана, с кнопкой связаны переменные и программный код, в котором требуемый результат считается. А вот при запуске в окно результата ничего не выводится.
 
Z

zubr

#8
Для: Mozzart
Я начинал изучать MFC с книги Тихомирова "Самоучитель MFC". Книга так себе, но создание окон без визарда у него описано достаточно подробно.
Для: Yuniti_Death
Код в студию.

По поводу WTL - штука не плохая, но очень плохо документированная. Кто знает ссылки какие нибудь по WTL или литература, сообщите, самому интересно.
 
Y

Yuniti_Death

#9
zubr
Спасибо, я сделала!)) Всего-то надо было еще один UpdateData добавить
 
C

Cisco

#10
У меня след. проблема в одной из функций вызываю DrawItem(lpDrawItemStruct); , где lpDrawItemStruct->itemID=(UINT)GetCurSel(); , но этот пункт не перерисовывается. Я та понимаю, что это из-за того, что не определены такие элементы структуры как lpDrawItemStruct->hDC и lpDrawItemStruct->hwndItem, но от куда их взять. Подскажите как решить данную проблему!
Спасибо!
 
O

orcommander

#11
Ну, lpDrawItemStruct->hwndItem - это хэндл контрола, а lpDrawItemStruct->hDC=GetDC(hwndItem)... наверно, попробуй.
 
C

Cisco

#13
Есть ли функция, позволяющая изменять текст в записи listbox, т.е. противоложность GetText() - что-то вроде "PutText()". InsertString - не хочется использовать, т.к. просто надо изменить текст.
 
M
#14
Cisco
такой функции нет :(, но можно сделать так
создать listbox со стилями LBS_NODATA | LBS_OWNERDRAWFIXED, т.е. это будет что-то похожее на виртуальный listbox
только в таком случае необходимо будет самому рисовать текст элементов и соответсвенно поддерживать какую-нить структуру данных, зато при изменении данных они изменяются на экране при наступлении события перерисовки
 
C

Cisco

#15
Maxx спасибо, но у меня так и сделано, только структура данных у меня файл и каждый раз лезть в него не хочется, т.к. сама строка (если бы можно было ее менять:(((( ) и говорила бы о том как надо перерисовывать! Т.е. все таки придется делать некрасиво:(
 
C

Cisco

#16
Как можно сделать, чтобы диалоговое окно, например, каждые 15 минут выполняло какие-то действия?
Одно из решений, которое я вижу - это создание дополнительного потока, однако это не очень красиво. Подскажите пожалуйста как можно это сделать без вспомогательных потоков.
 
D

Dest!n

#17
#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;
//...

По крайней мере, это работало для главного окна приложения.
 
C

Cisco

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

Dest!n

#19
Для: 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
Переведено мной.
 
Статус
Закрыто для дальнейших ответов.