Windows 库存管理软件项目继续
对话框的运行方式
对话框分为
模态对话框和非模态对话框两种
对于模态对话框和非模态对话框的实现, 请看 这里
注意事项
在我们调用对话框的时候, 我们可能会希望动态的改变窗口的标题
这样我们就写出如下代码:
CModleDialog dlg;
dlg.SetWindowText(TEXT("添加")); // 这里会崩溃
dlg.DoModal();但是这样是错误的!!
为什么?
我们明明声明了对象, 并且是用的对象提供的方法来进行设置的, 怎么还报错了呢? 因为, 根据我们之前所学
Windows中, 窗口是一个HWND, 是一个内核对象
我们的CModelDialog类虽然已经有了对象
但是, 我们的CModelDialog本身是不具有内核对象的
它只是向Windows内核发送一个请求, 然后由Windows内核给我们一个内核对象
在DoModal的时候, 会进行Create操作, 产生WM_CRAETE消息
然后我们的窗口就出来了, 就可以进行显示, 设置等操作
我们要记住, 我们的 CXXXDlg 类和我们的窗口有无并没有关系
它只是替我们封装了向Windows发送请求的功能而已
所以, MFC玩转的同时, 也要知道Win32和C++
窗口之间的传值
我们需要牢记的是, MFC并不神秘, 它只是一个C++包装出来的框架
它的核心还是C++, 它同样可以使用C++中的方式来进行值的传递
每一个窗口都被封装成了一个类
类和类之间的传值, 我们可以通过如下几种方式:
- 构造函数
- 接口函数
那么在MFC中, 我们还可以通过重载父类虚函数的方式来进行值的传递
对话框的返回值
我们在MFC中, 使用 DoModal 来使对话框进入模态
当我们的对话框逻辑完成后, 需要关闭这个模态对话框
那么, 对话框的常见返回值如下:
- 点击右上角的关闭按钮时, 对话框返回
IDCANCEL - 点击ID为
IDOK的按钮时, 对话框返回IDOK(调用OnOK()函数) - 点击ID为
IDCANCEL的按钮时, 对话框返回IDCANCEL(调用OnCancel()函数) - 使用EndDialog(XXX)可以自定义返回值
INI文件操作
对于INI文件的操作, Windows提供了API来进行操作
列几个比较常用的, 更多的请查询MSDN
WritePrivateProfileString
// 将一个 Key 值写入 ini 文件的指定 Section 中
BOOL WINAPI WritePrivateProfileString(
_In_ LPCTSTR lpAppName, // Section名(配置项名)
_In_ LPCTSTR lpKeyName, // Key名
_In_ LPCTSTR lpString, // 值
_In_ LPCTSTR lpFileName // INI文件路径
);GetPrivateProfileString
// 获取一个 Section 中的 Key 的值
DWORD WINAPI GetPrivateProfileString(
_In_ LPCTSTR lpAppName, // Section名
_In_ LPCTSTR lpKeyName, // Key名
_In_ LPCTSTR lpDefault, // 默认的Value
_Out_ LPTSTR lpReturnedString, // 将Value写入到这个指针中
_In_ DWORD nSize, // lpReturnedString的大小
_In_ LPCTSTR lpFileName // INI文件
);WritePrivateProfileSection
// 将指定的配置项全部写入一个Section中
BOOL WINAPI WritePrivateProfileSection(
_In_ LPCTSTR lpAppName, // Section名称
_In_ LPCTSTR lpString, // 配置 比如: "[subsec1]\r\nkey1=v1\r\nkey2=v2\r\n[subsec2]\r\nkey1=v1\r\n"
_In_ LPCTSTR lpFileName // INI文件
);GetPrivateProfileSection
// 获取指定Section的所有Key和Value
DWORD WINAPI GetPrivateProfileSection(
_In_ LPCTSTR lpAppName, // Section名称
_Out_ LPTSTR lpReturnedString, // 要写入的字符串
_In_ DWORD nSize, // lpReturnedString的大小
_In_ LPCTSTR lpFileName // INI文件
);未完待续...
如有错误,请提出指正!谢谢.
本文由 花心胡萝卜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2017-05-23 at 03:28 pm