16,472
社区成员
发帖
与我相关
我的任务
分享
# include <windows.h>
//# include "resource.h"
# include <stdio.h>
#define sb1 1
#define sb2 2
#define sb3 3
#define st1 1
#define st2 2
#define st3 3
#define st4 4
#define st5 5
#define st6 6
#define st7 7
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
static TCHAR zz[10] = TEXT("zz");
WNDCLASS a;
HWND hwnd;
MSG msg;
a.cbClsExtra = 0;
a.cbWndExtra = 0;
a.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//(COLOR_BTNFACE + 1);
a.hCursor = LoadCursor(NULL,IDC_ARROW);
a.hIcon = LoadIcon(NULL,IDI_APPLICATION);//LoadIcon(hInstance,TEXT("myicon"));
a.hInstance = hInstance;
a.lpfnWndProc = WindowProc;
a.lpszClassName = zz;
a.lpszMenuName = NULL;
a.style = CS_HREDRAW |CS_VREDRAW;
if(!RegisterClass(&a))
return 0;
hwnd = CreateWindow(zz,TEXT("Application"),WS_OVERLAPPEDWINDOW,400,200,GetSystemMetrics(SM_CXSCREEN)/2,GetSystemMetrics(SM_CYSCREEN)/2,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
static HWND hsb, hsb1, hsb2, hsb3, hst, hst1, hst2, hst3, hst4, hst5, hst6, hst7;
static int cxClient, cyClient;
PAINTSTRUCT ps;
static int red = 0, green = 0, blue = 0;
static int vpos = 0;
static TCHAR ch[5];
static RECT rect;
static HBRUSH oldbrush;
switch(uMsg)
{
case WM_CREATE:
hst1 = CreateWindow("static",NULL,WS_CHILD|WS_VISIBLE|SS_WHITERECT,0,0,0,0,hwnd,(HMENU)st1,((LPCREATESTRUCT)lParam)->hInstance,NULL);
hst2 = CreateWindow("static",TEXT("红"),WS_CHILD|WS_VISIBLE|SS_CENTER,0,0,0,0,hwnd,(HMENU)st2,((LPCREATESTRUCT)lParam)->hInstance,NULL);
hst3 = CreateWindow("static",TEXT("绿"),WS_CHILD|WS_VISIBLE|SS_CENTER,0,0,0,0,hwnd,(HMENU)st3,((LPCREATESTRUCT)lParam)->hInstance,NULL);
hst4 = CreateWindow("static",TEXT("蓝"),WS_CHILD|WS_VISIBLE|SS_CENTER,0,0,0,0,hwnd,(HMENU)st4,((LPCREATESTRUCT)lParam)->hInstance,NULL);
hst5 = CreateWindow("static",TEXT("0"),WS_CHILD|WS_VISIBLE|SS_CENTER,0,0,0,0,hwnd,(HMENU)st5,((LPCREATESTRUCT)lParam)->hInstance,NULL);
hst6 = CreateWindow("static",TEXT("0"),WS_CHILD|WS_VISIBLE|SS_CENTER,0,0,0,0,hwnd,(HMENU)st6,((LPCREATESTRUCT)lParam)->hInstance,NULL);
hst7 = CreateWindow("static",TEXT("0"),WS_CHILD|WS_VISIBLE|SS_CENTER,0,0,0,0,hwnd,(HMENU)st7,((LPCREATESTRUCT)lParam)->hInstance,NULL);
hsb1 = CreateWindow("scrollbar",NULL,WS_CHILD|WS_VISIBLE|SBS_VERT,0,0,0,0,hwnd,(HMENU)sb1,((LPCREATESTRUCT)lParam)->hInstance,NULL);
hsb2 = CreateWindow("scrollbar",NULL,WS_CHILD|WS_VISIBLE|SBS_VERT,0,0,0,0,hwnd,(HMENU)sb2,((LPCREATESTRUCT)lParam)->hInstance,NULL);
hsb3 = CreateWindow("scrollbar",NULL,WS_CHILD|WS_VISIBLE|SBS_VERT,0,0,0,0,hwnd,(HMENU)sb3,((LPCREATESTRUCT)lParam)->hInstance,NULL);
SetScrollRange(hsb1, SB_CTL, 0, 255,FALSE);
SetScrollPos(hsb1, SB_CTL, 0,FALSE);
SetScrollRange(hsb2, SB_CTL, 0, 255,FALSE);
SetScrollPos(hsb2, SB_CTL, 0,FALSE);
SetScrollRange(hsb3, SB_CTL, 0, 255,FALSE);
SetScrollPos(hsb3, SB_CTL, 0,FALSE);
break;
case WM_CTLCOLORSTATIC:
SetTextColor((HDC)wParam,RGB(255,0,0));
SetBkColor((HDC)wParam,RGB(255,0,0));
return (LRESULT)oldbrush;
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
MoveWindow(hsb1, cxClient/12, cyClient/10, cxClient/30, cyClient - cyClient/5,TRUE);
MoveWindow(hsb2, cxClient/5, cyClient/10, cxClient/30, cyClient - cyClient/5,TRUE);
MoveWindow(hsb3, cxClient/3, cyClient/10, cxClient/30, cyClient - cyClient/5,TRUE);
MoveWindow(hst1, 0, 0, cxClient/2, cyClient,TRUE);
MoveWindow(hst2, cxClient/12, cyClient/20, cxClient/30, cyClient/20,TRUE);
MoveWindow(hst3, cxClient/5, cyClient/20, cxClient/30, cyClient/20,TRUE);
MoveWindow(hst4, cxClient/3, cyClient/20, cxClient/30, cyClient/20,TRUE);
MoveWindow(hst5, cxClient/12, cyClient - cyClient/10, cxClient/30, cyClient/20,TRUE);
MoveWindow(hst6, cxClient/5, cyClient - cyClient/10, cxClient/30, cyClient/20,TRUE);
MoveWindow(hst7, cxClient/3, cyClient - cyClient/10, cxClient/30, cyClient/20,TRUE);
rect.top = 0;
rect.left = cxClient/2;
rect.right = cxClient+1;
rect.bottom = cyClient+1;
break;
case WM_VSCROLL:
if((HWND)lParam == hsb1)
{
hsb = hsb1;
hst = hst5;
vpos = GetScrollPos(hsb1,SB_CTL);
}
else if((HWND)lParam == hsb2)
{
hsb = hsb2;
hst = hst6;
vpos = GetScrollPos(hsb2,SB_CTL);
}
else
{
hsb = hsb3;
hst = hst7;
vpos = GetScrollPos(hsb3,SB_CTL);
}
switch(LOWORD(wParam))
{
case SB_LINEUP:
vpos -= 1;
if(vpos < 0)
vpos = 0;
break;
case SB_LINEDOWN:
vpos += 1;
if(vpos > 255)
vpos = 255;
break;
case SB_PAGEUP:
vpos -= 20;
if(vpos < 0)
vpos = 0;
break;
case SB_PAGEDOWN:
vpos += 20;
if(vpos > 255)
vpos = 255;
break;
case SB_THUMBTRACK:
vpos = HIWORD(wParam);
break;
}
if(vpos != GetScrollPos(hsb,SB_CTL))
{
SetScrollPos(hsb,SB_CTL,vpos,TRUE);
sprintf(ch,"%d", vpos);
SetWindowText(hst,ch);
InvalidateRect(hwnd,NULL,TRUE);
}
break;
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
FillRect(hdc,&rect,CreateSolidBrush(RGB(GetScrollPos(hsb1,SB_CTL),GetScrollPos(hsb2,SB_CTL),GetScrollPos(hsb3,SB_CTL))));
EndPaint(hwnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
/*
* Edit Control Styles
*/
#define ES_LEFT 0x0000L
#define ES_CENTER 0x0001L
#define ES_RIGHT 0x0002L
#define ES_MULTILINE 0x0004L
#define ES_UPPERCASE 0x0008L
#define ES_LOWERCASE 0x0010L
#define ES_PASSWORD 0x0020L
#define ES_AUTOVSCROLL 0x0040L
#define ES_AUTOHSCROLL 0x0080L
#define ES_NOHIDESEL 0x0100L
#define ES_OEMCONVERT 0x0400L
#define ES_READONLY 0x0800L
#define ES_WANTRETURN 0x1000L
#if(WINVER >= 0x0400)
#define ES_NUMBER 0x2000L
#endif /* WINVER >= 0x0400 */
比如你要判断Edit是否为只读,只需要判断style位码是否包含ES_READONLY:
GetWindowLong(hwnd, GWL_STYLE) & ES_READONLY != 0表示为只读!
return (LRESULT)GetStockObject(BLACK_BRUSH);
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // WM_CTLCOLORSTATIC
WPARAM wParam, // handle to DC (HDC)
LPARAM lParam // handle to static control (HWND)
);
wParam是Static的DC,lParam就是句柄了,你每个Static控件都是CreateWindow创建的,你把CreateWindow返回的Static控件句柄保存下来,WM_CTLCOLORSTATIC里面,你去比较lParam就知道是哪个Static控件了,加一个switch(lParam){...}