窗口样式

新建一个对话框工程,新建一个类,继承于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,窗口可见时,将一个顶层窗口放在任务栏条上.








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值