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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2014, 14:02   #1
Andrey_Ov
Пользователь
 
Регистрация: 20.11.2013
Сообщений: 28
По умолчанию работа для Шерлока win32api

Товарищи, тщетно пытаюсь найти разгадку феномену, который проявляется при работе этой программы. В программе нет никаких циклов созданных мною и все же программа реагирует только на 111 сообщений от мыши. А если менять размер окна то чуть больше 1000. в чем прикол? Поделитесь соображениями

Код:
#include <windows.h>


LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{

	static char szAppName[] = "New";
	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,
		"New lesson",
		WS_OVERLAPPEDWINDOW ,
		CW_USEDEFAULT, CW_USEDEFAULT,
		CW_USEDEFAULT, CW_USEDEFAULT,
		NULL, NULL, hInstance, NULL
		);
	ShowWindow(hwnd, iCmdShow);
	UpdateWindow(hwnd);
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}




LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{

	static HDC hdc;
	static POINT Pt;
	static int  ii=0;
	static char Buffer[20];
	PAINTSTRUCT ps;
	

	switch (iMsg)
	{
	case WM_LBUTTONDOWN:
		        
					Pt.x = LOWORD(lParam);
					Pt.y = HIWORD(lParam);
					InvalidateRect(hwnd, NULL, NULL);
				    return 0;
		
	case WM_PAINT:
		
			hdc = BeginPaint(hwnd, &ps);
			
			wsprintf(Buffer, "%d", ii);
			TextOut(hdc, Pt.x, Pt.y, Buffer, sizeof(Buffer));
			ii++;
			EndPaint(hwnd, &ps);
		
		return 0;
				
	

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

Последний раз редактировалось Stilet; 03.01.2014 в 14:43.
Andrey_Ov вне форума Ответить с цитированием
Старый 03.01.2014, 14:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
если менять размер окна то чуть больше 1000.
При изменении размера видимо происходит перерисовка, даже если размер меняется на пиксель. Отсюда и может быть столько сообщений.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.01.2014, 15:15   #3
Andrey_Ov
Пользователь
 
Регистрация: 20.11.2013
Сообщений: 28
По умолчанию

Я новичок и возможно ваш ответ глубже чем я вижу.Но дело в том, что я понимаю, что при изменении размеров окна в очередь ставится сообщение WM_PAINT. Я не пойму почему на определенном этапе обработка этого сообщения прекращается и программа как бы зависает? Разъясните если можете.
Andrey_Ov вне форума Ответить с цитированием
Старый 03.01.2014, 15:24   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не понимаю что у тебя тут зависает?

P.S. Проверил твой код у себя овер 1000 мессаджей не получаю, так что что-то ты не так делаешь.
Кстати в твоем коде моя студия показала тучу ошибок, но раз у тебя он хотя бы запускается, значит не важно.
I'm learning to live...

Последний раз редактировалось Stilet; 03.01.2014 в 15:31.
Stilet вне форума Ответить с цитированием
Старый 03.01.2014, 15:27   #5
Andrey_Ov
Пользователь
 
Регистрация: 20.11.2013
Сообщений: 28
По умолчанию

скомпилируйте программу Щелкните в окне больше 111 раз мышкой или поизменяйте размер окна пока число не станет больше 1000 и вы поймете.
Andrey_Ov вне форума Ответить с цитированием
Старый 03.01.2014, 15:34   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Сделал:
Безымянный.jpg
Что я должен был увидеть?

P.S Могу экзешник выложить...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.01.2014, 15:37   #7
Andrey_Ov
Пользователь
 
Регистрация: 20.11.2013
Сообщений: 28
По умолчанию

что значит овер? и в чем вы видете ошибку у меня visual studio 2013 может в настройках компилятора че не так?

а можешь выложить твой вариант исходника ты же исправлял там какие-то ошибки? а если свой exe шник приложу посмотришь?

да и твой exe шник тоже бы не помешал Спасибо!
Вложения
Тип файла: rar Win32Minimum.rar (11.1 Кб, 6 просмотров)

Последний раз редактировалось Stilet; 03.01.2014 в 17:49.
Andrey_Ov вне форума Ответить с цитированием
Старый 03.01.2014, 16:04   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Твой у меня не запускается требуя MSV-блаблабла.DLL
Свой прикладываю.
Вложения
Тип файла: rar kk.rar (155.8 Кб, 7 просмотров)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.01.2014, 16:19   #9
Andrey_Ov
Пользователь
 
Регистрация: 20.11.2013
Сообщений: 28
По умолчанию

Спасибо большое, я теперь хотя бы знаю, что делаю все правильно в плане обработки сообщений, а то уже всю голову измучал. Буду теперь разбираться с созданием проекта. Может потому что пустой проект создаю.
Andrey_Ov вне форума Ответить с цитированием
Старый 03.01.2014, 17:29   #10
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от Andrey_Ov Посмотреть сообщение
что значит овер?
овер (от англ. over) - более, свыше...

Последний раз редактировалось Stilet; 03.01.2014 в 17:50.
Вадим Мошев вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание 2 окна, win32api Elloriane Общие вопросы C/C++ 2 09.03.2013 17:28
Вопрос по Win32API в С++ SmailuK Win Api 2 27.05.2011 13:00
С++ Win32Api иконка в меню dmitry25 Win Api 17 11.05.2011 14:20
Многопоточность с использованием Win32API Whion Win Api 2 15.03.2011 09:51
Win32Api и SDL revaldo666 Win Api 2 05.07.2010 17:49