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;
}
#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;
}
阅读全文
0 0
- win32窗口的创建,GDI简单的绘图操作
- WIN32汇编: 3.创建简单的窗口
- Win32汇编:创建简单的窗口
- Win32创建一个简单的窗口
- GDI的简单操作
- [win32] GDI绘图常用的三种坐标系
- android简单的GDI绘图方法
- win32 api 创建窗口的一个简单例子
- win32 简单窗口的创建及参数介绍
- Win32汇编教程3 - 创建简单的窗口
- MFC(一):win32创建一个最简单的窗口
- Win32简单的子窗口创建与参数传递
- win32程序窗口的创建
- Win32创建窗口的过程
- win32程序窗口的创建
- win32的创建窗口代码
- 简单的WIN32窗口封装
- [win32] GDI绘图技术
- appium切换webview时卡住问题
- react-native项目之样式总结
- FreeRTOS系列学习笔记四---task
- 安卓通过SurfaceView类实现手写功能(上)
- Css3 弹性盒子
- win32窗口的创建,GDI简单的绘图操作
- MyEclipse常用快捷键 ctrl+shift+L
- servlet基础
- 应用启动时有多次读写/proc/cpuinfo
- 剑指offer:二叉树的深度
- Go 并发 、并行、线程池
- 邮箱正则表达式
- 设置excel单元格下拉框及下拉框颜色
- iOS开发之Runtime运行时机制