剛才又有人在我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 = "標題"http://改變標題,替換自己的標題
return TRUE;
}
這里我們要注意,給這些參數賦值的時候我們需要用&符號還有一個~符號,我來解釋一個:
cs.style&=~WS_MAXIMIZEBOX; //禁用按動最大化按鈕
這句的意思是將WS_MAXIMIZEBOX從style里去掉,是個反與的操作,其他的類同。