VC++入门笔记:创建一个窗口
在VC++中创建一个窗口需要做到如下4个操作步骤:
1、设计一个窗口类;
2、注册窗口类;
3、创建窗口;
4、显示及更新窗口;
typedef struct _WNDCLASS {
UINT style; //定义类的类型
WNDPROC lpfnWndProc; //用来接收一个函数指针,回调函数,用来处理该窗口类型消息的函数,这里用指针来索引指向
int cbClsExtra; //类的附加内存空间,通常为0
int cbWndExtra; //窗口的附加内存空间,通常为0
HANDLE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;//常量字符串类型,设定菜单的名字
LPCTSTR lpszClassName; //设定类的名字
} WNDCLASS;
一个字节 8位;
关于LoadIcon函数:
我们在MSDN的帮助文件中,查阅LoadIcon函数的帮助文档。
HICON LoadIcon(
HINSTANCE hInstance, // handle to application instance
LPCTSTR lpIconName // icon-name string or icon resource
// identifier
);
HINSTANCE hInstance,当一个标准的图标被加载的时候,这个必须为空。
第二个值可以用下面标准的值:
Value Description
IDI_APPLICATION Default application icon.
IDI_ASTERISK Same as IDI_INFORMATION.
IDI_ERROR Hand-shaped icon.
IDI_EXCLAMATION Same as IDI_WARNING.
IDI_HAND Same as IDI_ERROR.
IDI_INFORMATION Asterisk icon.
IDI_QUESTION Question mark icon.
IDI_WARNING Exclamation point icon.
IDI_WINLOGO Windows logo icon.
关于HBRUSH hbrBackground的解析(背景刷的颜色):
HGDIOBJ GetStockObject(
int fnObject // type of stock object
);
获得一个画刷的句柄,返回的是一个HGDIOBJ(画刷物体)。
wndcls.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
这里做了强制类型转换:(HBRUSH),因为hbrBackground必须还是一个HBRUSH类型。
RegisterClass(注册窗口类)
ATOM RegisterClass(
CONST WNDCLASS *lpWndClass // address of structure with class
// data
);
参数为窗口类结构体的指针。
关于CreateWindow函数:
HWND CreateWindow(
LPCTSTR lpClassName, // pointer to registered class name指针指向注册类的名字
LPCTSTR lpWindowName, // pointer to window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // handle to menu or child-window identifier
HANDLE hInstance, // handle to application instance
LPVOID lpParam // pointer to window-creation data
);
获得是一个窗口句柄。