VC++学习笔记3

声明:此为小白学习的笔记,因没能在CSDN当中找到相应的私密博客权限,如果有人看到这些文字,请忽略!谢谢!

对话框

 对话框其实就是一个子窗口,装载了许多“控件”(系统提供的,或者自己创建的ActiveX),通过控件响应函数,可以实现预定的“点击功能”,有点类似于VB的事件触发机制。

对话框——模态与非模态
首先在Source下插入对话框资源,在对话框可以自由添加控件,然后为对话框关联一个类(面向对象的思想,这是谁的,它要干什么),通过在VIEW类中构造DLG对象动态创建一个对话框。
模态(Modal)——DLG xx.DoModal();就可创建一个模态对话框,模态对话框会造成阻塞(暂且ZB说法),在关闭它之前,不允许响应其他操作。程序也会停留在doModal()这一行。当然,在关闭它之后,它会自动销毁相关资源,释放内存,不留手尾。
非模态(Modal) ——Create + Show。非模态对话框矫情,在打开非模态对话框后可以相应框架窗口或其他的菜单操作,但是在关闭它之后,相关资源还赖在内存当中不走,可以在ONOK()响应函数中使用DestroyWindow()将其释放。ONOK()响应函数有两种,一个是点击OK按钮后响应函数,一个是按下回车后默认的响应函数,在消息路由当中,点击为OnoK, 以AFx 开头,默认响应函数为OnOk ,以virtual开头,而且两个函数在源文件中的函数体是重名的(函数重载?)。

动态创建按钮

 看到动态创建按扭,这是一件事情,在面向对象当中就应该决定谁去做这个事情。CButton该类,创建对象。CButton (View中定义的) m_btn.create(“Name” , style , CRect , hwnd ,ID);常规逻辑属性创建一个按钮即可。

控件访问

WHO shuold do this ? + and How ?
① Dlg 对象

获取 : GetDlgItem()->function ( ) —– GetWindowText or SetWindowText 。。。(由此看出,MFC把所有的空间都看做Window)
获取数值:GetDlgItemText( ID , receive BUFFER , BUFFER size )+GetDlgItemInt( ID , int ) ( 字符串转换为整形已提前做好)

②变量对象——把控件作为Dlg属性(个人更偏向于此)
在CLASSWizard 中可为每个空间关联一个属性变量,路由中以DDX开头。例如把一个整型与编辑框控件相关联,在编辑框输入的值会传到变量当中,但是这并不是实时的,需要调用UpdateData( True ) 更新变量值与UpdateData(FALSE)更新编辑框中的值。但是如果关联的变量是控件类型(control ),没有直接从字符串获取数值的功能(得自己实现一下)。
③系统
与系统进行通信无非就是MESSAGE发送与接受
通过::SendMessage( hwnd,WM_do what? , Sizeof BUFFER ,BUFFER)可以告诉系统要对哪个控件进行操作,进行什么操作,操作结果得放在哪里。或者通过SendDlgItemMessage( )发消息就更直接一点。

对话框大小伸缩

主要通过SetWindowPos (const Cwnd * pWndInsertAfter , int x , int y , int cx , int cy , UINT nFlags )函数改变窗口的位置和大小。(且让我抄会孙大爷的书)
pWndInsertAfter☞标识一个CWnd 对象,该对象是在以Z次序排序创空中位于当前窗口前面的那个窗口对象。这个参数可以是指向某个CWnd对象的指针,也可以以指向wndBottom ,wndTop ….指针之一。(没懂,程序设置为NULL)
nFlags->窗口属性

 ***Z-次序***
 兄弟窗口——共享同一个父窗口的多个子窗口
 活动窗口——应用程序顶层窗口(当前使用窗口) 活动窗口只有一个,顶层窗口有许多个?
 前台窗口+后台窗口——创建正在使用窗口的为前台,不然则为后台。
 *Z*
 Windows系统管理三个独立的Z次序——顶层窗口+兄弟窗口+最顶层窗口
 很重要么?没想明白。

输入焦点的传递

 将OnOK()默认响应函数中的CDialog::OnOK();注释起来,加入GetNextDlgTabItem(GetFocus())->SetFocus();+ 取消EidtText中的MultiLine属性选项即可,但是原来的OK按钮怎么办?双击Ok按钮,为其添加电击响应函数,调用 CDialog::OnOK();即可。(没试,猜的)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值