日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/2 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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

總結

以上是生活随笔為你收集整理的【MFC系列-第16天】企业信息管理软件开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。