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 i,j;
0166: int offset = 10;
0167: int x = 100+20;
0168: CDC *pCdc= this->GetDC();
0169: this->GetClientRect(&r);
0170: int h = r.bottom-r.top - 2*offset;
0171: int w = r.right-r.left - offset - x;
0172: if(h<0)h=0;
0173: if(w<0)w=0;
0174: if(h<w)w=h;else h=w;
0175: char *pData = Render::GetDataPointer();
0176:
0177: for(j=0;j<h;j++){
0178: for(i=0;i<w;i++){
0179: int no = (j*Render::RENDER_HEIGHT/h)*Render::RENDER_WIDTH
0180: + i*Render::RENDER_WIDTH/w;
0181: pCdc->SetPixel(i+x,j+offset,RGB(
0182: pData[4*no+0],
0183: pData[4*no+1],
0184: pData[4*no+2],
0185: ));
0186: }
0187: }
0188:
0189: ReleaseDC(pCdc);
0190: }
0191: }
0192:
0193:
0194:
0195: HCURSOR CMainDlg::OnQueryDragIcon()
0196: {
0197: return (HCURSOR) m_hIcon;
0198: }
0199:
0200:
0201: void PumpMessages()
0202: {
0203: MSG msg;
0204: while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
0205: ::TranslateMessage(&msg);
0206: ::DispatchMessage (&msg);
0207: }
0208: }
0209:
0210: void CMainDlg::OnButtonRender()
0211: {
0212: bQuit = FALSE;
0213:
0214:
0215: for(Render::Begin(); Render::Render(); this->OnPaint()){
0216:
0217: char title[256];
0218: sprintf(title, "%d回目", Render::GetRenderCount());
0219: SetWindowText(title);
0220:
0221: PumpMessages();
0222:
0223: if(bQuit) return;
0224: }
0225: this->OnPaint();
0226: }
0227:
0228:
0229:
0230: void CMainDlg::OnOK()
0231: {
0232: bQuit = TRUE;
0233:
0234: CDialog::OnOK();
0235: }
0236:
0237:
0238:
0239: void CMainDlg::OnCancel()
0240: {
0241: bQuit = TRUE;
0242:
0243: CDialog::OnCancel();
0244: }
0245:
0246:
0247:
0248: void CMainDlg::OnClose()
0249: {
0250: bQuit = TRUE;
0251:
0252: CDialog::OnClose();
0253: }
0254: