代码如下:
switch (uMsg)
{
static HBITMAP g_hBitmap;
static HDC g_hDC;
case WM_CREATE:
{
HDC hdc = GetDC(hWnd);
g_hDC = CreateCompatibleDC(hdc);
g_hBitmap = CreateCompatibleBitmap(hdc, 250, 768);
        ReleaseDC(hWnd, hdc);
SelectObject(g_hDC, g_hBitmap);
SelectObject(g_hDC, GetStockObject(WHITE_PEN));
MoveToEx(g_hDC, 0, 0, NULL);
LineTo(g_hDC, 50, 20);
}
    break;
case WM_LBUTTONDOWN:
MoveToEx(g_hDC, 40, 40, NULL);
LineTo(g_hDC, 90, 60);
SendMessage(hWnd, WM_PAINT, 0, 0);
    break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
BitBlt(hdc, 0, 0, 250, 768, g_hDC, 0, 0, SRCCOPY);
EndPaint(hWnd, &ps);
}
break;
default:
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
代码只抄了一部分;
背景刷是黑色的。
为什么按下鼠标后第二条线不显示?
新人分少!大神们将就下哈 ^_^
位图

解决方案 »

  1.   

    一个图片被选入内存dc后,就不能选入别的dc,使用是排他的
      

  2.   

    SendMessage(hWnd, WM_PAINT, 0, 0); 改为:
    InvalidateRect(hWnd,0,TRUE);
      

  3.   

    代码:
    LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    static HBITMAP g_hBitmap;
    static HDC g_hDC;
    HDC hdc;
    PAINTSTRUCT ps; switch (uMsg)
    {
    case WM_CREATE:
    hdc = GetDC(hWnd);
    g_hDC = CreateCompatibleDC(hdc);
    g_hBitmap = CreateCompatibleBitmap(hdc, 250, 768);
    ReleaseDC(hWnd, hdc);
    SelectObject(g_hDC, g_hBitmap);
    SelectObject(g_hDC, GetStockObject(WHITE_PEN));
    MoveToEx(g_hDC, 0, 0, NULL);
    LineTo(g_hDC, 50, 50);
    break;
    case WM_LBUTTONDOWN:
    MoveToEx(g_hDC, 50, 50, NULL);
    LineTo(g_hDC, 100, 160);
    InvalidateRect(hWnd,0,TRUE);
    break;
    case WM_PAINT:
    {
    HDC hdc = BeginPaint(hWnd, &ps);
    BitBlt(hdc, 0, 0, 250, 768, g_hDC, 0, 0, SRCCOPY);
    EndPaint(hWnd, &ps);
    }
    break;
    default:
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    return 0;
    }
      

  4.   

    SendMessage(hWnd, WM_PAINT, 0, 0); 所以没用,是因为 根本没有 需要 paint 区域
    InvalidateRect 使窗口 无效 !!!! 然后 才要 重绘 !!!!
      

  5.   

    呃……是没有InvalidateRect的原因。 谢谢^_^