MFC----定制程序外观

来源:互联网 发布:手机知乎怎么修改答案 编辑:程序博客网 时间:2024/06/06 04:24

窗口创建前修改

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.

0 0
原创粉丝点击