绘制线维纳皮
Drawing line WINAPI
本文关键字:绘制 更新时间:2023-10-16
我想通过单击并将光标从一个点移动到另一个点来画一条线,我刚刚复制了以下代码,任何我的 WindowProcedure 看起来像这样:
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
//PAINTSTRUCT ps;
HDC hdc;
bool draw = false;
int x = 0, y=0;
//InvalidateRect(hwnd, NULL, true);
switch (uMsg)
{
case WM_LBUTTONDOWN:
draw = true;
x = LOWORD(lParam);
y = HIWORD(lParam);
return 0;
case WM_LBUTTONUP:
if (draw)
{
hdc = GetDC(hwnd);
MoveToEx(hdc, x, y, NULL);
LineTo(hdc, LOWORD(lParam), HIWORD(lParam));
ReleaseDC(hwnd, hdc);
}
draw = FALSE;
return 0;
case WM_MOUSEMOVE:
if (draw)
{
hdc = GetDC(hwnd);
MoveToEx(hdc, x, y, NULL);
LineTo(hdc, x = LOWORD(lParam), y = HIWORD(lParam));
ReleaseDC(hwnd, hdc);
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
但是当我点击什么也没发生时,就像一次只能处理一个案例一样,对吗?当我评论前两种情况时,它会画线,所以它进入切换,但这不是我想做的。 有什么建议吗?
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
//PAINTSTRUCT ps;
HDC hdc;
static bool draw = false; // ←static
static int x = 0, y=0; // ←
怎么样?
相关文章:
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- SFML 文本未绘制在窗口上
- 如何在快板的屏幕中显示子位图的绘制?
- 如何绘制自定义形状的元素?
- QPainter 将 QBrush 设置为 在 QT/C++ 中绘制文本
- 除非重新绘制大小,否则SDL_Texture在调整大小后呈现黑色
- 绘制文本问题
- 在 QT C++中绘制/操作多边形
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 在现代OpenGL中,绘制GL_TRIANGLE奇怪的z轴行为的填充圆
- OpenGL 着色器不绘制任何东西 - 糟糕的精灵类
- 要在屏幕上绘制一些小瓷砖,我应该使用 QQuickItem 还是 QQuickPaintedItem?