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