VC++学习(6)——菜单编程,消息捕获机制和顺序;创建标记、缺省、图形、不可用等菜单;命令更新模式;右键的弹出菜单

news2024/12/25 12:43:27

在这里插入图片描述

目录

  • 引出
  • 第6讲 菜单编程
    • 在CMainFrame中捕获
    • 消息响应捕获顺序
      • 插曲:删除函数的方法
    • 消息分类
    • 菜单的结构
    • 创建标记菜单
    • 创建缺省菜单
    • 创建图形菜单
    • 菜单项不允许使用
    • 如何整个菜单取消
    • 命令更新模式
    • 右键弹出菜单功能
      • 添加方式
      • 显示位置
      • 定义事件
    • 动态添加
      • 定义响应
  • 总结
  • 第五讲 文本编程
    • 新建项目
    • 输入线的初始化
    • 根据字体大小定义插入符大小
    • 创建图形插入符
    • 文字始终保存在窗口中
      • CString类
      • 通过字符串资源
    • 路径层
    • 字符输入的功能
      • 键盘输入消息
      • 鼠标左键消息
        • 保存点击位置的坐标
      • 输入回车键的处理
      • 删除文字的实现
    • 字符输入功能代码
    • 字体的修改
    • 模拟卡拉ok变色字体
  • 第四讲 简单绘图
      • 加入点击弹窗
    • 划线的实现1
    • 划线实现2
    • 划线的实现3,CClient
      • GetParent()
    • 划线的实现4
    • 不同的颜色画笔
    • 不同颜色画刷
    • 位图
    • 空的矩形
    • 画笔实现
    • 画个扇形

引出

VC++学习(6)——菜单编程,消息捕获机制和顺序;创建标记、缺省、图形、不可用等菜单;命令更新模式;右键的弹出菜单


第6讲 菜单编程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在CMainFrame中捕获

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

消息响应捕获顺序

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

插曲:删除函数的方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

消息捕获顺序

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

消息分类

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CWnd派生的类既可以接收命令消息,也可以接收标准消息

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

菜单的结构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

文件下的整个部分是一个子菜单

创建标记菜单

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

比如在文件下面加一个标记菜单

指向整个菜单的指针

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

指向子菜单的指针

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	// 获取指向CMenu对象的指针

	// 1.按照索引访问
	GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED);

	// 2.按照id号访问 ID_FILE_NEW
	GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND | MF_CHECKED);

创建缺省菜单

加粗显示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	// setDefaultItem 
	// 通过索引设置粗体
	GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN);

	// 通过 id号 设置粗体
    GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建图形菜单

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	// 定义一个位图菜单
	m_bitmap.LoadBitmap(IDB_BITMAP1);
	GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap,&m_bitmap);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图形标记的尺寸,17x17

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	CString str;
	str.Format("x= %d, y= %d", GetSystemMetrics(SM_CXMENUCHECK), GetSystemMetrics(SM_CYMENUCHECK));
	MessageBox(str);

	// 定义一个位图菜单
	m_bitmap.LoadBitmap(IDB_BITMAP1);
	GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap,&m_bitmap);

菜单项不允许使用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

没有生效

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

表示自己决定

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这时所有菜单项是否可以使用,都要由自己来决定

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

/
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	// 设置enable
	m_bAutoMenuEnable = FALSE;
	
}
	GetMenu()->GetSubMenu(0)->EnableMenuItem(3,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);

如何整个菜单取消

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

调用Detach,将句柄和C++对象断开

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

命令更新模式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果用索引可能会出现问题,最好采用id号设置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

右键弹出菜单功能

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

添加方式

方式一:通过 工程—增加到工程— , 进行添加

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方式二:自己手动添加

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

显示位置

捕获鼠标右键点击事件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

位置不对的原因是:坐标体系不一样,获取的是用户view窗口,而显示的屏幕坐标

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CMenuView::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	// menu对象,加载资源
	CMenu menu;
	menu.LoadMenu(IDR_MENU1);
	CMenu *pPopup = menu.GetSubMenu(0);

	// 坐标转换
	ClientToScreen(&point);

	pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);


	CView::OnRButtonDown(nFlags, point);
}

定义事件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述

分别在CMainFrame和 CMainView中添加command

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

删除view类中的函数,右键没有反应,是因为

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CMenuView::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	// menu对象,加载资源
	CMenu menu;
	menu.LoadMenu(IDR_MENU1);
	CMenu *pPopup = menu.GetSubMenu(0);

	// 坐标转换
	ClientToScreen(&point);

	pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
		GetParent()); // 用框架类指针


	CView::OnRButtonDown(nFlags, point);
}

动态添加

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

中间插入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

添加菜单项

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在原有的最后增加

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在原有的中间插入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

删除菜单

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

删除菜单里面的项

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

定义响应

不会写就先添加一个,然后照猫画虎写

![外链图片转存失败,源站可能有防盗链

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


总结

VC++学习(6)——菜单编程,消息捕获机制和顺序;创建标记、缺省、图形、不可用等菜单;命令更新模式;右键的弹出菜单


其他

第五讲 文本编程

新建项目

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入线的初始化

输入的竖直线,一闪一闪的输入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

增加Windows消息处理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据字体大小定义插入符大小

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here

	// 确定符号大小
	CClientDC dc(this); // 当前设备描述表describe
	TEXTMETRIC tm;
	dc.GetTextMetrics(&tm); // 取地址符

	// 创建一个插入符号
	CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
	ShowCaret(); // 显示出来

	return 0;
}

创建图形插入符

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

文字始终保存在窗口中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CString类

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

/
// CTextView drawing

void CTextView::OnDraw(CDC* pDC)
{
	CTextDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here

	// CString
	CString str("pet");
	pDC->TextOut(50,50,str);

}

通过字符串资源

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

/
// CTextView drawing

void CTextView::OnDraw(CDC* pDC)
{
	CTextDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here

	// CString
	CString str("pet");
	pDC->TextOut(50,50,str);

	// 使用字符串资源
	str.LoadString(IDS_PET);
	pDC->TextOut(0,200,str);


}

路径层

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

字符输入的功能

键盘输入消息

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标左键消息

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CTextView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default

	// 移动插入符到这里
	SetCaretPos(point);
	m_strLine.Empty(); // 将cstring中保存的内容情空
	CView::OnLButtonDown(nFlags, point);
}

保存点击位置的坐标

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入回车键的处理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

删除文字的实现

将文本的颜色设置成和背景色一样

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

字符输入功能代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.鼠标左键定位插入字符位置;

2.特殊字符的处理,回车键,删除键;

3.光标随着输入的字符移动;

void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default

	// 字体的高度
	CClientDC dc(this);
	TEXTMETRIC tm;
	dc.GetTextMetrics(&tm);


	printf("%u\n", nChar);

	if(0x0d==nChar) // 输入的是回车
	{
		m_strLine.Empty(); // 清空
		m_ptOrig.y += tm.tmHeight; // 到下一行

	}else if(0x08==nChar) // 输入的是删除
	{
		// 获取背景色,文本颜色设置成背景色
		COLORREF clr = dc.SetTextColor(dc.GetBkColor());
		// 然后输出
		dc.TextOut(m_ptOrig.x,m_ptOrig.y,m_strLine);

		// 减少字符,再次输出
		m_strLine = m_strLine.Left(m_strLine.GetLength()-1);
		dc.SetTextColor(clr); 

	}else // 输入其他
	{
		m_strLine += nChar;

	}

	// 插入符随着输入移动
	CSize sz = dc.GetTextExtent(m_strLine);
	
	CPoint pt;
	pt.x = m_ptOrig.x + sz.cx;
	pt.y = m_ptOrig.y;
	SetCaretPos(pt);

	dc.TextOut(m_ptOrig.x,m_ptOrig.y,m_strLine);
	CView::OnChar(nChar, nRepCnt, nFlags);
}

void CTextView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default

	// 移动插入符到这里
	SetCaretPos(point);
	m_strLine.Empty(); // 将cstring中保存的内容情空
	m_ptOrig = point;  // 保存坐标值
	CView::OnLButtonDown(nFlags, point);
}

字体的修改

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

vc++6.0中的字体

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Windows系统中的字体

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	// 定义字体
	CFont font;
	font.CreatePointFont(300, "华文行楷", NULL);
	CFont *pOldFont = dc.SelectObject(&font);

模拟卡拉ok变色字体

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CTextView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	
	// 显示大小按5个像素增加
	m_nWidth += 5;

	CClientDC dc(this);

	// 字体的高度
	TEXTMETRIC tm;
	dc.GetTextMetrics(&tm);

	CRect rect;
	rect.left = 0;
	rect.top = 200;
	rect.right = m_nWidth;
	rect.bottom = rect.top + tm.tmHeight;

	// 改变文本颜色
	dc.SetTextColor(RGB(255,0,0));
	CString str;
	str.LoadString(IDS_PET);
	dc.DrawText(str,rect,DT_LEFT);


	rect.top=150;
	rect.bottom = rect.top + tm.tmHeight;
	dc.DrawText(str,rect,DT_RIGHT);

	// 判断一下,走到哪里了
	CSize sz = dc.GetTextExtent(str);
	if(m_nWidth>sz.cx)
	{
		m_nWidth = 0;
		dc.SetTextColor(RGB(0,255,0));
		dc.TextOut(0,200,str);
	}

	CView::OnTimer(nIDEvent);
}

第四讲 简单绘图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

加入点击弹窗

框架类CMainFrame中加入不生效,需要在CDrawView中加入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编写代码,加入一个消息框

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在头文件中,自动加入了注释宏

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

源文件中加入了宏,加入了消息响应函数的宏

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

划线的实现1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标的抬起与放下的事件定义

/
// CDrawView message handlers

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	// 点击的时候,拿到了点
	m_ptOrigin=point; // 获取起点
	// MessageBox("view click");
	CView::OnLButtonDown(nFlags, point);
}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	HDC hdc; 
	hdc=::GetDC(m_hWnd);
	// 起点
	MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
	// 划线
	LineTo(hdc,point.x,point.y);
	// 释放dc
	::ReleaseDC(m_hWnd,hdc);
	CView::OnLButtonUp(nFlags, point);
}

划线实现2

用cdc实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

划线的实现3,CClient

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GetParent()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

划线的实现4

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	CWindowDC dc(GetParent());
	dc.MoveTo(m_ptOrigin);
	dc.LineTo(point);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同的颜色画笔

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	// 创建画笔
	CPen pen(PS_DOT,1,RGB(255,0,0));
	CClientDC dc(this);
	CPen *pOldPen=dc.SelectObject(&pen);
	dc.MoveTo(m_ptOrigin);
	dc.LineTo(point);
	dc.SelectObject(pOldPen); // 先前的画笔选择回设备描述表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同颜色画刷

	// 创建画刷
	CBrush brush(RGB(255,0,0)); 
	CClientDC dc(this);
	dc.FillRect(CRect(m_ptOrigin,point),&brush);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

位图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP1);
	CBrush brush(&bitmap);
	CClientDC dc(this);
	dc.FillRect(CRect(m_ptOrigin,point),&brush);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

空的矩形

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

画笔实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

构造函数初始化为false

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标按下时,设置为真,True

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标抬起,设置为false

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

画出连续的线条

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default

	// 判断鼠标状态

	CClientDC dc(this);
	if(m_bDraw==TRUE)
	{
		// 开始划线
		dc.MoveTo(m_ptOrigin);
		dc.LineTo(point);
		m_ptOrigin=point; // 终点设置为起点
	}
	
	CView::OnMouseMove(nFlags, point);
}

换个红色的画笔

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default



	CClientDC dc(this);
	// 换个颜色
	CPen pen(PS_SOLID,1,RGB(255,0,0));
	CPen *pOldPen=dc.SelectObject(&pen); // 之前的画笔

	// 判断鼠标状态
	if(m_bDraw==TRUE)
	{
		// 开始划线
		dc.MoveTo(m_ptOrigin);
		dc.LineTo(point);
		m_ptOrigin=point; // 终点设置为起点
	}
	
	dc.SelectObject(pOldPen); //设置回之前的画笔
	CView::OnMouseMove(nFlags, point);
}

画个扇形

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

先画出一个点,再到另一个点画出一条线,终点变化,重新划线

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

画出边线

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default



	CClientDC dc(this);
	// 换个颜色
	CPen pen(PS_SOLID,1,RGB(255,0,0));
	CPen *pOldPen=dc.SelectObject(&pen); // 之前的画笔

	// 判断鼠标状态
	if(m_bDraw==TRUE)
	{
		// 开始划线
		dc.MoveTo(m_ptOrigin);
		dc.LineTo(m_ptOld); // 画出一个点
		// dc.MoveTo(m_ptOrigin); // 线性的扇形
		dc.MoveTo(m_ptOld); // 画出边线
		dc.LineTo(point);
		m_ptOld=point;
	}
	dc.SelectObject(pOldPen); //设置回之前的画笔
	CView::OnMouseMove(nFlags, point);
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1869850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DELL:利用大语言模型(LLM)生成评论与解释,革新虚假信息检测

ACL 2024 DELL: Generating Reactions and Explanations for LLM-Based Misinformation Detection https://arxiv.org/abs/2402.10426https://arxiv.org/abs/2402.10426 1.概述 大型语言模型(LLM)虽在诸多领域显示出色性能,但在直接应用于新闻真实性鉴别时,面临两大核心挑…

【React】变量 useState

开发需要,随便学学react。上手第一天,感觉这个JS语法很怪,没有什么逻辑性,比较抽象。随便写写笔记。 跟着网上找的项目写写感觉这个项目还不错: 分享给码友 https://zh-hans.react.dev/learn/tutorial-tic-tac-toe 参…

未来一周比特币价格及数字货币市场预测

荷月的比特币市场就像过山车一样,仅仅六月下旬就跌去-12%,本周更是暴跌-6%,至 58,378美元。在这种市场表现,应有的踩踏如期而至。德国政府今日宣布再出售750 比特币的行为继续打击多头,但是小编认为这恰恰预示着市场可…

【Flink metric(1)】Flink指标系统的系统性知识:获取metric以及注册自己的metric

文章目录 一. Registering metrics:向flink注册新自己的metrics1. 注册metrics2. Metric types:指标类型2.1. Counter2.2. Gauge2.3. Histogram(ing)2.4. Meter 二. Scope:指标作用域1. User Scope2. System Scope ing3. User Variables 三. Reporter ing四. System…

海南聚广众达电子商务咨询有限公司抖音开店靠谱吗?

在当今数字化时代,电商行业迅猛发展,抖音作为短视频平台的佼佼者,其电商功能也日益凸显出其巨大的商业价值。海南聚广众达电子商务咨询有限公司,凭借其专业的电商服务能力和对抖音平台的深入理解,成为众多品牌进军抖音…

AI新热点:边云协同:大模型结合小模型(大小模型联合推理)

背景 AI模型规模不断剧增已是不争的事实。模型参数增长至百亿、千亿、万亿甚至十万亿,大模型在算力推动下演变为人工智能领域一场新的“军备竞赛”。 这种竞赛很大程度推动了人工智能的发展,但随之而来的能耗和端侧部署问题限制了大模型应用落地。2022…

怎么在必应bing上投放搜索广告?

搜索引擎已成为企业获取潜在客户、提升品牌曝光度的关键平台,微软必应(Bing)以其庞大的用户基数、精准的定位能力以及与微软生态系统的深度整合,为企业提供了极具价值的广告投放渠道。云衔科技助力企业实现必应bing广告的精准投放…

openlayers 自定义瓦片(切片)颜色

本篇介绍一下使用openlayers 自定义瓦片&#xff08;切片&#xff09;颜色 1 需求 自定义瓦片&#xff08;切片&#xff09;颜色 2 分析 使用各种source的tileLoadFunction属性 4 实现 修改前&#xff1a; 修改后&#xff1a; <template><div id"map&quo…

Linux内核虚拟内存空间

Linux中进程的虚拟内存空间被分为用户态内存空间和内核态内存空间&#xff0c;在32位和64位操作系统中&#xff0c;虚拟内存的布局如下&#xff1a; 32位 内核态虚拟内存空间是所有进程共享的&#xff0c;不同进程进入内核态之后看到的虚拟内存空间全部是一样的。 什么意思呢&…

【研究】美国2023年就业增长可能是假的?加州已经爆出大雷

美国就业市场可能比火热的非农数据所描绘的场面惨淡得多。 去年以来&#xff0c;美国劳动力市场顶着二十多年来最高的利率一路高歌猛进&#xff0c;让许多市场分析人士开始怀疑数据的准确性。尽管官方报告显示就业形势向好&#xff0c;但越来越多的证据表明&#xff0c;实际情…

RK3568技术笔记十三 Ubuntu的编译

Ubuntu文件系统编译 在编译前需要按照前面的方法初始化编译环境&#xff0c;否则会导致编译失败&#xff08;若配置过则无需重复配置&#xff09;。 按下述方法编译的Ubuntu系统&#xff0c;用户名是&#xff1a;dianyu 密码&#xff1a;1 编译Ubuntu&#xff0c;执…

electron-builder创建桌面应用

一、利用vue-cli创建vue项目 创建electron方式有很多&#xff0c;这里说的是vuecli创建的项目&#xff0c;通过安装electron-builder插件创建 也可以通过electron-vite构建项目 &#xff1a; https://cn.electron-vite.org/guide/ vue-cli构建 vue create XXX项目名 //按提示操…

​Chrome插件:React Developer Tools为React开发调试而生

React Developer Tools 是什么? 它是允许在Chrome和Firefox开发者工具中检查React组件层次结构的扩展插件。 插件源码下载 源码下载地址:GitHub - facebook/react-devtools at v3 下载完成以后执行红框中的代码,下载react-devtools 源码,源码如下图所示: 插件打包 当前n…

为什么javaer认为后台系统一定要用java开发?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;公司有两个开发团队&#xf…

开源创新框架MoA,可极大增强大模型的能力

知名大模型平台Together AI开源了一个创新框架Mixture-of-Agents&#xff08;简称&#xff0c;MoA&#xff09;。 MoA可以显著提升大模型的生成内容的能力和安全性&#xff0c;同时降低对AI算力的需求。研究人员在AlpacaEval 2.0、MT-Bench和FLASK等多个基准上进行了全面评测&…

Vatee万腾平台:一站式智慧服务,让生活更美好

在数字化浪潮席卷全球的今天&#xff0c;我们生活的方方面面都在经历着前所未有的变革。Vatee万腾平台凭借其一站式智慧服务&#xff0c;正成为推动这场变革的重要力量&#xff0c;让我们的生活变得更加美好。 Vatee万腾平台&#xff0c;作为一家专注于提供智慧服务的领军企业&…

趣测系统搭建APP源码开发,娱乐丰富生活的选择!

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 趣测系统提供了一个集合多种有趣测试的平台&#xff0c;如心理测试和星座测试等&#xff0c;这些测试内容富有趣味性和娱乐性&#xff0c;能够帮助大众在忙碌的生活中找到放松和娱乐的时刻…

品牌进行3D数字化转型,有哪些优势?

各行业都在经历着从增量市场向存量市场的转变&#xff0c;同时用户的消费观念也日趋成熟&#xff0c;更加注重产品的体验和服务质量。 无论是线上购物平台还是线下实体门店&#xff0c;提供个性化和增强体验感的产品与服务已成为未来发展的核心驱动力&#xff0c;品牌转型也迫…

openlayer 我的标注功能

背景&#xff1a; 通过openlayer库&#xff0c;可以在地图上实现绘制点、线、面。 并把绘制的结果添加到我的标注的弹框。 我的标注功能&#xff0c;包括&#xff1a;我的标注查询结果的数据展示&#xff1b;添加分组&#xff1b;添加我的标注&#xff1b;编辑分组、删除分组&a…

6.26.3 基于Transformer的深度神经网络在数字乳腺断层合成图像上的乳腺癌分类

开发一种有效的深度神经网络模型&#xff0c;该模型结合了相邻图像部分的上下文&#xff0c;以检测数字乳腺断层合成(DBT)图像上的乳腺癌。 数字乳房断层合成(DBT)是一种医学成像技术&#xff0c;其中检测器围绕患者以有限角度旋转并记录多幅图像。然后将这些图像重建为二维(2D…