I'm trying to make a EULA. So I have a multi line read-only edit control that the user needs to be able to scroll down on.
Additionally, since I'm using a custom skin for my main window background, the edit control background has to be transparent other wise it looks really ugly.
I simply used the WS_VSCROLL style to obtain the vertical scroll bar. The problem is that when I scroll down then up, the text doesn't refresh, i.e it draws on top of itself and creates garbage.
I've done some research, and I know that this is why:
What I don't know is how to fix it.Code:case WM_CTLCOLORSTATIC: // Makes the static control backgrounds transparent ::SetBkMode((HDC)wParam, TRANSPARENT); return (LRESULT)::GetStockObject(NULL_BRUSH); // Return NULL brush
I've tried doing something like this:
This exact same code worked for a similar problem I had updating static text, but doesn't seem to work on the edit control (I'm guessing cause it doesn't fire a WM_SETTEXT on a scroll). I'm sure I have to intercept the EN_VSCROLL notification, but so far nothing I've tried has worked.Code:case WM_SETTEXT: // Ensures that text is not drawn on top of previous text if ( GetDlgCtrlID (hDlg) == EDIT_CONTROL_ID){ ::InvalidateRect( hDlg, NULL, TRUE); DefWindowProc(hDlg, WM_SETTEXT, 0, lParam); }
Any help is appreciated! (I'm also pretty new to win32 development)
EDIT: Ok, so I made some progress, but not much.. still need some help.
thenCode:case WM_COMMAND: // COMMAND MESSAGE wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case EDIT_ID: if (wmEvent == EN_VSCROLL){ ::ShowWindow (GetDlgItem(hDlg, wmId), SW_HIDE); ::SetDlgItemText (hDlg, wmId, g_eulaText); ::ShowWindow (GetDlgItem(hDlg, wmId), SW_SHOW); ::SetFocus(GetDlgItem(hDlg, wmId)); } return TRUE;
This has two major problems.Code:case WM_SETTEXT: // Ensures that text is not drawn on top of previous text if ( GetDlgCtrlID (hDlg) == EDIT_ID){ ::InvalidateRect( hDlg, NULL, TRUE); DefWindowProc(hDlg, WM_SETTEXT, 0, lParam); } break;
1. It turns the background into non-transparent (even though it still acts as a transparent background... see 2)
2. When I click and drag the scroll bar, it still draws on top of itself
Actually, just found out that EN_VSCROLL doesn't get sent when the user clicks on the actual scroll bar, which means that capturing EN_VSCROLL might not work... sigh




Reply With Quote