2012-4-23
2.The Fingerprint Contrast and Analysis System
3.參照書上代碼将程式背景圖檔處理好。
4.add new image 視窗出現時大小正好為整個客戶區
CRect rect;
pView->GetClientRect(rect);
ClientToScreen(rect);
pDlg->MoveWindow(rect);
5.vc6的風格轉換為 vs2008的風格
解決方案:stdafx.h檔案裡
加上
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
7.改變程式tittle
----在程式建立之前,架構類中可以如下形式建立:
cs.style&=~FWS_ADDTOTITLE;//取反後與,現有類型做于操作即可去掉這個類型
cs.lpszName=_T("The Fingerprint Contrast and Analysis System");
-----在程式建立之後,可以再oncreat()函數中如下建立
SetWindowLong();
-----程式建立之前:
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); //建立有顔色的背景畫刷,這一句必須有。
wndcls.hCursor=LoadCursor(NULL,IDC_HELP); //選擇help的cursor
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=AfxGetInstanceHandle();
wndcls.lpfnWndProc=::DefWindowProc;
wndcls.lpszClassName=_T("The Fingerprint Contrast and Analysis System");
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW |CS_VREDRAW; //橫向重繪,縱向重繪
RegisterClass(&wndcls);
cs.lpszClass=_T("The Fingerprint Contrast and Analysis System");
在架構視窗中,隻能改變視窗title的圖示。
而改變背景和,滑鼠的圖示應該在view類中改變
cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,0,0,LoadIcon(NUll,IDI_WARING));
----程式建立之後:架構類Oncreat()中
SetClassLong
---動态圖示的建立
----1.首先導入圖示,添加HICON變量類型m_hicons[]
----2.oncreate()函數中
m_hicons[0]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));
m_hicons[1]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON2));
m_hicons[2]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON3));
m_hicons[3]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON4));
m_hicons[4]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON5));
SetTimer(1,500,NULL);
----3.相應onTime()時間
static int index=0;
SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hicons[index]);
index=++index%5;
8.建立菜單快捷按鈕隻需要id何菜單相同即可
9.給程式右下角添加時間,在架構類中添加
------1,添加靜态字元串資源
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
IDS_TIMER,
IDS_PROGRESS,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
并注冊
-----2,添加下列代碼擷取時間,需要在timer中添加
CTime t=CTime::GetCurrentTime();
CString str=t.Format("%H:%M:%S");//得到時間後格式化
CClientDC dc(this);
CSize sz=dc.GetTextExtent(str);//得到字型時間的長度
m_wndStatusBar.SetPaneInfo(1,IDS_TIMER,SBPS_NORMAL,sz.cx);
m_wndStatusBar.SetPaneText(1,str);
10.建立進度欄
----1.首先構造進度欄對象CProgressCtrl m_progress;
----2.oncreat()函數傳回之前建立進度欄
----3.自定義一個消息,隻要比WM_USER 大即可,
#define UM_PROGRESS WM_USER+1
并且做消息響應函數原型的聲明,(注釋宏的下面)
afx_msg LRESULT OnProgress(WPARAM wParam, LPARAM lParam);
----4.進行消息映射ON_MESSAGE
----5.定義函數
LRESULT CMainFrame::OnProgress(WPARAM wParam, LPARAM lParam)
{
CRect rect;
m_wndStatusBar.GetItemRect(2,&rect);
m_progress.Create( WS_CHILD | WS_VISIBLE | PBS_SMOOTH,
rect,&m_wndStatusBar,123);
m_progress.SetPos(0);
return true;
}
----6.onCreate()後發送消息
SendMessage(UM_PROGRESS);直接把消息響應函數發送給消息響應函數,完後再傳回。沒有達到直接從此處發送消息的目的
PostMessage(UM_PROGRESS);将消息放置在消息隊列當中,執行時間靠後,等create完成後再建立滾動條
若注釋起來,則上述函數便不會執行。
----7.增加OnPaint()消息處理
在視窗重繪的時候,從新讓進度條出現
複制定義函數的代碼,會出現問題----進度條已經建立了,并且和類進行了關聯,再次建立會出現問題
是以需要如下代碼:
if(!m_progress.m_hWnd)
m_progress.Create(WS_CHILD | WS_VISIBLE ,//| PBS_SMOOTH,
rect,&m_wndStatusBar,123);
else
m_progress.MoveWindow(rect);
m_progress.SetPos(50);
----8.進度條的移動
timer中////////////////////////////////////////////////進度條顯示
m_progress.StepIt();
SkinSharp收費,但是可以使用試用版,還是可以滿足咱的需求的,總比MFC本身的界面好,那顔色...拿不出手啊....
使用很簡單,就下面幾個步驟:
1.
拷貝.h檔案和.lib檔案到程式目錄下;
2. 在工程的stdafx.h 頭檔案,添加以下代碼:
#include "SkinH.h"
#pragma comment (lib,"SkinHu.lib")
3. 對話框初始化函數OnInitDialog()裡面添加以下代碼,加載皮膚:SkinH_Attach(); 這個方法隻加載試用版預設的皮膚。
4. 編譯下工程,産生Debug或Release檔案夾,把DLL檔案(SkinHu.dll )和皮膚檔案(skinh.she )拷貝到此。
這樣就行了。其實很多皮膚的使用方法都很簡單,基本上就是拷貝一下.dll和.lib以及頭檔案,然後在程式中加幾行代碼。但是由于絕大部分皮膚都收費,還有可能因為版本、程式設計環境等原因,很多皮膚都用不上,目前為止在我電腦上能用的皮膚就SkinSharp和SkinPlusPlus,這兩個使用都簡單。但SkinPlusPlus會截獲OnTimer()等方法,很讓人郁悶,不知道SkinSharp如何,用着再說。