忍者ブログ
ゲームについてつらつらと。
[2] [3] [4] [5] [6] [7] [8]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

MFC Feature Packに使えそうな関数を見つけたので
これをダウンロードしてみる。
ちなみにインストールに必要な空き容量が約4000MB必要。ケタ外れ。

んで、インストールしてちょっと触ってみたんですけど
これは便利そうですね。

便利そうだけど新しい機能だから、
ググっても、これを使う為の資料が無い。
日本語版のMSDNも全く更新されない。

既存コードから把握しかないですね。
英語のMSDNを見るという手もあるけど。
PR
当たり判定とかを考える前に
とりあえずクォータービューのマップチップで
マップが作れるようなアプリをこしらえよう。

・・・と思ったので
とりあえずペイントアプリのようなレイアウトを作ろうかと
いろいろいじってたんですが難解でした。

具体的に言うと
CSplitterWndで画面でウインドウを分割したいけど全然上手くいかない。
これもいろんなサイトを回ったので
コード自体は間違ってないはずなんですけどねえ〜。

Imageと違ってこのクラス自体評判が悪いしなあ。

==============================================

【公式のFAQ】
CsplitterWndに関するFAQ
George Shepherdと私の共著、「MFC Internals」では章を1つ丸ごとこの問題に割いています。
CSplitterWndには、たくさんの興味深い内部機能、欠点、奇妙な動作などがあって、個人的にはお気に入りのMFCクラスなのです。

【公式のMSDN】
MFC 9.0 でサポートされなくなった MFC 3.0 の eVC クラスの一覧



CSplitterWnd クラス


==============================================

色々ひどいですねえ。
っていうか使えるのか使えないのかもわかんないなあ。
もういいや。

これだとブリーフまで脱げそうだなあ。

さて前回のでデータベースはほぼ完成したようなもんですね。
あとはしこしことデータを打ち込むだけ。

次はマップエディタと実行ファイルを作らねば。
とりあえず実行ファイルを先に作って
マップをどうやってデータ化するのか決めた方がいいな。

ここが鬼門ですね。クオータービューだし。
他のことは他所でも結構やってるからなんとかやれそうな気はする。
あれからGDI+を使ってみたけど全然駄目ですね。
ソースはこれで間違ってないはずなのになんでだろう。

・・・と、うなってたら
OnPaint関数を手書きで追加していたのが原因でした。
プロパティから追加しないとOnPaintとしての働きは無いのかー。そうかー。

今回は結構調べるのが骨だったのでソースも置いときます。
Imageを使う版とGDI+版。


画像huzimi.pngを
ID:IDC_HOKOU、コントロール変数:m_xcHokouのピクチャボックスに貼り付け。
ピクチャボックスの枠の調整はこのコードではImageでのみ有効です。


-------------------------------------------------------------------
//imageを使う場合はインクルードしておく
#include "atlimage.h"
#include < CString >

//GDI+を使う場合こっちをインクルード
#include
#pragma comment (lib, "Gdiplus.lib")
using namespace Gdiplus;


void Charadb::OnPaint()
{
CPaintDC dc(this);
// TODO: ここにメッセージ ハンドラ コードを追加します。
// 描画メッセージで CDialog::OnPaint() を呼び出さないでください。
{
//AfxMessageBox("実行確認用メッセージ消して良し");

CImage img;
img.Load("huzimi.png");

//ピクチャコントロールのデバイスコンテキストを取得
HDC hDC;
hDC = m_xcHokou.GetDC()->GetSafeHdc();

//Image===================================================

SetStretchBltMode(hDC,STRETCH_HALFTONE);//StretchBltのモード設定

//画像サイズそのままで貼り付ける場合
//img.BitBlt(hDC,0,0,img.GetWidth(),img.GetHeight(),0,0,SRCCOPY);


//サイズ2倍で貼り付ける場合
img.StretchBlt(hDC,0,0,img.GetWidth()*2,img.GetHeight()*2,0,0,img.GetWidth(),img.GetHeight(),SRCCOPY);



//ピクチャボックスの枠を画像サイズ@2倍角に合わせて描写(デフォルトの枠は事前にプロパティをいじり消しておく)
CPaintDC dc2(GetDlgItem(IDC_HOKOU));
CPen myPen,myPen2;
myPen.CreatePen(PS_SOLID, 2, RGB(230, 230, 230));//ペン1
myPen2.CreatePen(PS_SOLID, 2, RGB(100, 100, 100));//ペン2

dc2.MoveTo(0,img.GetHeight()*2);//線を引く始点設定

dc2.SelectObject(&myPen2);//ペンを設定
dc2.LineTo(0,-1);//線を引く

dc2.SelectObject(&myPen2);
dc2.LineTo(img.GetWidth()*2,0);

dc2.SelectObject(&myPen);
dc2.LineTo(img.GetWidth()*2,img.GetHeight()*2);

dc2.LineTo(0,img.GetHeight()*2);


img.Destroy();//Image解放


//GDI=====================================================
//GDI+を使う準備

using namespace Gdiplus;
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
//準備終わり

Graphics graphics(hDC); //デバイスコンテキスト
Bitmap image(L"huzimi.png"); // イメージロード、ファイル名の前の L は忘れない
graphics.DrawImage(&image, 0, 0);//イメージ描写

GdiplusShutdown(gdiplusToken);//解放

}
さてとSQLiteの方はなんとか読める程度には翻訳したので
これでデータ格納GUIはバッチシ!

次はダイアログに画像を表示できるようにしよう。
グラフィックのプレビューとかマップエディタには必要ですよね。

そういうわけでMFCでpngが扱えるライブラリを探しましたが
ドンピシャなものはあんまり見つかりませんね。

libpngは最新版のインストールに参考になりそうな日本語ページがないし。

OpenCVはOLEエラーで実装できなかったし。

CImageはコードは通るのに画像が表示されないし。

susieは使い方がよくわからない。

さあ次はGDIを試すぞ。←いまここ
明日も頑張ろう。


忍者ブログ [PR]
ブログ内検索
プロフィール

HN:
山田
誕生日:
07/17
趣味:
ゲーム製作
好みのタイプ:
無印ポポロクロイス物語
無印アークザラッド
That's QT
バハムートラグーン
花と雨と太陽と
砂のエンブレイス
デカボイス
チュウリップ
サテラビュー関連
メッセ
aonori_hataraotmail.com (一部画像なので手打ちでどうぞ)
タロット占い