新建一个对话框工程,新建一个类,继承于CWnd
//
CMyWnd::CMyWnd()
{
LPCTSTR szClassName="WndStyleTest";
WNDCLASS wndClass={0};
wndClass.hbrBackground = (HBRUSH)GetStockBrush(WHITE_BRUSH);
wndClass.hCursor = ::LoadCursor(NULL,IDC_ARROW);
wndClass.hIcon = NULL;
wndClass.hInstance = AfxGetInstanceHandle();
wndClass.lpfnWndProc = AfxWndProc;
wndClass.lpszClassName = szClassName;
wndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndClass);
CreateEx(0,szClassName,"",WS_POPUP|WS_BORDER,CRect(50,50,550,550),NULL,0);
}
//右键按下响应
void CMyWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rcClient;
CRect rcWindow;
GetClientRect(rcClient);
GetWindowRect(rcWindow);
int cxClient = rcClient.Width();
int cyClient = rcClient.Height();
int cxWindow = rcWindow.Width();
int cyWindow = rcWindow.Height();
int cxBorder = GetSystemMetrics(SM_CXBORDER);
int cyBorder = GetSystemMetrics(SM_CYBORDER);
CString strtemp;
strtemp.Format("cxClient=%d,cyClient=%d\n,cxWindow=%d,cyWindow=%d\n,cxBorder=%d,cyBorder=%d",
cxClient,cyClient,cxWindow,cyWindow,cxBorder,cyBorder);
MessageBox(strtemp);
CWnd::OnLButtonDown(nFlags, point);
}
//方便结束进程
void CMyWnd::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
ExitProcess(0);
CWnd::OnRButtonDown(nFlags, point);
}
App类中这样改.
BOOL CStyleApp::InitInstance()
{
.......................................
m_pMainWnd = new CMyWnd;
m_pMainWnd->UpdateWindow();
m_pMainWnd->ShowWindow(SW_SHOW);
return TRUE;
}
上面CreateWindow的时候指定,位置(50,50,550,550);
也就是窗口大小宽500,高500
MSDN 下面列举的一些
WS_BORDER --窗口有一个细小的边框. GetSystemMetrics(int nIndex),nIndex指定SM_CXBORDER,SM_CYBORDER,可得到边框大小,试验为 1
测试时,可指定窗口样式为WS_POPUP,,如果直接指定WS_BORDER,窗口还有个标题栏
测试结果
cxClient = 498
cyClient = 498
cxWindow =500,
cyWindow = 500
cxBorder = 1
cyBorder = 1
WS_DLGFRAME --MSDN解释说有两个border,若真是,测试应该是500-2*2=496,
测试结果494
实际上这个结果,可以从GetSystemMetrics(SM_CXDLGFRAME),得到
SM_CXFIXEDFRAME,一样,该函数返回3
WS_CAPTION --窗口有一个标题栏 (WS_BORDER | WS_DLGFRAME)
GetSystemMetrics(SM_CYCAPTION) = 26
测试结果高度468 = 500-26-3*2
宽度494 = 500-3*2
WS_CLIPCHILDREN,建建一个父窗口时,并且指定了这个风格,如果子窗口有部份与父窗口重叠,那么父窗口将不会绘画这个区域,直接交给子窗口自己处理
WS_CLIPSIBLINGS对子窗口而言,如果两个子窗口A,B,重叠了,A子窗口指点定了这个风格,那么重叠的部份A不会负责,由B来处理,
另外,WS_EX_TOOLWINDOW,产生的窗口,不会在出现在任务栏上,一般用作控件 ,工具窗口
WS_EX_APPWINDOW,窗口可见时,将一个顶层窗口放在任务栏条上.