1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Все, сдаюсь. Как с помощью MFC VC++ (2005) cделать аналогично дельфийскому File->New->Application? Что-то связанное с CDialog. Но вот это - какой-то обрубок
#include"afxwin.h"#include"resource.h"// ссылка на ресурсы
class CTestDlg : public CDialog // класс диалогового окна
{
public:
CTestDlg(CWnd* pParent=NULL);
protected:
};
CTestDlg::CTestDlg(CWnd* pParent)
: CDialog(IDD_DIALOG1, pParent)
{
}
class CTestApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
BOOL CTestApp::InitInstance()
{
CTestDlg dlg; // Создать объект диалогового окна
m_pMainWnd = &dlg; // главное окно программы это диалоговое окно
dlg.DoModal();
return FALSE;
}
CTestApp theApp;
А ты сам чтоли это ваяеш?Насчет 2005 сказать не могу,но в 2008 выбираеш MFC Aplication->Дальше окно Визарда,там первым выбираеш Dialog based->next->Main frame styles(Выбираеш,что душе угодно)->Advanced features(тоже выбираеш что надо)->Generated classes Вот тут тебе надо выбрать С....Dlg.Затем становится активным окно Base class Там 2 варианта либо CDialog либо CDHtmlDialog,выбираешь первое и жмеш финиш.В итоге у тебя генерируется вот такой вот проект(ну с теми настройками,что выставил).У тебя появляется Диалоговое окошко на которое ты перетаскиваеш контролы из тулбокса и работает с обработчиками событий. Внизу пример пустого проекта с базовыми настройками.
Было бы что прочитать, т. к. то, что находится - это литература для VC 6.0 А что насчет Events? Кинул на пустой диалог компонент, а у него событий раз, два и обчелся. Не хочется вручную MESSAGE_MAP и собственные классы создавать Должно же быть что-нибудь человеческое для статических компонентов.
Ну там у каждого компонента свой набор ивентов,например для кнопки,список аналогичен твоему,зато я вот взял и кинул лист контрол и увидел другую картину.На картинке по скролу видно сколько там ивентов)
Цитата
Не хочется вручную MESSAGE_MAP и собственные классы создавать Должно же быть что-нибудь человеческое для статических компонентов
А оно уже созданно,тебе просто надо будет туда добавить обработчик твоего события,плюс вот скажи чесно,а что с листбоксом еще можно сделать кроме этих событий?Ведь если подумать почти любое действие можно привязать к ним.
Ну класно,к несчастью я не знаю что половина из этого делает,но мне кажется,что по функцианальности можно заменить,ну да ладно пойдем другим путем.Что сложного стоит добавить в Мап новую функцию в которой будет все,что твоей дужше угодно? В хедере ....Dlg.h добавляеш какую нибудь функцию
public:
afx_msg void OnBnClickedCancel();
Затем в самом ....Dlg.cpp описываеш эту функцию и добавляеш в твою мапу там же.Но если чесно я не сталкивался с моментами,когда было что то необходимо,и небыло возможности решить это заложенными средствами.возможно проектов сложных пока не было. Кстати зайди в раздел Properties,там достаточно много настроек при помощи которых можно решить некоторые проблемы с ивентами.
P.S.Чет отличаются KeyDown от KeyUp я представляю,первое обработка, когда отпускаеш клавишу,второе когда нажимаеш,ну а KeyPress Для чего тогда?Аналогичное с Mouse,зачем все это,у тебя есть нажата,даблклик,наведено на кнопку,убран курсор с кнопки,нажат хотей,ну и еще парочка.
Насколько я понимаю, Messages можно настраивать только для классов. Как быть с экземплярами классов? Что собой представляет компонент, кинутый на диалог? (не нашел никакого его описания в коде, но он то существует! ) Еще также прочитал, что диалог обрабатывает все сообщения, которые поступают к его компонентам. И как тогда, например, делать события для эдита при нажатии клавиш? Уже вторые сутки читаю литературу(сначала про то, как создать DialogBased App - не заметил чекбокс, а теперь про события) и нифига раскурить не могу. Что делать то?
Что собой представляет компонент, кинутый на диалог?
Набор функций вызываемых при обрабатывании какого либо действия вот смотри,у меня проект называется Lolka,Я добавляю кномку,что у меня происходить,в ресурсах выделяется для этой кнопки память.Я хочу чтобы при нажатии на кнопку вылетала птичка,что происходит?В LolkaDlg.h у нашего класса в разделе public: появляется функция afx_msg void OnBnClickedButton1(); Затем уже в самом LolkaDlg.ccp в BEGIN_MESSAGE_MAP добавляется само событие ON_BN_CLICKED(IDC_BUTTON1, &CLolkaDlg::OnBnClickedButton1) Как нетрудно заметить первое это сам ресурс под нашу кнопочку,второе это ссылка на нашу функцию.То есть мы получили связь обьекта,обработку некоего события,и непосредственно то,что мы с этим будем делать,затем в этом же файле мы
void CLolkaDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
//Ресуем нашу птичку.
}
Цитата
И как тогда, например, делать события для эдита при нажатии клавиш
При нажатии клавиш где?Если просто в нашей программе то для базового окошка есть обработка события,если внутри самого эдита,то там при создании едита можно редактировать то,что туда можно записать.Или я что то не понял в вопросе.
А вообще прочти ту ссылку что я кинул все 5 статей,rое что должно проясниться.И попробуй нажать на обьект правой кнопкой и поковыряйся в Add event handler.
Вообще все MFC Это грамотное умение работы с Wizard.Он сам добавлает где нужно что нужно,в том числе и переменные и сам связывает то,за что они отвечают.Прочитай Creating your first Windows application там написано,как вообще добавить те ивенты,что тебе нужны с помощью визарда.
Уже вторые сутки читаю литературу(сначала про то, как создать DialogBased App - не заметил чекбокс, а теперь про события) и нифига раскурить не могу. Что делать то?
Начать отсюда: MFC шаг за шагом , а уж потом, если что непонятно - обращаться к литературе...