窗口创建前修改
Win32 创建窗口用到的函数
HWND CreateWindow(
__in LPCTSTR lpClassName,
__in LPCTSTR lpWindowName,
__in DWORD dwStyle,
__in int x,
__in int y,
__in int nWidth,
__in int nHeight,
__in HWND hWndParent,
__in HMENU hMenu,
__in HINSTANCE hInstance,
__in LPVOID lpParam
);
MFC中不需要去手动调用 CreateWindow( ),而是通过PreCreateWindow(CREATESTRUCT& cs)定制参数,这个函数是一个虚函数。
typedef struct tagCREATESTRUCTW {
LPVOID lpCreateParams;
HINSTANCE hInstance;
HMENU hMenu;
HWND hwndParent;
int cy;
int cx;
int y;
int x;
LONG style;
LPCWSTR lpszName;
LPCWSTR lpszClass;
DWORD dwExStyle;
} CREATESTRUCTW, *LPCREATESTRUCTW;
程序创建向导已经确定了lpszClass ,所以一般情况下不要去修改窗口类名称,否则你需要重新创建一个新的窗口类然后注册。
这个地方能修改窗口的起点,窗口高度,宽度,使用哪个窗口类,窗口类型。
最常用的窗口类型:
WS_OVERLAPPED 重叠窗口,一般具备标题和边框;
WS_OVERLAPPEDWINDOW ==WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME |WS_MINIMIZEBOX | WS_MAXIMIZEBOX
如果去掉WS_THICKFRAME,窗口大小将不可更改。
In a single document interface (SDI) application, the default window style in the framework is a combination of the WS_OVERLAPPEDWINDOW and FWS_ADDTOTITLE styles.
窗口创建之后修改
窗口在创建完成以后发送WM_CREATE消息,因此可以在OnCreate()当中响应;
使用CWindow::SetWindowLong 设置新的窗口风格
获取当前样式 CWindow::GetWindowLong
LONG SetWindowLong(
int nIndex,
LONG dwNewLong
) throw();
nIndex可以取以下值,其他请参看MSDN
GWL_EXSTYLE
设置扩展窗口样式,For more information, see CreateWindowEx.
GWL_STYLE
设置新的窗口样式,对应CREATESTRUCT &cs ;
GWL_WNDPROC
设置新的消息处理函数,
You cannot change this attribute if the window does not belong to the same process as the calling thread.