Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2009, 01:28   #1
sinj
программирователь
Пользователь
 
Аватар для sinj
 
Регистрация: 15.02.2009
Сообщений: 72
По умолчанию Помогите разобраться с кодом, win api

Такая вот программа. В My_OnPaint все рисуется и пишется, в My_OnMove никак. Где затупил?
Код:
void My_OnPaint(HWND hwnd)
{
	RECT rect;
	GetClientRect(hwnd,&rect);
	PAINTSTRUCT paintstruct;
	HDC hdc=BeginPaint(hwnd, &paintstruct);
	Ellipse(hdc, rect.left, rect.top, rect.right, rect.bottom);
	TextOut(hdc,0,0,_T("be_carefull"),30);
	EndPaint(hwnd, &paintstruct);

}

void My_OnMove (HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
{

	HDC hdc;
	PAINTSTRUCT prima;
	hdc=BeginPaint(hwnd,&prima);
	HBRUSH myBrush=CreateSolidBrush(RGB(255,255,255));
	SelectObject(hdc,myBrush);
	TextOut(hdc,x,y,_T("www"),3);
	Ellipse(hdc,x,y,x+100,y+100);
	DeleteObject(myBrush);
	EndPaint(hwnd,&prima);

};


LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch(msg) {
				HANDLE_MSG(hWnd, WM_DESTROY, My_OnDestroy);
				HANDLE_MSG(hWnd, WM_PAINT, My_OnPaint);
				HANDLE_MSG(hWnd, WM_LBUTTONDOWN,My_OnMove);
				default: return (DefWindowProc(hWnd,msg,wParam,lParam));	 
				}
все делаю в студии 2008
smile

Последний раз редактировалось sinj; 06.09.2009 в 02:02.
sinj вне форума Ответить с цитированием
Старый 06.09.2009, 07:59   #2
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

рисовать используюя BeginPaint EndPaint можно только в сообщении WM_PAINT;

Код:
void My_OnMove (HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
{

	HDC hdc;
	hdc=GetDc(hwnd);//Получить дискриптор окна
	HBRUSH myBrush=CreateSolidBrush(RGB(255,255,255));
	SelectObject(hdc,myBrush);
	TextOut(hdc,x,y,_T("www"),3);
	Ellipse(hdc,x,y,x+100,y+100);
	DeleteObject(myBrush);
	ReleaseDc(hwnd, hdc);//Удалить его же
};
Либо вот так. Заставить окно само перерисоваться, тогда вызовется сообщение WM_PAINT.

Код:
void My_OnMove (HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
{
       InvalidateRect(hwnd, NULL, TRUE);//Последний параметр указывает нужно ли перерисовывать фон окна, который ты указал в _WNDCLASS.hbrBackground
};
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 06.09.2009, 11:24   #3
sinj
программирователь
Пользователь
 
Аватар для sinj
 
Регистрация: 15.02.2009
Сообщений: 72
По умолчанию

Только в коде
Код:
void My_OnMove (HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
{

	HDC hdc;
	hdc=GetDc(hwnd);//Получить дискриптор окна
	HBRUSH myBrush=CreateSolidBrush(RGB(255,255,255));
	SelectObject(hdc,myBrush);
	TextOut(hdc,x,y,_T("www"),3);
	Ellipse(hdc,x,y,x+100,y+100);
	DeleteObject(myBrush);
	ReleaseDc(hwnd, hdc);//Удалить его же
};
Небольшая очепятка
hdc=GetDС(hwnd);

Спасибо, все получилось. Можно закрывать
smile
sinj вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с кодом Superlotles Общие вопросы Delphi 6 19.08.2009 22:24
Помогите написать прогу по работе с реестром. WIN API Mary_MJ Помощь студентам 3 04.05.2009 20:46
помогите разобраться с кодом samosval Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 27.12.2007 00:20
Рисование графики на Win Api помогите exolot128 Помощь студентам 12 08.10.2007 15:24