Radio buttons and GroupBox

#include <windows.h>

#define ID_BLUE 1
#define ID_YELLOW 2
#define ID_ORANGE 3

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

HINSTANCE g_hinst;
COLORREF g_color;


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow)
{
  HWND hwnd;
  MSG  msg ;    
  WNDCLASS wc = {0};
  wc.lpszClassName = TEXT("GroupBox");
  wc.hInstance     = hInstance ;
  wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); //GetSysColorBrush(COLOR_3DFACE);
  wc.lpfnWndProc   = WndProc ;
  wc.hCursor       = LoadCursor(0,IDC_ARROW);

  g_hinst = hInstance;
  
  RegisterClass(&wc);
  hwnd = CreateWindow(wc.lpszClassName, TEXT("GroupBox"),
                WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                100, 100, 300, 170, 0, 0, hInstance, 0);  


  while( GetMessage(&msg, NULL, 0, 0)) {
    DispatchMessage(&msg);
  }
  return (int) msg.wParam;
}

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
  HDC hdc;
  PAINTSTRUCT ps;
  HBRUSH hBrush, holdBrush;
  HPEN hPen, holdPen;

  switch(msg)  
  {
      case WM_CREATE:  //创建按钮窗口时没有注册类,而是直接创建了?答案是:windows自己预定义的控件则不需要注册类
          CreateWindow(TEXT("button"), TEXT("Choose Color"), 
                WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
                10, 10, 120, 110, hwnd, (HMENU) 0, g_hinst, NULL);
          CreateWindow(TEXT("button"), TEXT("Blue"),
                WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
                20, 30, 100, 30, hwnd, (HMENU)ID_BLUE , g_hinst, NULL);
          CreateWindow(TEXT("button"), TEXT("Yellow"),
                WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
                20, 55, 100, 30, hwnd, (HMENU)ID_YELLOW , g_hinst, NULL);
          CreateWindow(TEXT("button"), TEXT("Orange"),
                WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
                20, 80, 100, 30, hwnd, (HMENU)ID_ORANGE , g_hinst, NULL);
      
          break;

      case WM_COMMAND:
	   if (HIWORD(wParam) == BN_CLICKED) {  // 根据BN_CLICKED消息来设置g_color的值
	       switch (LOWORD(wParam)) {
		    case ID_BLUE:
		        g_color = RGB(0, 76, 255);
		        break;
		    case ID_YELLOW:
		        g_color = RGB(255, 255, 0);
		        break;
		    case ID_ORANGE:
		        g_color = RGB(255, 123, 0);
		        break;
		}
		 // 使得矩形区域无效,这样就会产生WM_ERASEBKGND 和 WM_NCPAINT消息,导致该区域重绘
	       InvalidateRect(hwnd, NULL, FALSE);
	   }
          break;

      case WM_PAINT:
          hdc = BeginPaint(hwnd, &ps);
          hBrush = CreateSolidBrush(g_color);
          hPen = CreatePen(PS_NULL, 1, RGB(0, 0, 0));
          holdPen = SelectObject(hdc, hPen);
          holdBrush = (HBRUSH) SelectObject(hdc, hBrush);
	
          Rectangle(hdc, 160, 20, 260, 120);

          SelectObject(hdc, holdBrush);
          SelectObject(hdc, holdPen);
          DeleteObject(hPen);
          DeleteObject(hBrush);
          EndPaint(hwnd, &ps);
          break;

      case WM_DESTROY:
          PostQuitMessage(0);
          break; 
  }
  return DefWindowProc(hwnd, msg, wParam, lParam);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值