www.gusucode.com > 一个VC++ GUI测试程序-源码程序 > 一个VC++ GUI测试程序-源码程序/code/Test1Dlg.cpp
//Download by http://www.NewXing.com // Test1Dlg.cpp : implementation file // #include "stdafx.h" #include "GUITest.h" #include "Test1Dlg.h" #include "DlgBaseClass.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #include <Atlbase.h> #include <afxpriv2.h> ///////////////////////////////////////////////////////////////////////////// // CTest1Dlg dialog CTest1Dlg::CTest1Dlg(CWnd* pParent /*=NULL*/) : CDialog(CTest1Dlg::IDD, pParent) { //{{AFX_DATA_INIT(CTest1Dlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTest1Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTest1Dlg) DDX_Control(pDX, IDC_BUTTON4, m_btn3); DDX_Control(pDX, IDC_BUTTON3, m_btn2); DDX_Control(pDX, IDC_BUTTON1, m_btn1); DDX_Control(pDX, IDC_SCROLL_STATIC, m_ScrollLabel); DDX_Control(pDX, IDC_ANI, m_AniBtn); DDX_Control(pDX, IDC_LIST1, m_list); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CTest1Dlg, CDialog) //{{AFX_MSG_MAP(CTest1Dlg) ON_WM_CTLCOLOR() ON_WM_ERASEBKGND() ON_WM_SETCURSOR() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTest1Dlg message handlers BOOL CTest1Dlg::OnInitDialog() { CDialog::OnInitDialog(); m_Back.LoadBitmap(IDB_BACK); m_Font1.CreatePointFont(120,"Arial"); m_AniBtn.SetFlat(); m_AniBtn.setImageList(CDlgBaseClass::m_pImageList, -1); m_AniBtn.start(); if(m_list.m_hWnd) { m_list.InsertColumn(0, "QQ", LVCFMT_LEFT, 100); m_list.InsertColumn(1, "昵称", LVCFMT_LEFT, 100); m_list.InsertItem(0,"alkdsfj;las",0); m_list.SetItemText(0,1,"alkdsfj;las"); m_list.InsertItem(1,"alkdsfj;las",0); m_list.SetItemText(1,1,"alkdsfj;las"); m_list.InsertItem(2,"alkdsfj;las",0); m_list.SetItemText(2,1,"alkdsfj;las"); m_list.InsertItem(3,"alkdsfj;las",0); m_list.SetItemText(3,1,"alkdsfj;las"); m_list.InsertItem(4,"alkdsfj;las",0); m_list.SetItemText(4,1,"alkdsfj;las"); m_list.InsertItem(5,"alkdsfj;las",0); m_list.SetItemText(5,1,"alkdsfj;las"); } //设置Title m_ScrollLabel.Initialize(); m_ScrollLabel.SetWindowText("这是个滚动文本框."); m_ScrollLabel.SetTextColor(CONTROL_TEXTCOLOR); m_ScrollLabel.SetBkColor(CONTROL_BKCOLOR); m_ScrollLabel.SetTextVAlign(CScrollLabel::SL_TA_VCENTER); m_ScrollLabel.SetScrollStyle(CScrollLabel::SL_HSCROLLLEFT); m_btn1.SetDefaultFace(); m_btn1.SetDefaultButton(); m_btn2.SetDefaultFace(); m_btn2.SetDefaultButton(); m_btn3.SetDefaultFace(); m_btn3.SetDefaultButton(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } HBRUSH CTest1Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { //设置透明背景模式 pDC->SetBkMode(TRANSPARENT); if(nCtlColor == CTLCOLOR_STATIC) { pDC->SelectObject(&m_Font1); pDC->SetTextColor(RGB(255, 0, 0)); } //设置背景刷子为空 return (HBRUSH)::GetStockObject(HOLLOW_BRUSH); } BOOL CTest1Dlg::OnEraseBkgnd(CDC* pDC) { CDC dc; dc.CreateCompatibleDC(pDC); dc.SelectObject(&m_Back); //获取BITMAP对象 BITMAP hb; m_Back.GetBitmap(&hb); //获取窗口大小 CRect rt; GetClientRect(&rt); //显示位图 pDC->BitBlt(0, 0, rt.Width(), rt.Height(),&dc, 0, 0, SRCCOPY); // pDC->StretchBlt(0, 0, rt.Width(), rt.Height(),&dc, 0, 0, hb.bmWidth, hb.bmHeight, SRCCOPY); return TRUE; } BOOL CTest1Dlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { if(pWnd->GetDlgCtrlID()==IDOK) { SetCursor(AfxGetApp()->LoadCursor(IDI_ERROR)); SetWindowText("I'm Here!"); return TRUE; } else { SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW)); SetWindowText("Other"); return TRUE; } return CDialog::OnSetCursor(pWnd, nHitTest, message); } ///////////////////////////////////////////////////////////////////// BOOL bIsGIFRunning = FALSE; typedef struct gifImage{ WORD lWidth; WORD lHeight; WORD width; WORD height; struct flag{ BYTE d:3; BYTE c:1; BYTE b:3; BYTE a:1; }Flag; }GifImage,*PGifImage; #include <math.h> static UINT GifThread(LPVOID gifDC) { CDC* pdc = (CDC*)gifDC; HINSTANCE handle = ::AfxGetResourceHandle(); HRSRC hrsrc = ::FindResource(handle,MAKEINTRESOURCE(IDR_IMAGE1),"IMAGE"); DWORD word = ::SizeofResource(handle,hrsrc); BYTE* lpBy = (BYTE*)LoadResource(handle,hrsrc); BYTE* pByte[20]; DWORD nu[20]; int num = 0; DWORD firstLocation = 0; for(DWORD j=0;j<word;j++) { if(lpBy[j]==0x2c) { if(lpBy[j-1]==0x00) { if(num==0) { firstLocation = j; } PGifImage nowImage = (PGifImage)&lpBy[j+1]; if(nowImage->Flag.a==0) { DWORD number = 1+sizeof(GifImage); while(lpBy[j+number]!=0) { number = number+(DWORD)lpBy[j+number]+1; } number++; pByte[num] = new BYTE[number]; for(DWORD n=0;n<number;n++) { *(BYTE*)(pByte[num]+n) = lpBy[j+n]; } nu[num] = number; j = j+number-1; num++; } else { int number = 1+sizeof(GifImage)+1+3*(int)floor(pow(2,nowImage->Flag.d)); while(lpBy[j+number]!=0) { number = number+lpBy[j+number]; } pByte[num] = new BYTE[number]; for(int n=0;n<number;n++) { *(BYTE*)(pByte[num]+n) = lpBy[j+n]; } nu[num] = number; j = j+number-1; num++; } } } } while(bIsGIFRunning) { for(int m=0;bIsGIFRunning && m<num;m++) { CBrush brush(RGB(255,255,255)); pdc->FillRect(CRect(0,0,200,200),&brush); DWORD DDD; VirtualProtect(lpBy,word,PAGE_READWRITE,&DDD); for(DWORD n=0;n<nu[m];n++) { lpBy[firstLocation+n] = *(BYTE*)(pByte[m]+n); } VirtualProtect(lpBy,word,DDD,NULL); CMemFile file(lpBy,word); CArchive ar(&file,CArchive::load|CArchive::bNoFlushOnDelete); CArchiveStream arcstream(&ar); CComQIPtr<IPicture> m_picture; HRESULT hr = OleLoadPicture((LPSTREAM)&arcstream,0,false,IID_IPicture,(void**)&m_picture); long a,b; m_picture->get_Width(&a); m_picture->get_Height(&b); CSize sz(a,b); pdc->HIMETRICtoDP(&sz); CRect rect; m_picture->Render(*pdc,0,0,sz.cx,sz.cy,0,b,a,-b,&rect); Sleep(400); } } return 1; } void CTest1Dlg::OnOK() { if(!bIsGIFRunning) { CDC* pdc = GetDC(); m_gifDC = new CDC; m_gifDC->Attach(pdc->GetSafeHdc()); AfxBeginThread(GifThread,(LPVOID)m_gifDC); bIsGIFRunning = TRUE; } } void CTest1Dlg::OnCancel() { if(bIsGIFRunning) { bIsGIFRunning=FALSE; Sleep(1000); } CDialog::OnCancel(); }