在Windows中運行的程式,大多數都有一個或幾個可以看得見的視窗,而在這些視窗被創建起來之前,作業系統怎么知道該怎樣創建該視窗,以及用戶操作該視窗的各種訊息交給誰處理呢?所以VC在調用Windows的API(CreateWindow或者CreateWindowEx)創建視窗之前,要求程式設計師必須定義一個視窗類(不是傳統C++意義上的類)來規定所創建該視窗所需要的各種信息,主要包括:視窗的訊息處理函式、視窗的風格、圖示、 滑鼠、選單等。
Constant/value | Description |
CS_BYTEALIGNCLIENT 0x1000 | Aligns the window's client area on a byte boundary (in the x direction). This style affects the width of the window and its horizontal placement on the display. |
CS_BYTEALIGNWINDOW 0x2000 | Aligns the window on a byte boundary (in the x direction). This style affects the width of the window and its horizontal placement on the display. |
CS_CLASSDC 0x0040 | Allocates one device context to be shared by all windows in the class. Because window classes are process specific, it is possible for multiple threads of an application to create a window of the same class. It is also possible for the threads to attempt to use the device context simultaneously. When this happens, the system allows only one thread to successfully finish its drawing operation. |
CS_DBLCLKS 0x0008 | Sends a double-click message to the window procedure when the user double-clicks the mouse while the cursor is within a window belonging to the class. |
CS_DROPSHADOW 0x00020000 | Enables the drop shadow effect on a window. The effect is turned on and off throughSPI_SETDROPSHADOW. Typically, this is enabled for small, short-lived windows such as menus to emphasize their Z order relationship to other windows. |
CS_GLOBALCLASS 0x4000 | Indicates that the window class is an application global class. For more information, see the "Application Global Classes" section ofAbout Window Classes. |
CS_HREDRAW 0x0002 | Redraws the entire window if a movement or size adjustment changes the width of the client area. |
CS_NOCLOSE 0x0200 | DisablesCloseon the window menu. |
CS_OWNDC 0x0020 | Allocates a unique device context for each window in the class. |
CS_PARENTDC 0x0080 | Sets the clipping rectangle of the child window to that of the parent window so that the child can draw on the parent. A window with theCS_PARENTDCstyle bit receives a regular device context from the system's cache of device contexts. It does not give the child the parent's device context or device context settings. SpecifyingCS_PARENTDCenhances an application's performance. |
CS_SAVEBITS 0x0800 | Saves, as a bitmap, the portion of the screen image obscured by a window of this class. When the window is removed, the system uses the saved bitmap to restore the screen image, including other windows that were obscured. Therefore, the system does not sendWM_PAINTmessages to windows that were obscured if the memory used by the bitmap has not been discarded and if other screen actions have not invalidated the stored image. This style is useful for small windows (for example, menus or dialog boxes) that are displayed briefly and then removed before other screen activity takes place. This style increases the time required to display the window, because the system must first allocate memory to store the bitmap. |
CS_VREDRAW 0x0001 | Redraws the entire window if a movement or size adjustment changes the height of the client area. |
WNDCLASSEX wndclass;//視窗類結構體變數
//以下是對wndclass各成員賦值
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.cbClsExtra=0;
wndclass.cbWndExtra =0;
wndclass.lpfnWndProc = WinProc;
wndclass.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC | CS_DBLCLKS;
wndclass.hInstance = hinstance;
wndclass.hCursor =LoadCursor(NULL, IDC_ARROW);
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wndclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION) ;
wndclass.lpszMenuName = NULL;
wndclass.hbrBackground =(HBRUSH) GetStockObject(BLACK_BRUSH);
wndclass.lpszClassName =WND_CLS_NAME;
//下面是利用wndcalss結構體的信息註冊一個視窗類
if (!RegisterClassEx(&wndclass))
return 0;
//……
return 0;