mfc 窗口设置边框宽度
时间: 2023-07-26 07:03:57 浏览: 105
在 MFC 中,可以通过覆盖 CWnd 类的 OnNcCalcSize 函数来设置窗口的边框宽度。具体操作如下:
1. 打开窗口类的头文件,添加下面的代码:
```
afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
```
2. 在窗口类的 cpp 文件中添加下面的代码:
```
void CMyWnd::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp)
{
// 计算边框宽度
int nBorderWidth = 10; // 设置边框宽度为 10 像素
// 调整窗口大小
lpncsp->rgrc[0].left += nBorderWidth;
lpncsp->rgrc[0].top += nBorderWidth;
lpncsp->rgrc[0].right -= nBorderWidth;
lpncsp->rgrc[0].bottom -= nBorderWidth;
CWnd::OnNcCalcSize(bCalcValidRects, lpncsp);
}
```
在上述代码中,通过设置 nBorderWidth 变量来指定边框宽度,然后通过计算修改窗口大小,最后调用 CWnd::OnNcCalcSize 函数完成窗口大小的调整。
相关问题
mfc 窗口设置无边框
如果想让MFC窗口去掉边框,可以使用以下代码:
1. 在窗口类的头文件中添加以下代码:
```cpp
afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point);
afx_msg void OnNcLButtonUp(UINT nHitTest, CPoint point);
```
2. 在窗口类的源文件中添加以下代码:
```cpp
void CMyWnd::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
// 获取窗口的位置和大小
CRect rect;
GetWindowRect(rect);
// 获取鼠标相对于窗口的坐标
ScreenToClient(&point);
// 判断鼠标是否在窗口的边框上
if (point.y < 5)
{
// 拖动窗口
SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
else if (point.y > rect.Height() - 5)
{
// 关闭窗口
SendMessage(WM_SYSCOMMAND, SC_CLOSE, 0);
}
else if (point.x < 5)
{
// 最小化窗口
SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);
}
else if (point.x > rect.Width() - 5)
{
// 最大化窗口
SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0);
}
}
void CMyWnd::OnNcMouseMove(UINT nHitTest, CPoint point)
{
// 改变鼠标样式
CRect rect;
GetWindowRect(rect);
ScreenToClient(&point);
if (point.y < 5)
{
SetCursor(LoadCursor(NULL, IDC_SIZEALL));
}
else if (point.y > rect.Height() - 5)
{
SetCursor(LoadCursor(NULL, IDC_HAND));
}
else if (point.x < 5)
{
SetCursor(LoadCursor(NULL, IDC_APPSTARTING));
}
else if (point.x > rect.Width() - 5)
{
SetCursor(LoadCursor(NULL, IDC_ARROW));
}
else
{
SetCursor(LoadCursor(NULL, IDC_ARROW));
}
}
void CMyWnd::OnNcLButtonUp(UINT nHitTest, CPoint point)
{
// do nothing
}
```
这段代码会响应窗口的非客户区鼠标事件,实现窗口的拖动、最大化、最小化和关闭。同时,它还会改变鼠标的样式,使得鼠标在窗口边缘时可以更好地交互。
mfc设置列表控件宽度
如果你要设置MFC中的列表控件的宽度,可以使用`CListCtrl`类的`SetColumnWidth`方法。这个方法的原型如下:
```cpp
BOOL SetColumnWidth(int nCol, int cx);
```
其中,`nCol`参数指定要设置的列的索引,从0开始计数;`cx`参数指定列的宽度,以像素为单位。
例如,如果你要将第一列的宽度设置为100像素,可以这样写:
```cpp
m_listCtrl.SetColumnWidth(0, 100);
```
如果你要设置所有列的宽度相同,可以使用`SetColumnWidth`的重载版本:
```cpp
BOOL SetColumnWidth(int cx);
```
例如,如果你要将所有列的宽度都设置为100像素,可以这样写:
```cpp
m_listCtrl.SetColumnWidth(100);
```