### MFC编程知识点总结
#### 一、MFC概述与界面设计
MFC(Microsoft Foundation Classes)是微软提供的一套面向对象的C++类库,主要用于简化Windows API的使用复杂度,帮助开发者快速构建功能丰富的应用程序。在MFC中,通过预定义的类和函数可以轻松实现图形用户界面(GUI)的设计、文件操作、数据库访问等功能。
**知识点1:界面设计**
MFC提供了多种工具来帮助开发者创建美观且实用的用户界面。其中,`CStatic` 类用于创建静态文本或位图控件,可以在界面上显示固定的文本或图片。例如,在上述代码片段中:
```cpp
CStatic* picwnd = new CStatic;
picwnd->Create(NULL, WS_BORDER | WS_VISIBLE | WS_CHILD, CRect(20, 10, 660, 490), this, IDC_HISPICWND);
GetDlgItem(IDC_HISPICPICWND)->ModifyStyle(0, SS_BITMAP);
```
这里创建了一个名为 `picwnd` 的 `CStatic` 对象,并设置其样式为带边框且可见,放置在父窗口 `this` 的指定位置上。`ModifyStyle` 方法则用于修改控件样式,使其能够显示位图。
**知识点2:位图加载与显示**
加载并显示位图是界面设计中的常见需求之一。在MFC中,可以通过 `LoadImage` 函数加载位图资源,并利用 `CDC` 类及其派生类来绘制位图。如:
```cpp
HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL, filename, IMAGE_BITMAP, 640, 480, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
```
该语句将从指定文件路径 `filename` 加载一张大小为640x480像素的位图到内存中。接着,通过 `CDC` 类创建与设备上下文兼容的内存设备上下文和位图对象,并利用 `BitBlt` 函数将位图绘制到屏幕上:
```cpp
CDC *pDC = GetDC();
CRect rt(0, 0, 640, 480);
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap bmpMem;
bmpMem.CreateCompatibleBitmap(pDC, rt.Width(), rt.Height());
::SelectObject(dcMem.GetSafeHdc(), bmpMem);
dcMem.BitBlt(0, 0, 640, 480, &dcMem, 0, 0, SRCCOPY);
pDC->BitBlt(20, 10, 640, 480, &dcMem, 0, 0, SRCCOPY);
ReleaseDC(pDC);
```
#### 二、文件操作与查找
MFC还提供了方便的文件操作接口,如创建、读取、写入等。例如:
```cpp
CFile file;
file.Open(filename, CFile::modeCreate | CFile::modeWrite);
file.Close();
```
这表示打开一个文件用于写入,并在完成后关闭文件。对于文件查找,可以使用 `CFileFind` 类:
```cpp
CFileFind findfile;
CString filename("*.*");
bool bWorking = findfile.FindFile(filename);
while (bWorking) {
bWorking = findfile.FindNextFile();
}
```
上述代码遍历当前目录下所有文件。
#### 三、字符串转换与自定义工具栏
MFC支持多种字符串处理方法,如从 `CString` 转换为字符数组:
```cpp
BOOL CStringToChar(char s[], const CString r) {
_tcscpy(s, (LPCTSTR)(LPCTSTR)r);
s[r.GetLength()] = '\0';
return true;
}
```
此外,MFC还允许创建自定义工具栏,增加程序的功能性和可用性。例如:
```cpp
CToolBar m_ToolBar;
m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOOLTIPS | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_ToolBar.LoadToolBar(IDR_TLB_PLOT);
m_ToolBar.ShowWindow(SW_SHOW);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
```
以上代码创建了一个扁平风格的工具栏,并加载了自定义的工具栏资源,最后将其显示在界面上。
#### 四、鼠标光标与列表控件
除了上述功能外,MFC还支持对鼠标光标的自定义和列表控件的使用。例如设置窗口的鼠标光标:
```cpp
SetClassLong(this->GetSafeHwnd(), GCL_HCURSOR, (LONG)LoadCursor(NULL, IDC_ARROW));
```
或者使用列表控件来展示数据:
```cpp
CListCtrl* pListCtrl = new CListCtrl;
pListCtrl->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | LVCF_FMT | LVCF_SUBITEM | LVS_SORTASCENDING | LVS_EX_FULLROWSELECT, CRect(15, 60, 335, 240), this, 10);
```
这里创建了一个列表控件,并设置了其样式和位置。
通过上述知识点的学习,我们可以了解到MFC在界面设计、位图操作、文件管理等方面的强大功能,为开发高效、易用的应用程序打下了坚实的基础。