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