示例#1
0
  // HDC WINAPI BeginPaint( HWND hwnd, PAINTSTRUCT *lps )
  public static int BeginPaint(int hwnd, int lps) {
    WinWindow win = WinWindow.get(hwnd);

    if (lps == 0) return 0;

    Caret.HideCaret(hwnd);

    int rgn = WinRegion.CreateRectRgn(0, 0, win.rectWindow.width(), win.rectWindow.height());
    Message.SendMessageA(hwnd, WM_NCPAINT, rgn, 0);
    GdiObj.DeleteObject(rgn);

    WinDC dc = win.getDC();
    if (win.invalidationRect == null) {
      new WinRect(0, 0, win.rectClient.width(), win.rectClient.height()).write(lps + 8);
    } else {
      dc.clipX = win.invalidationRect.left;
      dc.clipY = win.invalidationRect.top;
      dc.clipCx = win.invalidationRect.width();
      dc.clipCy = win.invalidationRect.height();
      win.invalidationRect.write(lps + 8);
    }
    int hdc = dc.handle;
    writed(lps, hdc);
    writed(lps + 4, Message.SendMessageA(hwnd, WM_ERASEBKGND, hdc, 0));
    return readd(lps);
  }