刚才又有人在我QQ里问到如何禁止用户该表自己单文档窗体的大小,修改标题等等问题,其实这些问题不难,那么我现在来讲一下这个东西的实现。
首先找到单文档程序中的PreCreateWindow(CREATESTRUCT& cs)这个函数,这个函数是用来设置我们窗体的一些特征的,现在,我们来仔细看一下这个函数,如下:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return TRUE;
}
首先来看这个参数CREATESTRUCT& cs,是一个CREATESTRUCT结构的引用,那好,我们再来查询下MSDN,看一下这个结构,如下:
typedef struct tagCREATESTRUCT { // cs
LPVOID lpCreateParams;
HINSTANCE hInstance;
HMENU hMenu;
HWND hwndParent;
int cy;
int cx;
int y;
int x;
LONG style;
LPCTSTR lpszName;
LPCTSTR lpszClass;
DWORD dwExStyle;
} CREATESTRUCT;
我们来一个一个的看这些参数:
LPVOID lpCreateParams:这个参数用来指向将被用于创建窗口的数据的指针。
HINSTANCE hInstance: 这个参数标识了拥有新窗口的模块的模块实例的句柄。
HMENU hMenu:这个参数标识了要被用于新窗口的菜单。如果是子窗口,则包含整数ID。
HWND hwndParent:这个参数标识了拥有新窗口的窗口。如果新窗口是一个顶层窗口,这个参数可以为NULL。
int cy:这个参数指定了新窗口的高。
int cx:这个参数指定了新窗口的宽。
int y:这个参数这个参数指定了新窗口的左上角的Y轴坐标。如果新窗口是一个子窗口,则坐标是相对于父窗口的;否则坐标是相对于屏幕原点的。
int x:这个参数定了新窗口的左上角的X轴坐标。如果新窗口是一个子窗口,则坐标是相对于父窗口的;否则坐标是相对于屏幕原点的。
LONG style:这个参数指定了新窗口的风格。
LPCTSTR lpszName:这个参数指向一个以null结尾的字符串,指定了新窗口的名字。
LPCTSTR lpszClass:这个参数指向一个以null结尾的字符串,指定了新窗口的Windows类名(一个WNDCLASS结构;更多的信息参见Win32 SDK文档)。
DWORD dwExStyle:这个参数指定了新窗口的扩展风格。
在这些参数里面我们一般经常用到的是cy、cx、y、x、style、lpszName这几个,需要特别注意。
好了,现在开始在PreCreateWindow(CREATESTRUCT& cs)
加上代码,实现禁止改变单文档窗口大小:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.hMenu = NULL;//去掉菜单
cs.style&=~WS_MAXIMIZEBOX; //禁用按动最大化按钮
cs.style&=~WS_THICKFRAME;//禁止用户改变窗口大小
cs.cx = 700;//窗口宽度
cs.cy = 500;//窗口高度
cs.style&=~FWS_ADDTOTITLE;//将FWS_ADDTOTITLE去掉
cs. lpszName = "标题"//改变标题,替换自己的标题
return TRUE;
}
这里我们要注意,给这些参数赋值的时候我们需要用&符号还有一个~符号,我来解释一个:
cs.style&=~WS_MAXIMIZEBOX; //禁用按动最大化按钮
这句的意思是将WS_MAXIMIZEBOX从style里去掉,是个反与的操作,其他的类同。