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
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
0
względem ekranu
POINT o;
GetCursorPos(&o);