20暑假实训笔记

第一天

Visual studio 安装 以及 MFC简介(微软基础库类)

MFC打开选择基于对话框的应用程序

  1. 在以前的头文件(.h),源文件(.cpp)的基础上,增加了一种资源文件(默认的情况下一个.ico 图标文件?后面要学 另外两个.rc和.rc2文件,点击效果打开都是一样的。
  2. 点开资源文件后Dialog已有两个对话框,一个是主对话框,另一个about对话框
  3. 对话框对应添加类,对话框中的控件对应添加变量
  4. 控件添加变量有两种,一种是控件类别的变量(control),用于控制控件本身,如控件的坐标,大小,内部字体大小等,另一种是值类别的变量(value),用于和控件交换数据。

第二天

控件的功能实现,双击控件,将自动在对应对话框类.h文件声明函数和.cpp文件定义函数。
添加控件的变量后,将在对话框类.h文件中自动添加对应变量,并自动添加DataExchange函数

  1. static text 静态文本框,用于添加一些静态的,不会改变的部分。
  2. edit control 编辑文本框 ,可以输入字符串(可以在属性中设置只允许输入数字)
  3. button 按钮,用于某些功能的实现。
    控件功能的实现:
    字符串与其他类型的转换
    字符串->其他类型, _ttoi() int, _ttof() float; 其他类比
    其他类型->字符串 , str.format(_T("%d“类比),a )

控件对应数据的获取与改变函数
GetDlgItemText(控件ID,目标)
SetDlgItemText(控件ID, 目标)

MessageBox()消息对话框 MessageBox(TEXT(""));

编辑文本框可以设置为只读(属性中设置),ctrl+D和点击调整tab顺序

问题:时不时报错无法识别的外部命令怎么办?重来一遍一切又好了

第三天->第一周结束

对话框添加背景图片(图片形式应为bmp):

1.将对应图片放入res文件夹中,在资源视图导入bitmap该图片。
2.改写onpaint函数
将else部分改为

else
	{
		//CDialogEx::OnPaint();
		//注释该语句:防止重复调用重画函数
		//CDialog::OnPaint(); 
		//添加代码对话框背景贴图
		CPaintDC   dc(this);
		CRect   rect;
		GetClientRect(&rect);    //获取对话框长宽      
		CDC   dcBmp;             //定义并创建一个内存设备环境
		dcBmp.CreateCompatibleDC(&dc);             //创建兼容性DC
		CBitmap   bmpBackground;
		bmpBackground.LoadBitmap(IDB_BITMAP1);    //载入资源中图片
		BITMAP   m_bitmap;                         //图片变量               
		bmpBackground.GetBitmap(&m_bitmap);       //将图片载入位图中
		//将位图选入临时内存设备环境
		CBitmap* pbmpOld = dcBmp.SelectObject(&bmpBackground);
		//调用函数显示图片StretchBlt显示形状可变
		dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &dcBmp, 0, 0, m_bitmap.bmWidth, m_bitmap.bmHeight, SRCCOPY);
	}

模态对话框与非模态对话框的实现

区别: 在弹出模态对话框后,在没有关闭该模态对话框前,不能对其他对话框操作,而非模态对话框可以。
添加新的对话框资源,并创建对应对话框类
模态对话框:调用 Dlg.DoModal()即可。
非模态对话框:

1.在主对话框类中将子对话框类作为成员变量(指针或非指针均可)
2.判断成员变量指针是否为NULL
3.create函数创建对话框,并用ShowWindow(SW_SHOW)函数显示对话框

如何判断一个成员变量指针是否为空:
1.定义时是对话框对象:
对话框对象中有一个内部成员变量m_hwnd,即对话框的句柄,因此可以根据m_hwnd变量来判断对话框有没有被创建。
故调用if(dlg.m_hwnd)
2.定义时直接定义变量指针
判断指针是否为空即可 故调用if(pt==NULL)

子窗口与主窗口的数据传递

从控件获得文本,和向控件发送文本。 GetDlgItemText(控件ID,储存对象)SetDlgItemText;

自定义消息和消息响应函数,消息的发送,获取,消息响应函数

对话框类向导自定义类消息 如WM_MAIN_MSG,系统将自动生成一个消息响应函数。注意:此时运行程序会报错,因为消息没有对应的ID,我们需要在主程序头文件中加上

#define WM_MAIN_MSG WM_USER+0x001 // 定义消息 mzb
#define WM_SUB_MSG WM_USER+0x002 // 定义消息 mzb

WM_USER 之前的是给系统消息用的ID,之后的是给用户用的ID

发送消息 使用全局函数 ::SendMessage(目标窗口句柄,目标窗口消息ID,WPARAM类型的想要发送消息的指针(强转类型即可),NULL);

消息响应函数的写法,函数名,类型,参数系统已生成。主体部分:
消息的获取直接通过第一个参数转成CString 类型即可!!!!此处只能转成指针,否则会报错。
例:CString * strMsg = (CString*) wParam;

然后将该数据发送至控件即可。
分界线----------------------------------------------------------------------------------
杂:
::函数名 调用全局作用的函数,而不是类里面的函数

句柄的获得:
通过窗口指针获得窗口句柄 dlg->GetSafeHwnd(); 或者dlg->m_hWnd
获得父窗口的句柄 HWND hWnd = this->GetParent()->GetSafeHwnd();

句柄和指针区别:句柄其实就是指针,但是他和指针最大的不同是:给你一个指针,你可以通过这个指针做任何事情,也许是好事,也许是通过这个指针破坏内存,干一些捣乱的事情。这个我想大家都会碰到过,因为乱用指针可能会导致程序崩溃。句柄就没有这个缺点,通过句柄,你只能干一些windows允许你干的事情(例如调用一些api函数等等),没有了指针的随意。

为什么new了一个对话框对象后还需要用该对象调用create函数创建对话框呢?
解决:
假如我们添加一个对话框资源后,需要对该对话框添加类(初始对话框已有除外)控制该对话框上的控件,变量。类似的,假如我们现在有了一个对话框的类对象,但是对话框却并不存在,我们就要通过create函数创建对话框。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值