Клавиотура Win 32 Api

  • Автор темы ASK92
  • Дата начала
A

ASK92

#1
C++:
 #include <windows.h>
#include <string.h>
#include <stdio.h>

LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WindowFunc2(HWND, UINT, WPARAM, LPARAM);

char szWinName[] = "MyWin"; 
char szWinName1[] = "MyWin"; 
char str[255] = ""; 

HWND hwnd; 
HWND hwnd2;

int X=200, Y=200;

int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode)
{
MSG msg;		
WNDCLASSEX wcl, wcl1;  

wcl.hInstance = hThisInst;	 
wcl.lpszClassName = szWinName; 
wcl.lpfnWndProc = WindowFunc; 
wcl.style = CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;							// Двойной щелчек на WM_LBUTTONDOWN для родительского  
wcl.cbSize = sizeof(WNDCLASSEX);	

wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
wcl.hIconSm = LoadIcon(NULL, IDI_WINLOGO); 

wcl.hCursor = LoadCursor(NULL, IDC_ARROW); 
wcl.lpszMenuName = NULL;			
wcl.cbClsExtra = 0;	 
wcl.cbWndExtra = 0;	 
wcl.hbrBackground = CreateSolidBrush(RGB(0,40,40));

wcl1=wcl;

wcl1.lpszClassName = "1";
wcl1.lpfnWndProc = WindowFunc2;

wcl1.hbrBackground = CreateSolidBrush(RGB(133, 133, 133));

wcl1.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;							// Двойной щелчек на WM_LBUTTONDOWN для дочернего

if (!RegisterClassEx(&wcl) | !RegisterClassEx(&wcl1)) return 0;

hwnd = CreateWindow(szWinName,			 
"API application",		 
WS_OVERLAPPEDWINDOW,	
200,
200,
600,	
620,	
HWND_DESKTOP,  
NULL,	  
hThisInst, 
NULL,
);

hwnd2 = CreateWindow("1",			  
"API application", 
WS_OVERLAPPEDWINDOW | WS_CHILD, 
40,
40,
500,
500,
hwnd,  
NULL,
hThisInst,
NULL
);

ShowWindow (hwnd, SW_SHOW);
ShowWindow (hwnd2, SW_HIDE);

ShowWindow(hwnd, nWinMode);
UpdateWindow(hwnd);

while (GetMessage(&msg, NULL, 0,0))
{
TranslateMessage(&msg); 
DispatchMessage(&msg); 
}
return msg.wParam;
}		  

LRESULT CALLBACK WindowFunc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;	

switch (message)
{
case WM_CREATE:

SetTimer(hwnd , 0 , 3000 ,NULL); break;

case WM_TIMER:

ShowWindow(hwnd2,SW_SHOW); break; 


case WM_CHAR: break;
case WM_LBUTTONDOWN: break;

case WM_KEYDOWN:
{

switch(HIWORD(lParam))
{

case 0x1D:
ShowWindow (hwnd, SW_SHOW);
MessageBox(hwnd,"Left CTRL","CTRL",MB_OK);
break;
case 0x11D:
ShowWindow (hwnd2, SW_SHOW);
MessageBox(hwnd2,"Right CTRL","CTRL",MB_OK);
break;

}

switch(wParam)
{
case VK_LEFT:
{
hdc = GetDC(hWnd);
X-=10;
MoveWindow(hwnd,X,Y,600,620,TRUE);
}
break;
case VK_RIGHT:
{
hdc = GetDC(hWnd);
X+=10;
MoveWindow(hwnd,X,Y,600,620,TRUE);
}
break;
case VK_UP:
{
hdc = GetDC(hWnd);
Y-=10;
MoveWindow(hwnd,X,Y,600,620,TRUE);
}
break;
case VK_DOWN:
{
hdc = GetDC(hWnd);
Y+=10;
MoveWindow(hwnd,X,Y,600,620,TRUE);
}
break;

}
break;

}

case WM_LBUTTONDBLCLK:
{ 

ShowWindow( hWnd, SW_SHOWMAXIMIZED);
UpdateWindow(hWnd);

return 0; 
}

case WM_DESTROY: 

if (hWnd == hwnd) PostQuitMessage(0); break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

LRESULT CALLBACK WindowFunc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;	

switch (message)
{

case WM_CREATE:

SetTimer(hwnd , 0 , 3000 ,NULL); break;

case WM_CHAR: break;
case WM_LBUTTONDOWN: break;

case WM_KEYDOWN:
{

switch(wParam)
{
case VK_LEFT:
{
hdc = GetDC(hWnd);
X-=10;
MoveWindow(hwnd2,X,Y,600,620,TRUE);
}
break;
case VK_RIGHT:
{
hdc = GetDC(hWnd);
X+=10;
MoveWindow(hwnd2,X,Y,600,620,TRUE);
}
break;
case VK_UP:
{
hdc = GetDC(hWnd);
Y-=10;
MoveWindow(hwnd2,X,Y,600,620,TRUE);
}
break;
case VK_DOWN:
{
hdc = GetDC(hWnd);
Y+=10;
MoveWindow(hwnd2,X,Y,600,620,TRUE);
}
break;

}
break;
case WM_LBUTTONDBLCLK:
{ 

ShowWindow( hWnd, SW_SHOWMAXIMIZED);
UpdateWindow(hWnd);
return 0; 
}

case WM_RBUTTONDOWN:

{

WORD xPos, yPos, nSize;

TCHAR szBuf[100];	 

// Сохраняем координаты курсора мыши

xPos  = LOWORD(lParam);
yPos  = HIWORD(lParam);

hdc = GetDC(hWnd);

// Подготавливаем текстовую строку, содержащую
// координаты курсора мыши

nSize = wsprintf(szBuf, TEXT("(%d, %d)"), xPos, yPos);

// Выводим координаты курсора мыши
// в точке, соответствующей положению
// курсора мыши 

TextOut(hdc, xPos, yPos, szBuf, nSize);

ReleaseDC(hWnd, hdc);
return 0;

}

case WM_DESTROY: 

if (hWnd == hwnd2) PostQuitMessage(0); break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
}
Проблема вобщем такая, мне надо при нажатии на cntrl + 1 чтобы было активно родительское окно, а при нажатии cntrl + 2 чтобы было активно дочернее, пока пробую через просто cntrl, но не пашет, помогите)