C++中的mfc學習(1)


 

前言:本次學習是基於黑馬程序員的視頻教程寫的,是為了做一個測量程序的窗口頁面而學習的,教程的上的時間是3天完成,因為我在此之前學習過一部分了,本次目標也是在3天完成,並且能夠寫出來完整的程序為目的,

 

一、直接跳到實戰(前面的看過了,不想看了)

環境:vs2010、win10

1、創建一個項目,按照如下步驟創建,需要修改的已經標出,不需要修改的沒有截圖,直接下一步就行

 

 

 

 

 

 

 

 

2、要想用scanf_s   printf_s等指令,需要添加預處理指令

(在解決方案管理器中做以下步驟)

項目——指令——c/c++預處理指令器——_CRT_SECURE_NO_WARNINGS

 

 

 

 

(2)設置窗口屬性和將所需要的圖片放入文件夾內

 

 

 

我找到原文檔了,此筆記完結

 

我又回來了,資源視圖里的添加icon添加不進去的原因是,圖片必須是ico格式的

 

 

同時遇到問題

 

http://static.krpano.tech/image2ico在線轉ico格式的網站

下面是完整的修改步驟,以及各部分注釋

 

附代碼: 

//設置圖標, IDI_ICON1為圖標資源ID(如果標紅報錯,不要管他), 此為 WINAPI 函數
//m_hWnd代表當前窗口的句柄指要修改的窗口
//GCL_HICON代表要修改的屬性,還有光標樣式等各種屬性
//AfxGetApp()->LoadIconW加載圖片api函數
SetClassLong(m_hWnd, GCL_HICON,
(LONG)AfxGetApp()->LoadIconW(IDI_ICON1));

 

 

//設置標題(有左標題和又標題)
SetTitle(TEXT("銷售管理系統"));//修改右標題
//左標題在doc結尾的類的OnNewDocument中同理設置

 

3、添加一個自定義的類,功能是別人寫好的,記得引入頭文件,並測試這個類是否能用,以下是測試戴代碼段

CenterWindow();//居中窗口,MoveWindows中的會失效,以上為前期的配置
//測試CInfoFile類
//CInfoFile file;
//CString name;
//CString pwd;
//file.ReadLogin(name,pwd);
//file.WritePwd("斧頭幫幫幫主","123456");
//MessageBox(name);
//MessageBox(pwd);

4、添加一個登陸窗口

拖好控件

 

 

 (2)添加這個窗口到一個類中,方便以后引用

然后在

 

 然后添加成員變量

分別右鍵點擊輸入框,添加變量,修改為下面的

 

以下是在登陸按鈕代碼里面添加的代碼

void CLoginDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知處理程序代碼

UpdateData(TRUE);
if (m_user.IsEmpty()||m_pwd.IsEmpty())
{
MessageBox(TEXT("輸入內容不能為空"));
return;
}
CInfoFile file;
CString user;
CString pwd;
file.ReadLogin(user,pwd);
if(m_user==user&&m_pwd==pwd)
{
CDialog::OnCancel();//CDialog是內置得的
}
else
{
MessageBox(TEXT("驗證錯誤"));
}

}

還可以添加額外初始化 ,

修改兩個bug,一個回車進系統,一個關閉進系統

下面是總體思想

 

 

 拆分窗口:

首先在CMainFrame中的。h文件中添加一個拆分窗口的對象

private:
CSplitterWnd m_spliter;

然后創建兩個窗口類

然后重寫CMainFrame里面的OCreateClient

// TODO: 在此添加專用代碼和/或調用基類

m_spliter.CreateStatic(this,1,2);//拆分一行兩列
m_spliter.CreateView(0,0,RUNTIME_CLASS(CSelectview),CSize(300,800),pContext);
m_spliter.CreateView(0,1,RUNTIME_CLASS(CDisplayView),CSize(900,800),pContext);


return TRUE;//代表自己拆分

 

 

下面創建書控件

首先在CSelectview里面生命兩個對象

CTreeCtrl *m_treeCtrl; //樹控件
CImageList m_imageList; //圖標列表

 

然后

 

 

 添加代碼如下:


void CSelectview::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
//初始化樹視圖
m_treeCtrl=&GetTreeCtrl();//拿到樹控件
//准備圖片集合
HICON icon=AfxGetApp()->LoadIconW(IDI_ICON1);
m_imageList.Create(30,30,ILC_COLOR32,1,1);//圖的寬、高、32位色、一張圖片、一個空間.
m_imageList.Add(icon);
m_treeCtrl->SetImageList(&m_imageList,TVSIL_NORMAL);//第一個參是定義的圖片列表,第二個是顯示模式是正常

//
//添加節點
m_treeCtrl->InsertItem(TEXT("個人信息"),0,0,NULL);//參數分別為默認顯示第0個圖片,選中后顯示第0個圖片,父節點為空。
m_treeCtrl->InsertItem(TEXT("個人信息"),0,0,NULL);
m_treeCtrl->InsertItem(TEXT("個人信息"),0,0,NULL);
m_treeCtrl->InsertItem(TEXT("個人信息"),0,0,NULL);

 

然后進行修改時間,從一項到另一項改變

 

 

修改的代碼如下

 


void CSelectview::OnTvnSelchanging(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知處理程序代碼
*pResult = 0;
//獲取當前選中項
HTREEITEM item=m_treeCtrl->GetSelectedItem();

//獲取選中項的文本內容 CTreeCtrl::GetItemText
CString str = m_treeCtrl->GetItemText(item);
//MessageBox(str);
if (str == TEXT("個人信息"))
{
}
else if (str == TEXT("銷售管理"))
{
}
else if (str == TEXT("庫存信息"))
{
}
else if (str == TEXT("庫存增加"))
{
}
else if (str == TEXT("庫存刪除"))
{
}

}

 

下一步進行編輯右邊欄的內容

以此為創建新的dialog並且將這個dialog重新命名並修改為無邊框格式(boder改為none)(style改為child)group box是用來把設置內部邊框、edit control其中的readlyonly改為true是只讀的模式

創建該窗口的類,命名為CUserDlg,並且選對基類CFormView

然后添加各個空間的變量 

 

然后界面掛載

首先定義5個宏在frameview

//WM_USER 是用戶自定義消息的一個起始值
//WM_USER+100是為了區分系統消息和用戶消息, 避免沖突
#define NM_A (WM_USER + 100)
#define NM_B (WM_USER + 101)
#define NM_C (WM_USER + 102)
#define NM_D (WM_USER + 103)
#define NM_E (WM_USER + 104)

然后關聯

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com