HungryEagle
Интересующийся
Offline
Пол:
|
|
« : 03-09-2009 16:03 » |
|
Вот прога которая должна ставить точку по координатам:
#include "afxwin.h" // MFC Основные и стандартные компоненты
class CMainWnd : public CFrameWnd { public: CMainWnd(); // Конструктор по умолчанию };
CMainWnd::CMainWnd() { Create(NULL,"Step1",WS_OVERLAPPEDWINDOW,rectDefault, NULL,NULL); // Создать окно программы }
class CMyApp : public CWinApp { public: CMyApp(); //конструктор по умолчанию virtual BOOL InitInstance();//стандартная инициализация
};
CMyApp::CMyApp() // конструктор главного класса приложения {}
BOOL CMyApp::InitInstance() // стандартная инициализация { m_pMainWnd=new CMainWnd(); // создать класс окна ASSERT(m_pMainWnd); // проверить его правильность m_pMainWnd->ShowWindow(SW_SHOW);// Показать окно m_pMainWnd->UpdateWindow(); // Обновить окно return TRUE; // Вернуть что все нормально };
CMyApp theApp; // запуск приложения
//Вывести точку, смотрите внимательно, ну маленькая она и чем выше разрешение экрана, тем меньше.
void CMainWnd::OnPaint() { CPaintDC dc(this); dc.SetPixel(500,200,RGB(255,0,0)); }
Как декларировать OnPaint() ? Может кто-то знает... Два дня уже мучаюсь ... Я С++ плохо знаю, Асм нормально. Вот решил с графикой поразбираться. Сложно ...
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 03-09-2009 16:10 » |
|
эээ, а в чём вопрос то ? Вывести точку, смотрите внимательно, ну маленькая она и чем выше разрешение экрана, тем меньше.
стало быть, точка вывелась. Что ты и хотел. А маленькая - так в размер пиксела, что ты и требовал : уточняй вопрос, а ещё лучше - расскажи конечную цель
|
|
|
Записан
|
|
|
|
HungryEagle
Интересующийся
Offline
Пол:
|
|
« Ответ #2 : 03-09-2009 16:15 » |
|
Точка не вывелась !
Ошибка при компиляции :
1>.\step1.cpp(46) : error C2509: 'OnPaint' : member function not declared in 'CMainWnd' 1> .\step1.cpp(3) : see declaration of 'CMainWnd' Нужно как-то объявить OnPaint(), но как ?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #3 : 03-09-2009 16:15 » |
|
BOOL CMyApp::InitInstance() // стандартная инициализация { m_pMainWnd=new CMainWnd(); // создать класс окна ASSERT(m_pMainWnd); // проверить его правильность m_pMainWnd->ShowWindow(SW_SHOW);// Показать окно m_pMainWnd->UpdateWindow(); // Обновить окно return TRUE; // Вернуть что все нормально };
а тут неточность: return TRUE; здесь означает не "все нормально" , а то, что приложение не заканчивает свою работу, а работает с m_pMainWnd в качестве главного окна. Если вернуть FALSE, то приложение завершится. а можно так: BOOL CtApp::InitInstance() { CWinApp::InitInstance();
CMyMainDlg dlg; m_pMainWnd = &dlg; dlg.DoModal();
return FALSE; }
главное (и модальное) окно будет не давать выйти из InitInstance(). Как окно закроют - приложение заканчивает работу.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 03-09-2009 16:21 » |
|
Ошибка при компиляции :
1>.\step1.cpp(46) : error C2509: 'OnPaint' : member function not declared in 'CMainWnd' Нужно как-то объявить OnPaint(), но как ?
а, ну так понятно, объяви при помощи визарда ) У тебя какая версия студии ? визард сделал так : в хедере DECLARE_MESSAGE_MAP()
afx_msg void OnPaint();
в cpp , после инклуда хедера BEGIN_MESSAGE_MAP(CMyMaintDlg, CDialog) //{{AFX_MSG_MAP //}}AFX_MSG_MAP ON_WM_PAINT() END_MESSAGE_MAP()
void CMyMaintDlg::OnPaint() { CPaintDC dc(this); //CDialog::OnPaint() }
|
|
|
Записан
|
|
|
|
HungryEagle
Интересующийся
Offline
Пол:
|
|
« Ответ #5 : 03-09-2009 16:38 » |
|
Спасибо, добрый человек, но я не о том спрашивал.
Если это задокументировать, то не ругается.
void CMainWnd::OnPaint() { CPaintDC dc(this); dc.SetPixel(500,200,RGB(255,0,0)); }
Как OnPaint() объявить в CMainWnd ? Открыл дерево классов, там чёрт ногу сломет ...
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #6 : 03-09-2009 16:38 » |
|
я тебе только что рассказал, как. Целых 2 способа даже
|
|
|
Записан
|
|
|
|
HungryEagle
Интересующийся
Offline
Пол:
|
|
« Ответ #7 : 03-09-2009 16:39 » |
|
У меня VS 2008 Team System
|
|
|
Записан
|
|
|
|
HungryEagle
Интересующийся
Offline
Пол:
|
|
« Ответ #8 : 03-09-2009 16:40 » |
|
Спасибо, попробую ...
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #9 : 03-09-2009 16:41 » |
|
в 2008 - в списке классов проекта найди CMainWnd , щёлкни правой кнопой мыши, свойства. В окне свойств нажми кнопку "сообщения" , выбери WM_PAINT, там в выпадающем списке выбери OnPaint
|
|
|
Записан
|
|
|
|
HungryEagle
Интересующийся
Offline
Пол:
|
|
« Ответ #10 : 03-09-2009 16:56 » |
|
Спасибо, объявлять получилось, потом начал ругаться на недостающую точку с запятой. Выдал аж 15 ошибок. Глянешь ? Вот прям это вставляй:
#include "afxwin.h" // MFC Основные и стандартные компоненты
class CMainWnd : public CFrameWnd { public: CMainWnd(); // Конструктор по умолчанию DECLARE_MESSAGE_MAP() afx_msg void OnPaint(); };
CMainWnd::CMainWnd() { Create(NULL,"Step1",WS_OVERLAPPEDWINDOW,rectDefault, NULL,NULL); // Создать окно программы }
class CMyApp : public CWinApp {
public: CMyApp(); // конструктор по умолчанию virtual BOOL InitInstance(); // стандартная инициализация };
CMyApp::CMyApp() // конструктор главного класса приложения {}
BOOL CMyApp::InitInstance() // стандартная инициализация { m_pMainWnd=new CMainWnd(); // создать класс окна ASSERT(m_pMainWnd); // проверить его правиьность m_pMainWnd->ShowWindow(SW_SHOW); // Показать окно m_pMainWnd->UpdateWindow(); // Обновить окно return TRUE; // Вернуть что все нормально };
CMyApp theApp; // запуск приложения
void CMainWnd::OnPaint() { CPaintDC dc(this); // device context for painting dc.SetPixel(500,200,RGB(255,0,0)); }BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd); ON_WM_PAINT(); END_MESSAGE_MAP(); };
|
|
|
Записан
|
|
|
|
HungryEagle
Интересующийся
Offline
Пол:
|
|
« Ответ #11 : 03-09-2009 17:02 » |
|
Лёха, а у Тебя есть SKYPE ? Может с видео поговорим ?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 03-09-2009 17:10 » |
|
я не знаю, где т/з не хватает - глянь, куда компилятор указывает. Скорее всего что то тут }BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd); - лишняя фиговая скобка ) Скайпа нет и никогда не будет В асю щас не могу выйти, только завтра
|
|
|
Записан
|
|
|
|
HungryEagle
Интересующийся
Offline
Пол:
|
|
« Ответ #13 : 03-09-2009 17:15 » |
|
Да, та фигурная скобка была лишней ! Осталось 14 ошибок !!!
:\1\step1.cpp(43) : error C2601: 'CMainWnd::GetMessageMap' : local function definitions are illegal 1> e:\1\step1.cpp(40): this line contains a '{' which has not yet been matched 1>e:\1\step1.cpp(43) : error C2601: 'CMainWnd::GetThisMessageMap' : local function definitions are illegal 1> e:\1\step1.cpp(40): this line contains a '{' which has not yet been matched 1>e:\1\step1.cpp(43) : error C2466: cannot allocate an array of constant size 0 1>e:\1\step1.cpp(43) : error C2143: syntax error : missing '}' before ';' 1>e:\1\step1.cpp(44) : error C2143: syntax error : missing ';' before '}' 1>e:\1\step1.cpp(44) : error C2143: syntax error : missing ';' before ',' 1>e:\1\step1.cpp(45) : error C2143: syntax error : missing ';' before '}' 1>e:\1\step1.cpp(45) : error C2653: 'TheBaseClass' : is not a class or namespace name 1>e:\1\step1.cpp(45) : error C2065: 'GetThisMessageMap' : undeclared identifier 1>e:\1\step1.cpp(45) : error C2065: '_messageEntries' : undeclared identifier 1>e:\1\step1.cpp(45) : error C2059: syntax error : 'return' 1>e:\1\step1.cpp(45) : error C2059: syntax error : '}' 1>e:\1\step1.cpp(45) : error C2143: syntax error : missing ';' before '}' 1>e:\1\step1.cpp(45) : error C2059: syntax error : '}'
SKYPE классная штука ! Зря не любишь.
|
|
|
Записан
|
|
|
|
HungryEagle
Интересующийся
Offline
Пол:
|
|
« Ответ #14 : 03-09-2009 17:24 » |
|
#include "afxwin.h" // MFC Основные и стандартные компоненты
class CMainWnd : public CFrameWnd { public: CMainWnd(); // Конструктор по умолчанию DECLARE_MESSAGE_MAP() afx_msg void OnPaint(); };
CMainWnd::CMainWnd() { Create(NULL,"Step1",WS_OVERLAPPEDWINDOW,rectDefault, NULL,NULL); // Создать окно программы };
class CMyApp : public CWinApp {
public: CMyApp(); // конструктор по умолчанию virtual BOOL InitInstance(); // стандартная инициализация };
CMyApp::CMyApp() // конструктор главного класса приложения {};
BOOL CMyApp::InitInstance() // стандартная инициализация { m_pMainWnd=new CMainWnd(); // создать класс окна ASSERT(m_pMainWnd); // проверить его правиьность m_pMainWnd->ShowWindow(SW_SHOW); // Показать окно m_pMainWnd->UpdateWindow(); // Обновить окно return TRUE; // Вернуть что все нормально };
CMyApp theApp; // запуск приложения
void CMainWnd::OnPaint() { CPaintDC dc(this); // device context for painting dc.SetPixel(500,200,RGB(255,0,0)); BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd) ON_WM_PAINT() END_MESSAGE_MAP() };
Осталось 2 ошибки:
1>e:\1\step1.cpp(43) : error C2601: 'CMainWnd::GetMessageMap' : local function definitions are illegal 1> e:\1\step1.cpp(40): this line contains a '{' which has not yet been matched 1>e:\1\step1.cpp(43) : error C2601: 'CMainWnd::GetThisMessageMap' : local function definitions are illegal 1> e:\1\step1.cpp(40): this line contains a '{' which has not yet been matched
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #15 : 03-09-2009 17:26 » |
|
1) BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd); ON_WM_PAINT(); END_MESSAGE_MAP();
- не должно быть внутри функции, вынеси перед функцией
|
|
|
Записан
|
|
|
|
HungryEagle
Интересующийся
Offline
Пол:
|
|
« Ответ #16 : 03-09-2009 17:35 » |
|
Спасибо ! Работает ! Ты её добил ! Мой скайп cdman__x, ася 267302506. Добавляйся будем общаться !
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #17 : 03-09-2009 17:45 » |
|
добил - это хорошо. Но привыкай пользоваться визардом для экономии времени и нервов)
А потом, никто не мешает полазить по визардовскому коду и посмотреть, что как устроено
|
|
|
Записан
|
|
|
|
HungryEagle
Интересующийся
Offline
Пол:
|
|
« Ответ #18 : 03-09-2009 18:09 » |
|
Следующая задача будет у меня вывод спрайта, помощи не прошу, буду мучаться сам -:))) Добавляйся хоть в аську ко мне.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #19 : 03-09-2009 18:11 » |
|
подскажу только: GDI+ Image
|
|
|
Записан
|
|
|
|
|