您的位置:首页 > 其它

win32窗口的创建,GDI简单的绘图操作

2017-08-09 10:16 288 查看
#include<windows.h>

#include <stdlib.h>

#include <malloc.h>

#include <memory.h>

#include <tchar.h>

HWND hwnd;

HANDLE han;

PAINTSTRUCT ps = { 0 };

POINT Pt;

POINT P;

POINT po;

int ff;

bool key = false;

bool key1 = false;

void creatmenu(HWND hwnd,LPARAM lparam)

{
POINT P;
P.x = LOWORD(lparam);
P.y = HIWORD(lparam);
ClientToScreen(hwnd, &P);
HMENU Hm = CreatePopupMenu();
AppendMenu(Hm, MFT_STRING, 10001, L"画直线");

AppendMenu(Hm, MFT_STRING, 10002, L"画矩形");
AppendMenu(Hm, MFT_STRING, 10003, L"画圆");
TrackPopupMenu(Hm, TPM_TOPALIGN | TPM_RIGHTBUTTON, P.x, P.y, 0, hwnd, NULL);

}

LRESULT winproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)

{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (msg)
{
case WM_COMMAND:
key = true;
switch (LOWORD(wparam))
{
case 10001:
ff = 10001;
break;
case 10002:
ff = 10002;
break;
case 10003:
ff = 10003;
break;
}
break;
case WM_PAINT:
if (key&&key1)
{
hdc = BeginPaint(hwnd, &ps);
HPEN hP=CreatePen(CP_WINANSI, 12, RGB(255, 0, 0));
SelectObject(hdc, hP);
switch (ff)
{
case 10001:
MoveToEx(hdc, Pt.x, Pt.y, &P);
LineTo(hdc, po.x, po.y);
break;
case 10003:
Ellipse(hdc, Pt.x, Pt.y, po.x, po.y);
break;
case 10002:
Rectangle(hdc, Pt.x, Pt.y, po.x, po.y);
break;
}
DeleteObject(hP);
EndPaint(hwnd, &ps);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN:
if (key)
{
Pt.x = LOWORD(lparam);
Pt.y = HIWORD(lparam);
key1 = true;
}

break;
case WM_LBUTTONUP:
key =key1= false;
po.x = LOWORD(lparam);
po.y = HIWORD(lparam);
break;
case WM_RBUTTONDOWN:
creatmenu(hwnd, lparam);
key =key1= false;
case WM_MOUSEMOVE:
if (key1)
{
po.x = LOWORD(lparam);
po.y = HIWORD(lparam);
/* RECT T = { 0 };
T.right = po.x;
T.bottom = po.y;
T.left = Pt.x;
T.top = Pt.y;*/
InvalidateRect(hwnd, NULL, true);
}
break;
default:
return DefWindowProc(hwnd, msg, wparam, lparam);
}
return 0;
}

int _tWinMain(HINSTANCE hinstance, HINSTANCE inpare, LPTSTR lpt, int cmd)

{
WNDCLASS Wc;
Wc.cbClsExtra = 0;
Wc.cbWndExtra = 0;
Wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
Wc.hCursor = NULL;
Wc.hIcon = NULL;
Wc.hInstance = hinstance;
Wc.lpfnWndProc = (WNDPROC)winproc;
Wc.lpszClassName = L"画图";
Wc.lpszMenuName = NULL;
Wc.style = CS_HREDRAW | CS_VREDRAW;
ATOM atom = RegisterClass(&Wc);
if (!atom)
MessageBox(NULL, L"注册失败",L"注册失败", MB_OK);
hwnd = CreateWindow(L"画图", L"画图", WS_OVERLAPPEDWINDOW, 300, 300, 700, 700, NULL, NULL, hinstance, 0);
AllocConsole();
han = GetStdHandle(STD_OUTPUT_HANDLE);
if (!hwnd)
MessageBox(NULL, L"创建失败", L"创建失败", MB_OK);
ShowWindow(hwnd, cmd);
UpdateWindow(hwnd);
MSG msg = { 0 };

while(1)
{
if (bool e = PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
return 0;
}
}
}
//while (GetMessage(&msg, NULL, 0, 0))
//{
//
// TranslateMessage(&msg);
// DispatchMessage(&msg);
//
//}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: