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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2012, 01:55   #1
Neketek
Пользователь
 
Регистрация: 22.03.2012
Сообщений: 26
По умолчанию Проблема с клавиатурой;

Код:
#include <windows.h>
#include "mmsystem.h"


int x = 100,y = 100;

char name[] = "Â";

HWND hwnd   = 0;
HWND bt1    = 0;
MSG msg;
HINSTANCE hinstance = 0;
LRESULT CALLBACK proc(HWND, UINT, WPARAM, LPARAM);



int WINAPI WinMain(HINSTANCE hinst, HINSTANCE phinst, PSTR szCmdLine, int iCmdShow)
{
	hinstance = hinst;
WNDCLASSEX wc;// ñòðóêòóðà îïèñàíèÿ îêíà
////////////////////////////////////////////////////////////
wc.cbClsExtra    = NULL;
wc.cbWndExtra    = NULL;
wc.lpszMenuName  = NULL;
wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
wc.hInstance     = hinst;
wc.lpszClassName = name;
wc.lpfnWndProc   = proc;
wc.style         = CS_HREDRAW|CS_VREDRAW;
wc.cbSize        = sizeof(WNDCLASSEX);
///////////////ðåãèñòðàöèÿ êëàññà îêíà è âûâîä ñîîáùåíèÿ îá îøèáêå
if (!(RegisterClassEx(&wc)))
{
	MessageBox(NULL,"Îøèáêà ðåãèñòðàöèè êëàññà","Processing problem", MB_OK);
}
///////////////ñîçäàíèå îêíà è âûâîä ñîîáùåíèÿ îá îøèáêå
hwnd   = CreateWindow( name, // èìÿ îêíà
					"Ìîÿ ïåðâàÿ âèçóàëüíàÿ ïðîãðàììà", // âèäèìîå èìÿ 
                     WS_OVERLAPPEDWINDOW,
					 CW_USEDEFAULT,           // initial x position
                     CW_USEDEFAULT,           // initial y position
                     800,           // initial x size
                     800,           // initial y size
					 NULL,
					 NULL,
					 NULL,
					 NULL);


if (hwnd == 0)
{
	MessageBox(NULL,"Îøèáêà ñîçäàíèÿ îêíà", "Problem",MB_OK);
}

ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg,NULL,NULL,NULL))
{
          TranslateMessage (&msg) ;
          DispatchMessage (&msg);
}
return msg.wParam;
}

///îêîííàÿ ïðîöåäóðà 
LRESULT CALLBACK proc(HWND hwnd, UINT msg, WPARAM wpar, LPARAM lpar)
{
	 HDC         hdc ;
     PAINTSTRUCT ps  ;
     RECT        rect;
	
	switch (msg)
	{
	    case WM_PAINT:	    
		hdc = BeginPaint(hwnd, &ps);
		GetClientRect(hwnd, &rect);
		DrawText(hdc,"dhaa",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
		DrawText(hdc,",íàæìè ëåâóþ êíîïêó ìûøè, ïåðåìåùàé ïëèòêó ñòðåëêàìè ",-1,&rect,DT_SINGLELINE|DT_CENTER);;
		EndPaint(hwnd,&ps);
		break;
		case WM_LBUTTONDOWN:
		if (bt1 == 0)
		{
	    bt1 = CreateWindowEx(NULL,"button","ïëèòêà",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,x,y,200,200,hwnd,(HMENU)1000,hinstance,NULL);
		}
		break;
		case WM_RBUTTONDOWN:
			 DestroyWindow(bt1);
			 bt1 = 0;
	    break;
		case WM_KEYDOWN:
		     if(bt1 != 0)
			 {PlaySound("Skrip",NULL,SND_ASYNC);}
		     _sleep(250);
		      switch(wpar)
			  {
		      case   VK_UP:
              y = y - 50;
		      MoveWindow(bt1,x,y, 200,200,TRUE);
		      break;
		      case  VK_DOWN:
              y = y + 50;
		      MoveWindow(bt1,x,y, 200,200,TRUE);
		      break;
		      case  VK_LEFT:
		      x = x - 50;
		      MoveWindow(bt1,x,y, 200,200,TRUE);
		      break;
		      case VK_RIGHT:
		      x = x + 50;
		      MoveWindow(bt1,x,y, 200,200,TRUE);
		      break;
			  }
		      _sleep(250);
			  ReleaseCapture();
        break;
		case WM_COMMAND:;
			switch(wpar)
			{
			case 1000:
			PlaySound("hammer_1",NULL,SND_SYNC);
			break;
			}
		break;
		
		case WM_DESTROY :
        PostQuitMessage (0) ;
        return 0 ;



	 
	}

	return DefWindowProc(hwnd,msg,wpar,lpar);
}
такая вот простенькая программка , она двигает кнопку по основному окну при помощи стрелок, при нажатии на саму кнопку проигрывается звуковой файл, вопрос, почему после нажатия на кнопку сообщения от клавиатуры не работают вообще, то есть при нажатии на стрелки кнопка не перемещается по окну, пробовал SetCapture на основное окно, помогло, но на кнопку не нажать, а если после нажатия кнопки применить этот метод , то блокируется все, вопрос, какое сообщение получила система, что оно заставило ее игнорировать нажатия клавиш клавиатуры?
Neketek вне форума Ответить с цитированием
Старый 08.05.2012, 21:44   #2
muradov
Пользователь
 
Регистрация: 05.05.2012
Сообщений: 39
По умолчанию

Наверное, фокус ввода получила кнопка. А у нее совсем другой WNDPROC.
muradov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с клавиатурой. Вадим Буренков Компьютерное железо 22 01.05.2023 21:17
Проблема с клавиатурой Azad Компьютерное железо 3 22.07.2011 16:11
Проблема с клавиатурой nervniy Компьютерное железо 0 22.03.2011 08:44
Проблема с клавиатурой.. NastiaNastia Помощь студентам 2 25.09.2010 18:13
Проблемы с клавиатурой!!! stalker-91 Компьютерное железо 19 29.07.2008 11:08