In einem Listenfenster Nachricht bekommen wenn der Scrollbutton gedrückt wurde
-
static HWND LHours=CreateWindow("listbox",NULL,
WS_CHILD|WS_VISIBLE|LBS_STANDARD|WS_BORDER,
Lx,Ly,
40,30,
hWnd,(HMENU)23,hInst,NULL);
...
case WM_VSCROLL:
{
MessageBox(0,"uuu",0,0);
break;
}Ich bekomme keine Message wenn der Nutzer die Scrollleiste bzw. den ScrollKnopd drückt....
-
hab es grad mal kurz probiert bekomme es auch nicht hin finde auch keine erklärung in der msdn dafür.

aber wenn ich listbox subclasse funktionert es einwandfrei.sublclassing:
http://www.winapi.net/index.php?inhalt=s27
-
Wenn ich das SubClass bekomme ich probleme in der WM_PAINT:...
Da werden verschiedene bereiche des Fensters neu gezeichnet oder als falsch markiert....
-
Wenn ich das SubClass bekomme ich probleme in der WM_PAINT:...
Da werden verschiedene bereiche des Fensters neu gezeichnet oder als falsch markiert....
Du musst doch nicht WM_PAINT behandeln!
-
LRESULT CALLBACK PROClistbox(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { return CallWindowProc(wndProcTab3,hWnd, message, wParam, lParam); }LRESULT CALLBACK wndProcTab3(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { static HWND LHours; switch(uMsg) { case WM_CREATE: { LHours=CreateWindow("listbox",0,WS_CHILD|WS_VSCROLL|WS_VISIBLE|WS_CAPTION, 100,100,100,60,hWnd,(HMENU)23,hInst,0); SendMessage(LHours, LB_INSERTSTRING, 0, (LPARAM) "la"); SendMessage(LHours, LB_INSERTSTRING, 0, (LPARAM) "la"); SendMessage(LHours, LB_INSERTSTRING, 0, (LPARAM) "la"); SendMessage(LHours, LB_INSERTSTRING, 0, (LPARAM) "la"); // SetWindowLong(LHours,GWL_WNDPROC,(LONG)PROClistbox);Lasse Ich SetWindowLong weg, werden die Einträge angezeigt. Wenn ich jedoch die Kommentare entferne werden die Einzelnen Einträge nicht angezeigt....

-
{ static HWND LHours; switch(uMsg) { case WM_CREATE: { LHours=CreateWindow("listbox",0,WS_CHILD|WS_VSCROLL|WS_VISIBLE|WS_CAPTION, 100,100,100,60,hWnd,(HMENU)23,hInst,0); if(SendMessage(LHours, LB_INSERTSTRING, 0, (LPARAM) "la")==LB_ERR)MessageBox(0,"lol",0,0); SendMessage(LHours, LB_INSERTSTRING, 0, (LPARAM) "la"); SendMessage(LHours, LB_INSERTSTRING, 0, (LPARAM) "la"); SendMessage(LHours, LB_INSERTSTRING, 0, (LPARAM) "la"); break; } case WM_CTLCOLORLISTBOX: { SetWindowLong(LHours,GWL_WNDPROC,(LONG)PROClistbox); break; }Jetzt Funktionierts

-
Funktioniert doch nicht. Wenn ich wie gesagt ein paar Strings reinsetze, und dann das Teil subclasse, werden die Strings nicht mehr angezeigt....Wie kann ich das vermeiden? - ich brauche unbedingt die WM_VHSCROLL von der listbox
-
keiner eine idee?
-
du speicherst nirgendwo den rückgabewert von SetWindowLong. hast du subclassing überhaupt verstanden?
-
augen auf...
LRESULT CALLBACK PROClistbox(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
return CallWindowProc(wndProcTab3,hWnd, message, wParam, lParam);
}
-
ROFL.
-
hmmmmmm schrieb:
ROFL.
Zu Untertrieben

[cpp]
static WNDPROC AlteWndProcDerListBox (WNDPROC)SetWindowLong(....PROClistbox...)
//...
LRESULT CALLBACK PROClistbox(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
return CallWindowProc(AlteWndProcDerListBox,hWnd, message, wParam, lParam);
}
[/cpp]