0001: // mainDlg.cpp : インプリメンテーション ファイル
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: // アプリケーションのバージョン情報で使われている CAboutDlg ダイアログ
0017: 
0018: class CAboutDlg : public CDialog
0019: {
0020: public:
0021:     CAboutDlg();
0022: 
0023: // ダイアログ データ
0024:     //{{AFX_DATA(CAboutDlg)
0025:     enum { IDD = IDD_ABOUTBOX };
0026:     //}}AFX_DATA
0027: 
0028:     // ClassWizard は仮想関数のオーバーライドを生成します
0029:     //{{AFX_VIRTUAL(CAboutDlg)
0030:     protected:
0031:     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV のサポート
0032:     //}}AFX_VIRTUAL
0033: 
0034: // インプリメンテーション
0035: protected:
0036:     //{{AFX_MSG(CAboutDlg)
0037:     //}}AFX_MSG
0038:     DECLARE_MESSAGE_MAP()
0039: };
0040: 
0041: CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
0042: {
0043:     //{{AFX_DATA_INIT(CAboutDlg)
0044:     //}}AFX_DATA_INIT
0045: }
0046: 
0047: void CAboutDlg::DoDataExchange(CDataExchange* pDX)
0048: {
0049:     CDialog::DoDataExchange(pDX);
0050:     //{{AFX_DATA_MAP(CAboutDlg)
0051:     //}}AFX_DATA_MAP
0052: }
0053: 
0054: BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
0055:     //{{AFX_MSG_MAP(CAboutDlg)
0056:         // メッセージ ハンドラがありません。
0057:     //}}AFX_MSG_MAP
0058: END_MESSAGE_MAP()
0059: 
0060: /////////////////////////////////////////////////////////////////////////////
0061: // CMainDlg ダイアログ
0062: 
0063: CMainDlg::CMainDlg(CWnd* pParent /*=NULL*/)
0064:     : CDialog(CMainDlg::IDD, pParent)
0065: {
0066:     //{{AFX_DATA_INIT(CMainDlg)
0067:     //}}AFX_DATA_INIT
0068:     // メモ: LoadIcon は Win32 の DestroyIcon のサブシーケンスを要求しません。
0069:     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
0070: }
0071: 
0072: void CMainDlg::DoDataExchange(CDataExchange* pDX)
0073: {
0074:     CDialog::DoDataExchange(pDX);
0075:     //{{AFX_DATA_MAP(CMainDlg)
0076:     //}}AFX_DATA_MAP
0077: }
0078: 
0079: BEGIN_MESSAGE_MAP(CMainDlg, CDialog)
0080:     //{{AFX_MSG_MAP(CMainDlg)
0081:     ON_WM_SYSCOMMAND()
0082:     ON_WM_PAINT()
0083:     ON_WM_QUERYDRAGICON()
0084:     ON_BN_CLICKED(IDC_BUTTON1, OnButtonRender)
0085:     //}}AFX_MSG_MAP
0086: END_MESSAGE_MAP()
0087: 
0088: /////////////////////////////////////////////////////////////////////////////
0089: // CMainDlg メッセージ ハンドラ
0090: 
0091: BOOL CMainDlg::OnInitDialog()
0092: {
0093:     CDialog::OnInitDialog();
0094: 
0095:     // "バージョン情報..." メニュー項目をシステム メニューへ追加します。
0096: 
0097:     // IDM_ABOUTBOX はコマンド メニューの範囲でなければなりません。
0098:     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
0099:     ASSERT(IDM_ABOUTBOX < 0xF000);
0100: 
0101:     CMenu* pSysMenu = GetSystemMenu(FALSE);
0102:     if (pSysMenu != NULL)
0103:     {
0104:         CString strAboutMenu;
0105:         strAboutMenu.LoadString(IDS_ABOUTBOX);
0106:         if (!strAboutMenu.IsEmpty())
0107:         {
0108:             pSysMenu->AppendMenu(MF_SEPARATOR);
0109:             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
0110:         }
0111:     }
0112: 
0113:     // このダイアログ用のアイコンを設定します。フレームワークはアプリケーションのメイン
0114:     // ウィンドウがダイアログでない時は自動的に設定しません。
0115:     SetIcon(m_hIcon, TRUE);         // 大きいアイコンを設定
0116:     SetIcon(m_hIcon, FALSE);        // 小さいアイコンを設定
0117:     
0118:     // TODO: 特別な初期化を行う時はこの場所に追加してください。
0119:     
0120:     return TRUE;  // TRUE を返すとコントロールに設定したフォーカスは失われません。
0121: }
0122: 
0123: void CMainDlg::OnSysCommand(UINT nID, LPARAM lParam)
0124: {
0125:     if ((nID & 0xFFF0) == IDM_ABOUTBOX)
0126:     {
0127:         CAboutDlg dlgAbout;
0128:         dlgAbout.DoModal();
0129:     }
0130:     else
0131:     {
0132:         CDialog::OnSysCommand(nID, lParam);
0133:     }
0134: }
0135: 
0136: // もしダイアログボックスに最小化ボタンを追加するならば、アイコンを描画する
0137: // コードを以下に記述する必要があります。MFC アプリケーションは document/view
0138: // モデルを使っているので、この処理はフレームワークにより自動的に処理されます。
0139: 
0140: void CMainDlg::OnPaint() 
0141: {
0142:     if (IsIconic())
0143:     {
0144:         CPaintDC dc(this); // 描画用のデバイス コンテキスト
0145: 
0146:         SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
0147: 
0148:         // クライアントの矩形領域内の中央
0149:         int cxIcon = GetSystemMetrics(SM_CXICON);
0150:         int cyIcon = GetSystemMetrics(SM_CYICON);
0151:         CRect rect;
0152:         GetClientRect(&rect);
0153:         int x = (rect.Width() - cxIcon + 1) / 2;
0154:         int y = (rect.Height() - cyIcon + 1) / 2;
0155: 
0156:         // アイコンを描画します。
0157:         dc.DrawIcon(x, y, m_hIcon);
0158:     }
0159:     else
0160:     {
0161:         CDialog::OnPaint();
0162: 
0163:         RECT r;
0164:         int offset = 10;
0165:         int x = 120;
0166:         CDC *pCdc= this->GetDC();
0167:         this->GetClientRect(&r);
0168:         int h = r.bottom-r.top - 2*offset;
0169:         int w = r.right-r.left - offset - x;
0170:         if(h<0)h=0;
0171:         if(w<0)w=0;
0172:         if(h<w)w=h;else h=w;
0173:         char *pData = Render::GetDataPointer();
0174: 
0175:         for(int j=0;j<h;j++){
0176:         for(int i=0;i<w;i++){
0177:             int no = (j*Render::RENDER_HEIGHT/h)*Render::RENDER_WIDTH
0178:                 + i*Render::RENDER_WIDTH/w;
0179:             pCdc->SetPixel(i+x,j+offset,RGB(
0180:                 pData[4*no+0],
0181:                 pData[4*no+1],
0182:                 pData[4*no+2],
0183:             ));
0184:         }
0185:         }
0186:         ReleaseDC(pCdc);
0187:     }
0188: }
0189: 
0190: // システムは、ユーザーが最小化ウィンドウをドラッグしている間、
0191: // カーソルを表示するためにここを呼び出します。
0192: HCURSOR CMainDlg::OnQueryDragIcon()
0193: {
0194:     return (HCURSOR) m_hIcon;
0195: }
0196: 
0197: void CMainDlg::OnButtonRender() 
0198: {
0199:     // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
0200:     Render::Render();
0201:     this->OnPaint();
0202: }
0203: 
0204: