📄 nukdlg.cpp
字号:
// NUKDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "NUK.h"
#include "NUKDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CNUKDlg 对话框
CNUKDlg::CNUKDlg(CWnd* pParent /*=NULL*/)
: CDialog(CNUKDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
PointSpace = 3;
BorderSpace = 4;
m_bMouseDown = false;
m_strStatus = _T("89642685(在线)");
m_font.CreateFont(
15, // nHeight
0, // 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("Arial")); // lpszFacename
}
void CNUKDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_SKINTAB, m_skintab);
}
BEGIN_MESSAGE_MAP(CNUKDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_WM_GETMINMAXINFO()
ON_WM_SIZING()
ON_WM_ERASEBKGND()
ON_WM_LBUTTONDOWN()
ON_WM_TIMER()
ON_WM_LBUTTONUP()
ON_WM_SETCURSOR()
ON_WM_MOUSEMOVE()
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_BTN_CLOSE, &CNUKDlg::OnBnClickedCloseBtn)
ON_BN_CLICKED(IDC_BTN_MENU, &CNUKDlg::OnBnClickedMenuBtn)
ON_BN_CLICKED(IDC_BTN_USERHEAD, &CNUKDlg::OnBnClickedUserHeardBtn)
ON_BN_CLICKED(IDC_BTN_SEARCH, &CNUKDlg::OnBnClickedSearchBtn)
ON_BN_CLICKED(IDC_BTN_HOSTING, &CNUKDlg::OnBnClickedHostingBtn)
ON_BN_CLICKED(IDC_BTN_STATUS, &CNUKDlg::OnBnClickedStatusBtn)
END_MESSAGE_MAP()
// CNUKDlg 消息处理程序
BOOL CNUKDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
CRect rcClient;
GetClientRect(&rcClient);
//设置背景图片
SetTopLeftImage(IDB_BITMAP_FRAME_TOPLEFT);
SetTopMidImage(IDB_BITMAP_FRAME_TOPMID);
SetTopRightImage(IDB_BITMAP_FRAME_TOPRIGHT);
SetCenterLeftImage(IDB_BITMAP_FRAME_CENTERLEFT);
SetCenterMidImage(IDB_BITMAP_FRAME_CENTERMID);
SetCenterRightImage(IDB_BITMAP_FRAME_CENTERRIGHT);
SetBottomLeftImage(IDB_BITMAP_FRAME_BOTTOMLEFT);
SetBottomMidImage(IDB_BITMAP_FRAME_BOTTOMMID);
SetBottomRightImage(IDB_BITMAP_FRAME_BOTTOMRIGHT);
m_closeBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(rcClient.Width()-21,5,rcClient.Width()-21+16,5+16),this,IDC_BTN_CLOSE);
m_closeBtn.SetImage(IDB_BITMAP_CLOSEBTN_NORMAL,IDB_BITMAP_CLOSEBTN_HOVER,IDB_BITMAP_CLOSEBTN_DOWN,
IDB_BITMAP_CLOSEBTN_NORMAL);
//////////////////////////
CString strNormal,strHover,strDown,strDisable;
CString strMouseOut,strMouseIn;
/////////////////////////
m_userHeadBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(8,30,8+32,30+32),this,IDC_BTN_USERHEAD);
m_userHeadBtn.SetImage(IDB_BITMAP_USERHEAD,IDB_BITMAP_USERHEAD,IDB_BITMAP_USERHEAD,
IDB_BITMAP_USERHEAD);
m_statusBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(41,28,41+11,28+36),this,IDC_BTN_STATUS);
m_statusBtn.SetImage(IDB_BITMAP_STATUSBTN_NORMAL,IDB_BITMAP_STATUSBTN_HOVER,IDB_BITMAP_STATUSBTN_DOWN,
IDB_BITMAP_STATUSBTN_NORMAL);
m_mailBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(55,50,55+35,50+16),this,IDC_BTN_MAIL);
strMouseOut.LoadStringW(IDS_PATH_MAILBTN_MOUSEOUT);
strMouseIn.LoadStringW(IDS_PATH_MAILBTN_MOUSEIN);
m_mailBtn.SetIcon(strMouseOut,strMouseIn);
m_mailBtn.SetWindowTextW(_T("(0)"));
m_mailBtn.SetTextPos(CPoint(17,0));
m_mailBtn.SetColor(RGB(0,28,123),RGB(255,255,255));
m_hostingBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(90,50,90+35,50+16),this,IDC_BTN_HOSTING);
strMouseOut.LoadStringW(IDS_PATH_HOSTINGBTN_MOUSEOUT);
strMouseIn.LoadStringW(IDS_PATH_HOSTINGBTN_MOUSEIN);
m_hostingBtn.SetIcon(strMouseOut,strMouseIn);
m_hostingBtn.SetWindowTextW(_T("(1)"));
m_hostingBtn.SetTextPos(CPoint(17,0));
m_hostingBtn.SetColor(RGB(0,28,123),RGB(255,255,255));
m_paymentBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(125,50,125+16,50+16),this,IDC_BTN_PAYMENT);
strMouseOut.LoadStringW(IDS_PATH_PAYMENTBTN_MOUSEOUT);
strMouseIn.LoadStringW(IDS_PATH_PAYMENTBTN_MOUSEIN);
m_paymentBtn.SetIcon(strMouseOut,strMouseIn);
//////////////////////////
m_mobileBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(12,rcClient.bottom-52,12+17,rcClient.bottom-52+17),this,IDC_BTN_MOBILE);
strMouseOut.LoadStringW(IDS_PATH_MOBILEBTN_MOUSEOUT);
strMouseIn.LoadStringW(IDS_PATH_MOBILEBTN_MOUSEIN);
m_mobileBtn.SetIcon(strMouseOut,strMouseIn);
m_gameBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(12+26,rcClient.bottom-52,12+26+17,rcClient.bottom-52+17),this,IDC_BTN_GAME);
strMouseOut.LoadStringW(IDS_PATH_GAMEBTN_MOUSEOUT);
strMouseIn.LoadStringW(IDS_PATH_GAMEBTN_MOUSEIN);
m_gameBtn.SetIcon(strMouseOut,strMouseIn);
m_ttBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(12+26*2,rcClient.bottom-52,12+26*2+17,rcClient.bottom-52+17),this,IDC_BTN_TT);
strMouseOut.LoadStringW(IDS_PATH_TTBTN_MOUSEOUT);
strMouseIn.LoadStringW(IDS_PATH_TTBTN_MOUSEIN);
m_ttBtn.SetIcon(strMouseOut,strMouseIn);
m_chatBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(12+26*3,rcClient.bottom-52,12+26*3+17,rcClient.bottom-52+17),this,IDC_BTN_CHAT);
strMouseOut.LoadStringW(IDS_PATH_CHATBTN_MOUSEOUT);
strMouseIn.LoadStringW(IDS_PATH_CHATBTN_MOUSEIN);
m_chatBtn.SetIcon(strMouseOut,strMouseIn);
m_petBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(12+26*4,rcClient.bottom-52,12+26*4+17,rcClient.bottom-52+17),this,IDC_BTN_PET);
strMouseOut.LoadStringW(IDS_PATH_PETBTN_MOUSEOUT);
strMouseIn.LoadStringW(IDS_PATH_PETBTN_MOUSEIN);
m_petBtn.SetIcon(strMouseOut,strMouseIn);
m_musicBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(12+26*5,rcClient.bottom-52,12+26*5+17,rcClient.bottom-52+17),this,IDC_BTN_MUSIC);
strMouseOut.LoadStringW(IDS_PATH_MUSICBTN_MOUSEOUT);
strMouseIn.LoadStringW(IDS_PATH_MUSICBTN_MOUSEIN);
m_musicBtn.SetIcon(strMouseOut,strMouseIn);
m_tvBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(12+26*6,rcClient.bottom-52,12+26*6+17,rcClient.bottom-52+17),this,IDC_BTN_TV);
strMouseOut.LoadStringW(IDS_PATH_TVBTN_MOUSEOUT);
strMouseIn.LoadStringW(IDS_PATH_TVBTN_MOUSEIN);
m_tvBtn.SetIcon(strMouseOut,strMouseIn);
//////////////////////////
m_menuBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(0,rcClient.bottom-30,65,rcClient.bottom-30+24),this,IDC_BTN_MENU);
strNormal.LoadStringW(IDS_PATH_MENUBTN_NORMAL);
strHover.LoadStringW(IDS_PATH_MENUBTN_HOVER);
strDown.LoadStringW(IDS_PATH_MENUBTN_DOWN);
strDisable.LoadStringW(IDS_PATH_MENUBTN_DISABLE);
m_menuBtn.SetImage(strNormal,strHover,strDown,strDisable);
m_msgManagerBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(75,rcClient.bottom-25,80+17,rcClient.bottom-25+17),this,IDC_BTN_MSGMANAGER);
strMouseOut.LoadStringW(IDS_PATH_MSGBTN_MOUSEOUT);
strMouseIn.LoadStringW(IDS_PATH_MSGBTN_MOUSEIN);
m_msgManagerBtn.SetIcon(strMouseOut,strMouseIn);
m_searchBtn.Create(NULL,WS_CHILD | WS_VISIBLE ,CRect(100,rcClient.bottom-25,100+45,rcClient.bottom-25+17),this,IDC_BTN_SEARCH);
strMouseOut.LoadStringW(IDS_PATH_SEARCHBTN_MOUSEOUT);
strMouseIn.LoadStringW(IDS_PATH_SEARCHBTN_MOUSEIN);
m_searchBtn.SetIcon(strMouseOut,strMouseIn);
m_searchBtn.SetWindowTextW(_T("查找"));
m_searchBtn.SetColor(RGB(255,255,255),RGB(0,0,0));
m_skintab.MoveWindow(3,68,27,33*4+4);
int tabcount = 4;
m_skintab.SetCount(tabcount);
for(int i=0;i<tabcount;i++)
{
m_skintab.SetRect(i,CRect(0,33*i,27,33*i+33));
m_skintab.SetSkin(i,_T("image\\barback_normal.bmp"),_T("image\\barback_over.bmp"),_T("image\\barback_disabled.bmp"));
}
m_skintab.SetIcon(0,_T("image\\FriendButton.ico"));
m_skintab.SetIcon(1,_T("image\\NetDiskButton.ico"));
m_skintab.SetIcon(2,_T("image\\EaseButton.ico"));
m_skintab.SetIcon(3,_T("image\\BlankPanel.ico"));
CenterWindow();//居中屏幕
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CNUKDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this); // 用于绘制的设备上下文
// TODO: 在此处添加消息处理程序代码
CRect rcClient;
GetClientRect(&rcClient);
//调整控件位置////////////////////////////
CRect rcCloseBtn;
m_closeBtn.GetClientRect(&rcCloseBtn);
m_closeBtn.MoveWindow(rcClient.Width()-21,5,rcCloseBtn.Width(),rcCloseBtn.Height());
CRect rcMobileBtn;
m_mobileBtn.GetClientRect(&rcMobileBtn);
m_mobileBtn.MoveWindow(12,rcClient.bottom-52,rcMobileBtn.Width(),rcMobileBtn.Height());
CRect rcGameBtn;
m_gameBtn.GetClientRect(&rcGameBtn);
m_gameBtn.MoveWindow(12+26,rcClient.bottom-52,rcGameBtn.Width(),rcGameBtn.Height());
CRect rcTTBtn;
m_ttBtn.GetClientRect(&rcTTBtn);
m_ttBtn.MoveWindow(12+26*2,rcClient.bottom-52,rcTTBtn.Width(),rcTTBtn.Height());
CRect rcChatBtn;
m_chatBtn.GetClientRect(&rcChatBtn);
m_chatBtn.MoveWindow(12+26*3,rcClient.bottom-52,rcChatBtn.Width(),rcChatBtn.Height());
CRect rcPetBtn;
m_petBtn.GetClientRect(&rcPetBtn);
m_petBtn.MoveWindow(12+26*4,rcClient.bottom-52,rcPetBtn.Width(),rcPetBtn.Height());
CRect rcMusicBtn;
m_musicBtn.GetClientRect(&rcMusicBtn);
m_musicBtn.MoveWindow(12+26*5,rcClient.bottom-52,rcMusicBtn.Width(),rcMusicBtn.Height());
CRect rcTVBtn;
m_tvBtn.GetClientRect(&rcTVBtn);
m_tvBtn.MoveWindow(12+26*6,rcClient.bottom-52,rcTVBtn.Width(),rcTVBtn.Height());
if(12+26*6+rcTVBtn.Width()+2>rcClient.Width())
m_tvBtn.ShowWindow(false);
else
m_tvBtn.ShowWindow(true);
CRect rcMenuBtn;
m_menuBtn.GetClientRect(&rcMenuBtn);
m_menuBtn.MoveWindow(0,rcClient.bottom-30,rcMenuBtn.Width(),rcMenuBtn.Height());
CRect rcMsgBtn;
m_msgManagerBtn.GetClientRect(&rcMsgBtn);
m_msgManagerBtn.MoveWindow(75,rcClient.bottom-25,rcMsgBtn.Width(),rcMsgBtn.Height());
CRect rcSearchBtn;
m_searchBtn.GetClientRect(&rcSearchBtn);
m_searchBtn.MoveWindow(100,rcClient.bottom-25,rcSearchBtn.Width(),rcSearchBtn.Height());
//内存画图//////////////////////////
CDC m_MemDC;
m_MemDC.CreateCompatibleDC(&dc);
CBitmap btScreen;
btScreen.CreateCompatibleBitmap(&dc, rcClient.Width(), rcClient.Height());
m_MemDC.SelectObject(&btScreen);
btScreen.DeleteObject();
//画背景
m_MemDC.Rectangle(rcClient);
DrawPosImage(&m_BitmapCenterMid, &m_MemDC, CPoint(rcClient.Width()-m_szBitmapCenterRight.cx-m_szBitmapCenterMid.cx,
rcClient.Height()-m_szBitmapBottomMid.cy-m_szBitmapCenterMid.cy));
DrawPosImage(&m_BitmapTopLeft, &m_MemDC, CPoint(0, 0));
DrawRangeImage(&m_BitmapTopMid, &m_MemDC, CRect(m_szBitmapTopLeft.cx, 0, rcClient.Width()-m_szBitmapTopRight.cx, m_szBitmapTopMid.cy));
DrawPosImage(&m_BitmapTopRight, &m_MemDC, CPoint(rcClient.Width()-m_szBitmapTopRight.cx, 0));
DrawRangeImage(&m_BitmapCenterLeft, &m_MemDC, CRect(0, m_szBitmapTopLeft.cy, m_szBitmapCenterLeft.cx, rcClient.Height()-m_szBitmapBottomLeft.cy));
DrawRangeImage(&m_BitmapCenterRight, &m_MemDC, CRect(rcClient.Width()-m_szBitmapCenterRight.cx, m_szBitmapTopRight.cy,
rcClient.Width(), rcClient.Height()-m_szBitmapBottomRight.cy));
DrawPosImage(&m_BitmapBottomLeft, &m_MemDC, CPoint(0, rcClient.Height()-m_szBitmapBottomLeft.cy));
DrawRangeImage(&m_BitmapBottomMid, &m_MemDC, CRect(m_szBitmapBottomLeft.cx, rcClient.Height()-m_szBitmapBottomMid.cy,
rcClient.Width()-m_szBitmapBottomRight.cx, rcClient.Height()));
DrawPosImage(&m_BitmapBottomRight, &m_MemDC, CPoint(rcClient.Width()-m_szBitmapBottomRight.cx, rcClient.Height()-m_szBitmapBottomRight.cy));
//画上线状态的字
m_MemDC.SelectObject(m_font);
m_MemDC.SetTextColor(RGB(0,28,123));
m_MemDC.SetBkMode(TRANSPARENT);
m_MemDC.DrawText(m_strStatus,CRect(55,30,55+100,30+16),DT_CENTER|DT_VCENTER|DT_SINGLELINE);
//创建不规则窗体
ChangeWindowRgn(&m_MemDC);
//重画控件/////////////////////////
ReDrawCrl(&m_MemDC);
//画到显示器上////////////////////////////
dc.BitBlt(rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height(), &m_MemDC, 0, 0, SRCCOPY);
m_MemDC.DeleteDC();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR CNUKDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CNUKDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//lpMMI->ptMinTrackSize.x = 170;
//lpMMI->ptMinTrackSize.y = 400;
CDialog::OnGetMinMaxInfo(lpMMI);
}
//定点画位图
void CNUKDlg::DrawPosImage(CBitmap *pBitmap, CDC *pDC, CPoint pt)
{
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap *pOldBitmap = (CBitmap*)MemDC.SelectObject(pBitmap);
BITMAP bm;
pBitmap->GetBitmap(&bm);
int li_Width = bm.bmWidth;
int li_Height = bm.bmHeight;
pDC->BitBlt(pt.x, pt.y, li_Width, li_Height, &MemDC, 0, 0, SRCCOPY);
MemDC.SelectObject(pOldBitmap);
MemDC.DeleteDC();
}
//平铺画位图
void CNUKDlg::DrawRangeImage(CBitmap *pBitmap, CDC *pDC, CRect rc)
{
CDC MemDC;
BITMAP bm;
pBitmap->GetBitmap(&bm);
int li_Width = bm.bmWidth;
int li_Height = bm.bmHeight;
MemDC.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = MemDC.SelectObject(pBitmap);
int x=rc.left;
int y=rc.top;
while (y < (rc.Height()+rc.top))
{
while(x < (rc.Width()+rc.left))
{
pDC->BitBlt(x, y, li_Width, li_Height, &MemDC, 0, 0, SRCCOPY);
x += li_Width;
}
x = rc.left;
y += li_Height;
}
MemDC.SelectObject(pOldBitmap);
MemDC.DeleteDC();
}
//载入硬盘位图
void CNUKDlg::SetImage(CBitmap &bitmap, CString strName)
{
HBITMAP hBitmap = NULL;
hBitmap = (HBITMAP)::LoadImage(NULL, strName, IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE|LR_LOADFROMFILE);
//ASSERT(hBitmap);
if(hBitmap == NULL)
{
CString str;
str.LoadStringW(IDS_ERROR_NOBMP);
AfxMessageBox(str);
PostQuitMessage(0);
}
if (bitmap.m_hObject)
bitmap.Detach();
bitmap.Attach(hBitmap);
}
//载入资源位图
void CNUKDlg::SetImage(CBitmap &bitmap, UINT nID)
{
if (bitmap.m_hObject)
bitmap.Detach();
bitmap.LoadBitmap(nID);
}
//保存位图尺寸
void CNUKDlg::SetImageSize(CBitmap *pBitmap, CSize &sz)
{
BITMAP bm;
pBitmap->GetBitmap(&bm);
sz = CSize(bm.bmWidth, bm.bmHeight);
}
//////////////////////////////////////////////////////////////////////
//载入左上角的硬盘位图
void CNUKDlg::SetTopLeftImage(UINT nID)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -