Win32 api
Код:
#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(wParam)
{
case VK_LEFT:
{
hdc = GetDC(hWnd);
X-=5;
MoveWindow(hwnd,X,Y,600,620,TRUE);
}
break;
case VK_RIGHT:
{
hdc = GetDC(hWnd);
X+=5;
MoveWindow(hwnd,X,Y,600,620,TRUE);
}
break;
case VK_UP:
{
hdc = GetDC(hWnd);
Y-=5;
MoveWindow(hwnd,X,Y,600,620,TRUE);
}
break;
case VK_DOWN:
{
hdc = GetDC(hWnd);
Y+=5;
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_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;
}
#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(wParam)
{
case VK_LEFT:
{
hdc = GetDC(hWnd);
X-=5;
MoveWindow(hwnd,X,Y,600,620,TRUE);
}
break;
case VK_RIGHT:
{
hdc = GetDC(hWnd);
X+=5;
MoveWindow(hwnd,X,Y,600,620,TRUE);
}
break;
case VK_UP:
{
hdc = GetDC(hWnd);
Y-=5;
MoveWindow(hwnd,X,Y,600,620,TRUE);
}
break;
case VK_DOWN:
{
hdc = GetDC(hWnd);
Y+=5;
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_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;
}
Нужно реализовать;
1. Клавиатура.
1.1. Механизм сообщений от клавиатуры.
1.2. Коды OEM, ANSI, ASCII, виртуальные коды.
1.3. Виртуальные клавиши.
1.4. Символьные сообщения.
1.5. Системные сообщения.
1.6. Преобразование кодов.
1.7. Как отличить нажатия совпадающих клавиш.
1.8. Как узнать ввод строчных и прописных букв.
1.9. Фокус ввода.
2. Мышь.
2.1. Захват и освобождение окном мыши.
2.2. Обработка сообщений от мыши.
2.3. Координаты x, y.
2.4. Курсор мыши. Управление курсором.
2.5. Сообщения мыши в клиентской и неклиентской области окна.
3. Таймер.
3.1. Установка и снятие таймера.
3.2. Функция таймера.
А проблема то в чем?
Проблема, в том, что я ваще не щарю, и работаю на другом языке а уж тем болеее на другой платформе(,
Я конечно все что допер написал, а остальной хз, так прошу знающих людей мне помочь)
А вот случайно Вы не в БНТУ учитесь? Учитель не Разорёнов?
Да нет не он