#include #include // mfc extensions, needed for CBitmapButton #include // common controls - needed fo animation control #include // standard library (needed for atoi) #include #include "menu.h" #include "Resource.h" CMyApp myapp; // really important line! BOOL CMyApp::InitInstance () { m_pMainWnd = new mwin(); m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE; } BEGIN_MESSAGE_MAP (mwin,CFrameWnd) ON_BN_CLICKED (IDB_BUTTON1, hbutton1) ON_COMMAND (ID_FILE_OPEN,OnOpen) ON_COMMAND (ID_FILE_SAVE,OnSave) ON_COMMAND (ID_ACT1,OnAct1) ON_COMMAND (ID_ACT2,OnAct2) END_MESSAGE_MAP () mwin::mwin() { int i; Create(NULL,"main window",WS_OVERLAPPEDWINDOW ,CRect(50,50,550,550), NULL, MAKEINTRESOURCE (IDR_MAINFRAME)); mdc = new CClientDC(this); // create main dc edit1 = new CEdit(); edit1->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL, CRect(100,0,400,60),this,IDE_EDIT1); edit1->SetWindowText("ha ha ha"); button1 = new CButton(); button1->Create("SPIN",WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON, CRect(200,350,300,400), this, IDB_BUTTON1); for (i=0;iLoadBitmap(ID_BM1 + i); // bmap[i]->CreateCompatibleBitmap(mdc,50,50); } bdc = new CDC(); bdc->CreateCompatibleDC(mdc); //bdc->SelectObject(blankbm); //CBrush wbrush(RGB(255,255,255)); //bdc->FillRect(&mrect,&wbrush); // fill bitmap white movie = new CAnimateCtrl(); movie->Create(WS_CHILD | WS_VISIBLE | ACS_TRANSPARENT, CRect(0,100,100,100), this, ID_ANIMATE); srand ( (unsigned)time( NULL ) ); // intialize random seed // mythread = AfxBeginThread(myfunc,this); // start thread } /* message handlers: */ UINT mwin::myfunc(LPVOID w) // ignore if you don't understand { mwin* pwin = (mwin*) w; // convert input to parent window CDC* ldc = pwin->GetDC(); // get dc so thread can draw int r[4]; int i; while (1) // infinite loop { for (i=0;i<4;i++) { r[i] = rand() % 400; } ldc->MoveTo(r[0],r[1]); ldc->LineTo(r[2],r[3]); Sleep(100); // wait 100 milliseconds } return 0; } void mwin::hbutton1() { int r[3]; // random picture indicator int i, j; // loop counters CBrush wbrush(RGB(255,255,255)); // white brush for (i=0;i<20;i++) // spin some times { mdc->FillRect(CRect(125,200,175,250),&wbrush); // erase old mdc->FillRect(CRect(225,200,275,250),&wbrush); mdc->FillRect(CRect(325,200,375,250),&wbrush); for (j=0;j<3;j++) { r[j] = rand() % BMN; } bdc->SelectObject(bmap[r[0]]); mdc->BitBlt(125,200,175,250,bdc,0,0,SRCCOPY); // display bitmap bdc->SelectObject(bmap[r[1]]); mdc->BitBlt(225,200,275,250,bdc,0,0,SRCCOPY); // display bitmap bdc->SelectObject(bmap[r[2]]); mdc->BitBlt(325,200,375,250,bdc,0,0,SRCCOPY); // display bitmap Sleep(90); // 90 millisecond delay } if ((r[0] == r[1]) && (r[1] == r[2])) edit1->SetWindowText(" YOU WIN!!!"); else edit1->SetWindowText("Sorry, Try Again."); } void mwin::OnAct1() { CMenu* m = GetMenu(); m->CheckMenuItem(ID_ACT1,MF_CHECKED); m->CheckMenuItem(ID_ACT2,MF_UNCHECKED); edit1->SetWindowText("action 1!"); // make new window win2 = new mwin2(this); win2->ShowWindow(SW_SHOWNORMAL); win2->UpdateWindow(); } void mwin::OnAct2() { CMenu* m = GetMenu(); m->CheckMenuItem(ID_ACT1,MF_UNCHECKED); m->CheckMenuItem(ID_ACT2,MF_CHECKED); edit1->SetWindowText("ACTION 2!"); MessageBox("Do you really want to close that window?","confirmation", MB_OK | MB_ICONQUESTION); if (IDOK == win2->MessageBox("Don't close me, PLEASE!!","Oh No!", MB_OKCANCEL | MB_ICONEXCLAMATION) ) win2->SendMessage(WM_CLOSE,0,0); else { MessageBox("I'm so happy I'm going to play a movie!","yeah!"); // play movie: movie->Open((LPCTSTR) "spintori.avi"); movie->ShowWindow(SW_SHOWNORMAL); // it's really a window! movie->Play(0, -1, 20); // play first frame to last 20 times //movie->Close(); // don't put this line here! } } void mwin::OnOpen() // see page 469 for more on files { char* buffer1 = new char[100]; CFile mfile ("data.doc", CFile::modeRead); mfile.Read(buffer1,100); edit1->SetWindowText(buffer1); mfile.Close(); } void mwin::OnSave() { CString s; edit1->GetWindowText(s); CFile mfile("data.doc", CFile::modeCreate); mfile.Close(); mfile.Open("data.doc", CFile::modeWrite); mfile.Write((LPCTSTR) s, 100); mfile.Close(); } // other file commands include .Seek((LONG) byteposition, CFile::begin) BEGIN_MESSAGE_MAP (mwin2,CFrameWnd) ON_BN_CLICKED (IDB_BUTTON2, hbutton1) END_MESSAGE_MAP () mwin2::mwin2(CFrameWnd* p) { parent = p; Create(NULL,"subwindow",WS_OVERLAPPEDWINDOW,CRect(300,300,600,600)); mdc = new CClientDC(this); // create main dc edit1 = new CEdit(); edit1->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL, CRect(10,0,200,40),this,IDE_EDIT1); edit1->SetWindowText("window 2!"); button1 = new CBitmapButton(); button1->Create("",WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON | BS_OWNERDRAW, CRect(20,100,70,150), this, IDB_BUTTON2); button1->LoadBitmaps(ID_BM1,ID_BM2); } void mwin2::hbutton1() { edit1->SetWindowText("I said don't click!"); }