PoEdu培训 Windows班 第十课 库存管理软件项目继续
文章类别: 培训笔记 0 评论

PoEdu培训 Windows班 第十课 库存管理软件项目继续

文章类别: 培训笔记 0 评论

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 来使对话框进入模态
当我们的对话框逻辑完成后, 需要关闭这个模态对话框
那么, 对话框的常见返回值如下:

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文件
);

未完待续...

如有错误,请提出指正!谢谢.

回复