MFCなるものを触ってみたけど、
VisualStudioからまた似たソフトが現れ戸惑う(;´・ω・)
こんなに立派なアプリケーション作れるよっていうサンプルなのかな。
めまいがする(´-∀-`;)
C#とどっちが楽なんだろう・・・。
いきなりこれかぁ・・・。
Re: いきなりこれかぁ・・・。
わたしはC#は最近WindowsFormなるやつを触っている経験しか無いですが
C#のWindowsFormはかなり簡単というか用意されているGUI部品がデフォルトで備える機能がMFCよりも良い感じです.
なので,
とりあえず簡単なGUIをさっさと作れば良い話においては
C#(Form) > MFC >> Win32APIのみ
という感じに思います.
C#の欠点は,「言語がC#である」ことだと思います.
個人的にはかなり難しい言語に思います.絶賛苦しみ中です.やめたい.
(未経験なら新しい言語を覚えねばならないという障壁もありますし,その際にC++を知っているとかえって障害になるように感じました.)
MFC側の利点は,やはり,使用言語が慣れ親しんだ C/C++ であるということでしょう.
欠点としては,MFC特有の謎のマクロやら何やらが自動生成されたコード上にわんさか出てくることと,
ドキュメントビューアーキテクチャとかいう仕組みに支配されている世界に迷い込んだ初心者は例外なく即座に地獄の業火に投げ込まれる という点が挙げられます.
とりあえず後者を回避するために,「ダイアログベースアプリケーション」を選択すると良いかと.
小さいツール程度なら,最初からあるダイアログの他に,絵的な要素を表示する場所用にCWndの派生クラスを1個追加すれば事足りるかと.
C#のWindowsFormはかなり簡単というか用意されているGUI部品がデフォルトで備える機能がMFCよりも良い感じです.
なので,
とりあえず簡単なGUIをさっさと作れば良い話においては
C#(Form) > MFC >> Win32APIのみ
という感じに思います.
C#の欠点は,「言語がC#である」ことだと思います.
個人的にはかなり難しい言語に思います.絶賛苦しみ中です.やめたい.
(未経験なら新しい言語を覚えねばならないという障壁もありますし,その際にC++を知っているとかえって障害になるように感じました.)
MFC側の利点は,やはり,使用言語が慣れ親しんだ C/C++ であるということでしょう.
欠点としては,MFC特有の謎のマクロやら何やらが自動生成されたコード上にわんさか出てくることと,
ドキュメントビューアーキテクチャとかいう仕組みに支配されている世界に迷い込んだ初心者は例外なく即座に地獄の業火に投げ込まれる という点が挙げられます.
とりあえず後者を回避するために,「ダイアログベースアプリケーション」を選択すると良いかと.
小さいツール程度なら,最初からあるダイアログの他に,絵的な要素を表示する場所用にCWndの派生クラスを1個追加すれば事足りるかと.
Re: いきなりこれかぁ・・・。
いきなりゲーム制作から始めた者として戸惑うばかりです(´-∀-`;)
メインループの中に入力、更新、描画を組み込めば動くもんだという考えしかないので、
MFCはいったいどこに組み込めばいいのか(むしろどうやって動いているのかすら)さっぱりですorz
メインループの中に入力、更新、描画を組み込めば動くもんだという考えしかないので、
MFCはいったいどこに組み込めばいいのか(むしろどうやって動いているのかすら)さっぱりですorz
Re: いきなりこれかぁ・・・。
例えば,私ともるもさんとで共同作業する場合に,
「それでは私がメインループとかを書くので,もるもさんはメインループ側から必要に応じて使うコードを書いてくださいね.
あ,メインループ側のコードは一切見せませんから.」
という感じ…かな?
もるもさんは「何かが起きたときにやるべきこと」を書きます.
「ウィンドウの上でマウスがクリックされたときにやること」とか,「ダイアログ上のこのボタンが押されたときにやること」とかを書きます.
何かが起きたときにその書かれたコードを呼ぶ作業はどこかの誰かがやります.
そんな感じです.
基本的には,メモ帳とかペイントみたいに,何かが起きるまではずっと何もせずに待機しているアプリケーションになります.
「それでは私がメインループとかを書くので,もるもさんはメインループ側から必要に応じて使うコードを書いてくださいね.
あ,メインループ側のコードは一切見せませんから.」
という感じ…かな?
もるもさんは「何かが起きたときにやるべきこと」を書きます.
「ウィンドウの上でマウスがクリックされたときにやること」とか,「ダイアログ上のこのボタンが押されたときにやること」とかを書きます.
何かが起きたときにその書かれたコードを呼ぶ作業はどこかの誰かがやります.
そんな感じです.
基本的には,メモ帳とかペイントみたいに,何かが起きるまではずっと何もせずに待機しているアプリケーションになります.
Re: いきなりこれかぁ・・・。
とりあえずダイアログベースのプロジェクトを作ると
CXXXDlg みたいな,プロジェクト名のついたダイアログのクラスが作られるハズです.
また,リソースエディタ上にまっさらなダイアログが表示されるハズです.
(ビルドして実行すれば,そのまっさらなダイアログが出てくる)
リソースエディタでダイアログ上にボタンを配置して,そのボタンをダブルクリックなりすると
「そのボタンが押された時にやる処理」を書くためのメソッド(イベントハンドラ)が CXXXDlg に追加されるので,そこにやるべきことを書きます.
CXXXDlgはもるもさんの庭なので,
最も簡単には,このクラスのメンバ変数として何かデータなりを持たせておけば
イベントハンドラからそのデータにアクセスできるので,データをあれこれするための必要な仕事が書けます.
CXXXDlg みたいな,プロジェクト名のついたダイアログのクラスが作られるハズです.
また,リソースエディタ上にまっさらなダイアログが表示されるハズです.
(ビルドして実行すれば,そのまっさらなダイアログが出てくる)
リソースエディタでダイアログ上にボタンを配置して,そのボタンをダブルクリックなりすると
「そのボタンが押された時にやる処理」を書くためのメソッド(イベントハンドラ)が CXXXDlg に追加されるので,そこにやるべきことを書きます.
CXXXDlgはもるもさんの庭なので,
最も簡単には,このクラスのメンバ変数として何かデータなりを持たせておけば
イベントハンドラからそのデータにアクセスできるので,データをあれこれするための必要な仕事が書けます.
Re: いきなりこれかぁ・・・。
リソースエディタのためにWindows10SDKをインストールする必要があったみたいで、
少し足止め食らいました(;´・ω・)
とりあえずなんか描画できるようにいろいろさわってみます(`・ω・´)
少し足止め食らいました(;´・ω・)
とりあえずなんか描画できるようにいろいろさわってみます(`・ω・´)
RE: いきなりこれかぁ・・・。
画像を簡単に扱えないのがキツイなぁ(;´・ω・)
Re: いきなりこれかぁ・・・。
MFCは昔使っていましたが、MFC標準のデザインから外れたことしようとするととんでもなく面倒くさいことになった記憶があります。
最近のMFCは使ってないのでわかりませんが、ゲーム作りには向かない気がします。
最近のMFCは使ってないのでわかりませんが、ゲーム作りには向かない気がします。
Re: いきなりこれかぁ・・・。
私もMFC使っていましたが、
画像やイメージを扱うのは向いていないと思いますよ。
普通に.NET使った方がよいと思うんだけどなあ…
画像やイメージを扱うのは向いていないと思いますよ。
普通に.NET使った方がよいと思うんだけどなあ…
Re: いきなりこれかぁ・・・。
>>いわんさん
マップを作って、テキストまたはバイナリファイルとして保存する。
ぐらいが出来れば良いかなーという感じで挑んでみましたが、非常に苦しんでいます(´-∀-`;)
後々、マップチップ画像を読み込む機能を入れることを考えますとキツイですね。
>>へにっくすさん
C#に馴染めなくて拒否したことが余計に遠回りすることになってしまいました(-_-;)
C++のほうがソースコードの見やすさという点で一番好きなのですが・・・。
でもMFCとC#は雰囲気似てるから今回の経験を生かしてもう一回挑戦してみます(`・ω・´)
マップを作って、テキストまたはバイナリファイルとして保存する。
ぐらいが出来れば良いかなーという感じで挑んでみましたが、非常に苦しんでいます(´-∀-`;)
後々、マップチップ画像を読み込む機能を入れることを考えますとキツイですね。
>>へにっくすさん
C#に馴染めなくて拒否したことが余計に遠回りすることになってしまいました(-_-;)
C++のほうがソースコードの見やすさという点で一番好きなのですが・・・。
でもMFCとC#は雰囲気似てるから今回の経験を生かしてもう一回挑戦してみます(`・ω・´)
Re: いきなりこれかぁ・・・。
画像ってそんな面倒でしたっけか?
ちょっと記憶があやふやだけど,Bitmapはそれほど苦労せず扱えたような…?
画像内容をあれこれ弄りたいとか,素敵な合成がどうのとかをせずに,とりあえずそのまま表示できればよいだけであれば,
今ちょいと(すっごい忘れてるからググりながら)やってみた感じだと
な感じでいけそうな気がします.
(CBitmap::FromHandle()がキモいなー… 解放とかしなくていいんだよなコレ?)
ちょっと記憶があやふやだけど,Bitmapはそれほど苦労せず扱えたような…?
画像内容をあれこれ弄りたいとか,素敵な合成がどうのとかをせずに,とりあえずそのまま表示できればよいだけであれば,
今ちょいと(すっごい忘れてるからググりながら)やってみた感じだと
//適当なタイミングで
//BMPをファイルからロード
m_hBMP = (HBITMAP)::LoadImage( NULL, _T("Test.bmp"), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE );
//表示コードはこんな感じ?
void CMyWnd::OnPaint()
{
CPaintDC dc(this); // ※この行は自動生成されたもの
if( m_hBMP==NULL )return;
CBitmap *pBMP = CBitmap::FromHandle( m_hBMP );
CDC MemDC;
MemDC.CreateCompatibleDC( &dc );
CBitmap *pOldBMP = MemDC.SelectObject( pBMP );
{
BITMAP bmp;
pBMP->GetObject( sizeof(BITMAP), &bmp );
dc.BitBlt( 0,0, bmp.bmWidth,bmp.bmHeight, &MemDC, 0,0, SRCCOPY );
}
MemDC.SelectObject( pOldBMP );
}
//ファイルから読んだBMPの後始末
if( m_hBMP!=NULL )
{ ::DeleteObject( m_hBMP ); }
(CBitmap::FromHandle()がキモいなー… 解放とかしなくていいんだよなコレ?)
最後に編集したユーザー usao on 2017年7月22日(土) 23:50 [ 編集 1 回目 ]