WM_INITDIALOG 返回true 由系统将焦点设在第一个有WS_TABSTOP的控件
返回false 系统不设焦点 自己设置
对话框中的WS_GROUP风格可以将几个控件分在一组 同一组的控件可以用方向键上下循环选择(同一组的控件只需要同组的第一个有该风格 )
客户区有效才能在上面画图 普通窗口如此 ( WM_PAINT中BeginPaint使客户区有效)
在对话框的子控件上画图也要如此( 用UpdateWindow使客户区有效)
/********绘制图形
hdc = GetDC(hPaint);
SelectObject(hdc, CreateSolidBrush(cr[iColor]));
SelectObject(hdc, GetStockObject(NULL_PEN));
(iShape-IDC_RECT)? Ellipse(hdc, 0,0,rect.right,rect.bottom): Rectangle(hdc, 0,0,rect.right,rect.bottom);
DeleteObject( SelectObject(hdc, GetStockObject(WHITE_BRUSH)));
ReleaseDC(hPaint, hdc);
*********/
case WM_PAINT:
// InvalidateRect(hPaint, NULL, TRUE);
UpdateWindow(hPaint);
//********绘制图形
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_BLACK:
case IDC_BLUE:
case IDC_GREEN:
case IDC_CYAN:
case IDC_RED:
case IDC_MAGENTA:
case IDC_WHITE:
case IDC_YELLOW:
iColor = LOWORD(wParam)-IDC_BLACK;
CheckRadioButton(hDlg, IDC_BLACK, IDC_WHITE, LOWORD(wParam));
//这里可以不用擦除, 因为绘制的形状一样, 原来的图形被完全覆盖
// InvalidateRect(hPaint, NULL, FALSE);//用背景画刷擦除原来的图像
UpdateWindow(hPaint);//一定使客户区有效 然后再画图
//********绘制图形
return TRUE;
case IDC_RECT:
case IDC_ELLIPSE:
iShape = LOWORD(wParam);
CheckRadioButton(hDlg, IDC_RECT, IDC_ELLIPSE, iShape);
//如果不先擦除原来的 就会如图所示
//本来图形是 黑色矩形, 绘制绿色椭圆后, 原来的矩形还有残余
InvalidateRect(hPaint, NULL, TRUE);
UpdateWindow(hPaint);
//********绘制图形
// InvalidateRect(hPaint, NULL, FALSE);
return TRUE;
}