:
( ). , , , - . . .
Microsoft Visual Studio 2013 ( Win32 Win32 Project ) (Empty project). .cpp, .
:
#include <windows.h>
LRESULT CALLBACK WinFun(HWND, UINT, WPARAM, LPARAM);
char WinName[]=" "; //
int WINAPI WinMain(HINSTANCE hIns, HINSTANCE hPrevIns, LPSTR arg, int WinMode)
{
HWND hwnd; //
MSG msg; // . , Windows
WNDCLASSEX wcl; //
//
wcl.hInstance=hIns; //
wcl.lpszClassName=WinName; //
wcl.lpfnWndProc=WinFun; //
wcl.style=0; //
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=(HBRUSH)GetStockObject(WHITE_BRUSH);
//
if (!RegisterClassEx(&wcl)) return 0;
//
hwnd=CreateWindow(
WinName, //
" ", //
WS_OVERLAPPEDWINDOW, //
CW_USEDEFAULT, // X- Windows
CW_USEDEFAULT, // Y- Windows
CW_USEDEFAULT, // - Windows
CW_USEDEFAULT, // - Windows
HWND_DESKTOP, //
NULL, //
hIns, //
NULL); //
//
ShowWindow(hwnd, WinMode);
UpdateWindow(hwnd);
//
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg); //
DispatchMessage(&msg);
}
return msg.wParam;
}
// Windows,
//
struct Line
{
int x1, x2, y1, y2;
};
struct LineList //
{
Line L;
LineList *pNext;
};
LineList *pFirst=0, *p;
void add(LineList *&pF, LineList *p)
{ //
|
|
p->pNext=pF;
pF=p;
}
int x1, x2, y1, y2;
HPEN pB, pW;
LRESULT CALLBACK WinFun(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch(message)
{
case WM_CREATE:
pB=(HPEN)GetStockObject(BLACK_PEN);
pW=(HPEN)GetStockObject(WHITE_PEN);
break;
case WM_RBUTTONDOWN:
x2=x1=LOWORD(lParam);
y2=y1=HIWORD(lParam);
break;
case WM_MOUSEMOVE:
if (wParam & MK_RBUTTON) //
{
hdc=GetDC(hwnd);
SelectObject(hdc, pW);
MoveToEx(hdc, x1, y1, (LPPOINT)NULL);
LineTo(hdc, x2, y2);
x2=LOWORD(lParam);
y2=HIWORD(lParam);
SelectObject(hdc, pB);
MoveToEx(hdc, x1, y1, (LPPOINT)NULL);
LineTo(hdc, x2, y2);
ReleaseDC(hwnd, hdc);
}
break;
case WM_RBUTTONUP: //
p=new LineList;
p->L.x1=x1; p->L.x2=x2;
p->L.y1=y1; p->L.y2=y2;
add(pFirst, p);
break;
case WM_PAINT: //
hdc=BeginPaint(hwnd, &ps);
p=pFirst;
while(p)//
{
MoveToEx(hdc, p->L.x1, p->L.y1, (LPPOINT)NULL);
LineTo(hdc, p->L.x2, p->L.y2);
p=p->pNext;
}
EndPaint(hwnd, &ps);
break;
case WM_DESTROY: //
PostQuitMessage(0);
break;
default:
// Windows ,
//
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
, Unicode. .. , 9.
9 Unicode
10.
10