Другие языки программирования и технологии

- Как выглядят окна Windows с обратной стороны?

Ilkin Murtuzayev
Ilkin Murtuzayev
127
Роман Рыленков
Роман Рыленков
96 424
Лучший ответ
Вот так:

.
Евгений Плахов
Евгений Плахов
79 491
Евгений Фурдыко скорее так.
Вот так:
#include
#include
#include
LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);

INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR str, int cmdShow)
{
HWND hWnd; //discriptor okna
MSG msg; //soobschenie
WNDCLASSEX wce;
wce.cbSize=sizeof(wce);
wce.style=CS_HREDRAW | CS_VREDRAW;
wce.hInstance=hInst;
wce.hIcon=LoadIcon(NULL, IDI_APPLICATION);
wce.hCursor=LoadCursor(NULL, IDC_HAND);
wce.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wce.lpszMenuName=NULL;
wce.hIconSm=NULL;
wce.lpszClassName=L"myclass";
wce.lpfnWndProc=WindowProc;
wce.cbWndExtra=0;
wce.cbClsExtra=0;
if(!RegisterClassEx(&wce))
return NULL;
hWnd=CreateWindowEx(0, L"myclass", L"MAE OKNO", WS_OVERLAPPEDWINDOW, 100, 100, 700, 400, NULL, 0, hInst, 0);
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
while (GetMessage(&msg, hWnd, 0, 0)) //WM_QUIT
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
RECT rectW, rectC;
WCHAR str[100];
static int dx=1, dy=1, width=GetSystemMetrics(SM_CXSCREEN), height=GetSystemMetrics(SM_CYSCREEN);
switch (msg)
{
case WM_DESTROY:
PostQuitMessage(0); //GetWindowRect, GetClientRect
break;
case WM_MOUSEMOVE:
wsprintf(str, L"x: %d y: %d", GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
SetWindowText(hWnd, str);
break;
case WM_LBUTTONDOWN:
GetWindowRect(hWnd, &rectW);
GetClientRect(hWnd, &rectC);
wsprintf(str, L"x: %d y: %d", rectW.left, rectW.right);
MessageBox(hWnd, str, L"Размeр окна", MB_OK);
break;
/*case WM_RBUTTONDOWN:
GetWindowRect(hWnd, &rectW);
MoveWindow(hWnd, 100, 100, rectW.right+=50, rectW.bottom+=50, msg);
if(NULL!=lParam&MK_SHIFT)
MoveWindow(hWnd, 100, 100, rectW.right-=50, rectW.bottom-=50, msg);
break;*/
case WM_KEYDOWN:
if(wParam==VK_RETURN)
SetTimer(hWnd, 1, 5, NULL);
else if(wParam==VK_ESCAPE)
KillTimer(hWnd, 1);
break;
case WM_TIMER:
GetWindowRect(hWnd, &rectC); //GetCursorPos()
if(rectC.left<=0 || rectC.right>=width) dx=-dx;
if(rectC.top<=0 || rectC.bottom>=height) dy=-dy;
MoveWindow(hWnd, rectC.bottom+dx*2, rectC.top+dy*2, rectC.left-rectC.right, rectC.top-rectC.bottom, true);
break;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
Вячеслав П
Вячеслав П
916
Рома : ) Летающее окошко, прикольно. Можно было бы что-нть ещё нарисовать в WM_PAINT, а то пустое чёрное окно совсем.