【问题标题】:Drawing a Line Outside of WM_PAINT在 WM_PAINT 之外画一条线
【发布时间】:2015-09-16 20:16:54
【问题描述】:

通常,我们在 WM_PAINT

中绘制一条线
LRESULT CALLBACK Display::DisplayWindowProc(HWND hWnd,UINT msg,WPARAM wParamm,LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;

    switch(msg)
    {
    case WM_PAINT:
        hdc = BeginPaint(hWnd,&ps);
        MoveToEx(hdc,0,0,0);
        LineTo(hdc,100,100);
        EndPaint(hWnd,&ps);
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc( hWnd, msg, wParamm, lParam);
}

但是,我想随时画线,简单的例子:

int WINAPI WinMain
(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR cmdLine,
int showCmd
)
{
    //Do Other Things
    Display dislpay;
    display.DrawLine();
    //Do Other Things
}

我的程序是面向对象的,我在 Display 类中显示东西,我想知道是否可以在 Display 类中的 DrawLine() 之类的函数中画线。

【问题讨论】:

    标签: c++ wm-paint


    【解决方案1】:

    您可以创建一个离屏 DC,并选择一个适当大小的位图,然后在您需要时使用它进行绘制。然后在WM_PAINT 上,您从屏幕外 DC 进入 Windows DC。

    【讨论】:

    • @ErfanAhmadi 我已经很多年没有这样做了,但它是这样的:创建一个 DC,创建一个位图,在 DC 中选择位图,使用 DC 进行绘制,然后在WM_PAINT 致电例如BitBlit 从屏幕外 DC 复制到窗口 DC。搜索 MSDN 以获取参考资料。
    • 但就我而言,我不使用位图。我不知道它与位图有什么关系。
    • @ErfanAhmadi A DC 只是一个上下文,它收集了绘制所需的所有内容、钢笔、颜色以及要绘制的内容,这就是位图的用武之地。您需要位图,或者您需要没有什么可借鉴的。一个窗口有一个屏幕上的位图,您可以在上面绘图。可以这样想,画一条线只是在内存中设置一些位,但实际位需要一些内存,这就是位图提供的。使用SelectObject 选择位图(或钢笔或画笔)。请点击链接阅读。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    相关资源
    最近更新 更多