いきなりこれかぁ・・・。

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

いきなりこれかぁ・・・。

投稿記事 by もるも » 8年前

MFCなるものを触ってみたけど、
VisualStudioからまた似たソフトが現れ戸惑う(;´・ω・)
スクリーンショット (12).png
こんなに立派なアプリケーション作れるよっていうサンプルなのかな。
めまいがする(´-∀-`;)
C#とどっちが楽なんだろう・・・。

アバター
usao
記事: 1889
登録日時: 12年前

Re: いきなりこれかぁ・・・。

投稿記事 by usao » 8年前

わたしはC#は最近WindowsFormなるやつを触っている経験しか無いですが
C#のWindowsFormはかなり簡単というか用意されているGUI部品がデフォルトで備える機能がMFCよりも良い感じです.
なので,
とりあえず簡単なGUIをさっさと作れば良い話においては
 C#(Form) > MFC >> Win32APIのみ
という感じに思います.

C#の欠点は,「言語がC#である」ことだと思います.
個人的にはかなり難しい言語に思います.絶賛苦しみ中です.やめたい.
(未経験なら新しい言語を覚えねばならないという障壁もありますし,その際にC++を知っているとかえって障害になるように感じました.)

MFC側の利点は,やはり,使用言語が慣れ親しんだ C/C++ であるということでしょう.
欠点としては,MFC特有の謎のマクロやら何やらが自動生成されたコード上にわんさか出てくることと,
ドキュメントビューアーキテクチャとかいう仕組みに支配されている世界に迷い込んだ初心者は例外なく即座に地獄の業火に投げ込まれる という点が挙げられます.
とりあえず後者を回避するために,「ダイアログベースアプリケーション」を選択すると良いかと.
小さいツール程度なら,最初からあるダイアログの他に,絵的な要素を表示する場所用にCWndの派生クラスを1個追加すれば事足りるかと.

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

Re: いきなりこれかぁ・・・。

投稿記事 by もるも » 8年前

いきなりゲーム制作から始めた者として戸惑うばかりです(´-∀-`;)
メインループの中に入力、更新、描画を組み込めば動くもんだという考えしかないので、
MFCはいったいどこに組み込めばいいのか(むしろどうやって動いているのかすら)さっぱりですorz

アバター
usao
記事: 1889
登録日時: 12年前

Re: いきなりこれかぁ・・・。

投稿記事 by usao » 8年前

例えば,私ともるもさんとで共同作業する場合に,
「それでは私がメインループとかを書くので,もるもさんはメインループ側から必要に応じて使うコードを書いてくださいね.
 あ,メインループ側のコードは一切見せませんから.」
という感じ…かな?

もるもさんは「何かが起きたときにやるべきこと」を書きます.
「ウィンドウの上でマウスがクリックされたときにやること」とか,「ダイアログ上のこのボタンが押されたときにやること」とかを書きます.
何かが起きたときにその書かれたコードを呼ぶ作業はどこかの誰かがやります.
そんな感じです.
基本的には,メモ帳とかペイントみたいに,何かが起きるまではずっと何もせずに待機しているアプリケーションになります.

アバター
usao
記事: 1889
登録日時: 12年前

Re: いきなりこれかぁ・・・。

投稿記事 by usao » 8年前

とりあえずダイアログベースのプロジェクトを作ると
CXXXDlg みたいな,プロジェクト名のついたダイアログのクラスが作られるハズです.
また,リソースエディタ上にまっさらなダイアログが表示されるハズです.
(ビルドして実行すれば,そのまっさらなダイアログが出てくる)

リソースエディタでダイアログ上にボタンを配置して,そのボタンをダブルクリックなりすると
「そのボタンが押された時にやる処理」を書くためのメソッド(イベントハンドラ)が CXXXDlg に追加されるので,そこにやるべきことを書きます.

CXXXDlgはもるもさんの庭なので,
最も簡単には,このクラスのメンバ変数として何かデータなりを持たせておけば
イベントハンドラからそのデータにアクセスできるので,データをあれこれするための必要な仕事が書けます.

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

Re: いきなりこれかぁ・・・。

投稿記事 by もるも » 8年前

リソースエディタのためにWindows10SDKをインストールする必要があったみたいで、
少し足止め食らいました(;´・ω・)

とりあえずなんか描画できるようにいろいろさわってみます(`・ω・´)

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

RE: いきなりこれかぁ・・・。

投稿記事 by もるも » 8年前

スクリーンショット (14).png
スクリーンショット (14).png (18.53 KiB) 閲覧数: 268 回
とりあえずグリッドを描画。
画像を簡単に扱えないのがキツイなぁ(;´・ω・)

アバター
いわん
記事: 32
登録日時: 9年前

Re: いきなりこれかぁ・・・。

投稿記事 by いわん » 8年前

MFCは昔使っていましたが、MFC標準のデザインから外れたことしようとするととんでもなく面倒くさいことになった記憶があります。
最近のMFCは使ってないのでわかりませんが、ゲーム作りには向かない気がします。

アバター
へにっくす
記事: 634
登録日時: 13年前

Re: いきなりこれかぁ・・・。

投稿記事 by へにっくす » 8年前

私もMFC使っていましたが、
画像やイメージを扱うのは向いていないと思いますよ。
普通に.NET使った方がよいと思うんだけどなあ…

アバター
もるも
記事: 54
登録日時: 9年前
連絡を取る:

Re: いきなりこれかぁ・・・。

投稿記事 by もるも » 8年前

>>いわんさん
マップを作って、テキストまたはバイナリファイルとして保存する。
ぐらいが出来れば良いかなーという感じで挑んでみましたが、非常に苦しんでいます(´-∀-`;)
後々、マップチップ画像を読み込む機能を入れることを考えますとキツイですね。

>>へにっくすさん
C#に馴染めなくて拒否したことが余計に遠回りすることになってしまいました(-_-;)
C++のほうがソースコードの見やすさという点で一番好きなのですが・・・。
でもMFCとC#は雰囲気似てるから今回の経験を生かしてもう一回挑戦してみます(`・ω・´)

アバター
usao
記事: 1889
登録日時: 12年前

Re: いきなりこれかぁ・・・。

投稿記事 by usao » 8年前

画像ってそんな面倒でしたっけか?
ちょっと記憶があやふやだけど,Bitmapはそれほど苦労せず扱えたような…?


画像内容をあれこれ弄りたいとか,素敵な合成がどうのとかをせずに,とりあえずそのまま表示できればよいだけであれば,
今ちょいと(すっごい忘れてるからググりながら)やってみた感じだと

CODE:

//適当なタイミングで
//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 回目 ]