Форум: Форум C++Разное
Новые темы: 00
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как инициализировать графику в MFC-приложении на VC++ 2005?

Сообщения:  [1-10]   [11-19] 

 
 автор: alex19921992   (07.02.2007 в 19:25)   письмо автору
 
   для: alex19921992   (06.02.2007 в 14:42)
 

Кстати я понял, почему))))
Код

//-------------------------
case WM_KEYDOWN:  /*в зависимости от переменной меняем состояние*/
if(mybool==false)mybool=true;
if(mybool==true)mybool=false;
return 0;
//-------------------------

при входном "фолс " выдаст все равно фолс))))) вот я олень!!!!

Но мне уже на это пофиг))))

  Ответить  
 
 автор: alex19921992   (07.02.2007 в 18:53)   письмо автору
 
   для: cheops   (07.02.2007 в 16:21)
 

Спасибо вам большое! Вы мне очень помогаете!
Только вот я не знаю, как мне квадрат залить, Вроде могу ректангл нарисовать, а залить не знаю как, не подскажете?

PS: Кстати, я нашел забавную вещь: MessageBeep(0); воспроизводит стандартный виндовс-звук ошибки, а как остальные воспроизводить?

  Ответить  
 
 автор: cheops   (07.02.2007 в 16:21)   письмо автору
 
   для: alex19921992   (07.02.2007 в 05:53)
 

Нужно объявить область окна не действительной при помощи функции InvalidateRect(), чтобы сгенерировалось событие WM_PAINT и окно было перерисовано, добавьте в обработчик VK_HOME вызов
case VK_HOME:
  if(mybool==true)mybool=false;
  else mybool=true;
  InvalidateRect(hwnd, NULL, TRUE);
  break;

PS Вы кстати, зря попиксельно выводите - лучше определить квадрат и залить его - быстрее получится.
PPS Большие листинги лучше прикреплять в виде файлов, иначе тема очень быстро разрастается.

  Ответить  
 
 автор: alex19921992   (07.02.2007 в 05:53)   письмо автору
 
   для: cheops   (07.02.2007 в 00:07)
 

Это работает, но только после того, как поменять размер окна:
Подскажите пожалуйста, как сделать так, чтоб он сразу цвет менял?

#include <windows.h>
#include <string.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "HelloWin";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wndclass);
hwnd = CreateWindow(
szAppName, // window class name
"The Hello Program"// window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL
); // creation parameters
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
bool mybool;
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{

HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(iMsg)
{
case WM_CREATE:
//PlaySound("hellowin.wav", NULL, SND_FILENAME | SND_ASYNC);
return 0;

case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, "Hello, Windows 95!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  char* s;s=new char[5];strcpy(s,"hello");TextOut(hdc,10,10,s,5);
  
  int i,j;
  if(mybool==true) {for(i=0;i<100;i++)for(j=0;j<100;j++)SetPixel(hdc,i,j,RGB(0,0,255));}
  if(mybool==false){for(i=0;i<100;i++)for(j=0;j<100;j++)SetPixel(hdc,i,j,RGB(0,200,0));}

  EndPaint(hwnd, &ps);
return 0;
//-------------------------
case WM_KEYDOWN:
switch (wParam)
{

case VK_HOME:if(mybool==true)mybool=falseelse mybool=true;break;
}
return 0;
//-------------------------

case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}

  Ответить  
 
 автор: cheops   (07.02.2007 в 00:07)   письмо автору
 
   для: alex19921992   (06.02.2007 в 15:56)
 

Замените
switch(wParam)
{
case VK_HOME:
if(mybool==false)mybool=true;
if(mybool==true)mybool=false;
SendMessage(hwnd,WM_PAINT,0,0);
break;

на

if(mybool==true)mybool=false;
break;

  Ответить  
 
 автор: alex19921992   (06.02.2007 в 15:56)   письмо автору
 
   для: cheops   (06.02.2007 в 15:20)
 

Попробуй скомпилить, тока это не весь код, вот полный:

#include <windows.h>
#include <string.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "HelloWin";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wndclass);
hwnd = CreateWindow(
szAppName, // window class name
"The Hello Program"// window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL
); // creation parameters
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
bool mybool;
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{

HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(iMsg)
{
case WM_CREATE:
//PlaySound("hellowin.wav", NULL, SND_FILENAME | SND_ASYNC);
return 0;

case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, "Hello, Windows 95!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  char* s;s=new char[5];strcpy(s,"hello");TextOut(hdc,10,10,s,5);
  
  int i,j;
  if(mybool==true) {for(i=0;i<100;i++)for(j=0;j<100;j++)SetPixel(hdc,i,j,RGB(0,0,255));}
  if(mybool==false){for(i=0;i<100;i++)for(j=0;j<100;j++)SetPixel(hdc,i,j,RGB(0,200,0));}

  EndPaint(hwnd, &ps);
return 0;
//-------------------------
case WM_KEYDOWN:
switch(wParam)
{
case VK_HOME:
if(mybool==false)mybool=true;
if(mybool==true)mybool=false;
SendMessage(hwnd,WM_PAINT,0,0);
break;
}
return 0;
//-------------------------

case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}

  Ответить  
 
 автор: alex19921992   (06.02.2007 в 15:55)   письмо автору
 
   для: cheops   (06.02.2007 в 15:20)
 

Нет!

  Ответить  
 
 автор: cheops   (06.02.2007 в 15:20)   письмо автору
 
   для: alex19921992   (06.02.2007 в 14:42)
 

А если изменить размер окна или закрыть его другим окном - меняется цвет?

  Ответить  
 
 автор: alex19921992   (06.02.2007 в 14:42)   письмо автору
 
   для: cheops   (06.02.2007 в 12:40)
 

Вот теперь другая проблема:
Прога должна при нажатии клавиши менять цвет прямоугольника, но не меняет, почему?

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
bool mybool=true/* отвечает пременная за состояние прямоугольника зеленый/синий*/
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(iMsg)
{
case WM_CREATE:

return 0;

case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);

  int i,j;    /*рисуем прямоугольник в зависимости от состояния переменной*/
  if(mybool==true) {for(i=0;i<100;i++)for(j=0;j<100;j++)SetPixel(hdc,i,j,RGB(0,0,255));}
  if(mybool==false){for(i=0;i<100;i++)for(j=0;j<100;j++)SetPixel(hdc,i,j,RGB(0,200,0));}

  EndPaint(hwnd, &ps);
return 0;
//-------------------------
case WM_KEYDOWN:  /*в зависимости от переменной меняем состояние*/
if(mybool==false)mybool=true;
if(mybool==true)mybool=false;
return 0;
//-------------------------

case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}

  Ответить  
 
 автор: cheops   (06.02.2007 в 12:40)   письмо автору
 
   для: alex19921992   (06.02.2007 в 12:07)
 

А что за код используется?

  Ответить  

Сообщения:  [1-10]   [11-19] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования