前言:本次學習是基於黑馬程序員的視頻教程寫的,是為了做一個測量程序的窗口頁面而學習的,教程的上的時間是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)
然后關聯