当前位置:C++技术网 > 资讯 > 如何创建设计自定义多样式的窗口样式

如何创建设计自定义多样式的窗口样式

更新时间:2016-01-06 11:46:33浏览次数:1+次

当我们自己创建窗口后,如果我们不用编译器给我们默认的窗口样式例如,窗口背景等。就需要自己创建定义。这次我们创建自己的背景。第一种方法,用windows自带的背景。在注册窗口类中的背景画刷中直接设置

#define WHITE_BRUSH         0
#define LTGRAY_BRUSH        1
#define GRAY_BRUSH          2
#define DKGRAY_BRUSH        3
#define BLACK_BRUSH         4
#define NULL_BRUSH          5
#define HOLLOW_BRUSH        NULL_BRUSH
#define WHITE_PEN           6
#define BLACK_PEN           7
#define NULL_PEN            8
#define OEM_FIXED_FONT      10
#define ANSI_FIXED_FONT     11
#define ANSI_VAR_FONT       12
#define SYSTEM_FONT         13
#define DEVICE_DEFAULT_FONT 14
#define DEFAULT_PALETTE     15
#define SYSTEM_FIXED_FONT   16
/////还有一种背景表示方法,也是系统自带的
#define CTLCOLOR_MSGBOX         0
#define CTLCOLOR_EDIT           1
#define CTLCOLOR_LISTBOX        2
#define CTLCOLOR_BTN            3
#define CTLCOLOR_DLG            4
#define CTLCOLOR_SCROLLBAR      5
#define CTLCOLOR_STATIC         6
#define CTLCOLOR_MAX            7

#define COLOR_SCROLLBAR         0
#define COLOR_BACKGROUND        1
#define COLOR_ACTIVECAPTION     2
#define COLOR_INACTIVECAPTION   3
#define COLOR_MENU              4
#define COLOR_WINDOW            5
#define COLOR_WINDOWFRAME       6
#define COLOR_MENUTEXT          7
#define COLOR_WINDOWTEXT        8
#define COLOR_CAPTIONTEXT       9
#define COLOR_ACTIVEBORDER      10
#define COLOR_INACTIVEBORDER    11
#define COLOR_APPWORKSPACE      12
#define COLOR_HIGHLIGHT         13
#define COLOR_HIGHLIGHTTEXT     14
#define COLOR_BTNFACE           15
#define COLOR_BTNSHADOW         16
#define COLOR_GRAYTEXT          17
#define COLOR_BTNTEXT           18
#define COLOR_INACTIVECAPTIONTEXT 19
#define COLOR_BTNHIGHLIGHT      20

#if(WINVER >= 0x0400)
#define COLOR_3DDKSHADOW        21
#define COLOR_3DLIGHT           22
#define COLOR_INFOTEXT          23
#define COLOR_INFOBK            24
#endif /* WINVER >= 0x0400 */

#if(WINVER >= 0x0500)
#define COLOR_HOTLIGHT          26
#define COLOR_GRADIENTACTIVECAPTION 27
#define COLOR_GRADIENTINACTIVECAPTION 28
#if(WINVER >= 0x0501)
#define COLOR_MENUHILIGHT       29
#define COLOR_MENUBAR           30
我大概解释下意思,(HBRUSH)(COLOR_WINDOW+1)等同GetSysColorBrush(COLOR_WINDOW),使用颜色的时候,必须把每个颜色宏+1,才能得到正确的颜色,这是用法,没有特别的含义。
因为滚动条颜色宏被定义成 #define COLOR_SCROLLBAR 0
如果不进行+1的话,使用这个颜色就是意外的变成NULL,为了避免这种情况,所以把所有的颜色值+1处理。
这是系统自带的背景画刷,下面我们了解下系统自带的鼠标,图标。
/////////////////////////鼠标
#define IDC_ARROW           MAKEINTRESOURCE(32512)
#define IDC_IBEAM           MAKEINTRESOURCE(32513)
#define IDC_WAIT            MAKEINTRESOURCE(32514)
#define IDC_CROSS           MAKEINTRESOURCE(32515)
#define IDC_UPARROW         MAKEINTRESOURCE(32516)
#define IDC_SIZE            MAKEINTRESOURCE(32640)  /* OBSOLETE: use IDC_SIZEALL */
#define IDC_ICON            MAKEINTRESOURCE(32641)  /* OBSOLETE: use IDC_ARROW */
#define IDC_SIZENWSE        MAKEINTRESOURCE(32642)
#define IDC_SIZENESW        MAKEINTRESOURCE(32643)
#define IDC_SIZEWE          MAKEINTRESOURCE(32644)
#define IDC_SIZENS          MAKEINTRESOURCE(32645)
#define IDC_SIZEALL         MAKEINTRESOURCE(32646)
#define IDC_NO              MAKEINTRESOURCE(32648) /*not in win3.1 */
#if(WINVER >= 0x0500)
#define IDC_HAND            MAKEINTRESOURCE(32649)
#endif /* WINVER >= 0x0500 */
#define IDC_APPSTARTING     MAKEINTRESOURCE(32650) /*not in win3.1 */
#if(WINVER >= 0x0400)
#define IDC_HELP            MAKEINTRESOURCE(32651)
/////////////////////图标
#define IDI_APPLICATION     MAKEINTRESOURCE(32512)
#define IDI_HAND            MAKEINTRESOURCE(32513)
#define IDI_QUESTION        MAKEINTRESOURCE(32514)
#define IDI_EXCLAMATION     MAKEINTRESOURCE(32515)
#define IDI_ASTERISK        MAKEINTRESOURCE(32516)
#if(WINVER >= 0x0400)
#define IDI_WINLOGO         MAKEINTRESOURCE(32517)
#endif /* WINVER >= 0x0400 */
#if(WINVER >= 0x0600)
#define IDI_SHIELD          MAKEINTRESOURCE(32518)
#endif /* WINVER >= 0x0600 */
#endif /* RC_INVOKED */

#if(WINVER >= 0x0400)
#define IDI_WARNING     IDI_EXCLAMATION
#define IDI_ERROR       IDI_HAND
#define IDI_INFORMATION IDI_ASTERISK
第二种方法创建影线画刷:
HBRUSH CreateHatchBrush(int fnStyle, COLORREF clrref);
参数:
fnStyle:指定刷子的阴影样式。该参数可以取下列值,这些值的含义为:
HS_BDIAGONAL:表示45度向上,从左至右的阴影(/////);
HS_CROSS:水平和垂直交叉阴影(+++++);
HS_DIAGCROSS:45度交叉阴影(XXXXX);
HS_FDIAGONAL:45度向下,自左至右阴影(\\\\\\);
HS_HORIZONTAL:水平阴影(-----);
HS_VERTICAL:垂直阴影(|||||)。
cirref:指定用于阴影的刷子的前景色。
第三种方法是创建Solid画刷:

对于Solid画刷我们可以自定义画刷的颜色,这里不必细讲。

int CReviewView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	//////在此处添加代码
	CRect rect(50,50,400,400);
	//HBRUSH hbr1=CreateSolidBrush(RGB(0,0,255));
	//HBRUSH hbr2=CreateHatchBrush(HS_DIAGCROSS,COLORREF(RGB(0,0,255)));
	LPCTSTR pszWnd=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,LoadCursor(NULL,IDC_NO),(HBRUSH)(COLOR_BACKGROUND+1),LoadIcon(NULL,IDI_QUESTION));
	m_wnd.Create(pszWnd,L"测试",WS_OVERLAPPEDWINDOW | WS_VISIBLE, rect,this,123321);
	return 0;
}

还有用户自定义的图标与画刷背景,在这里,就先不叙述了。

具体的其他样式你自己试试看