?? myinterfacedlg.cpp
字號:
// MyInterfaceDlg.cpp : 實現文件
//
#include <ocidl.h>
#include <olectl.h>
#include <atltime.h>
// lpstrFile:文件名(最好是包含路徑在內)
// hWnd
// nScrWidth:輸出圖片的寬度
// nScrHeight:輸出圖片的高度
// nScrWidth、nScrHeight是輸出圖片的實際大小,換而言之是指縮放后的尺寸
#include "stdafx.h"
#include "MyInterface.h"
#include "MyInterfaceDlg.h"
#include "Picture.h"
#include "Lapls.h"
#include "AllFunction.h"
#include <math.h>
#include <afxtempl.h>
#include <afxmt.h>
#include ".\myinterfacedlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
float m_WidthScale;
float m_HeightScale;
double m_KeySignature[256];
HFILE hf;
BITMAPFILEHEADER bf;
BITMAPINFOHEADER bi;
HGLOBAL hImgData=NULL;
DWORD ImgSize;
DWORD LineBytes;
DWORD NumColors;
CString PicFilePath;
CLapls lplas;
#define WIDTHBYTES(i) ((i+31)/32*4)
DWORD WINAPI ThreadProc(LPVOID pParm);
// 用于應用程序“關于”菜單項的 CAboutDlg 對話框
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 對話框數據
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 實現
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedOk();
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
END_MESSAGE_MAP()
// CMyInterfaceDlg 對話框
CMyInterfaceDlg::CMyInterfaceDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyInterfaceDlg::IDD, pParent),SourcePic(NULL),DestPic(NULL),intSD(0)
, m_filterCheck(FALSE)
, m_Sobel(FALSE)
, m_x1(-1)
, m_x2(-1)
, m_x3(-1)
, m_x4(-1)
, m_y1(-1)
, m_y2(-1)
, m_y3(-1)
, m_y4(-1)
, picInput(FALSE)
, picShow(FALSE)
, m_left(0)
, m_top(0)
, m_right(0)
, m_bottom(0)
, pBmp(NULL)
, m_valve(0.6)
{
m_pset=new CpicSet;
m_ShowTitle=TRUE;
m_ReSizeFlag=FALSE;
charlap=new char;
pDest=NULL;
SourcePic=NULL;
charlap=NULL;
DestPic=NULL;
//m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
CMyInterfaceDlg::~CMyInterfaceDlg()
{
delete m_pset;
m_pset=NULL;
delete charlap;
charlap=NULL;
if(pBmp!=NULL)
{
delete pBmp;
pBmp=NULL;
}
if(SourcePic!=NULL)
{
delete SourcePic;
SourcePic=NULL;
}
if(charlap!=NULL)
{
delete charlap;
charlap=NULL;
}
if(DestPic!=NULL)
{
delete DestPic;
DestPic=NULL;
}
if(pDest!=NULL)
{
delete pDest;
pDest=NULL;
}
}
void CMyInterfaceDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PIC, m_pic);
DDX_Control(pDX, IDC_LIST_PIC, m_ListPic);
DDX_Check(pDX, IDC_CHECK, m_filterCheck);
DDX_Check(pDX, IDC_CHECK1, m_Sobel);
DDX_Text(pDX, IDC_EDITX1, m_x1);
//DDV_MinMaxInt(pDX, m_x1, 0, 3);
DDX_Text(pDX, IDC_EDITX2, m_x2);
//DDV_MinMaxInt(pDX, m_x2, 0, 3);
DDX_Text(pDX, IDC_EDITX3, m_x3);
//DDV_MinMaxInt(pDX, m_x3, 0, 3);
DDX_Text(pDX, IDC_EDITX4, m_x4);
//DDV_MinMaxInt(pDX, m_x4, 0, 3);
DDX_Text(pDX, IDC_EDITY1, m_y1);
//DDV_MinMaxInt(pDX, m_y1, 0, 3);
DDX_Text(pDX, IDC_EDITY2, m_y2);
//DDV_MinMaxInt(pDX, m_y2, 0, 3);
DDX_Text(pDX, IDC_EDITY3, m_y3);
//DDV_MinMaxInt(pDX, m_y3, 0, 3);
DDX_Text(pDX, IDC_EDITY4, m_y4);
//DDV_MinMaxInt(pDX, m_y4, 0, 3);
DDX_Text(pDX, IDC_EDITX5, m_left);
DDX_Text(pDX, IDC_EDITX6, m_top);
DDX_Text(pDX, IDC_EDITY5, m_right);
DDX_Text(pDX, IDC_EDITY6, m_bottom);
DDX_Text(pDX, IDC_EDITX7, m_valve);
DDX_Control(pDX, IDC_FIND, m_ColorGraphSubmit);
DDX_Control(pDX, IDC_BUTTONCOLORPAIR, m_ColorPairSubmit);
}
BEGIN_MESSAGE_MAP(CMyInterfaceDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_WM_NCLBUTTONDOWN()//The framework calls this member function when the user presses the left mouse button while the
//cursor is within a nonclient area of the CWnd object.
ON_WM_NCMOUSEMOVE()
ON_WM_SIZE()
ON_WM_MOUSEMOVE()//The framework calls this member function after the CWnd object has been moved.
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON3, OnBnClickedButton3)
ON_LBN_DBLCLK(IDC_LIST_PIC, OnLbnDblclkListPic)
ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON4, OnBnClickedButton4)
ON_BN_CLICKED(IDC_SEARCH, OnBnClickedSearch)
ON_BN_CLICKED(IDC_BUTTON5, OnBnClickedButton5)
ON_BN_CLICKED(IDC_BUTTON6, OnBnClickedButton6)
ON_BN_CLICKED(IDC_FILTER, OnBnClickedFilter)
ON_BN_CLICKED(IDC_CHECK, OnBnClickedCheck)
ON_BN_CLICKED(IDC_CHECK1, OnBnClickedCheck1)
ON_BN_CLICKED(IDC_SEARCHFROMLIB, OnBnClickedSearchfromlib)
ON_BN_CLICKED(IDC_FIND, OnBnClickedFind)
ON_BN_CLICKED(IDC_BUTTON7, OnBnClickedButton7)
ON_BN_CLICKED(IDC_BUTTON8, OnBnClickedButton8)
ON_BN_CLICKED(IDC_BUTTONCOLORPAIR, OnBnClickedButtoncolorpair)
ON_WM_DESTROY()
END_MESSAGE_MAP()
// CMyInterfaceDlg 消息處理程序
BOOL CMyInterfaceDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//SetControlText(IDOK,"test");
// 將\“關于...\”菜單項添加到系統菜單中。
// IDM_ABOUTBOX 必須在系統命令范圍內。
m_filterCheck=FALSE;
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 設置此對話框的圖標。當應用程序主窗口不是對話框時,框架將自動
// 執行此操作
SetIcon(m_hIcon, TRUE); // 設置大圖標
SetIcon(m_hIcon, FALSE); // 設置小圖標
m_ToolTip.Create(this,TTS_ALWAYSTIP);//創建工具提示控件,TTS_ALWAYSTIP表示,
m_ReSizeFlag=TRUE;
CRect rtWnd;
GetClientRect(rtWnd);
m_OldWidth = rtWnd.Width();
m_OldHeight = rtWnd.Height();
// TODO: 在此添加額外的初始化代碼
//初始化list框將數據庫中的圖片讀出
DWORD dwID;
hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc,this,0,&dwID);
CDC* pDC=m_ListPic.GetDC();
int i=0;
int dx=0;
CSize sz;
if(!m_pset->IsOpen())
m_pset->Open();
if(m_pset->GetRecordCount()>0)
{
m_pset->MoveFirst();
while(!m_pset->IsEOF())
{
CString str;
m_ListPic.AddString((LPCTSTR)(CString)(m_pset->m_picAddr));
m_ListPic.GetText(i,str);
sz=pDC->GetTextExtent(str);
if(sz.cx>dx)
dx=sz.cx;
m_pset->MoveNext();
i++;
}
m_ListPic.SetHorizontalExtent(dx);
m_ListPic.SetCurSel(0);
OnBnClickedButton5();
}
else
{
AfxMessageBox("您的數據庫中沒有圖片,請添加圖片");
OnBnClickedButton1();
OnBnClickedButton7();
}
m_ListPic.ReleaseDC(pDC);
m_pset->Close();
return TRUE; // 除非設置了控件的焦點,否則返回 TRUE
}
DWORD WINAPI ThreadProc(LPVOID pParm)
{
CMyInterfaceDlg* dlg=(CMyInterfaceDlg*)pParm;
CTime time;
CString strTime;
for(;;)
{
time=CTime::GetCurrentTime();
strTime=time.Format("%H:%M:%S");
CCriticalSection cs;
cs.Lock();
SetDlgItemText(dlg->m_hWnd,IDC_TIME,strTime);
cs.Unlock();
Sleep(1000);
}
return 1;
}
void CMyInterfaceDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
if(nID==SC_CLOSE)
{
TerminateThread(hThread,1);
/*delete(SourcePic);
SourcePic=NULL;
delete(DestPic);
DestPic=NULL;
delete(charlap);
charlap=NULL;
delete(pBmp);
pBmp=NULL;
delete(pDest);
pDest=NULL;*/
AfxGetMainWnd()->DestroyWindow();
return;
}
if(nID==SC_RESTORE)
{
ShowWindow(SW_NORMAL);
m_ShowTitle=TRUE;
return;
}
CDialog::OnSysCommand(nID,lParam);
}
void CMyInterfaceDlg::DrawTitleBar(CDC *pDC)
{
if (m_hWnd)
{
CBrush Brush(RGB(0,100,255));
CBrush* pOldBrush = pDC->SelectObject(&Brush);
CRect rtWnd, rtTitle, rtButtons;
GetWindowRect(&rtWnd);
//取得標題欄的位置
rtTitle.left = GetSystemMetrics(SM_CXFRAME);
rtTitle.top = GetSystemMetrics(SM_CYFRAME);
rtTitle.right = rtWnd.right - rtWnd.left - GetSystemMetrics(SM_CXFRAME);
rtTitle.bottom = rtTitle.top + GetSystemMetrics(SM_CYSIZE);
//計算最小化按鈕的位置,位圖大小為15X15
rtButtons.left = rtTitle.right-60;
rtButtons.top= rtTitle.top+2;
rtButtons.right = rtTitle.right-42;
rtButtons.bottom = rtTitle.top+20;
m_rtButtMin = rtButtons;
//計算最大化按鈕的位置,位圖大小為15X15
m_rtButtMax.left = m_rtButtMin.left + 18;
m_rtButtMax.top = m_rtButtMin.top;
m_rtButtMax.right = m_rtButtMin.right + 16;
m_rtButtMax.bottom = m_rtButtMin.bottom;
m_rtButtExit.left = m_rtButtMax.left + 18;
m_rtButtExit.top = m_rtButtMax.top;
m_rtButtExit.right = m_rtButtMax.right + 16;
m_rtButtExit.bottom = m_rtButtMax.bottom;
//準備畫圖
CBitmap* pBitmap = new CBitmap;
BITMAP BmpInfo;
CBitmap* pOldBitmap;
CDC* pDisplayMemDC=new CDC;
pDisplayMemDC->CreateCompatibleDC(pDC);
//重畫最Caption
POINT DrawPonit;
DrawPonit.x = rtTitle.left-4;
DrawPonit.y = rtTitle.top-4;
pBitmap->LoadBitmap(IDB_TITLE_LEFT);
pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
pBitmap->GetBitmap(&BmpInfo);
pDC->BitBlt(rtTitle.left-4, rtTitle.top-4, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
DrawPonit.x = DrawPonit.x + BmpInfo.bmWidth;
pDisplayMemDC->SelectObject(pOldBitmap);
pBitmap->DeleteObject();
pBitmap->LoadBitmap(IDB_TOP);
pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
pBitmap->GetBitmap(&BmpInfo);
while(DrawPonit.x<= m_rtButtMin.left-66)
{
pDC->BitBlt(DrawPonit.x, DrawPonit.y, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
DrawPonit.x = DrawPonit.x + BmpInfo.bmWidth;
}
pDisplayMemDC->SelectObject(pOldBitmap);
pBitmap->DeleteObject();
pBitmap->LoadBitmap(IDB_TITLE_RIGHT);
pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
pBitmap->GetBitmap(&BmpInfo);
pDC->BitBlt(DrawPonit.x, DrawPonit.y, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
pDisplayMemDC->SelectObject(pOldBitmap);
pBitmap->DeleteObject();
//重畫最小化button
rtButtons = m_rtButtMin;
pBitmap->LoadBitmap(IDB_NORMAL);
pBitmap->GetBitmap(&BmpInfo);
pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
pDC->BitBlt(rtButtons.left-6, rtButtons.top-2, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
pDisplayMemDC->SelectObject(pOldBitmap);
pBitmap->DeleteObject();
int nOldMode = pDC->SetBkMode(TRANSPARENT);
COLORREF clOldText=pDC->GetTextColor();
CFont titleFont;
titleFont.CreateFont( 12, // nHeight
8, // nWidth
0, // nEscapement文本行逆時針旋轉角度
0, // nOrientation字體角度
FW_BOLD, // nWeight字體粗細程度
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut 刪除線
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("隸書")); // lpszFac pDC->SelectStockObject(SYSTEM_FIXED_FONT);
CFont *OldFont;
OldFont = pDC->SelectObject(&titleFont);
CString m_StrTitle;
//GetWindowText(m_StrTitle);
m_StrTitle="Content Based Image Retrieving System Samson";
pDC->SetTextColor(RGB(80,255,25));
if(m_ShowTitle)
{
pDC->TextOut(65,10,m_StrTitle);
}
else
{
m_StrTitle = m_StrTitle.Left(6);
m_StrTitle += "...";
pDC->TextOut(30,10,m_StrTitle);
}
pDC->SetBkMode(nOldMode);
pDC->SetTextColor(clOldText);
pDC->SelectObject(OldFont);
// pDC->TextOut(60,60,m_StrTitle);
//重畫左邊框
pBitmap->LoadBitmap(IDB_LEFTDOWN);
pBitmap->GetBitmap(&BmpInfo);
pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
int i ;
for (i= 20;i<=rtWnd.bottom;i=i+BmpInfo.bmHeight-3)
{
pDC->BitBlt(0, rtButtons.top+i, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
}
pDisplayMemDC->SelectObject(pOldBitmap);
pBitmap->DeleteObject();
//重畫右邊框
pBitmap->LoadBitmap(IDB_RIGHTDOWN);
pBitmap->GetBitmap(&BmpInfo);
pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
GetClientRect(&rtWnd);
for (i= 25;i<=rtWnd.bottom+27;i=i+BmpInfo.bmHeight-3)
{
pDC->BitBlt(rtWnd.right, i, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
}
pDisplayMemDC->SelectObject(pOldBitmap);
pBitmap->DeleteObject();
//重畫底邊框
pBitmap->LoadBitmap(IDB_DOWN);
pBitmap->GetBitmap(&BmpInfo);
pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
GetClientRect(&rtWnd);
for (i= 9; i<=rtWnd.right; i=i+2)
{
GetClientRect(&rtWnd);
pDC->BitBlt(i,rtWnd.bottom+26, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);
}
pDisplayMemDC->SelectObject(pOldBitmap);
pBitmap->DeleteObject();
//重畫圖標
m_rtIcon.left = 3;//rtWnd.Width()-5;
m_rtIcon.top = GetSystemMetrics(SM_CYFRAME);
m_rtIcon.right = m_rtIcon.left + 32;
m_rtIcon.bottom = m_rtIcon.top + 32;
::DrawIconEx(pDC->m_hDC, m_rtIcon.left, m_rtIcon.top, m_hIcon,
m_rtIcon.Width(), m_rtIcon.Height(), 0, NULL, DI_NORMAL);
m_rtIcon.OffsetRect(rtWnd.TopLeft());
ReleaseDC(pDisplayMemDC);
delete pDisplayMemDC;
delete pBitmap;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -