LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static HWND hDirectives;
static char inBuffer [256] = "hey";
static LPWSTR lpszBuffer = (LPWSTR)malloc(256*sizeof(LPWSTR));
switch (message)
{
case WM_CREATE:
hDirectives = CreateWindow(TEXT("static"), NULL, WS_CHILD | WS_BORDER | WS_VISIBLE | SS_RIGHT | SS_SUNKEN | WS_VSCROLL,
20, 20, 300, 300, hWnd, (HMENU) ID_DIRECTIVE, ((LPCREATESTRUCT) lParam) ->hInstance, NULL);
SetWindowLong(hDirectives, GWL_WNDPROC, (LONG) DirectiveProc);
break;case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK DirectiveProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
HWND hParent = (HWND)GetWindowLong(hWnd, GWL_HWNDPARENT);
static int nScrollPos;
static SCROLLINFO si;
switch(message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
EndPaint(hWnd, &ps);
case WM_SIZE:
si.cbSize = sizeof(si);
si.fMask = SIF_RANGE | SIF_PAGE;
si.nMin = 0;
si.nMax = 10;
si.nPage = 5;
SetScrollInfo(hWnd, SB_VERT, &si, TRUE);
return 0;
case WM_VSCROLL:
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
GetScrollInfo(hWnd, SB_VERT, &si);
nScrollPos = si.nPos;
switch(LOWORD(wParam))
{
case SB_THUMBTRACK:
si.nPos = si.nTrackPos;
break;
default:
break;
}
si.fMask = SIF_POS;
SetScrollInfo(hWnd, SB_VERT, &si, TRUE);
GetScrollInfo(hWnd, SB_VERT, &si);
if(si.nPos!=nScrollPos)
{
ScrollWindow(hWnd, 0, 5 * (nScrollPos - si.nPos), NULL, NULL);
UpdateWindow(hParent);
}
return 0;
default:
DefWindowProc(hWnd, message, wParam, lParam);
}
//CallWindowProc(WndProc, hParent, message, wParam, lParam); wasn't sure if I was supposed to add this
}
Поэтому я не хочу добавлять функцию прокрутки к своему статическому элементу управления, поэтому я разделил его на подклассы, но теперь у меня проблемы. Я не хочу отображать текст в моем статическом элементе управления, а затем прокручивать его. Без подклассов я мог бы отображать текст в окне. Теперь с использованием подклассов элемент управления отображается полностью белым по сравнению с предыдущим серым цветом и пытается установить неудачный текст. Кроме того, когда я выполняю прокрутку, статический элемент управления отображается вне своего окна, даже если я обновляю родительское окно в моем DirectiveProc всякий раз, когда пользователь выполняет прокрутку. Моя цель здесь — создать статический элемент управления с информацией, которую пользователь может прокручивать.
Комментаторы уже определили ряд проблем, с которыми вы сталкиваетесь, не следуя правилам подклассов, которые перечислены в MSDN здесь:
Других решений пока нет …