mfc setcursor
时间: 2023-10-06 20:13:24 浏览: 49
在MFC中,SetCursor是一个函数,用于设置光标的形状。通过调用SetCursor函数,可以将光标设置为指定的光标。在MFC中,可以在消息处理函数OnSetCursor中使用SetCursor来设置光标的形状。当鼠标事件发生时,MFC会自动发送WM_SETCURSOR消息,从而触发OnSetCursor函数。在OnSetCursor函数中,可以使用SetCursor来设置光标的形状。在设置光标时,可以使用LoadCursor函数加载一个光标资源,并将其作为参数传递给SetCursor函数,以设置光标的形状。另外,如果想要将光标恢复为默认的箭头形状,可以调用SetCursor函数,并将参数设置为IDC_ARROW。通过使用SetCursor函数,可以在MFC应用程序中方便地设置和改变光标的形状。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
相关问题
MFC鼠标的样式
MFC中可以通过设置鼠标的样式来改变鼠标指针的外观。可以使用`SetCursor`函数来设置鼠标指针的样式,该函数的参数是一个指向光标句柄的指针。
MFC提供了一些常用的鼠标指针样式,如下所示:
| 鼠标指针样式 | 说明 |
| --- | --- |
| IDC_ARROW | 标准箭头 |
| IDC_IBEAM | 文本输入光标 |
| IDC_WAIT | 等待光标 |
| IDC_CROSS | 十字形光标 |
| IDC_SIZEALL | 四向箭头光标 |
| IDC_UPARROW | 向上箭头光标 |
| IDC_HAND | 手形光标 |
| IDC_APPSTARTING | 程序开始光标 |
下面是一个示例代码,将鼠标指针改为等待光标:
```
// 将鼠标指针设置为等待光标
HCURSOR hCursorWait = LoadCursor(nullptr, IDC_WAIT);
SetCursor(hCursorWait);
```
在上述代码中,`LoadCursor`函数用于加载光标资源,第一个参数为模块句柄,通常为`nullptr`表示当前进程;第二个参数是一个系统定义的鼠标指针样式标识符。`SetCursor`函数将指定的光标设置为当前鼠标指针。
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
}
```
这段代码会响应窗口的非客户区鼠标事件,实现窗口的拖动、最大化、最小化和关闭。同时,它还会改变鼠标的样式,使得鼠标在窗口边缘时可以更好地交互。