|
|
@@ -1,5 +1,5 @@
|
|
|
-
|
|
|
-// CImgPlayerDlg.cpp : 实现文件
|
|
|
+锘�
|
|
|
+// CImgPlayerDlg.cpp : 瀹炵幇鏂囦欢
|
|
|
//
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
@@ -56,27 +56,27 @@ void CImgPlayerDlg::DoDataExchange(CDataExchange* pDX)
|
|
|
|
|
|
void CImgPlayerDlg::ShowImage(CImage& img, UINT ID)
|
|
|
{
|
|
|
- // 获得显示控件的DC
|
|
|
+ // 鑾峰緱鏄剧ず鎺т欢鐨凞C
|
|
|
CDC* pDC = m_pMemDC;
|
|
|
- // 获取HDC(设备句柄)来进行绘图操作
|
|
|
+ // 鑾峰彇HDC(璁惧�鍙ユ焺)鏉ヨ繘琛岀粯鍥炬搷浣�
|
|
|
HDC hDC = pDC->GetSafeHdc();
|
|
|
|
|
|
CRect rect;
|
|
|
GetDlgItem(ID)->GetClientRect(&rect);
|
|
|
- // 读取图片控件的宽和高
|
|
|
+ // 璇诲彇鍥剧墖鎺т欢鐨勫�鍜岄珮
|
|
|
int rw = rect.right-rect.left;
|
|
|
int rh = rect.bottom-rect.top;
|
|
|
- // 设置图片控件背景色为黑色
|
|
|
+ // 璁剧疆鍥剧墖鎺т欢鑳屾櫙鑹蹭负榛戣壊
|
|
|
CBrush brush(RGB(0,0,0));
|
|
|
pDC->FillRect(CRect(0, 0, rw, rh), &brush);
|
|
|
|
|
|
- // 读取图片的宽和高
|
|
|
+ // 璇诲彇鍥剧墖鐨勫�鍜岄珮
|
|
|
int iw = img.GetWidth();
|
|
|
int ih = img.GetHeight();
|
|
|
- // 图片左上角在图片控件中的坐标
|
|
|
+ // 鍥剧墖宸︿笂瑙掑湪鍥剧墖鎺т欢涓�殑鍧愭爣
|
|
|
int tx = 0;
|
|
|
int ty = 0;
|
|
|
- // 图片绘制时的宽和高
|
|
|
+ // 鍥剧墖缁樺埗鏃剁殑瀹藉拰楂�
|
|
|
int nw = iw;
|
|
|
int nh = ih;
|
|
|
|
|
|
@@ -94,7 +94,7 @@ void CImgPlayerDlg::ShowImage(CImage& img, UINT ID)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- // 计算横向和纵向缩放因子
|
|
|
+ // 璁$畻妯�悜鍜岀旱鍚戠缉鏀惧洜瀛�
|
|
|
float scale_x = (float)iw / rw;
|
|
|
float scale_y = (float)ih / rh;
|
|
|
float scale;
|
|
|
@@ -103,26 +103,26 @@ void CImgPlayerDlg::ShowImage(CImage& img, UINT ID)
|
|
|
else
|
|
|
scale = scale_y;
|
|
|
|
|
|
- // 缩放后图片的宽和高
|
|
|
+ // 缂╂斁鍚庡浘鐗囩殑瀹藉拰楂�
|
|
|
nw = (int)(iw/scale);
|
|
|
nh = (int)(ih/scale);
|
|
|
|
|
|
- // 缩放后的图片在m_Image的正中部位绘制,计算图片左上角在m_Image中的坐标
|
|
|
+ // 缂╂斁鍚庣殑鍥剧墖鍦╩_Image鐨勬�涓�儴浣嶇粯鍒讹紝璁$畻鍥剧墖宸︿笂瑙掑湪m_Image涓�殑鍧愭爣
|
|
|
tx = (scale_x-scale_y >= 1e-6) ? 0 : (int)(rw-nw)/2;
|
|
|
ty = (scale_x-scale_y >= 1e-6) ? (int)(rh-nh)/2 : 0;
|
|
|
}
|
|
|
|
|
|
SetRect(&rect, tx, ty, tx+nw, ty+nh);
|
|
|
- // 将图片绘制到显示控件的指定区域
|
|
|
- SetStretchBltMode(hDC, HALFTONE); // 保持原有图片质量
|
|
|
- SetBrushOrgEx(hDC, 0, 0, NULL); // 设置刷子的起始点
|
|
|
+ // 灏嗗浘鐗囩粯鍒跺埌鏄剧ず鎺т欢鐨勬寚瀹氬尯鍩�
|
|
|
+ SetStretchBltMode(hDC, HALFTONE); // 淇濇寔鍘熸湁鍥剧墖璐ㄩ噺
|
|
|
+ SetBrushOrgEx(hDC, 0, 0, NULL); // 璁剧疆鍒峰瓙鐨勮捣濮嬬偣
|
|
|
img.Draw(hDC,rect);
|
|
|
|
|
|
brush.DeleteObject();
|
|
|
//ReleaseDC(pDC);
|
|
|
|
|
|
|
|
|
- m_Image.Destroy(); //主动释放位图资源 相当于对Detach返回的结果执行DeleteObject
|
|
|
+ m_Image.Destroy(); //涓诲姩閲婃斁浣嶅浘璧勬簮 鐩稿綋浜庡�Detach杩斿洖鐨勭粨鏋滄墽琛孌eleteObject
|
|
|
|
|
|
pDC = GetDlgItem(ID)->GetDC();
|
|
|
GetDlgItem(ID)->GetClientRect(&rect);
|
|
|
@@ -141,28 +141,28 @@ BEGIN_MESSAGE_MAP(CImgPlayerDlg, CDialogEx)
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
|
-// CImgPlayerDlg 消息处理程序
|
|
|
+// CImgPlayerDlg 娑堟伅澶勭悊绋嬪簭
|
|
|
|
|
|
BOOL CImgPlayerDlg::OnInitDialog()
|
|
|
{
|
|
|
CDialogEx::OnInitDialog();
|
|
|
|
|
|
- // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
|
|
|
- // 执行此操作
|
|
|
- SetIcon(m_hIcon, TRUE); // 设置大图标
|
|
|
- SetIcon(m_hIcon, FALSE); // 设置小图标
|
|
|
+ // 璁剧疆姝ゅ�璇濇�鐨勫浘鏍囥€傚綋搴旂敤绋嬪簭涓荤獥鍙d笉鏄��璇濇�鏃讹紝妗嗘灦灏嗚嚜鍔�
|
|
|
+ // 鎵ц�姝ゆ搷浣�
|
|
|
+ SetIcon(m_hIcon, TRUE); // 璁剧疆澶у浘鏍�
|
|
|
+ SetIcon(m_hIcon, FALSE); // 璁剧疆灏忓浘鏍�
|
|
|
|
|
|
- long ScreenWidth = GetSystemMetrics(SM_CXSCREEN); //主屏幕宽度
|
|
|
- long ScreenHeight = GetSystemMetrics(SM_CYSCREEN); //主屏幕高度
|
|
|
+ long ScreenWidth = GetSystemMetrics(SM_CXSCREEN); //涓诲睆骞曞�搴�
|
|
|
+ long ScreenHeight = GetSystemMetrics(SM_CYSCREEN); //涓诲睆骞曢珮搴�
|
|
|
|
|
|
MONITORINFOEX mix;
|
|
|
mix.cbSize = sizeof(mix);
|
|
|
- if (m_pConfig->bPrimMonitor == false) // 默认情况,在副屏显示
|
|
|
+ if (m_pConfig->bPrimMonitor == false) // 榛樿�鎯呭喌锛屽湪鍓�睆鏄剧ず
|
|
|
{
|
|
|
POINT pt;
|
|
|
pt.x = ScreenWidth+5;
|
|
|
pt.y = 5;
|
|
|
- m_hMonitor = MonitorFromPoint(pt, MONITOR_DEFAULTTONULL); //尝试获取副屏的句柄
|
|
|
+ m_hMonitor = MonitorFromPoint(pt, MONITOR_DEFAULTTONULL); //灏濊瘯鑾峰彇鍓�睆鐨勫彞鏌�
|
|
|
if (m_hMonitor != NULL)
|
|
|
{
|
|
|
GetMonitorInfo(m_hMonitor, (LPMONITORINFO)&mix);
|
|
|
@@ -174,25 +174,25 @@ BOOL CImgPlayerDlg::OnInitDialog()
|
|
|
return FALSE;
|
|
|
}
|
|
|
}
|
|
|
- else // 在主屏显示
|
|
|
+ else // 鍦ㄤ富灞忔樉绀�
|
|
|
{
|
|
|
m_hMonitor = MonitorFromWindow(this->GetSafeHwnd(), MONITOR_DEFAULTTONULL);
|
|
|
GetMonitorInfo(m_hMonitor, (LPMONITORINFO)&mix);
|
|
|
SetRect(&m_monitorRect, mix.rcMonitor.left, mix.rcMonitor.top, mix.rcMonitor.right, mix.rcMonitor.bottom);
|
|
|
}
|
|
|
|
|
|
- // TODO: 在此添加额外的初始化代码
|
|
|
+ // TODO: 鍦ㄦ�娣诲姞棰濆�鐨勫垵濮嬪寲浠g爜
|
|
|
m_bInit = true;
|
|
|
|
|
|
- // 去掉标题栏和边框
|
|
|
+ // 鍘绘帀鏍囬�鏍忓拰杈规�
|
|
|
ModifyStyle(WS_CAPTION, 0, 0);
|
|
|
ModifyStyleEx(WS_EX_DLGMODALFRAME, 0, 0);
|
|
|
|
|
|
if (m_pConfig->bFullScreen == true)
|
|
|
{
|
|
|
- //ShowWindow(SW_MAXIMIZE); // 设置窗口最大化
|
|
|
+ //ShowWindow(SW_MAXIMIZE); // 璁剧疆绐楀彛鏈€澶у寲
|
|
|
::SetWindowPos(this->GetSafeHwnd(),HWND_TOP,m_monitorRect.left,m_monitorRect.top,
|
|
|
- m_monitorRect.Width(),m_monitorRect.Height(),SWP_SHOWWINDOW); //设置窗口的位置和大小
|
|
|
+ m_monitorRect.Width(),m_monitorRect.Height(),SWP_SHOWWINDOW); //璁剧疆绐楀彛鐨勪綅缃�拰澶у皬
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -205,37 +205,37 @@ BOOL CImgPlayerDlg::OnInitDialog()
|
|
|
m_pConfig->nWndHeight = m_monitorRect.Height();
|
|
|
}
|
|
|
::SetWindowPos(this->GetSafeHwnd(),HWND_TOP,m_monitorRect.left+m_pConfig->nWndX,m_monitorRect.top+m_pConfig->nWndY,
|
|
|
- m_pConfig->nWndWidth,m_pConfig->nWndHeight,SWP_SHOWWINDOW); //设置窗口的位置和大小
|
|
|
+ m_pConfig->nWndWidth,m_pConfig->nWndHeight,SWP_SHOWWINDOW); //璁剧疆绐楀彛鐨勪綅缃�拰澶у皬
|
|
|
}
|
|
|
|
|
|
CRect rect;
|
|
|
|
|
|
this->GetClientRect(&rect);
|
|
|
|
|
|
- //使PictureControl填充整个窗口,超出窗口并增加宽高各1个像素,以隐藏PictureControl的边框(注意控件是相对于窗口的)
|
|
|
+ //浣縋ictureControl濉�厖鏁翠釜绐楀彛锛岃秴鍑虹獥鍙e苟澧炲姞瀹介珮鍚�1涓�儚绱狅紝浠ラ殣钘廝ictureControl鐨勮竟妗嗭紙娉ㄦ剰鎺т欢鏄�浉瀵逛簬绐楀彛鐨勶級
|
|
|
::SetWindowPos(GetDlgItem(IDC_ShowImg)->GetSafeHwnd(),HWND_TOP,-1,-1,
|
|
|
rect.Width()+2,rect.Height()+2,SWP_SHOWWINDOW);
|
|
|
|
|
|
- ::GetWindowRect(GetDlgItem(IDC_ShowImg)->GetSafeHwnd(), &rect); // 计算PictureControl的屏幕坐标
|
|
|
- //this->ScreenToClient(&rect); // 转换到相对于Dialog客户区的坐标
|
|
|
- //int borderWidth = -rect.left; // 计算边框的厚度
|
|
|
+ ::GetWindowRect(GetDlgItem(IDC_ShowImg)->GetSafeHwnd(), &rect); // 璁$畻PictureControl鐨勫睆骞曞潗鏍�
|
|
|
+ //this->ScreenToClient(&rect); // 杞�崲鍒扮浉瀵逛簬Dialog瀹㈡埛鍖虹殑鍧愭爣
|
|
|
+ //int borderWidth = -rect.left; // 璁$畻杈规�鐨勫帤搴�
|
|
|
|
|
|
- // 双缓冲机制
|
|
|
+ // 鍙岀紦鍐叉満鍒�
|
|
|
int x = rect.Width();
|
|
|
int y = rect.Height();
|
|
|
CDC *pDC = GetDlgItem(IDC_ShowImg)->GetDC();
|
|
|
- m_pMemDC->CreateCompatibleDC(pDC); // 依附图片控件DC创建兼容内存DC
|
|
|
- m_pMemBitmap->CreateCompatibleBitmap(pDC, x, y); // 创建兼容位图
|
|
|
- m_pOldBitmap = m_pMemDC->SelectObject(m_pMemBitmap); // 将位图选进内存DC,原位图保存到m_pOldBitmap
|
|
|
+ m_pMemDC->CreateCompatibleDC(pDC); // 渚濋檮鍥剧墖鎺т欢DC鍒涘缓鍏煎�鍐呭瓨DC
|
|
|
+ m_pMemBitmap->CreateCompatibleBitmap(pDC, x, y); // 鍒涘缓鍏煎�浣嶅浘
|
|
|
+ m_pOldBitmap = m_pMemDC->SelectObject(m_pMemBitmap); // 灏嗕綅鍥鹃€夎繘鍐呭瓨DC锛屽師浣嶅浘淇濆瓨鍒癿_pOldBitmap
|
|
|
ReleaseDC(pDC);
|
|
|
DeleteObject(m_pOldBitmap);
|
|
|
|
|
|
- // 加载并显示第一张图片
|
|
|
+ // 鍔犺浇骞舵樉绀虹�涓€寮犲浘鐗�
|
|
|
if (m_pConfig->nFileCnt > 0)
|
|
|
{
|
|
|
CString imgPath;
|
|
|
imgPath.Format(_T("%s%s"),m_pConfig->strRootPath,m_pConfig->strFileNames[0]);
|
|
|
- // 判断文件是否存在
|
|
|
+ // 鍒ゆ柇鏂囦欢鏄�惁瀛樺湪
|
|
|
if (_access(LPCTSTR(imgPath), 0) != -1)
|
|
|
{
|
|
|
HRESULT hRet = m_Image.Load(LPCTSTR(imgPath));
|
|
|
@@ -245,7 +245,7 @@ BOOL CImgPlayerDlg::OnInitDialog()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 每m_nPlayInterval毫秒显示下一张图片
|
|
|
+ // 姣弇_nPlayInterval姣��鏄剧ず涓嬩竴寮犲浘鐗�
|
|
|
if (m_pConfig->nFileCnt > 1)
|
|
|
{
|
|
|
if (m_pConfig->nPlayInterval <= 1000)
|
|
|
@@ -256,22 +256,22 @@ BOOL CImgPlayerDlg::OnInitDialog()
|
|
|
m_bTimer = true;
|
|
|
}
|
|
|
|
|
|
- return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
|
|
|
+ return TRUE; // 闄ら潪灏嗙劍鐐硅�缃�埌鎺т欢锛屽惁鍒欒繑鍥� TRUE
|
|
|
}
|
|
|
|
|
|
-// 如果向对话框添加最小化按钮,则需要下面的代码
|
|
|
-// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
|
|
|
-// 这将由框架自动完成。
|
|
|
+// 濡傛灉鍚戝�璇濇�娣诲姞鏈€灏忓寲鎸夐挳锛屽垯闇€瑕佷笅闈㈢殑浠g爜
|
|
|
+// 鏉ョ粯鍒惰�鍥炬爣銆傚�浜庝娇鐢ㄦ枃妗�/瑙嗗浘妯″瀷鐨� MFC 搴旂敤绋嬪簭锛�
|
|
|
+// 杩欏皢鐢辨�鏋惰嚜鍔ㄥ畬鎴愩€�
|
|
|
|
|
|
void CImgPlayerDlg::OnPaint()
|
|
|
{
|
|
|
if (IsIconic())
|
|
|
{
|
|
|
- CPaintDC dc(this); // 用于绘制的设备上下文
|
|
|
+ CPaintDC dc(this); // 鐢ㄤ簬缁樺埗鐨勮�澶囦笂涓嬫枃
|
|
|
|
|
|
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
|
|
|
|
|
|
- // 使图标在工作区矩形中居中
|
|
|
+ // 浣垮浘鏍囧湪宸ヤ綔鍖虹煩褰�腑灞呬腑
|
|
|
int cxIcon = GetSystemMetrics(SM_CXICON);
|
|
|
int cyIcon = GetSystemMetrics(SM_CYICON);
|
|
|
CRect rect;
|
|
|
@@ -279,7 +279,7 @@ void CImgPlayerDlg::OnPaint()
|
|
|
int x = (rect.Width() - cxIcon + 1) / 2;
|
|
|
int y = (rect.Height() - cyIcon + 1) / 2;
|
|
|
|
|
|
- // 绘制图标
|
|
|
+ // 缁樺埗鍥炬爣
|
|
|
dc.DrawIcon(x, y, m_hIcon);
|
|
|
}
|
|
|
else
|
|
|
@@ -288,8 +288,8 @@ void CImgPlayerDlg::OnPaint()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//当用户拖动最小化窗口时系统调用此函数取得光标
|
|
|
-//显示。
|
|
|
+//褰撶敤鎴锋嫋鍔ㄦ渶灏忓寲绐楀彛鏃剁郴缁熻皟鐢ㄦ�鍑芥暟鍙栧緱鍏夋爣
|
|
|
+//鏄剧ず銆�
|
|
|
HCURSOR CImgPlayerDlg::OnQueryDragIcon()
|
|
|
{
|
|
|
return static_cast<HCURSOR>(m_hIcon);
|
|
|
@@ -301,13 +301,13 @@ void CImgPlayerDlg::OnSize(UINT nType, int cx, int cy)
|
|
|
return;
|
|
|
CDialogEx::OnSize(nType, cx, cy);
|
|
|
|
|
|
- // TODO: 在此处添加消息处理程序代码
|
|
|
+ // TODO: 鍦ㄦ�澶勬坊鍔犳秷鎭��鐞嗙▼搴忎唬鐮�
|
|
|
GetDlgItem(IDC_ShowImg)->MoveWindow(0, 0, cx, cy);
|
|
|
}
|
|
|
|
|
|
void CImgPlayerDlg::OnClose()
|
|
|
{
|
|
|
- // TODO: 在此添加消息处理程序代码和/或调用默认值
|
|
|
+ // TODO: 鍦ㄦ�娣诲姞娑堟伅澶勭悊绋嬪簭浠g爜鍜�/鎴栬皟鐢ㄩ粯璁ゅ€�
|
|
|
CDialogEx::OnClose();
|
|
|
EndPlay();
|
|
|
}
|
|
|
@@ -315,26 +315,26 @@ void CImgPlayerDlg::OnClose()
|
|
|
|
|
|
void CImgPlayerDlg::OnTimer(UINT_PTR nIDEvent)
|
|
|
{
|
|
|
- // TODO: 在此添加消息处理程序代码和/或调用默认值
|
|
|
+ // TODO: 鍦ㄦ�娣诲姞娑堟伅澶勭悊绋嬪簭浠g爜鍜�/鎴栬皟鐢ㄩ粯璁ゅ€�
|
|
|
if (nIDEvent == TIMERID)
|
|
|
{
|
|
|
m_nPicInx = (m_nPicInx+1)%m_pConfig->nFileCnt;
|
|
|
- if (m_pConfig->nPlayCnt != 0) // 非循环播放
|
|
|
+ if (m_pConfig->nPlayCnt != 0) // 闈炲惊鐜�挱鏀�
|
|
|
{
|
|
|
if (m_nPicInx == 0)
|
|
|
{
|
|
|
m_nPlayCnt++;
|
|
|
}
|
|
|
- if (m_nPlayCnt == m_pConfig->nPlayCnt)//播放次数到了
|
|
|
+ if (m_nPlayCnt == m_pConfig->nPlayCnt)//鎾�斁娆℃暟鍒颁簡
|
|
|
{
|
|
|
- // 结束播放
|
|
|
+ // 缁撴潫鎾�斁
|
|
|
EndPlay();
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
CString imgPath;
|
|
|
imgPath.Format(_T("%s%s"),m_pConfig->strRootPath,m_pConfig->strFileNames[m_nPicInx]);
|
|
|
- // 判断文件是否存在
|
|
|
+ // 鍒ゆ柇鏂囦欢鏄�惁瀛樺湪
|
|
|
if (_access((LPCTSTR)imgPath, 0) != -1)
|
|
|
{
|
|
|
HRESULT hRet = m_Image.Load(LPCTSTR(imgPath));
|
|
|
@@ -346,29 +346,29 @@ void CImgPlayerDlg::OnTimer(UINT_PTR nIDEvent)
|
|
|
CDialogEx::OnTimer(nIDEvent);
|
|
|
}
|
|
|
|
|
|
-// 屏蔽背景刷新
|
|
|
+// 灞忚斀鑳屾櫙鍒锋柊
|
|
|
BOOL CImgPlayerDlg::OnEraseBkgnd(CDC* pDC)
|
|
|
{
|
|
|
- // TODO: 在此添加消息处理程序代码和/或调用默认值
|
|
|
+ // TODO: 鍦ㄦ�娣诲姞娑堟伅澶勭悊绋嬪簭浠g爜鍜�/鎴栬皟鐢ㄩ粯璁ゅ€�
|
|
|
return TRUE;
|
|
|
//return CDialogEx::OnEraseBkgnd(pDC);
|
|
|
}
|
|
|
|
|
|
BOOL CImgPlayerDlg::EndPlay()
|
|
|
{
|
|
|
- // 停止定时器
|
|
|
+ // 鍋滄�瀹氭椂鍣�
|
|
|
if (m_bTimer)
|
|
|
{
|
|
|
KillTimer(TIMERID);
|
|
|
m_bTimer = false;
|
|
|
|
|
|
- // 释放绘图对象
|
|
|
+ // 閲婃斁缁樺浘瀵硅薄
|
|
|
DeleteObject(m_pMemBitmap);
|
|
|
ReleaseDC(m_pMemDC);
|
|
|
|
|
|
}
|
|
|
|
|
|
- // 关闭窗口
|
|
|
+ // 鍏抽棴绐楀彛
|
|
|
EndDialog(IDCANCEL);
|
|
|
|
|
|
return TRUE;
|