想写一个win32的画图程序,用三个垂直滚动条来调节三个编辑框的背景颜色,来分别为Red,Green,Blue。然后在第四个编辑框里显示这三种颜色叠加的效果,来达到改变画笔颜色的效果。但运行后发现无论怎么拖动滚动条滑块,编辑框的颜色都不变,一直保持为黑色,不知道是怎么回事。附以下代码,求大佬们多多指教(手动鞠躬感谢)。
(ps. 本人菜鸟一只,如果代码其他地方也有疏漏,也请大佬们指正,感谢!!!)
case WM_CREATE:
{
LPCREATESTRUCT pcs = (LPCREATESTRUCT)lParam;
hScrollBar_S = CreateWindow(L"scrollbar", L"bar", WS_CHILDWINDOW | WS_VISIBLE | SBS_HORZ, 20, 20, 200, 20, hwnd, (HMENU)1001, pcs->hInstance, NULL);
SendMessage(hScrollBar_S, SBM_SETRANGE, 0, 100);
SendMessage(hScrollBar_S, SBM_SETPOS, 0, true);
hEdit_R = CreateWindow(L"edit", L"", WS_CHILDWINDOW | WS_VISIBLE | ES_NOHIDESEL, 20, 50, 50, 50, hwnd, (HMENU)1002, pcs->hInstance, NULL);
hEdit_G = CreateWindow(L"edit", L"", WS_CHILDWINDOW | WS_VISIBLE | ES_NOHIDESEL, 80, 50, 50, 50, hwnd, (HMENU)1003, pcs->hInstance, NULL);
hEdit_B = CreateWindow(L"edit", L"", WS_CHILDWINDOW | WS_VISIBLE | ES_NOHIDESE , 140, 50, 50, 50, hwnd, (HMENU)1004, pcs->hInstance, NULL);
hEdit_A = CreateWindow(L"edit", L"", WS_CHILDWINDOW | WS_VISIBLE | ES_NOHIDESEL,230, 50, 50, 50, hwnd, (HMENU)1005, pcs->hInstance, NULL);
hScrollBar_R = CreateWindow(L"scrollbar", L"bar", WS_CHILDWINDOW | WS_VISIBLE | SBS_VERT, 35,110, 20, 200, hwnd, (HMENU)1006, pcs->hInstance, NULL);
SendMessage(hScrollBar_R, SBM_SETRANGE, 0, 255);
SendMessage(hScrollBar_R, SBM_SETPOS, 0, true);
hScrollBar_G = CreateWindow(L"scrollbar", L"bar", WS_CHILDWINDOW | WS_VISIBLE | SBS_VERT, 95, 110, 20, 200, hwnd, (HMENU)1007, pcs->hInstance, NULL);
SendMessage(hScrollBar_G, SBM_SETRANGE, 0, 255);
SendMessage(hScrollBar_G, SBM_SETPOS, 0, true);
hScrollBar_B = CreateWindow(L"scrollbar", L"bar", WS_CHILDWINDOW | WS_VISIBLE | SBS_VERT, 155, 110, 20, 200, hwnd, (HMENU)1008, pcs->hInstance, NULL);
SendMessage(hScrollBar_B, SBM_SETRANGE, 0, 255);
SendMessage(hScrollBar_B, SBM_SETPOS, 0, true);
}
case WM_HSCROLL:
{
WORD code = LOWORD(wParam);
HWND hCtrl = (HWND)lParam;
int pos = SendMessage(hCtrl, SBM_GETPOS, 0, 0);
switch (code)
{
case SB_LINELEFT:
pos -= 1;
break;
case SB_LINERIGHT:
pos += 1;
break;
case SB_PAGELEFT:
pos -= 10;
break;
case SB_PAGERIGHT:
pos += 10;
break;
case SB_THUMBPOSITION:
pos = HIWORD(wParam);
break;
}
SendMessage(hCtrl, SBM_SETPOS, pos, true);
}
case WM_VSCROLL:
{
WORD code = LOWORD(wParam);
HWND hCtrl = (HWND)lParam;
int pos = SendMessage(hCtrl, SBM_GETPOS, 0, 0);
switch (code)
{
case SB_LINEUP:
pos -= 1;
break;
case SB_LINEDOWN:
pos += 1;
break;
case SB_PAGEUP:
pos -= 10;
break;
case SB_PAGEDOWN:
pos += 10;
break;
case SB_THUMBPOSITION:
pos = HIWORD(wParam);
break;
}
SendMessage(hCtrl, SBM_SETPOS, pos, true);
}
case WM_CTLCOLOREDIT:
{
HDC hdc = (HDC)wParam;
HWND hEdit = (HWND)lParam;
UINT CtrlID = GetWindowLong(hEdit, GWL_ID);
HWND hCtrl = (HWND)lParam;
if (CtrlID == 1002)
{
int pos_R = GetScrollPos(hScrollBar_R, SB_VERT);
SetBkMode(hdc, TRANSPARENT);
return (LRESULT)CreateSolidBrush(RGB(pos_R, 0, 0));
}
else if (CtrlID == 1003)
{
int pos_G = GetScrollPos(hScrollBar_G, SB_VERT);
SetBkMode(hdc, TRANSPARENT);
return (LRESULT)CreateSolidBrush(RGB(0, pos_G, 0));
}
else if (CtrlID == 1004)
{
int pos_B = GetScrollPos(hScrollBar_B, SB_VERT);
SetBkMode(hdc, TRANSPARENT);
return (LRESULT)CreateSolidBrush(RGB(0, 0, pos_B));
}
else
{
int pos_R = GetScrollPos(hScrollBar_R, SB_VERT);
int pos_G = GetScrollPos(hScrollBar_G, SB_VERT);
int pos_B = GetScrollPos(hScrollBar_B, SB_VERT);
SetBkMode(hdc, TRANSPARENT);
return (LRESULT)CreateSolidBrush(RGB(pos_R, pos_G, pos_B));
}
}break;
}