Пользователь
Регистрация: 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 на основное окно, помогло, но на кнопку не нажать, а если после нажатия кнопки применить этот метод , то блокируется все, вопрос, какое сообщение получила система, что оно заставило ее игнорировать нажатия клавиш клавиатуры?
|