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

Тема в разделе "Общие вопросы по С и С++", создана пользователем ASK92, 5 окт 2012.

  1. ASK92

    ASK92 Гость

    Код (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, но не пашет, помогите)
     
Загрузка...

Поделиться этой страницей