VC++6.0对话框程序设计:成员变量与控件交互

需积分: 11 3 下载量 24 浏览量 更新于2024-07-13 收藏 678KB PPT 举报
"为对话框类加入成员变量-第11讲_VC++6[1].0基本控件的使用" 在VC++6.0中开发基于对话框的应用程序时,我们通常需要实现用户交互,这就涉及到了对话框类的成员变量和控件的使用。对话框的主要作用是显示信息和收集用户输入,而这些功能是由对话框上的控件来完成的。为了方便操作和管理这些控件,我们需要为它们定义相应的成员变量。 成员变量有两种主要类型:数据成员和控件对象。数据成员通常用来存储控件显示或接收的数据,例如,一个编辑框控件可能对应一个字符串类型的成员变量,用于保存用户输入的内容。控件对象则是一种更直接的表示,它是一个指向控件类对象的指针,可以直接调用控件的方法进行操作。 在VC++6.0中,我们可以利用ClassWizard工具来便捷地为对话框类添加成员变量。通过选择"member variables"选项,ClassWizard会自动生成与选定控件相关的成员变量,并在头文件中声明,同时在源文件中初始化和处理相关的消息映射。这样,我们就可以在代码中直接通过成员变量来访问和控制控件,使得代码更加简洁和易于理解。 在基于对话框的应用程序设计中,通常包括以下步骤: 1. **生成基于对话框的应用程序**:在创建新项目时,选择DialogBased模板,然后设置应用程序的各种属性,如是否包含版权信息、使用3D风格控件等。 2. **设计对话框界面**:使用资源编辑器添加并布局控件,通过右键选择对话框属性来调整其样式和行为。 3. **设置对话框属性**:对话框的属性包括基本属性如字体、菜单,以及各种风格选项,如系统菜单、最大化和最小化按钮、滚动条等。 4. **初始化对话框**:对话框的初始化工作主要在构造函数和`OnInitDialog()`函数中进行。`OnInitDialog()`是响应WM_INITDIALOG消息的函数,可以在这里对控件进行初始设置,如预设值、禁用状态等。 5. **控件成员变量的使用**:在类的成员变量中添加控件后,可以在类的其他成员函数中直接引用这些变量,进行读取或修改控件的状态,实现业务逻辑。 6. **处理用户输入**:通过消息映射机制,定义控件的消息处理函数,如响应按钮的点击、文本框的更改等事件。 7. **模态和非模态对话框**:模态对话框会阻塞父窗口直到关闭,而非模态对话框则允许用户同时与多个窗口交互。根据应用场景选择合适的对话框类型。 熟练掌握这些知识点是VC++6.0中进行对话框程序设计的基础,特别是对于常用控件如按钮、编辑框、列表框、复选框等的使用,需要熟悉它们的功能、属性以及如何通过代码进行控制。通过对这些内容的深入理解和实践,可以创建出功能丰富的用户界面,提高应用程序的用户体验。

void CMyImageView::OnBianyuan() { // TODO: 在此添加命令处理程序代码 CMyImageDoc* pDoc = GetDocument();//获取文档指针 ASSERT_VALID(pDoc); suanzi dlginputyuzhi;//定义阈值对话框类对象 dlginputyuzhi.DoModal();//弹出对话框 UpdateData(TRUE); if (pDoc->m_pDib == NULL) { AfxMessageBox("Error!"); return; } int mcols = pDoc->m_pDib->m_nCols; int mrows = pDoc->m_pDib->m_nRows; unsigned char* m_pData = NULL; m_pData = pDoc->m_pDib->pImgData; unsigned char* m_pDataOldPos = m_pData; unsigned char* a; int* b = NULL; int irows, jcols; int max = 0; int min = 255; vector<int>v; for (irows = 0; irows < mrows; irows++) { for (jcols = 0; jcols < mcols; jcols++) { int j = 0; int p = 0, q = 0; m_pData += irows * mcols + jcols; j += irows * mcols + jcols; if (j > mcols && (j + 1) % mcols != 0 && j < (mrows * (mcols - 1))) { p = 4 * (*m_pData) - *(m_pData + 1) - *(m_pData - 1) - *(m_pData - mcols) - *(m_pData + mcols); if (p > dlginputyuzhi.suanzi_1) { v.push_back(0); } else { v.push_back(255); } } m_pData = m_pDataOldPos; } } int aq = 0; for (irows = 0; irows < mrows; irows++) { for (jcols = 0; jcols < mcols; jcols++) { int j = 0; int p = 0, q = 0; m_pData += irows * mcols + jcols; j += irows * mcols + jcols; if (j > mcols && (j + 1) % mcols != 0 && j < (mrows * (mcols - 1))) { *m_pData = v[aq]; aq++; } m_pData = m_pDataOldPos; } } for (irows = 0; irows < mrows; irows++) { for (jcols = 0; jcols < mcols; jcols++) { int j = 0; int p = 0, q = 0; m_pData += irows * mcols + jcols; j += irows * mcols + jcols; if (irows>0&&irows<mrows-1&&jcols>0&&jcols<mcols-1) { if (*m_pData==0) { if (*(m_pData + 1) == 0 || *(m_pData - 1) == 0 || *(m_pData - mcols) == 0 || *(m_pData + mcols) == 0) { } else { *m_pData = 255; } } } m_pData = m_pDataOldPos; } } pDoc->UpdateAllViews(NULL); }仿照此代码,将其中的sobel算子改成Robert算子

2023-06-11 上传

用C++,创建MFC,用prewitt算子锐化,仿照下面代码void CMyImageView::OnSobelsuanzi() { // TODO: 在此添加命令处理程序代码 CMyImageDoc* pDoc = GetDocument();//获取文档指针 ASSERT_VALID(pDoc); Prewittsuanzi dlginputyuzhi;//定义阈值对话框类对象 dlginputyuzhi.DoModal();//弹出对话框 UpdateData(TRUE); if (pDoc->m_pDib == NULL) { AfxMessageBox("Error!"); return; } int mcols = pDoc->m_pDib->m_nCols; int mrows = pDoc->m_pDib->m_nRows; unsigned char* m_pData = NULL; m_pData = pDoc->m_pDib->pImgData; unsigned char* m_pDataOldPos = m_pData; unsigned char* a; int* b = NULL; int irows, jcols; int max = 0; int min = 255; vector<int>v; for (irows = 0; irows < mrows; irows++) { for (jcols = 0; jcols < mcols; jcols++) { int j = 0; int p = 0, q = 0; m_pData += irows * mcols + jcols; j += irows * mcols + jcols; if (j > mcols && (j + 1) % mcols != 0 && j < (mrows * (mcols - 1))) { p = (m_pData + mcols+1) + 2( * (m_pData + mcols )) + (m_pData + mcols - 1) - 2( * (m_pData - mcols)) - (m_pData - mcols - 1) - (m_pData - mcols + 1); q = 2( * (m_pData + 1)) + (m_pData + mcols + 1) + (m_pData - mcols + 1) - 2( * (m_pData - 1)) - (m_pData + mcols - 1) - (m_pData - mcols - 1); p = abs(p); q = abs(q); if (p > dlginputyuzhi.xyuzhi && q > dlginputyuzhi.yyuzhi) { v.push_back(0); } else { v.push_back(255); } } m_pData = m_pDataOldPos; } } int aq = 0; for (irows = 0; irows < mrows; irows++) { for (jcols = 0; jcols < mcols; jcols++) { int j = 0; int p = 0, q = 0; m_pData += irows * mcols + jcols; j += irows * mcols + jcols; if (j > mcols && (j + 1) % mcols != 0 && j < (mrows * (mcols - 1))) { m_pData = v[aq]; aq++; } m_pData = m_pDataOldPos; } } pDoc->UpdateAllViews(NULL); },给出相应程序

2023-05-30 上传