vc中 怎么添加onlbuttondown
时间: 2024-06-06 11:06:07 浏览: 10
在VC中,您可以使用Class Wizard(类向导)来添加 `OnLButtonDown` 函数。请按照以下步骤操作:
1. 打开您的VC项目,并在资源编辑器中选择您要添加 `OnLButtonDown` 事件的控件(如按钮或图像)。
2. 右键单击控件并选择“添加事件处理程序”。
3. 在事件处理程序向导中,选择“鼠标”类别,并选择“左键按下”事件。然后单击“添加函数”按钮。
4. 在新对话框中,输入函数名称(例如 `OnLButtonDown`)和返回类型(通常为 `void`)。单击“确定”按钮。
5. 返回事件处理程序向导,您应该看到您刚刚创建的函数已被添加到“事件响应函数”列表中。单击“完成”按钮以完成向导。
现在,您可以在您的代码中实现 `OnLButtonDown` 函数,它将在用户单击指定控件时被调用。
相关问题
VC mfc单击出现圆
您可以在 MFC 应用程序中使用 CDC 类来绘制圆形。以下是一个简单的示例:
1. 打开您的 MFC 应用程序项目,打开您想要在其中添加圆形绘图的对话框。
2. 右键单击对话框,选择“添加类”。
3. 在“添加类”对话框中,选择“对话框”作为基类,并输入类名称和文件名。单击“添加类”按钮。
4. 打开您的新类的头文件 (.h),添加以下代码:
```cpp
CPoint m_center;
int m_radius;
```
5. 打开您的新类的源文件 (.cpp),添加以下代码:
```cpp
void CMyDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
// 记录圆心
m_center = point;
CClientDC dc(this);
CPen pen(PS_SOLID, 1, RGB(255, 0, 0)); // 红色笔
dc.SelectObject(&pen);
dc.SetROP2(R2_NOTXORPEN); // 取反模式
m_radius = 0;
dc.Ellipse(m_center.x - m_radius, m_center.y - m_radius,
m_center.x + m_radius, m_center.y + m_radius);
CDialogEx::OnLButtonDown(nFlags, point);
}
void CMyDialog::OnMouseMove(UINT nFlags, CPoint point)
{
CClientDC dc(this);
CPen pen(PS_SOLID, 1, RGB(255, 0, 0)); // 红色笔
dc.SelectObject(&pen);
dc.SetROP2(R2_NOTXORPEN); // 取反模式
dc.Ellipse(m_center.x - m_radius, m_center.y - m_radius,
m_center.x + m_radius, m_center.y + m_radius);
m_radius = (int)sqrt(pow(point.x - m_center.x, 2) + pow(point.y - m_center.y, 2));
dc.Ellipse(m_center.x - m_radius, m_center.y - m_radius,
m_center.x + m_radius, m_center.y + m_radius);
CDialogEx::OnMouseMove(nFlags, point);
}
void CMyDialog::OnLButtonUp(UINT nFlags, CPoint point)
{
CClientDC dc(this);
CPen pen(PS_SOLID, 1, RGB(255, 0, 0)); // 红色笔
dc.SelectObject(&pen);
dc.SetROP2(R2_COPYPEN); // 正常模式
dc.Ellipse(m_center.x - m_radius, m_center.y - m_radius,
m_center.x + m_radius, m_center.y + m_radius);
CDialogEx::OnLButtonUp(nFlags, point);
}
```
6. 在您的对话框类头文件 (.h) 中添加以下代码:
```cpp
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
```
7. 在您的对话框类实现文件 (.cpp) 中添加以下代码:
```cpp
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()
```
现在,您可以编译并运行您的应用程序,然后在对话框上单击并拖动鼠标以绘制圆形。
VC mfc中实现鼠标左键长按有五个圆环跟随鼠标移动
实现鼠标左键长按有五个圆环跟随鼠标移动,可以按照以下步骤进行:
1. 在 MFC 应用程序中创建一个新的自定义控件类,命名为 CMFCMyControl。
2. 在 CMFCMyControl 类中添加以下代码:
在.h文件中添加:
```
class CMFCMyControl : public CWnd
{
public:
CMFCMyControl();
protected:
afx_msg void OnPaint();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
private:
CPoint m_ptPos; // 当前鼠标位置
BOOL m_bCaptured; // 是否捕获鼠标
UINT_PTR m_nTimerID; // 定时器ID
int m_nRadius; // 圆环半径
int m_nInterval; // 刷新间隔
};
```
在.cpp文件中添加:
```
CMFCMyControl::CMFCMyControl()
{
m_bCaptured = FALSE;
m_nRadius = 5;
m_nInterval = 30;
}
BEGIN_MESSAGE_MAP(CMFCMyControl, CWnd)
ON_WM_PAINT()
ON_WM_ERASEBKGND()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()
void CMFCMyControl::OnPaint()
{
CPaintDC dc(this);
// 画圆环
for (int i = 0; i < 5; i++)
{
int nRadius = m_nRadius * (i + 1);
int nAlpha = (i + 1) * 50;
COLORREF clrRing = RGB(255, 0, 0);
clrRing = RGB(GetRValue(clrRing), GetGValue(clrRing), GetBValue(clrRing));
CPen pen(PS_SOLID, 1, clrRing);
CPen* pOldPen = dc.SelectObject(&pen);
CBrush brs(RGB(255, 255, 255));
CBrush* pOldBrush = dc.SelectObject(&brs);
dc.Ellipse(m_ptPos.x - nRadius, m_ptPos.y - nRadius, m_ptPos.x + nRadius, m_ptPos.y + nRadius);
dc.SelectObject(pOldPen);
dc.SelectObject(pOldBrush);
}
}
BOOL CMFCMyControl::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
void CMFCMyControl::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bCaptured = TRUE;
SetCapture();
m_ptPos = point;
m_nTimerID = SetTimer(1, m_nInterval, NULL);
}
void CMFCMyControl::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_bCaptured)
{
m_ptPos = point;
Invalidate(FALSE);
}
}
void CMFCMyControl::OnLButtonUp(UINT nFlags, CPoint point)
{
if (m_bCaptured)
{
ReleaseCapture();
KillTimer(m_nTimerID);
m_bCaptured = FALSE;
Invalidate(FALSE);
}
}
```
3. 在 MFC 应用程序的对话框中添加 CMFCMyControl 控件,并在 OnInitDialog 函数中添加以下代码:
```
BOOL CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: Add extra initialization here
m_MyCtrl.Create(NULL, _T("My Control"), WS_CHILD | WS_VISIBLE, CRect(10, 10, 200, 200), this, 1);
return TRUE;
}
```
这样,当用户按下鼠标左键并拖动时,就会在控件内画出五个圆环,随着鼠标移动而移动。