1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
Скрыть объявление

Уважаемый Гость, в 23:30 по мск форум будет закрыт на профилактику на 1,5 часа до 01:00 24.10.2017

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

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

  1. ASK92

    ASK92 Гость

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

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