■ VisualC++(MFC限定)相談室 MFC9.dll■

このエントリーをはてなブックマークに追加
Win32ApplicationでのプログラムをMFCで使いたいのですが方法がよくわかりません。
ヘッダー2つとWinMainのあるファイルと関数と定義等のあるファイル1つの
合計4つなのですがどなたか指南してください。よろしくお願いします。

プロジェクトに追加するだけだとプリコンパイル済み〜予期せぬEOF〜
とのエラーがでてしまって・・・。
>>933
Win32App Project ではなく、ソースだけ?
>>933
新しいプロジェクトをMFCを使用する設定で作ってソース見れ。
それでもわからんかったら、そうやって作った新しいプロジェクトにソース移せ。
>>933
俺も今別スレのコードをコピペして
コンパイルしたら予期せぬEOFが出ちゃって
何かと思ったら、 int main() { } の終わりの
大カッコがないのが原因だった。

意外とその辺に原因があるのでは?
ついでにエラーコードもここに書くといいかも。
937デフォルトの名無しさん:04/01/12 22:46
>>927
ん?今最新のMFCって7なの?
938デフォルトの名無しさん:04/01/12 22:47
>>933
拡張子を.cppに。
939933:04/01/12 23:51
レスありがとうございます。遅くなりました。
>>934
Win32Applicationで実行可能なソースがありまして、その機能をMFCで
使いたいのです。当方、MFCで少しGUIと機能を作ってしまったので
それに付け加えたかったのです。
>>935
少しやってみました。Win32Applicationで作ったものをMFCにする感じのことが
できそうなので、そちらも少しやってみます。
>>936
fatal error C1010というかんじです。括弧等は考えましたが、すでに実行可能な
ソースですし、違うかもしれません。
>>938
やってみます。また報告します。

皆様ありがとうございます。
940933:04/01/13 00:02
>>938
.cppにしたところ、同様のエラーが出てしまいました。

933であるようにヘッダー2つは問題ないようでしたが、関数と定義等のあるファイルを
追加すると出るエラーです。WinMain()のあるほうはそのまま使うわけではないのでまだ
追加していません。
>>939
MSDNでエラーコード検索してみた?
なんか検索されるけど。
俺は意味ワカラン。(w
942933:04/01/13 00:19
>>941
MSDNはいってないのです・・・。
>>933
それって単に stdafx.h をインクルードしてないだけでは?
944933:04/01/13 00:26
>>933
うお、そうでした…。
ありがとうございました、これからがんばってみます。

皆様ありがとうございました。とても助かりました。






AfxMessageBoxで変数を表示するにはどうすればいいですか?
947933:04/01/13 07:54
たびたびすみません。
あれからまた問題がありまして、

error C2197: 'int (__stdcall *)(void)' : 実引数が多すぎます。

と、いうエラーが追加したファイルにあった関数すべてに出てしまいました。
Win32Applicationの時には出なく、MFCのときにでたので引数とかポインタとかが
間違っているというよりは根本的に何かおかしい原因があるのではないかと思って
いろいろ調べていますが見つかりません。
どなたか助言いただけないでしょうか・・?
>>933
なんだかプロジェクトとソースの取り扱いに関して誤解しているような気がする。
プロジェクトの設定やstdafx.hの取り扱いをよく確認してみたら?
949933:04/01/13 15:54
アドバイスありがとうございます。
お察しのとおり当方まだ未熟すぎてとてもためになります。
そのあたりを調べてみます。ありがとうございました。
>>946
int hoge を表示したかったら
CString msg;
msg.Format("%d", hoge);
AfxMessageBox(msg);

っていうか、こんな質問するぐらいだから、デバッガ使いこなしてないっしょ?
俺もデバガの使い方よーわからん
TRACEくらいしか使ってないw
デバガメとかけて虫取りと解く。
その心は?
>>951
ASSERT, VERIFYでトラップ張っとくと、原因究明が楽になるよ。
Assert解説コード通りにつけたは良いけど意味分かりませんが何か?
955デフォルトの名無しさん:04/01/14 01:16
ボタンをクリックしたときのメッセージってボタンを押してから
離したときに出ますよね。ボタンが押された瞬間に処理を
開始したいんですけどどうしたらいいんでしょうか。
すんまそん、
誰か、独学で煮詰まってきた漏れに教授してやってください。

入力をCStringで受けたとします。
ファイルからにせよ、入力からにせよ。
そうするとそれを数値とがcharに変換できなくてあぼーんします、
charで受けても、結局CStringに表示の際に変換しなきゃいけなくて
そんときにもあたまこんがらがってあぼーんです。

クラス間で変数使えなくて、関数の返り値でCString使って
クラス間移動したりすると、やっぱり数値とかcharに変換出来なくてあぼーんです。

こんな漏れ、でもがんばって少しずつ少しずつプログラムが出来つつありますが、
こんな段階でのぞくべきサイトや書籍等、教えてくださったら感謝感激します。

ああ、ポインタ、わかんない、ああ、ああ、頭がー
pDC->の時に分かったと思ったら。

文字列の頭のアドレスだけ持ってきたって、結局それ以下\0が出るまで
コピーなりしてくれる奴とそうで無い奴覚えなきゃいけないじゃないですか。
覚えてないし、調べてコード書いてたら、何種類も書いて
ああ、機能一つつけるのに、もう二時間、四時間。

一つだけ教えてください、この苦しみが報われる日がいつかくるでしょうか。
957956 :04/01/14 01:21
>>955
OnDown
かなんか、マウス押した瞬間に反応するイベントがあらあよ。
>>956
うざいから二度と書き込まないで
>>853
シリアライズがらみの、この件だけどドキュメントテンプレートの
IDで指定したIDコードのリソース文字列で設定できるみたい。
デフォルトではIDR_MAINFRAME。

書式はシルトの標準講座MFC6.0のp487に書いてあるけど
転載が面倒なんで、がんばってどこかで調べてちゃぶ台。
どうしても分からなければ書きますが、MSDNあたりに
ないんかな。

そのへんは全部MSDNに書いてあるっつーの・・・
char str[] = "abcdefg222";
CString cstr = str;
char *sss = cstr.GetBuffer(80);
TRACE( "%s", sss );

>>956
ゆってる意味が分けわからん
CStringへの変換と、charへの変換したが、これでいいのか?
あと、ポインタとchar型配列は見かけ上同じように扱えるが?
>>961
技術的な質問してないんだから答える必要はないと思われ。
ああ、ほんとだ。
スマネ
そろそろ次スレだね
965デフォルトの名無しさん:04/01/14 08:42
アプリ中の別スレッドで、FormViewのエディットコントロールからリストコントロールへ
フォーカスを移すにはどうしたらよいですか。
m_List.SetFocus();
としてもフォーカスが移らないので
UpdateData(FALSE);
としたらアサートが起きました。コールスタックを辿っていくとコメントの記述で
CWnd::FromHandle()を使うらしいことがわかったのですが、
CWnd *pWnd=FromHandle(g_hListHWnd);//グローバル変数でリストのハンドルをあらかじめ確保しておく
pWnd->SetFocus();
としてもフォーカスは移りませんでした。
>>965
メッセージを投げて、メインスレッド側でSetFocusかな。
>>965
>SetFocus
>ウィンドウは、呼び出し側スレッドのメッセージキューにアタッチされているもの
>でなければなりません
これがあるので、例え ::SetFocus(g_hListHWnd) としても無理だ罠
最近大学の授業で使用することとなりVCを使い始めたのですが、
どうも自分の力量では理解できませんでしたので・・・

ある山の上にあるタンクから100個のボール(Bitmap)が左右の山の嶺を、乱数
を用いて方向を決めて転がっていくというプログラムを作っています。
描画には下の関数を使用しています。

void BitDisp(CWnd* h1,int bmp,int x,int y,int w,int h)
{
CDC pM;
CBitmap pB,*pold;
CDC* pDC=h1->GetDC();
pB.LoadBitmap(bmp);
pM.CreateCompatibleDC(pDC);
pold=pM.SelectObject(&pB);
pDC->BitBlt(x,y,w,h,&pM,0,0,SRCCOPY);
pM.SelectObject(pold);
}

ボールを転がっているように見せるのにはBitmapを描画して消す、というの
を繰り返すという手順でやりたかったのですが、それが分からなかったので
背景と同じ色のビットマップを作ってそれを上書きするという方法をとって
みました。プログラムを動かすとだんだん動作が遅くなり、そのうち止まっ
てしまいます。おそらくメモリ(RAM)が解放されずにどんどん消費されてい
ってるのではと思います。
他のサイトでDCの解放というものを見たのですが、使い方がいまいち分からず
結局状況を改善することが出来ませんでした。
どなたかどうか助言をお願いします。
既出だったらすいません、その時は言ってください。
Flashでやれ
とりあえずReleaseDCが見当たらないね
971965:04/01/15 01:36
>>966
>>967
かかれたとおり
::PostMessage(g_hListHWnd, WM_USER+31, 0, 0);
で出来ました。感謝です。
>>968
void Bitisp( ) の最後で
h1->ReleaseDC(pDC);
を入れてみたら、どうだろ?
>>972
>h1-ReleaseDC(pDC);

やってみましたが、画像が消えずに残ってしまいました。
うーん、これってビットマップの代わりに円の描画とか
でやるしかないのかな・・・
974968:04/01/15 02:44
973=968でした。

訂正:h1-ReleaseDC(pDC);
でプログラムが遅くなったり止まったりというのは解消できていました。
その後ネットで調べながら何度か試したら出来ました。
どうやら、

h1->Invalidate(TRUE);
h1->ReleaseDC(pDC);

という記述をしたら画像も消えてさくさく動くようになりました。
970,972さんどうもありがとうございました。
次スレです。
http://pc2.2ch.net/test/read.cgi/tech/1074104008/

ルートパス内にあるファイルを取得する方法ってどうすればいいですか?
>>975
CFileFind
977975:04/01/15 20:50
>>976
どうもありがとうございます。CFileFindをMSDNで調べると

CFileFind finder;
BOOL bWorking = finder.FindFile("*.*");
while (bWorking)
{
bWorking = finder.FindNextFile();
cout << (LPCTSTR) finder.GetFileName() << endl;
}
これでフォルダ内にあるファイルを列挙することが出来たんですが
ワークスペース内のファイルとフォルダしか表示することが出来ませんでした。
パスの指定はどうやるのでしょうか?
>>977
finder.FileFind(_T("B:\\*.*"));
979975:04/01/15 23:24
>>978
レスありがとうございます。
bWorking = finder.FindFile(_T("C:\\*.*"));
こうやるとCドライブのファイル、フォルダが表示されるようになりました(いくつか謎のファイルも表示されましたが・・・)。
でもこれって一定のフォルダしか表示されませんよね?
CStringのオブジェクトszPathに入っているパスのフォルダにあるファイルを表示したいのですが・・・。
何回もすいません。
脳みそ無いのか。
szPath += _T("\\*.*");
Finder.FindFile(szPath);
981975:04/01/15 23:50
>>980
お恥ずかしい・・・。出来ました。ありがとうございます。
VC6でグラフの描画プログラムを作っています。
スクロールバーでスクロールしているときにグラフの再描画が発生して
その処理をさせているのですが、スクロールのマウスイベントが
終了していない状態でポップアップがでて再描画しているため、
再描画処理が終るとスクロール処理が走り、そこで再描画が発生してループになってしまいます。
マウスイベントを破棄する関数とかないでしょうか?
教えてください。