0001:
0002:
0003:
0004: #include "stdafx.h"
0005: #include "main.h"
0006: #include "mainDlg.h"
0007: #include "render.h"
0008:
0009: #ifdef _DEBUG
0010: #define new DEBUG_NEW
0011: #undef THIS_FILE
0012: static char THIS_FILE[] = __FILE__;
0013: #endif
0014:
0015:
0016:
0017:
0018: class CAboutDlg : public CDialog
0019: {
0020: public:
0021: CAboutDlg();
0022:
0023:
0024:
0025: enum { IDD = IDD_ABOUTBOX };
0026:
0027:
0028:
0029:
0030: protected:
0031: virtual void DoDataExchange(CDataExchange* pDX);
0032:
0033:
0034:
0035: protected:
0036:
0037:
0038: DECLARE_MESSAGE_MAP()
0039: };
0040:
0041: CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
0042: {
0043:
0044:
0045: }
0046:
0047: void CAboutDlg::DoDataExchange(CDataExchange* pDX)
0048: {
0049: CDialog::DoDataExchange(pDX);
0050:
0051:
0052: }
0053:
0054: BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
0055:
0056:
0057:
0058: END_MESSAGE_MAP()
0059:
0060:
0061:
0062:
0063: CMainDlg::CMainDlg(CWnd* pParent )
0064: : CDialog(CMainDlg::IDD, pParent)
0065: {
0066:
0067:
0068:
0069: m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
0070: }
0071:
0072: void CMainDlg::DoDataExchange(CDataExchange* pDX)
0073: {
0074: CDialog::DoDataExchange(pDX);
0075:
0076:
0077: }
0078:
0079: BEGIN_MESSAGE_MAP(CMainDlg, CDialog)
0080:
0081: ON_WM_SYSCOMMAND()
0082: ON_WM_PAINT()
0083: ON_WM_QUERYDRAGICON()
0084: ON_BN_CLICKED(IDC_BUTTON1, OnButtonRender)
0085: ON_WM_CLOSE()
0086:
0087: END_MESSAGE_MAP()
0088:
0089:
0090:
0091:
0092: BOOL CMainDlg::OnInitDialog()
0093: {
0094: CDialog::OnInitDialog();
0095:
0096:
0097:
0098:
0099: ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
0100: ASSERT(IDM_ABOUTBOX < 0xF000);
0101:
0102: CMenu* pSysMenu = GetSystemMenu(FALSE);
0103: if (pSysMenu != NULL)
0104: {
0105: CString strAboutMenu;
0106: strAboutMenu.LoadString(IDS_ABOUTBOX);
0107: if (!strAboutMenu.IsEmpty())
0108: {
0109: pSysMenu->AppendMenu(MF_SEPARATOR);
0110: pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
0111: }
0112: }
0113:
0114:
0115:
0116: SetIcon(m_hIcon, TRUE);
0117: SetIcon(m_hIcon, FALSE);
0118:
0119:
0120:
0121: return TRUE;
0122: }
0123:
0124: void CMainDlg::OnSysCommand(UINT nID, LPARAM lParam)
0125: {
0126: if ((nID & 0xFFF0) == IDM_ABOUTBOX)
0127: {
0128: CAboutDlg dlgAbout;
0129: dlgAbout.DoModal();
0130: }
0131: else
0132: {
0133: CDialog::OnSysCommand(nID, lParam);
0134: }
0135: }
0136:
0137:
0138:
0139:
0140:
0141: void CMainDlg::OnPaint()
0142: {
0143: if (IsIconic())
0144: {
0145: CPaintDC dc(this);
0146:
0147: SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
0148:
0149:
0150: int cxIcon = GetSystemMetrics(SM_CXICON);
0151: int cyIcon = GetSystemMetrics(SM_CYICON);
0152: CRect rect;
0153: GetClientRect(&rect);
0154: int x = (rect.Width() - cxIcon + 1) / 2;
0155: int y = (rect.Height() - cyIcon + 1) / 2;
0156:
0157:
0158: dc.DrawIcon(x, y, m_hIcon);
0159: }
0160: else
0161: {
0162: CDialog::OnPaint();
0163:
0164: RECT r;
0165: int offset = 10;
0166: int x = 120;
0167: CDC *pCdc= this->GetDC();
0168: this->GetClientRect(&r);
0169: int h = r.bottom-r.top - 2*offset;
0170: int w = r.right-r.left - offset - x;
0171: if(h<0)h=0;
0172: if(w<0)w=0;
0173: if(h<w)w=h;else h=w;
0174: char *pData = Render::GetDataPointer();
0175:
0176: for(int j=0;j<h;j++){
0177: for(int i=0;i<w;i++){
0178: int no = (j*Render::RENDER_HEIGHT/h)*Render::RENDER_WIDTH
0179: + i*Render::RENDER_WIDTH/w;
0180: pCdc->SetPixel(i+x,j+offset,RGB(
0181: pData[4*no+0],
0182: pData[4*no+1],
0183: pData[4*no+2],
0184: ));
0185: }
0186: }
0187: ReleaseDC(pCdc);
0188: }
0189: }
0190:
0191:
0192:
0193: HCURSOR CMainDlg::OnQueryDragIcon()
0194: {
0195: return (HCURSOR) m_hIcon;
0196: }
0197:
0198:
0199: void PumpMessages()
0200: {
0201: MSG msg;
0202: while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
0203: ::TranslateMessage(&msg);
0204: ::DispatchMessage (&msg);
0205: }
0206: }
0207:
0208: void CMainDlg::OnButtonRender()
0209: {
0210: bQuit = FALSE;
0211:
0212:
0213: for(Render::Begin(); Render::Render(); this->OnPaint()){
0214: for(int i=0; i<1000; i++) Render::Render();
0215:
0216: PumpMessages();
0217:
0218: if(bQuit) return;
0219: }
0220: this->OnPaint();
0221: }
0222:
0223:
0224:
0225: void CMainDlg::OnOK()
0226: {
0227: bQuit = TRUE;
0228:
0229: CDialog::OnOK();
0230: }
0231:
0232:
0233:
0234: void CMainDlg::OnCancel()
0235: {
0236: bQuit = TRUE;
0237:
0238: CDialog::OnCancel();
0239: }
0240:
0241:
0242:
0243: void CMainDlg::OnClose()
0244: {
0245: bQuit = TRUE;
0246:
0247: CDialog::OnClose();
0248: }
0249: