Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Поставить точку по координатам  (Прочитано 14502 раз)
0 Пользователей и 1 Гость смотрят эту тему.
HungryEagle
Интересующийся

ru
Offline 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() ? Может кто-то знает... Два дня уже мучаюсь ...
Я С++ плохо знаю, Асм нормально. Вот решил с графикой поразбираться. Сложно ...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 03-09-2009 16:10 » 

эээ, а в чём вопрос то ? Улыбаюсь

Цитата
Вывести точку, смотрите внимательно, ну маленькая она и чем выше разрешение экрана, тем меньше.
стало быть, точка вывелась. Что ты и хотел. А маленькая - так в размер пиксела, что ты и требовал :

Код:
.SetPixel

уточняй вопрос, а ещё лучше - расскажи конечную цель Ага
Записан

HungryEagle
Интересующийся

ru
Offline 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(), но как ?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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(). Как окно закроют - приложение заканчивает работу.
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 03-09-2009 16:38 » 

Спасибо, добрый человек, но я не о том спрашивал.

Если это задокументировать, то не ругается.

void CMainWnd::OnPaint()
{
   CPaintDC dc(this);
   dc.SetPixel(500,200,RGB(255,0,0));
}

Как OnPaint() объявить в CMainWnd ? Открыл дерево классов, там чёрт ногу сломет ...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 03-09-2009 16:38 » 

я тебе только что рассказал, как. Целых 2 способа даже
Записан

HungryEagle
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 03-09-2009 16:39 » 

У меня VS 2008 Team System
Записан
HungryEagle
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 03-09-2009 16:40 » 

Спасибо, попробую ...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 03-09-2009 16:41 » 

в 2008 - в списке классов проекта найди CMainWnd , щёлкни правой кнопой мыши, свойства. В окне свойств нажми кнопку "сообщения" , выбери WM_PAINT, там в выпадающем списке выбери OnPaint
Записан

HungryEagle
Интересующийся

ru
Offline 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
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 03-09-2009 17:02 » 

Лёха, а у Тебя есть SKYPE ? Может с видео поговорим ?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 03-09-2009 17:10 » 

я не знаю, где т/з не хватает - глянь, куда компилятор указывает.
Скорее всего что то тут

 }BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd);
- лишняя фиговая скобка )

Скайпа нет и никогда не будет Ага В асю щас не могу выйти, только завтра
Записан

HungryEagle
Интересующийся

ru
Offline 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
Интересующийся

ru
Offline 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
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 03-09-2009 17:26 » 

1)
BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd);
   ON_WM_PAINT();
   END_MESSAGE_MAP();

 - не должно быть внутри функции, вынеси перед функцией

Записан

HungryEagle
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 03-09-2009 17:35 » 

Спасибо ! Работает ! Ты её добил ! Мой скайп cdman__x, ася 267302506. Добавляйся будем общаться !
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #17 : 03-09-2009 17:45 » 

добил - это хорошо. Но привыкай пользоваться визардом для экономии времени и нервов)

А потом, никто не мешает полазить по визардовскому коду и посмотреть, что как устроено
Записан

HungryEagle
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 03-09-2009 18:09 » 

Следующая задача будет у меня вывод спрайта, помощи не прошу, буду мучаться сам -:)))
Добавляйся хоть в аську ко мне.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #19 : 03-09-2009 18:11 » 

подскажу только:
GDI+
Image

Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines