剛才又有人在我QQ里問(wèn)到如何禁止用戶該表自己?jiǎn)挝臋n窗體的大小,修改標(biāo)題等等問(wèn)題,其實(shí)這些問(wèn)題不難,那么我現(xiàn)在來(lái)講一下這個(gè)東西的實(shí)現(xiàn)。
首先找到單文檔程序中的PreCreateWindow(CREATESTRUCT& cs)這個(gè)函數(shù),這個(gè)函數(shù)是用來(lái)設(shè)置我們窗體的一些特征的,現(xiàn)在,我們來(lái)仔細(xì)看一下這個(gè)函數(shù),如下:
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;
}
首先來(lái)看這個(gè)參數(shù)CREATESTRUCT& cs,是一個(gè)CREATESTRUCT結(jié)構(gòu)的引用,那好,我們?cè)賮?lái)查詢下MSDN,看一下這個(gè)結(jié)構(gòu),如下:
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;
我們來(lái)一個(gè)一個(gè)的看這些參數(shù):
LPVOID lpCreateParams:這個(gè)參數(shù)用來(lái)指向?qū)⒈挥糜趧?chuàng)建窗口的數(shù)據(jù)的指針。
HINSTANCE hInstance: 這個(gè)參數(shù)標(biāo)識(shí)了擁有新窗口的模塊的模塊實(shí)例的句柄。
HMENU hMenu:這個(gè)參數(shù)標(biāo)識(shí)了要被用于新窗口的菜單。如果是子窗口,則包含整數(shù)ID。
HWND hwndParent:這個(gè)參數(shù)標(biāo)識(shí)了擁有新窗口的窗口。如果新窗口是一個(gè)頂層窗口,這個(gè)參數(shù)可以為NULL。
int cy:這個(gè)參數(shù)指定了新窗口的高。
int cx:這個(gè)參數(shù)指定了新窗口的寬。
int y:這個(gè)參數(shù)這個(gè)參數(shù)指定了新窗口的左上角的Y軸坐標(biāo)。如果新窗口是一個(gè)子窗口,則坐標(biāo)是相對(duì)于父窗口的;否則坐標(biāo)是相對(duì)于屏幕原點(diǎn)的。
int x:這個(gè)參數(shù)定了新窗口的左上角的X軸坐標(biāo)。如果新窗口是一個(gè)子窗口,則坐標(biāo)是相對(duì)于父窗口的;否則坐標(biāo)是相對(duì)于屏幕原點(diǎn)的。
LONG style:這個(gè)參數(shù)指定了新窗口的風(fēng)格。
LPCTSTR lpszName:這個(gè)參數(shù)指向一個(gè)以null結(jié)尾的字符串,指定了新窗口的名字。
LPCTSTR lpszClass:這個(gè)參數(shù)指向一個(gè)以null結(jié)尾的字符串,指定了新窗口的Windows類名(一個(gè)WNDCLASS結(jié)構(gòu);更多的信息參見(jiàn)Win32 SDK文檔)。
DWORD dwExStyle:這個(gè)參數(shù)指定了新窗口的擴(kuò)展風(fēng)格。
在這些參數(shù)里面我們一般經(jīng)常用到的是cy、cx、y、x、style、lpszName這幾個(gè),需要特別注意。
好了,現(xiàn)在開(kāi)始在PreCreateWindow(CREATESTRUCT& cs)
加上代碼,實(shí)現(xiàn)禁止改變單文檔窗口大小:
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; //禁用按動(dòng)最大化按鈕
cs.style&=~WS_THICKFRAME;//禁止用戶改變窗口大小
cs.cx = 700;//窗口寬度
cs.cy = 500;//窗口高度
cs.style&=~FWS_ADDTOTITLE;//將FWS_ADDTOTITLE去掉
cs. lpszName = "標(biāo)題"http://改變標(biāo)題,替換自己的標(biāo)題
return TRUE;
}
這里我們要注意,給這些參數(shù)賦值的時(shí)候我們需要用&符號(hào)還有一個(gè)~符號(hào),我來(lái)解釋一個(gè):
cs.style&=~WS_MAXIMIZEBOX; //禁用按動(dòng)最大化按鈕
這句的意思是將WS_MAXIMIZEBOX從style里去掉,是個(gè)反與的操作,其他的類同。