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

来源:互联网 发布:清华斯维尔软件下载 编辑:程序博客网 时间:2024/06/05 05:37
#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;
}
原创粉丝点击