⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgbox.cpp

📁 NetTalk是一个适用于局域网和因特网的可视电话软件 一.开发环境 Windows2000 Server & Visual C++6.0 & SDK +自开发的CWndX类库(相当于简化的MF
💻 CPP
字号:
#include "WndX.h"
#include <WindowsX.h>
#include "MsgBox.h"
#include "resource.h"

CMsgBox::CMsgBox()
{
	m_hbmpClose=LoadBitmap(hInstX,LPCTSTR(IDB_CLOSE));
	m_hbmpFace=LoadBitmap(hInstX,LPCTSTR(IDB_MSGBOX));
	m_hbmpT1=LoadBitmap(hInstX,LPCTSTR(IDB_MSGTITLE1));
	m_hbmpT2=LoadBitmap(hInstX,LPCTSTR(IDB_MSGTITLE2));
	//HRGN hrgnTitle=
}

CMsgBox::~CMsgBox()
{
	if(m_hbmpClose)
		DeleteObject(m_hbmpClose);
	if(m_hbmpFace)
		DeleteObject(m_hbmpFace);
	if(m_hbmpT1)
		DeleteObject(m_hbmpT1);
	if(m_hbmpT2)
		DeleteObject(m_hbmpT2);

}

LRESULT CMsgBox::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_INITDIALOG:
		{
			POINT pt[5]={{0,11},{11,0},{238,0},{238,102},{0,102}};
			HRGN h=CreatePolygonRgn(pt,5,ALTERNATE);
			SetWindowRgn(m_hWnd,h,0);
			
			
			m_btnClose.SetType(CCoolBtn::tFlat|CCoolBtn::tBitmap);
			m_btnClose.SetColor(CCoolBtn::fFace,0x00b9b4b3);
			m_btnClose.SetBitmap(m_hbmpClose,0x00ffffff);
			m_btnClose.SetRect((RECT)CRectX(60,3,72,15));
			m_btn1.SetType(CCoolBtn::tText);
			m_btn2.SetType(CCoolBtn::tText);
			m_btn1.SetColor(CCoolBtn::fFace,0x00b9b4b3);
			m_btn2.SetColor(CCoolBtn::fFace,0x00b9b4b3);
			if(m_type==MBX_OK)
				m_btn1.SetText("确定");
			if(m_type==MBX_YESNO)
			{
				m_btn1.SetText("是");
				m_btn2.SetText("否");
			}
			m_btn1.SetRect((RECT)CRectX(165,57,180,70));
			m_btn2.SetRect((RECT)CRectX(140,57,160,70));
		}
		break;
	case WM_ERASEBKGND:
		return OnEraseBkgnd((HDC)wParam);
		break;
	case WM_MOUSEMOVE:
		{
			POINT point;
			point.x=GET_X_LPARAM(lParam); 
			point.y=GET_Y_LPARAM(lParam); 
			OnMouseMove(wParam,point);
		}
		break;
	case WM_LBUTTONDOWN:
		{
			POINT point;
			point.x=GET_X_LPARAM(lParam); 
			point.y=GET_Y_LPARAM(lParam); 
			OnLButtonDown(wParam,point);	
		}
		break;
	case WM_SETCURSOR:
		{
			DWORD dw=GetMessagePos();
			POINT pt;
			pt.x=GET_X_LPARAM(dw);
			pt.y=GET_Y_LPARAM(dw);
			ScreenToClient(m_hWnd,&pt);
			if(PtInRegion(m_hrgnTitle,pt.x,pt.y))
			{
				SetCursor(LoadCursor(hInstX,LPCTSTR(IDC_DRAG)));
				return TRUE;
			}
			return FALSE;
		}
		break;
	default:
		return CDialogX::WndProc(uMsg,wParam,lParam);
	}
	return TRUE;
}

UINT CMsgBox::ShowMsg(char *caption, char *msg, UINT type, HWND hwnd)
{
	if(caption)
		strncpy(m_caption,caption,127);
	if(msg)
		strncpy(m_msg,msg,255);
	m_type=type;
	return (UINT)DoModal((LPCTSTR)IDD_MSG_DLG,hwnd);
}

int CMsgBox::DoModal(LPCTSTR lpszTemplateName, HWND hWndParent)
{
	CDialogX::DoModal(lpszTemplateName,hWndParent);

	return m_uResult;
}

BOOL CMsgBox::OnEraseBkgnd(HDC hdc)
{
	HDC hMemDC;
	hMemDC=CreateCompatibleDC(hdc);
	
	HBITMAP hob=(HBITMAP)SelectObject(hMemDC,m_hbmpFace);

	if(m_bHilight)
	{
		DrawTransBmpX(hMemDC,m_rcTitle,m_hbmpT2,0,0,0);
	}
	else
	{	
		DrawTransBmpX(hMemDC,m_rcTitle,m_hbmpT1,0,0,0);
	}
	
	
	m_btnClose.Paint(hMemDC);
	HFONT hf=GetWindowFont(m_hWnd);
	TxtBlt(hMemDC,m_msg,m_rcMsg,0,0x00b9b4b3,hf,FALSE);


	BitBlt(hdc,0,0,m_rc.Width(),m_rc.Height(),hMemDC,0,0,SRCCOPY);
	
	SelectObject(hMemDC,hob);
	DeleteObject(m_hbmpFace);
	
	
	DeleteDC(hMemDC);
	return TRUE;
}

void CMsgBox::OnMouseMove(UINT nFlags, POINT point)
{
	if(PtInRegion(m_hrgnTitle,point.x,point.y))
	{
		if(!m_bHilight)
		{
			m_bHilight=TRUE;
			HDC hdc=GetDC(m_hWnd);
			
			DrawTransBmpX(hdc,m_rcTitle,m_hbmpT2,0,0,0);
			
			ReleaseDC(m_hWnd,hdc);
			SetTimer(m_hWnd,1,100,0);
		}
	}
	else
	if(m_btnClose.IsMouseOn(point))
	{
		
		HDC hdc=GetDC(m_hWnd);
		m_btnZoom.Paint(hdc);
		m_btnClose.Paint(hdc,CCoolBtn::sHover);
		ReleaseDC(m_hWnd,hdc);
		SetTimer(m_hWnd,1,100,0);
	}
	else
	if(m_btnZoom.IsMouseOn(point))
	{
		HDC hdc=GetDC(m_hWnd);
		m_btnClose.Paint(hdc);
		m_btnZoom.Paint(hdc,CCoolBtn::sHover);
		ReleaseDC(m_hWnd,hdc);
		SetTimer(m_hWnd,1,100,0);
	}
	else
	if(m_bHilight)
	{
		
		
		m_bHilight=FALSE;
		HDC hdc=GetDC(m_hWnd);
		
		DrawTransBmpX(hdc,m_rcTitle,m_hbmpT1,0,0,0);
		ReleaseDC(m_hWnd,hdc);
		KillTimer(m_hWnd,1);
	}
	else
	{
		HDC hdc=GetDC(m_hWnd);
		m_btnZoom.Paint(hdc);
		m_btnClose.Paint(hdc);
		ReleaseDC(m_hWnd,hdc);
	}
}

void CMsgBox::OnLButtonDown(UINT nFlags, POINT &point)
{
	if(PtInRegion(m_hrgnTitle,point.x,point.y))
	{
		SetCapture(m_hWnd);
		
		RECT rc;
		GetWindowRect(m_hWnd,&rc);
		MSG msg;
		while(GetMessage(&msg, NULL, 0, 0))
		{
			if (GetCapture()!=m_hWnd)
			{
				DispatchMessage(&msg);
				break;
			}
			switch(msg.message)
			{
			case WM_MOUSEMOVE:
				{
					POINT pt;
					pt.x=GET_X_LPARAM(msg.lParam);
					pt.y=GET_Y_LPARAM(msg.lParam);
					rc.left+=pt.x-point.x;
					rc.top+=pt.y-point.y;
					SetWindowPos(m_hWnd,0,rc.left,
						rc.top,0,0,SWP_NOSIZE);
				}
				break;
			case WM_LBUTTONUP:
				
				goto EXITLOOP1;					
				
			default:
				DispatchMessage(&msg);
				break;
				
			}
		}
EXITLOOP1:
		ReleaseCapture();
	}
	if(m_btnClose.IsMouseOn(point))
	{
		KillTimer(m_hWnd,1);
		SetCapture(m_hWnd);
		HDC hdc=GetDC(m_hWnd);
		m_btnClose.Paint(hdc,CCoolBtn::sDown);
		ReleaseDC(m_hWnd,hdc);
		
		MSG msg;
		while(GetMessage(&msg, NULL, 0, 0))
		{
			
			if (GetCapture()!=m_hWnd)
			{
				DispatchMessage(&msg);
				break;
			}
			
			switch (msg.message)
			{
				
			case WM_MOUSEMOVE:
				break;
			case WM_LBUTTONUP:
				{
					POINT pt;
					pt.x=GET_X_LPARAM(msg.lParam);
					pt.y=GET_Y_LPARAM(msg.lParam);
					if(m_btnClose.IsMouseOn(pt))
					{
						SendMessage(m_hWnd,WM_CLOSE,0,0);
					}
				}
				goto EXITLOOP2;
				
			case WM_KEYDOWN:	
				if (msg.wParam != VK_ESCAPE) 
					break;
				
			default:
				DispatchMessage(&msg);
				break;
			}
		}
		
EXITLOOP2:
		if(m_hWnd)
		{
			hdc=GetDC(m_hWnd);
			m_btnClose.Paint(hdc);
			ReleaseDC(m_hWnd,hdc);
		}
		ReleaseCapture();
		
	}
	
	
	
}
void CMsgBox::OnTimer(UINT nIDEvent)
{
	DWORD dw=GetMessagePos();
	POINT pt;
	pt.x=GET_X_LPARAM(dw);
	pt.y=GET_Y_LPARAM(dw);
	ScreenToClient(m_hWnd,&pt);
	if(m_bHilight)
	{
	
		
		if(!PtInRegion(m_hrgnTitle,pt.x,pt.y))
		{
			RECT rc;
			SetRect(&rc,2,2,119,16);
			m_bHilight=FALSE;
			HDC hdc=GetDC(m_hWnd);
			
			DrawTransBmpX(hdc,rc,m_hbmpT1,0,0,0);
			ReleaseDC(m_hWnd,hdc);
			KillTimer(m_hWnd,1);
		}
		
		
	}
	if(!m_btnClose.IsMouseOn(pt))
	{
		HDC hdc=GetDC(m_hWnd);
		m_btnClose.Paint(hdc);
		ReleaseDC(m_hWnd,hdc);
	}

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -