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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2010, 12:52   #1
Nikita1987
Пользователь
 
Регистрация: 06.04.2010
Сообщений: 30
По умолчанию Перемещение окна

Всем привет!
Ребята подскажите пожалуйста такой вот вопрос!
Мне нужно что бы окно бегала по краям экрана до тех пор пока я ненажму кнопку Эскейп ну или другую кнопку, не обязательно!
Создал я окно оно бегает по краям экрана!
вопрос 1: как мне определить разрешение экрана
вопрос 2: чот не работает остановка по нажатию кнопки Эскапе

Есче чайник в этом деле, кто может помогите и подскажите как лучше мне улучшить код!
Код:
#include <windows.h>

LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);

char szClassWindow[] = TEXT("Каркасное приложение");	


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
{
	HWND hWnd;
	MSG lpMsg;
	WNDCLASSEX wcl;
	wcl.cbSize = sizeof(wcl);	
	wcl.style = CS_HREDRAW | CS_VREDRAW;	
	wcl.lpfnWndProc = WindowProc;	
	wcl.cbClsExtra = 0;	
	wcl.cbWndExtra = 0; 	
	wcl.hInstance = hInst;	
	wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION);	
	wcl.hCursor = LoadCursor(NULL, IDC_ARROW);	
	wcl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); 
	wcl.lpszMenuName = NULL;	
	wcl.lpszClassName = szClassWindow;	
	wcl.hIconSm = NULL;	
	if (!RegisterClassEx(&wcl))
		return 0;
	hWnd = CreateWindowEx(0, szClassWindow, TEXT("Догани меня"),WS_OVERLAPPEDWINDOW,	
		0, 0, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL);
	for(int i=0;;i++)  //перемещение окна по экрану
	{	
		for(int i=0;i<1100;i++)
		{
			MoveWindow(hWnd,0+i,0,100,50,NULL);
			ShowWindow(hWnd, nCmdShow);
			UpdateWindow(hWnd);
		}
		for(int i=0;i<900;i++)
		{
			MoveWindow(hWnd,1100,0+i,100,50,NULL);
			ShowWindow(hWnd, nCmdShow);
			UpdateWindow(hWnd);
		}
		for(int i=0;i<1100;i++)
		{
			MoveWindow(hWnd,1100-i,900,100,50,NULL);
			ShowWindow(hWnd, nCmdShow);
			UpdateWindow(hWnd);
		}
		for(int i=0;i<900;i++)
		{
			MoveWindow(hWnd,0,900-i,100,50,NULL);
			ShowWindow(hWnd, nCmdShow);
			UpdateWindow(hWnd);
		}
	}
	while(GetMessage(&lpMsg, NULL, 0, 0))
	{
		TranslateMessage(&lpMsg);	
		DispatchMessage(&lpMsg);	
	}
	return lpMsg.wParam;
}

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	RECT rect;
	switch(message)
	{
	case WM_KEYDOWN:
	if(wParam==VK_ESCAPE)  // по эскейпу должно остановить окно на текущих координатах
		{
			HWND h = FindWindow(TEXT("Timer"), TEXT("Догани меня"));
			if(!h)
					MessageBox(hWnd, TEXT("Ненайдено окно"), TEXT("Ошибка!!!"), MB_OK | MB_ICONSTOP);
				else
					GetClientRect(h,&rect);
			MoveWindow(h,rect.bottom,rect.top,100,50,NULL);
			UpdateWindow(h);					
		}
		case WM_DESTROY: 
			PostQuitMessage(0);
			break;			
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}
начинающий программист
Nikita1987 вне форума Ответить с цитированием
Старый 04.11.2010, 14:40   #2
Dj-IIyIIc
Пользователь
 
Регистрация: 24.09.2010
Сообщений: 13
По умолчанию

Добрый день!Я такой же чайник,но насчет разрешения экрана недавно попалось:ф-я GetSystemMetrics(SM_CXSCREEN) и GetSystemMetrics(SM_CYSCREEN).В ней кстати много еще чего полезного
Dj-IIyIIc вне форума Ответить с цитированием
Старый 04.11.2010, 15:13   #3
Nikita1987
Пользователь
 
Регистрация: 06.04.2010
Сообщений: 30
По умолчанию

Спасибо помагло!
Осталось только событие с кнопкой и все! Чет мучаюсь и никак!(
начинающий программист
Nikita1987 вне форума Ответить с цитированием
Старый 08.11.2010, 10:01   #4
wanes101
Форумчанин
 
Регистрация: 04.06.2010
Сообщений: 212
По умолчанию

Я то же далеко не профессионал, но могу сказать тебе можно решить эту проблуму другим способом. Для этого надо принять функцией WindowProc сообщене WM_CHAR c параметром wParam VK_ESC
см. таблицу кодов клавишь здесь
http://frolov-lib.ru/books/bsp/v25/ch5_1.html
wanes101 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение окна в z-order jj48 Win Api 14 07.02.2012 15:50
Размер окна в зависимости от размера окна Reverent JavaScript, Ajax 1 02.02.2008 15:49
закрыть все дочерни окна, кроме главного окна Worms Общие вопросы Delphi 2 03.12.2007 22:18
Как сделать чтобы дочерние окна в MDI-приложениях были вне главного окна??? dimonchuk Общие вопросы Delphi 1 11.08.2007 12:13
Перемещение окна мышью за Image Viteef Общие вопросы Delphi 2 03.05.2007 23:48