[win api] Jak malować po pasku okna?

0

Jak malować po pasku okna na stałe ? tzn. tak jak w zdarzeniu WM_PAINT to co namuluje nie znika po odmalowaniu okna.
Wiem ze moge malować po pasku dzięki temu:
hdc = GetWindowDC(hwnd);
ale w WM_PAINT to nie działa :(

0

WM_NCPAINT

0

Po dodaniu tego WM_NCPAINT pasek zniknął, została reszta okna

0

nie myslisz. nie korzystasz z msdn. oczywiscie , ze ci pasek zniknie, bo obsluga tego msg rysuje ramke okna. wywolaj domyslna funkcje, a potem dopiero rysuj na pasku

0

czytałem a msdn ale dalej nie bardzo wiem jak to zrobić
mozesz wrzucic kawalek kodu ?

0

bueee musialem przez ciebie odpalic łyndousa :

#include <windows.h>

LRESULT NCPAINT(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
  LRESULT ret=DefWindowProc(hWnd,message,wParam,lParam);
  HDC dc=GetWindowDC(hWnd);
  TextOut(dc,100,3,"pies zdechl",strlen("pies zdechl"));
  ReleaseDC(hWnd,dc);
  return ret;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
  switch(message){
    case WM_NCPAINT         :return NCPAINT(hWnd,message,wParam,lParam);
    case WM_PAINT           :return NCPAINT(hWnd,message,wParam,lParam); //czasem nie jest wysylane ncpaint, a zmiany na pasku znikaja, przynajmniej u mnie na 98, a moze to kwestia regionu
    case WM_DESTROY         :exit(0); // moze to zbyt brutalne :>
  }
  return DefWindowProc(hWnd,message,wParam,lParam);
}

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
  MSG msg;
  WNDCLASSEX wcex;
  wcex.cbSize       =sizeof(WNDCLASSEX);
  wcex.style        =CS_HREDRAW|CS_VREDRAW|CS_OWNDC|CS_DBLCLKS|CS_BYTEALIGNCLIENT|CS_BYTEALIGNWINDOW;
  wcex.lpfnWndProc  =(WNDPROC)WndProc;
  wcex.cbClsExtra   =0;
  wcex.cbWndExtra   =0;
  wcex.hInstance    =0;
  wcex.hIcon        =0;
  wcex.hbrBackground=0;
  wcex.lpszMenuName =0;
  wcex.lpszClassName="klasa";
  wcex.hIconSm      =0;
  wcex.hCursor      =LoadCursor(0,IDC_ARROW);
  RegisterClassEx(&wcex);
  ShowWindow(CreateWindowEx(WS_EX_APPWINDOW,"klasa","okno",WS_OVERLAPPEDWINDOW,0,0,300,200,0,0,0,0),SW_SHOW);
  while(GetMessage(&msg,0,0,0)){
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return 0;
}
0

dzięki
możesz mi jeszcze powiedzieć jak w WM_MOUSEMOVE pobrać pozycje myszki
względem całego okna, albo całego ekranu ?
wiem jak pobrac tylko względem czesci klienta

1 użytkowników online, w tym zalogowanych: 0, gości: 1