【MFC系列-第16天】企业信息管理软件开发

常见的两种类和类之间相互调用的方法。

16.1 用户权限信息在不同对话框之间共享

①在CWokerApp类中定义变量:

class CWorkerApp : public CWinApp
{
public:CWorkerApp();SAdmin m_admin;//登录信息
// 重写
public:virtual BOOL InitInstance();
// 实现DECLARE_MESSAGE_MAP()
};

②在CLoginDlg类中进行赋值

BOOL CLoginDlg::CheckPass(CString szName, CString szPass)
{//TRUE代表登录成功CFile file;if (!file.Open(_T("admin.dat"), CFile::modeRead)){CreateUser();if (!file.Open(_T("admin.dat"), CFile::modeRead))return FALSE;}SAdmin a;while (file.Read(&a, sizeof(a)) == sizeof(a)){if (!szName.CompareNoCase(a.sName)){if (szPass == a.sPass){theApp.m_admin = a;return TRUE;}}}return FALSE;
}

③在CMainDlg类中进行访问应用,采用引用型变量

BOOL CMainDlg::OnInitDialog()
{CDialogEx::OnInitDialog();CString str = _T("控制面板 - ");SAdmin &a = theApp.m_admin;str += a.sName;str += _T("(");str += a.nPrior ? _T("普通") : _T("高级");str += _T(")");SetWindowText(str);if (a.nPrior)GetDlgItem(IDC_PRIOR) ->EnableWindow(FALSE);//GetDlgItem(IDC_PRIOR)->ShowWindow(SW_HIDE);//ShowWindow EnableWindowreturn TRUE;
}

16.2 其他对话框访问主对话框(AfxGetMainWnd)

①在CWorkerApp类中指定主对话框

BOOL CWorkerApp::InitInstance()
{CLoginDlg dlg;if (IDCANCEL == dlg.DoModal())return FALSE;while (true){case IDC_INFO:{CWorkerDlg dlg;m_pMainWnd = &dlg;dlg.DoModal();break;}}}return FALSE;
}

②在其他对话框中使用全局函数AfxGetMainWnd获取主对话框指针并访问

void CInputDlg::AddToList()
{
if (AfxMessageBox(_T(“是否添加?”), MB_YESNO) == IDNO)
return;
CString str;
GetDlgItemText(IDC_NUMB, str);

CWorkerDlg* pDlg = (CWorkerDlg*)AfxGetMainWnd();
if (pDlg ->CheckNumber(str))return;	
int i = pDlg->m_list.GetItemCount();
pDlg->m_list.InsertItem(i, str);
GetDlgItemText(IDC_NAME, str);

}

16.3 其他对话框访问主对话框(m_pDlg)

思想:直接定义指针变量指向要访问的对话框,这种方法其实没有主对话框

①在CInputDlg类中定义CWorkerDlg类型的指针变量,用来指向CWorkerDlg对话框;需要CInputDlg类中包含CWorkerDlg的头文件或进行声明,然而在头文件中进行包含容易造成类与类之间相互包含的混乱错误,因此可以进行声明;这种声明其实是假声明,只适用于指针类型,不适用于对象。

这种声明可以防止类与类在头文件中相互包含、重复包含而引起的错误。

//#include "WorkerDlg.h"
class CWorkerDlg;
class CInputDlg : public CDialogEx
{DECLARE_DYNAMIC(CInputDlg)
public:CWorkerDlg *m_pDlg; //定义CWorkerDlg对象指针CInputDlg(CWnd* pParent = NULL);   // 标准构造函数virtual ~CInputDlg();};
在stdafx.h中可禁用warning:
#pragma warning(disable:4005)

②在CInputDlg窗口弹出之前,将CWorkerDlg对象指针(this指针)赋值给①中定义的m_pDlg变量

void CWorkerDlg::OnBnClickedAdd()
{//排除重复工号的功能,当重复的工号禁止插入(已存在!)CInputDlg dlg;dlg.m_pDlg = this;dlg.DoModal();
}

16.4 消息反射:(控件内的消息映射到父窗口类)

a)所有子控件的内部消息都是通过WM_NOTIFY这个消息反射给父窗口;

b)不同的控件类型对应有不同的反射消息种类;

例如:BN_CLICK代表Button Notify Click`(按钮点击消息)

LVN_ITEMCHANGED代表List View Notify Item Changed(选中项变化了)

16.5 在CWnd类中常见的等价关系:

a)判断父子关系:

BOOL IsChild( const CWnd* pWnd ) const; 	判断窗口是否是一个子窗口 
CWnd* GetParent(); 获取父窗口对象指针
m_list.GetParent() == pWnd 等价于pWnd ->IsChild(&m_list);

b)判断是否是最大化:pWnd ->GetStyle() & WS_MAXIMIZE`

BOOL IsIconic( ) const; 	判断窗口是否是最小化的状态 
BOOL IsZoomed( ) const; 	判断窗口是否是最大化的状态 

c)判断是否可见:GetStyle() & WS_VISIBLE

BOOL IsWindowVisible( ) const; 	判断窗口是否是可见的 
void CTestdDlg::OnBnClickedIsVisible()
{CWnd *pOK = GetDlgItem(IDOK);//if ()//pOK ->IsWindowVisible//	;//else//	pOK->ShowWindow(SW_SHOW);pOK->ShowWindow(pOK->GetStyle()&WS_VISIBLE ? SW_HIDE : SW_SHOW);
}

d)判断是否可用:GetStyle() & WS_DISABLED

BOOL IsWindowEnabled( ) const; 	判断窗口是激活的还是禁用的
void CTestdDlg::OnBnClickedDisabled()
{CWnd *pWnd = GetDlgItem(IDCANCEL);//pWnd->EnableWindow(!pWnd->IsWindowEnabled());pWnd->EnableWindow(pWnd->GetStyle() & WS_DISABLED);
}

16.6 CWnd类中常见的静态成员函数:

static CWnd* PASCAL FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName);
根据窗口类型名或窗口标题名查找窗口;static CWnd* PASCAL GetFocus( ); 	获取焦点所在的窗口 
CWnd* SetFocus( ); 	将一个窗口设置为焦点窗口 
static CWnd* PASCAL GetActiveWindow( ); 	(进程内的)获取活动窗口 
CWnd* SetActiveWindow( ); 	(进程内的)将一个窗口设置为活动窗口 static CWnd* PASCAL GetForegroundWindow( ); 	获取所有任务栏主窗口中最前端的窗口
BOOL SetForegroundWindow( ); 	将主窗口推到任务栏中所有窗口的最前端CWnd* GetTopWindow( ) const; 	获取所有重叠窗口中最前端的窗口 
void BringWindowToTop( ); 	将主窗口推到重叠窗口的最前端 
BOOL FlashWindow( BOOL bInvert ); 	让窗口在任务栏中闪烁以下 
void CTestdDlg::OnBnClickedGetForeGround()
{CWnd* p = CWnd::FindWindow(_T("NotePad"), NULL);if(p){p->SetForegroundWindow();p->FlashWindow(TRUE);}
}
HICON GetIcon( BOOL bBigIcon ) const; 	获取窗口图标 HICON SetIcon( HICON hIcon, BOOL bBigIcon ); 	设置窗口图标 static CWnd* PASCAL GetDesktopWindow( ); 	获取Windows桌面窗口 static CWnd* PASCAL GetCapture( ); 	获取捕捉鼠标活动的窗口 CWnd* SetCapture( ); 	将窗口设置为捕捉鼠标活动的窗口 int GetWindowRgn( HRGN hRgn )const; 	获取不规则窗口的区域 int SetWindowRgn( HRGN hRgn, BOOL bRedraw ); 	按照指定的区域将窗口设置为不规则形状 void MoveWindow( int x, int y, int nWidth, int nHeight, BOOL bRepaint=TRUE ); 	根据指定的位置移动窗口 void MoveWindow(LPCRECT pRect, BOOL bRepaint = TRUE ); 	根据指定的矩形区域移动窗口 BOOL SetWindowPos(const CWnd* pWndAfter, int x, int y, int cx, int cy, UINT nFlags ); 	不但移动窗口的x,y坐标位置,而且还改变窗口的Z轴次序 void CenterWindow( CWnd* pOwner = NULL ); 	将窗口居中,对应父窗口或者屏幕的中央 void GetWindowRect( LPRECT lpRect ) const; 	获取窗口在屏幕坐标中的矩形区域 void GetClientRect( LPRECT lpRect ) const; 	获取窗口的客户区的矩形区域 static CWnd* WindowFromPoint( POINT point ); 	获取屏幕中某个坐标点上的窗口 CWnd* ChildWindowFromPoint( POINT point ) const; 	获取客户区内某个坐标点上的子窗口 static CWnd* FindWindow(LPCTSTR szClassName, LPCTSTR lpszWindowName ); 	根据类名或者标题名查找一个主窗口 
CWnd* GetOwner( ) const; 	获取拥有者窗口 void SetOwner( CWnd* pOwnerWnd ); 	将窗口设置为被另一个窗口拥有 CWnd* GetParent( ) const; 	获取父窗口 CWnd* SetParent( CWnd* pWndNewParent ); 	为窗口设置一个新的父窗口 CWnd*GetNextWindow(UINTnFlag =GW_HWNDNEXT ) const; 	获取z序中的前一个或后一个窗口,可以联合GetTopWindow对同等级窗口遍历 CWnd* GetWindow( UINT nCmd ) const; 	全面获取窗口,包括父子窗口前后窗口等 int GetDlgCtrlID( ) const; 	获取一个窗口的ID int SetDlgCtrlID( int nID ); 	给窗口设置一个新的ID

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java微妙_编码Java时的10个微妙的最佳实践

java微妙这是10条最佳实践的列表,这些最佳实践比您的平均Josh Bloch有效Java规则要微妙得多。 尽管Josh Bloch的列表很容易学习,并且涉及日常情况,但此处的列表包含了涉及API / SPI设计的较不常见的情况,尽管这些情况可能会产生很…

【MFC系列-第17天】企业信息管理软件开发

关注公号【逆向通信猿】更精彩!!! 17.1 数值型关联变量: a)在MFC中有部分控件支持数值型关联变量: 编辑控件、下拉控件、单选按钮、复选框以及日期控件; b)在类向导中为控件建立关联变量时,选…

GraphQL在Wildfly群上

“ GraphQL是API的查询语言,是用于使用现有数据完成这些查询的运行时。 GraphQL为您的API中的数据提供了一个完整且易于理解的描述,使客户能够准确地询问他们所需的内容,仅此而已,使随着时间的推移更容易开发API并启用强大的开发人…

【MFC系列-第18天】企业信息管理软件开发

关注公号【逆向通信猿】更精彩!!! CWnd类中常用的成员函数 函数名称含义static CWnd* PASCAL GetActiveWindow( )(进程内的)获取活动窗口CWnd* SetActiveWindow( )(进程内的)将一个窗口设置为…

【MFC系列-第19天】初步认识GDI绘图技术

WM_PAINT消息测试 调试输出字符串 OutputDebugSting(_T(“WM_PAINT-OnPaint\n”));1、WM_PAINT:功能和发生时间 2、BeginPaint和EndPaint必须成对使用。 a)BeginPaint返回的DC句柄,是基于关联的窗口客户区坐标系绘图 b)MFC把这两个函数封装为一个类…

javafx 示例_示例介绍:JavaFX 8打印

javafx 示例我有一段时间没有写博客了,我想与其他人分享有关JavaFX的所有信息(我的日常工作和家庭可能是借口)。 对于那些对此博客不熟悉的人 ,我是JavaFX 2 Introduction by Example(JIBE)的作者&#xff…

【MFC系列-第20天】CDC绘图类成员介绍

20.1 三大坐标系:屏幕、客户区和非客户区 20.2 三大派生类: a)CPaintDC(客户区标准绘图),内部封装函数是:BeginPaint和EndPaint b)CClientDC(客户区非标准绘图),内部是:::GetDC和ReleaseDC …

Spring Data JPA教程

在Java类或对象与关系数据库之间管理数据是一项非常繁琐且棘手的任务。 DAO层通常包含许多样板代码,应简化这些样板代码,以减少代码行数并使代码可重复使用。 在本教程中,我们将讨论Spring数据的JPA实现。 1.简介 1.1什么是JPA?…

【MFC系列-第21天】GDI算法实战——过渡色

21.1 Caption过渡色实现 // 方法一 void CCaptionDlg::DrawColorTitle(CRect rect, COLORREF col1, COLORREF col2,CDC* pDC) {int cx rect.Width();int red GetRValue(col2) - GetRValue(col1);int green GetGValue(col2) - GetGValue(col1);int blue GetBValue(col2) -…

在Spring MVC中处理域对象

最近,我惊讶于一个代码库在其所有域实体中都具有公共默认构造函数(即零参数构造函数),并且所有字段都具有getter和setter。 当我深入研究时,我发现域实体之所以如此,主要是因为该团队认为Web / MVC框架需要…

【有限域元素加法和乘法】有限域元素加法和乘法的原理及MATLAB实现

关注公号【逆向通信猿】更精彩!!! 有限域 仍然以 r = 4 r=4 r=4,

使用storm 实时计算_使用Storm进行可扩展的实时状态更新

使用storm 实时计算在本文中,我将说明如何借助Storm框架以可扩展且无锁定的方式在数据库中维护实时事件驱动流程的当前状态。 Storm是基于事件的数据处理引擎。 它的模型依赖于基本原语,例如事件转换,过滤,聚合……,我…

【MFC系列-第22天】GDI算法实战——过渡色

关注公号【逆向通信猿】更精彩!!! 第22天 GDI算法实战 CDC(HDC)绘图类: 五大GDI对象类:CPen,CBrush,CFont,CBitmap,CRgn 22.1 走马灯 设置定时器 SetTimer(1, 20, N…

无服务器:不费吹灰之力!

几年前, 集装箱横扫开发人员,而开发人员的土地就像6级飓风一样 。 码头工人 Rkt 。 其他 。 Docker Swarm 。 K8s 。 OpenShift 。 现在,我们实际上处于震中,但是当我们瞥见地平线时,我们看到另一个人来了&#x…

【MFC系列-第23天】CMemoryDC的封装过程

CDC(HDC)绘图类: 五大GDI对象类:CPen,CBrush,CFont,CBitmap,CRgn 23.1 LoadImage API HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName, UINT uType, int cxDesired,int cyDesired,UINT fuLoad );uT…

JDK 8与JDK 10:三元/拆箱的区别

最近的Nicolai Parlog ( nipafx ) 鸣叫引起了我的注意,因为它引用了关于JDK 8和JDK 10之间行为更改的有趣StackOverflow讨论 ,并询问“为什么?” SerCe 在StackOverflow线程上引用的问题最终归结为在JDK 8和JDK 10之间…

【多元域乘法】多项式乘法电路原理及MATLAB详解

关注公号【逆向通信猿】更精彩!!! 关于二元域上的两个元素的乘法、多项式除法,在之前的博客 【有限域除法】二元多项式除法电路原理及MATLAB详解 子程序:sub_poly_div.m 【有限域元素加法和乘法】有限域元素加法和乘法的原理及MATLAB实现 子程序:sub_gf_add.m、sub_gf_…

my CSAPP Attack lab堆栈详解

关注公号【逆向通信猿】更精彩!!! 这个实验时学习了简书上的一篇文章后,自己根据课程例子进行的一次小测试,phase 4和5的堆栈图解还没有画,等后续有时间会进行补充。 本人转载的简书原文: https://blog.csdn.net/wlwdecs_dn/article/details/121249364#comments_19237…

Spring MVC教程

1.简介 作为企业Java开发人员,这项工作的主要重点之一是开发Web应用程序。 对于Web应用程序,后果还包括许多挑战。 具体来说,其中一些是状态管理,工作流和验证。 HTTP协议的无状态性质只会使事情变得更加复杂。 Spring的Web框架旨…

【MFC系列-第24天】梯形分页和蝴蝶QQ宠物的实现

CDC(HDC)绘图类: 五大GDI对象类:CPen,CBrush,CFont,CBitmap,CRgn 24.1 梯形分页的双缓冲改进和尺寸自适应 24.2 蝴蝶跟随鼠标点击运动 class CHitFlyDlg : public CDialogEx {CMemoryDC m_dc;//缓冲enu…