★初心者にVisual C++を教えるスレ★ Part18

このエントリーをはてなブックマークに追加
1 ◆Manna2uCLg
Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。

  質問の仕方については次のページが大変参考になります。
  http://www.hyuki.com/writing/techask.html
  http://www.geocities.co.jp/Beautycare/4965/public/template.html
  http://myu.daa.jp/osiete/

■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
 (MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。

【前スレ】
★初心者にVisual C++を教えるスレ★ Part17
http://pc8.2ch.net/test/read.cgi/tech/1107926989/

過去スレ、関連スレなどは>>2-5ぐらい。
2 ◆Manna2uCLg :2005/04/15(金) 13:34:37
3デフォルトの名無しさん:2005/04/15(金) 13:34:57
【関連スレ】
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/l50

Win32API質問箱 Build27
http://pc5.2ch.net/test/read.cgi/tech/1106103119/

鬱だ氏のう DirectX (Part 15)
http://pc5.2ch.net/test/read.cgi/tech/1096649788/l50

C言語なら俺に聞け! Part 101
http://pc5.2ch.net/test/read.cgi/tech/1107128274/

C++相談室 part39
http://pc5.2ch.net/test/read.cgi/tech/1106527792/

C/C++の宿題を片付けます 40代目
http://pc5.2ch.net/test/read.cgi/tech/1107625122/

【初心者歓迎】C/C++室 Ver.13【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1104843249/
4 ◆Manna2uCLg :2005/04/15(金) 13:35:38
5 ◆Manna2uCLg :2005/04/15(金) 13:37:04
過去スレの書き込み時に 「httpが多すぎ」 と警告されちまったので、
h 削ってあります。
6デフォルトの名無しさん:2005/04/15(金) 13:51:07
>>1
7デフォルトの名無しさん:2005/04/15(金) 14:03:04
>>1
もつ
8デフォルトの名無しさん:2005/04/15(金) 17:58:55
質問
class A : public CObject{
virtual void Serialize( CArchive& ar ) ;
}
class B : public CObject{
virtual void Serialize( CArchive& ar ) ;
}

template< typename DATA > class CM : public CObject
{
private:
CMap< int, int ,DATA, DATA > m_map;
public:
virtual void Serialize( CArchive& ar ) ;
}
CM< A > CM_A;
CM< B > CM_B;

template < typename DATA > class CN : public CObject
{
private:
CArray < DATA, DATA > m_array;
public:
virtual void Serialize( CArchive& ar ) ;
}

CN < CM_A > CN_A;
CN < CM_B > CN_B;
9デフォルトの名無しさん:2005/04/15(金) 18:02:00
このような構成でシリアル化を行いたいのですが
うまくできません。
どのように行えばよいか教えてください。
10デフォルトの名無しさん:2005/04/15(金) 18:02:28
うまくいかない、を説明するところから始めようか。
11デフォルトの名無しさん:2005/04/15(金) 18:16:22
各クラスに
DECLARE_SERIAL( A )
IMPLEMENT_SERIAL( A, CObject, 1 )
と記述すればよいと思っていたのですが
DECLARE_SERIAL( CN )
IMPLEMENT_SERIAL( CN, CObject, 1 )
と記入してもコンパイルエラーとなりますよね?
「クラスのテンプレート名で仮引数リストの指定がありません。」といわれます。
どのように記述すればいいのかが分かりません。

初歩的ですみません。。。
12デフォルトの名無しさん:2005/04/15(金) 18:34:25
全然初歩的じゃない。
これ実現しようとすると果てしなく面倒なことになりそう。
つか不可能かもしれん。
13デフォルトの名無しさん:2005/04/15(金) 18:56:55
そうなんですか。。。
地道に複数作ったほうが楽かもしれないですね。。。
CMapのArrayをもったクラスをつくりたかったのですが
蚤の脳ではできません。。。
14デフォルトの名無しさん:2005/04/15(金) 23:15:46
質問なんだけど、.NETにはClassWizardはないのかな?
15デフォルトの名無しさん:2005/04/16(土) 03:05:04
前スレにぬるぽ貼ったの誰だ
16デフォルトの名無しさん:2005/04/16(土) 11:15:48
struct A
{ void func(int) {} };

struct B : public A
{
B() { func(0); } // (a)
void func() {}
};

A a;
a.func(0); // (b)

(a)のところで「C2660: 'func' : 関数が不正な 1 個の実引数をともなって呼び出されました」となります。
引数からA::funcが呼ばれることはわかると思うのですが、A::func(0)としてやらなければなりませんでした。
ところが(b)の方はそのまま通ります。
どういう意図でこういうことになっているのでしょうか?
17デフォルトの名無しさん:2005/04/16(土) 11:43:09
>>16
B::funcがA::funcを隠している。
Bの中にusing A::func;を書いてみろ
1816:2005/04/16(土) 11:51:00
>>17
using A::func;を書いたらB::func()の方がC2660で呼べなくなりました。
つかクラス内からはA::funcが隠蔽されて、外からは両方見えるというのはどうしてなのでしょうか?
1916:2005/04/16(土) 11:57:18
勘違いでした。
B b;
と書いたつもりが
A a;
となってました。
BのインスタンスからはA::funcは隠蔽されてますね。
失礼しました。
20デフォルトの名無しさん:2005/04/16(土) 13:15:00
ダイアログベースでランチャーを作っているのですが、どうにも分からないことがあります。
ドラッグされたファイルを受け取って、そのファイルのアイコンをボタンに描画したいと思っているのですが、
アイコンの取得の仕方、描画の仕方はどのようにすれば良いのでしょうか?

HICON hIcon = ExtractIcon(AfxGetInstanceHandle(),path,0); // pathはファイルのフルパス

tipsサイトをうろついていたらこれでアイコンの取得ができるという説明を見かけたのですが、
あっていますでしょうか?
ボタンへの描画についてはオーナードローという方法でやればいいようなのですが、
どうにも要領がつかめませんorz
こうすればいい、というやり方がありましたらよろしくお願いします。
21デフォルトの名無しさん:2005/04/16(土) 14:11:24
すごく基本的な質問なのでしょうが
VC++でも
.NETであったりMFCであったり空のプロジェクト生成であったりする違いは
ただ単にそれぞれがカバーしているライブラリの範囲の違いという認識であってますでしょうか。
具体的には、MFC使ったら、.NETに収録されてるクラス群は利用できない。
空のプロジェクトを生成した場合、MFC、.NETで使えるクラス群は利用できない。
こういう認識であってますか。

ここ勘違いしてるとかあったら指摘していただけるとうれしいです。
22デフォルトの名無しさん:2005/04/16(土) 14:18:37
IDEの話でなら雛形ソースの作成の違いだよ。
空プロジェクト作成後にMFC用に自分で全部書いてもいいし
2321:2005/04/16(土) 14:22:52
>>22
アドバイスありがとうございます。

>IDEの話でなら
そうです。Visual C++ the Spoke 使ってます。
プロジェクトを生成したら作成されるソースの違いなだけというわけですね。

>空プロジェクト作成後にMFC用に自分で全部書いてもいいし
こうすれば、空プロジェクトを生成してもMFCの提供するクラス群を使うことができると。
24デフォルトの名無しさん:2005/04/16(土) 17:34:50
リリースモードでコンパイルして実行すると(要はF5キーを押すと、ってことです)、
以下のようなメッセージが出てアプリが実行できません。

シンボル情報なし 
"hoge.exe"にはデバッグ情報が含まれていません(シンボルが読み込まれていません。)
デバッグを実行するにはOKを押してください。

指示通りにOKを押しても、何も反応がなく、アプリも実行されません。
プロジェクトの設定のどこかが変わってしまったためだと思うのですが、これって
どうやれば直るんでしょうか・・・
25デフォルトの名無しさん:2005/04/16(土) 17:41:45
それはデバッグ実行してるから
26デフォルトの名無しさん:2005/04/16(土) 20:28:12
統合開発環境で、.NETを選択してプロジェクトを生成したらフォームが作成されて
フォームデザイナを使ってWindowsのインターフェース部分を作りながら、コード書いていく
という便利な作り方ができますが

MFCや、空でプロジェクトを生成した場合、基本的なコードだけが生成されてフォームは
どこにも見当たりません。

フォームデザイナって.NETを選択して生成した場合にのみ使用できるものなのでしょうか。
それとも、MFCや空でもどこかいじればフォームデザイナ使えるのでしょうか。
27デフォルトの名無しさん:2005/04/16(土) 20:36:22
はぁ?
28デフォルトの名無しさん:2005/04/16(土) 20:38:04
ひぃ!
29デフォルトの名無しさん:2005/04/16(土) 20:42:07
MFCで一度もFORM見たこと無い(´・ω・`)
3026:2005/04/16(土) 21:52:44
はぁ?とかひぃ!とか >>29 とか言われるということはMFCについて根本的に何か勘違いしてるようですね。
.NETしかいじったことなかったのですが、一通り参考書やり終わったので自分でアイデアを出して
簡単なアプリを作ろうと思ったのよ。

で、そのアプリに、jpeg画像を表示する機能をつけようとしていたところ、CImageというクラスを発見。
ところがCImageは、MFCが提供するクラスらしい。
いつものように.NETを選択してプロジェクトを生成して作り始めたから

C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxv_w32.h(18):
fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
こんなエラーが1つ表示されて先にすすめない。
「windows.hは、既にインクルードされてて、MFCアプリには必ずしもwindows.hは必要ない」

windows.h忘れてるよ。なら、つけたせばいいんだろうけど。
必要ないっていっても、ソースコードには#include "windows.h"なんて記述はどこにもないから
削りようもないし、しょうがないから、MFC選択してプロジェクト生成させて1から作り直したら
いいんじゃないかと考え付いたのよ。

ところがいざMFC選択して生成してみたところ、基本的なコードだけが生成されて、フォーム
らしきものは見当たらない。
なので、MFCはフォームデザイナ使えないのか。と思ったわけです。
MFC選択してプロジェクト生成させればCImageクラスがあっさり使えるんじゃないかと思ったのですが。
こういう場合、.NETで使える。別の画像表示クラスを探したほうが早いでしょうか。
CImageは使い方簡単そうだったから採用したんですが。
31デフォルトの名無しさん:2005/04/16(土) 21:58:24
>>30
他探せw
32デフォルトの名無しさん:2005/04/16(土) 22:13:26
>>30
おまえが言うフォームに近いものは
ダイアログベースのアプリかもしれない
3326:2005/04/16(土) 22:13:25
CImageクラスは
#include "atlimage.h"
#include "afxwin.h"
をインクルードして

CImage img;
img.Load("sample.jpg");
CDC *pDC = CDC::FromHandle( img.GetDC() );
cdc.BitBlt( 0, 0, img.GetWidth(), img.GetHeight(), pDC, 0, 0, SRCCOPY );
img.ReleaseDC();
書いて、上のレスに記述したエラーが発生。

しょうがないから、他を探すということで
http://wisdom.sakura.ne.jp/system/msnet/msnet_win13.html
を参考に

Graphics g = e.Graphics;
Image img = new Bitmap("sample.jpg");
g.DrawImage(img , 0 , 0);

に書き換えたけど、なんとこれも上のレスに記述した同じエラーが発生した。

public static void Main(string[] args) {
Application.Run(new WinMain());
この部分の記述がいるのか。
Graphics g = g.Graphics;の部分はFormメソッドの外に書かれてる。
メニューの開くを押したら表示されるようにしたいのに(T T)
クラス発見しても全然使いこなせない。基本的なことがどうも消化しきれてないっぽい。
悔しい。
34デフォルトの名無しさん:2005/04/16(土) 22:20:38
というか中途半端に手を出さずに
基本から勉強した方がいいんじゃないだろうか
3526:2005/04/16(土) 22:33:20
皆さんどうもアドバイスありがとう。
>>32
他の件でググって読んだページにたまたまMFCに関する記述が書いてあることがあって
そういえばMFCの記述があるところにダイアログベースがどうのとか書いてあった記憶がある。

MFCでプロジェクト生成するとダイアログベースのアプリしか作れないということなのかな。
単に画像表示させるだけのアプリだから、ダイアログで十分だなとは思うけど。
もうわけがわからなくなってきた。
開発環境の操作方法を勉強しながらアプリも1本作るという内容の参考書を一通りやって
さあ、自分で作ってみるぞと思ったものの。
用意されてるクラスを使うだけでもこの有様だから。
C++は、.NETとかMFCとかややこしい。
ここらへんもっとつっこんで勉強したほうがいいかもと思った。
ググって見つけたサンプルコードそのままコピペしても必ずといっていいほどエラーがでる。

http://wisdom.sakura.ne.jp/system/msnet/index.html
の解説も.NETだけど。よくみたらフォームとか部品を自分で記述してるし。
.NETって書いてるから、これ参考にしたら解決するだろうと思ったのに(T T)
フォームデザイナで部品を自分でフォームにドラッグしていってちょちょいと作ってって方法で
やったから。他の手法で作ったものを参考にしても自分のアプリに応用できない。

>>34 さんがいうように、自分で考えたアプリを作ってみるという段階じゃないのかも。
統合開発環境の操作覚えて、MSDNやgoogleで欲しい機能を実現できるクラスを探して、使い方見て
自分のアプリのコードに貼り付ければいけると思ったのに(T T)
36デフォルトの名無しさん:2005/04/16(土) 23:14:40
まずは.NETとWin32との関係について勉強しよう
3726:2005/04/16(土) 23:27:33
>>36
どこらへんを勉強すればいいのか親切に教えてくれてありがとう。
実は、とはいってもどこらへんから優先的に学習すればいいの?という疑問がわいてたので
38デフォルトの名無しさん:2005/04/16(土) 23:30:57
RADできるのは、リソースで管理できる範囲だけ。
したがって、ダイアログはドラッグアンドドロップで作れるが、
それ以外のwindowアプリケーションは、コード書くしかない。
そういう仕様。
39デフォルトの名無しさん:2005/04/16(土) 23:39:05
26は、C# .NET のほうが向いている。絶対。
4026:2005/04/17(日) 00:11:49
皆さんどうもアドバイスありがとう。

>>38
MFCや空だと、どこ探してもフォームデザイナ使えないと思ったら仕様なんですね。
そもそも、GUI部品をゴリゴリコード書くのが面倒くさいから、統合開発環境買ったという
いきさつがあるので。どうしてもGUI部品を楽に作りたいと思ったら.NET使うしかないということか。

>>39
今回の件でC++って、.NET MFC とかいろいろあって覚えるまでがちょっと大変とわかった。
C#って.NETだから、一度どれかの参考書なりサイトでマスターしてしまえば
クラス調べるときに、C++のように、これはMFCの提供するクラスだから…、とか
これは空で作ったものっぽいから…。とかいちいち考える必要ないだろうなとは思う。
自分の考えたアプリが完成すればいいわけだから、完成は早いにこしたことはないし
作りやすいにこしたことないし、調べやすいにこしたことはないと思う。
C#がそれを満たしてくれる言語なのかは、やってみなければわからない部分はあると思うけど。
>>39 さんの。向いている。「絶対」と。指摘してくれてるわけだから
使用言語をC#に変えてみようかと思います。C#の方が作る過程もスマートなんじゃないかと
思えてきた。
41デフォルトの名無しさん:2005/04/17(日) 01:13:59
>GUI部品をゴリゴリコード書くのが面倒くさい
ならC#かVBがいいかと
4226:2005/04/17(日) 12:56:27
>>41
アドバイスありがとう。
VBも.NETになってからそこのところがどうなったかはわかりませんが
VBはかゆいところに手が届かなそうといったイメージがあるのでC#にします。
43デフォルトの名無しさん:2005/04/17(日) 18:02:02
>>42
つ[ Delphi ]
44デフォルトの名無しさん:2005/04/17(日) 18:20:37
プログラム童貞ですが、まず何からしたらいいでしょうか?
45デフォルトの名無しさん:2005/04/17(日) 20:24:04
>>44
剥けているかいないか、それが問題だ。
46デフォルトの名無しさん:2005/04/17(日) 21:52:55
あるメニューボタンを押したら、そのウィンドウを常に前面に
表示させるようにするプログラムを作りたいのですが、
どのように作ればよいのか、アドバイスお願いできませぬでしょうか・・・
47デフォルトの名無しさん:2005/04/17(日) 22:45:52
対象のウィンドウにSetWindowPosでいけるんじゃないかい?
MDIの場合はダメかもわからんです。
48デフォルトの名無しさん:2005/04/17(日) 22:57:01
>>47さんのお陰でいいサンプルも見つかりました。
ありがとうございました m(_ _)m
49デフォルトの名無しさん:2005/04/18(月) 02:00:58
2色しか使っていないビットマップをインポートしても
ビットマップは正しくインポートされましたが、ビットマップは256色以上含んでいるためビットマップエディタへ読み込めません
と出るのですが、どういうことでしょうか?表示はできるみたいなんですが・・・
また、リソースビットマップの透過はどうやるのでしょうか?
50デフォルトの名無しさん:2005/04/18(月) 07:02:46
DLLにある関数をしょっちゅう使いたい場合でも
やっぱり使う直前に::LoadLibrary()して、使い終わったら即::FreeLibrary()しなきゃ
なりませんか?
自前のアプリの初期化関数(OnInitDialog()とか)でLoadLibrary()してから
メンバ変数に関数ポインタせっとしてメソッドで使いまくり、終了するときに
OnDestroy()で解放できたらオーバーヘッド軽くなりそうな気がするんですが。
51デフォルトの名無しさん:2005/04/18(月) 08:24:15
>>50
使う直前にLoadLibraryして、使い終わったら即FreeLibraryなんて、誰に教わったの?

プロセス内で最初に1回LoadLibraryしたら、それっきりでいい。
FreeLibraryはしなくてもいい。
それで問題があるようなら、そのDLLの作りのほうがマズイよ。
5251:2005/04/18(月) 08:24:40
というか、面倒くさいから、インポートライブラリ使えばいいと思う。
53デフォルトの名無しさん:2005/04/18(月) 09:44:51
>>49
保存されてるパレットが256色以上になってるんじゃない?
そのビットマップのプロパティを見ると分かるんじゃなかったかな。
54デフォルトの名無しさん:2005/04/18(月) 13:12:10
メニューアイテムのenable、disableを切り替えるにはどうすればいいですか?
55デフォルトの名無しさん:2005/04/18(月) 15:18:06
VC++.NET使ってるんですが
VC++6とまったくインターフェースに互換性がなくて困ってます(なんですかソルーションて)
デフォルトのコンパイル/リンクオプションはどこで設定すればいいんでしょうか
また、プロジェクト専用のオプションはどこで設定すればいいんでしょう

教えてください
56デフォルトの名無しさん:2005/04/18(月) 16:08:47
>>55
とりあえず1時間くらい、いじりまわせ。
57デフォルトの名無しさん:2005/04/18(月) 16:15:35
もう一週間以上いじってます
なんかIE触ってるみたいで気持ち悪いです…
汎用性ばかり重視して操作性を削るってなに考えてるんだMSは…

58デフォルトの名無しさん:2005/04/18(月) 16:32:11
一週間もいじってて未だにリンクオプションすら
見っけられないってちょっとおかしいぞ。

ホントにVC++6使ってのか?
俺も最初は戸惑ったけど、すぐに分かったぞ。
59デフォルトの名無しさん:2005/04/18(月) 16:38:33
慣れれば、.NETのほうが使いやすい
60デフォルトの名無しさん:2005/04/18(月) 17:02:41
プロジェクトごとのオプションは見つけたんですけど
チェックボックスとかじゃなくて手打ちなんですがそれで正解ですか
プロジェクト作るたびにわざわざ/I とか /MTとか打ちたくないんです
インクルードパスなんて決まってるしマルチスレッドアプリしか作らないし
61デフォルトの名無しさん:2005/04/18(月) 17:07:32
本当にVC使っているのか甚だ疑問に思えてきた・・・
62デフォルトの名無しさん:2005/04/18(月) 17:33:07
>>55
たぶんそれパチモノ。
63デフォルトの名無しさん:2005/04/18(月) 17:36:07
まじで!?
学校に入ってるやつですよ
64デフォルトの名無しさん:2005/04/18(月) 19:00:30
促されるようにVC++.NETを導入したんですが、ちょっと教えてください。
Cの勉強で最初に作るようなごくごく簡単な(Hello,worldの表示)プログラムをCで組みたいのですが
プログラムに間違いは無いにも拘らずエラーが出てビルドできません。

実行するビルド コマンド ラインがありません。
メイクファイル プロジェクト動作を実行しています。
[プロジェクト名] : error PRJ0003 : ' の起動中にエラーが発生しました。

実行するビルドコマンドラインがありません。
↑ここが問題なのは分かっているのですが、どう対処して良いのか分かりません。
どなたか教えていただけないでしょうか。
65デフォルトの名無しさん:2005/04/18(月) 19:10:31
ビルドコマンドラインを設定しろ
66デフォルトの名無しさん:2005/04/18(月) 19:33:02
ボタンコントロールにドラッグアンドドロップしたいのですが、どうしたらいいか分からないです。
新規に『CButton』を継承したクラス『CMButton』を作成、そこにWM_DROPFILESをインプリメント(?)して、
ダイアログクラスにCMbutton型のオブジェクト『m_Button』を宣言。
そしてダイアログクラス内の『OnInitDialog()』で『m_Button.SubclassDlgItem(IDC_MBUTTON,this)』
を実行して、サブクラス化してみたのですが、
起動直後に『wincore.cpp』内の『ASSERT(FromHandlePermanent(hWndNew) == NULL);』の所でエラーが出ます。
なので『WindowProc』をオーバーライドして、『WM_CREATE』が送られたときにサブクラス化してみると、
エラーは出なくなったものの、ドラッグしても『CMButton』の『OnDropFiles』が機能しません。
お助けください…orz

●ヘッダファイル
class CMButton :public CButton
{
public:
CMButton(void);
~CMButton(void);
protected:
//{{AFX_MSG(CMButton)
afx_msg void OnDropFiles(HDROP hDropInfo);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
●cppファイル
BEGIN_MESSAGE_MAP(CMButton, CButton)
//{{AFX_MSG_MAP(CMButton)
ON_WM_DROPFILES()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CMButton::OnDropFiles(HDROP hDropInfo)
{
67デフォルトの名無しさん:2005/04/18(月) 20:51:49
DragAcceptFiles
6866:2005/04/18(月) 21:11:35
>>67
レスありがとうございます。
書いていませんでしたが、 DragAcceptFiles() はダイアログクラス内の OnInitDialog() で宣言しています。
ボタンコントロールのプロパティの Accept Files も試してみましたが、どちらも機能しませんでした。
というかドラッグの受付自体は機能しているんですが、受け付けた後の
void CMButton::OnDropFiles(HDROP hDropInfo)
の処理が機能していないのです。
69デフォルトの名無しさん:2005/04/18(月) 21:11:57
MessageBox()でメッセージを出したいのですが、
親クラスを指定しない場合はNullにするとあったので
MessageBox(Null,"失敗しました","error",MB_ICONERROR | MB_OK);
としたのですが、4つの引数を持つことはできませんと言われてコンパイルエラーとなります。
Nullは定義されていないのかと疑って
MessageBox(,"失敗しました","error",MB_ICONERROR | MB_OK);
MessageBox(\0,"失敗しました","error",MB_ICONERROR | MB_OK);
MessageBox(0,"失敗しました","error",MB_ICONERROR | MB_OK);
と試しましたがいずれもダメでした。
調べたところ引数は4つのハズなのですがどこがどう間違っているのでしょうか?
70デフォルトの名無しさん:2005/04/18(月) 21:14:22
>>69
::MessageBox(NULL, TEXT("失敗しました"), TEXT("error"), MB_ICONERROR | MB_OK);
71デフォルトの名無しさん:2005/04/18(月) 21:46:31
>>69
MSDNライブラリでキーワード「MessageBox」を見れば、すぐわかるものを・・・。
72デフォルトの名無しさん:2005/04/18(月) 21:52:28
> MessageBox(0,"失敗しました","error",MB_ICONERROR | MB_OK);

これ通るだろ
73デフォルトの名無しさん:2005/04/18(月) 22:33:45
>>72
CWnd::MessageBoxってオチだろ。
74デフォルトの名無しさん:2005/04/18(月) 22:57:03
一応MSDNで調べてみて上記のような状態になってしまったので
質問させて頂きました。
MessageBox(0,"失敗しました","error",MB_ICONERROR | MB_OK);
ではやはり引数が4つでエラーとなります

解決策としては第一引数を完全に省くことで何故かできました。

CWnd::MessageBox
CWndに定義されているmessageBOxとそうでないものがあるようですね
調べてみます
どうもです
75デフォルトの名無しさん:2005/04/18(月) 23:16:22
Microsoft も紛らわしいモノを作ってくれたもんだ
76デフォルトの名無しさん:2005/04/19(火) 00:35:17
>>74
なんでMSDNで調べたのにわからないの?

MessageBoxを見ようとすると、候補がずらずらと出てくるじゃないか。
Win32API、MFCのCWnd、MFCのCWindow、WFC、などなど。

自分が呼んでいるMessageBoxが、いったい何なのかくらい、把握しとけって。
つーか、C++わかってないだろ。VC++以前の問題だよ。

普通は、>>70さんの書き込みで理解できるぞ。
77デフォルトの名無しさん:2005/04/19(火) 01:21:18
>>76
一応ここは初心者スレだぞ
78デフォルトの名無しさん:2005/04/19(火) 01:39:20
いや いいんです
Win32API、MFCのCWnd、MFCのCWindow、WFC、などなど
があることがわかっただけでも収穫でした

Javaで簡単なiアプリを作ってただけだったのでcとwindowsAPIを
平行してやっているのですが、なかなか厳しいのが現状です
79デフォルトの名無しさん:2005/04/19(火) 02:58:06
初心者にVisual C++を教えるのであって、C++を教えるのではない。

80デフォルトの名無しさん:2005/04/19(火) 02:59:16
MFCがWin32APIと同じ名前のメソッドを持ってるのはVisual C++の話だろ。

とはいえ、::の意味を知らない質問者にも困るが・・・。
81デフォルトの名無しさん:2005/04/19(火) 03:47:20
どうでもいいけど::←見えにくいな
::CreateWindow←だからって初心者スレらしく全角でもいいが
コピペして動かないとか言われても困るか…
82デフォルトの名無しさん:2005/04/19(火) 11:01:09
LoadLibraryしてGetProcAddressして得たC++関数を呼ぶ(実行する)には
どうしたらいいですか?
例えば ?OpenSoftkeyPallete@@YAPAUHWND__@@PAU1@@Z の場合。
83デフォルトの名無しさん:2005/04/19(火) 11:08:19
関数のアドレスが取得出来たって事は
その関数の呼び出し方法に則って呼び出せば良いだけじゃない?
84デフォルトの名無しさん:2005/04/19(火) 16:09:27
本来 return msg.wParam を返すとかなってますが、
エラーが起こったときは、return 1 じゃなくて、return 0 で良いのでしょうか?
85デフォルトの名無しさん:2005/04/19(火) 19:39:41
>>84
何の話だ?
86デフォルトの名無しさん:2005/04/19(火) 21:06:27
VisualStudio.NETtheSpokePremiumを買って、初めてVisual C++.NETを使おう
と思うのですが、何から始めていいのかわけがわかりません・・・
C++の入門書とVisualC++.NETの入門書一体どっちを買えばいいのですか?
87デフォルトの名無しさん:2005/04/19(火) 21:22:12
NETの入門書でも買ってまずはHelloWorldから始めましょう。
88デフォルトの名無しさん:2005/04/19(火) 21:28:08
>>87
でも、.NETの本ってC++がある程度わかった人向けのような気がする
のですが、気のせい?
89デフォルトの名無しさん:2005/04/19(火) 21:36:56
そう思うなら実際本屋さんへ行って確かめてみた方がいいかも。
90デフォルトの名無しさん:2005/04/19(火) 21:41:40
>>89
C++の本ではなく.NETの本じゃないとなにか困るんですか?
91デフォルトの名無しさん:2005/04/19(火) 21:45:58
いやそういう意味じゃなく両方の本を比べてみたらって事。
NETの入門書の最初の方をみて書いてある内容自体何がなんだか
サッパリならC++の入門書を買ったほうが良いだろうし。
92デフォルトの名無しさん:2005/04/19(火) 21:55:13
.NET本のほうはIDEの使い方も一緒に載ってるんじゃない?
俺はvcvars32.batを利用してコマンドラインから使ってる。

ところで、どこかにVCのデバッガの解説サイトって無いですか?
93デフォルトの名無しさん:2005/04/19(火) 21:59:46
>>92
解説の必要があるのかどうか・・・
94デフォルトの名無しさん:2005/04/19(火) 23:03:46
>>93
詳しく
95デフォルトの名無しさん:2005/04/19(火) 23:06:45
ヘルプで十分という事じゃないかと
96デフォルトの名無しさん:2005/04/19(火) 23:25:20
プログラムを覚えたいんですが、なにから始めたらいいでしょうか・・・
97デフォルトの名無しさん:2005/04/19(火) 23:28:17
とりあえず、そんな質問をしないようになればいいと思う
98デフォルトの名無しさん:2005/04/20(水) 00:24:15
>>96
なんで?
99デフォルトの名無しさん:2005/04/20(水) 01:04:53
>>86
C++の初心者ならC++の入門書
VC++.NETの初心者ならVC++.NETの入門書
どちらも初心者なら、両方の入門書をそれぞれ。

C++はプログラム言語
VC++.NETは処理系

この違いを区別せず、一度にやりましょう、という本もあるけどね。
100デフォルトの名無しさん:2005/04/20(水) 16:02:23
質問です。環境は XP、VC++ 6.0 です。

MFC を使って組んでいます。
実行中に 「半角/全角」を押すと、辞書がONになり、
キーを押したときの処理を奪われてしまいます。
(生成したウィンドウの左上に打った文字が出てくる)
これを回避するにはどうすればいいでしょうか。
「半角/全角」を押しても辞書がONにならないように……。

よろしくお願いします。
101デフォルトの名無しさん:2005/04/20(水) 16:24:53
キーボードの設定を変える
102デフォルトの名無しさん:2005/04/20(水) 16:29:18
>辞書がONになり

?辞書?
103デフォルトの名無しさん:2005/04/20(水) 16:36:21
>>100
「プリプロセッサの定義」に「WINVER=0x040A」を追加

#include <imm.h>
#pragma comment(lib,"Imm32.lib")

ImmDisableIME(0);

104デフォルトの名無しさん:2005/04/20(水) 17:09:26
>>101-103

IME をキーに調べればよかったんですね。
正常に動きました、ありがとうございました。
105デフォルトの名無しさん:2005/04/20(水) 17:13:41
VC++.netでコンパイルする際にアセンブラコードを生成させたいのですが、どうやったらよいのか分かりません。
どなたか知ってる方居ましたら教えていただけないでしょうか。
106デフォルトの名無しさん:2005/04/20(水) 17:19:42
>>105
プロジェクトのプロパティなどで、出力だかなんだかのタブにあるコンボボックスで
「アセンブラのみ」などを選択すればいい。
107デフォルトの名無しさん:2005/04/20(水) 17:26:58
>>106
見つけることが出来ました。ありがとうございます。

追加なのですが、コマンドラインから実行する際にもオプションで出来るのでしょうか?
108デフォルトの名無しさん:2005/04/20(水) 17:38:49
ついさっきインストールしたんだがソース窓に行がデフォルトで表示されて無いのな
小一時間探してるんだがみつからねorz
たしけてorz
109108:2005/04/20(水) 17:42:45
書き忘れ .NETです
110デフォルトの名無しさん:2005/04/20(水) 17:45:20
>>108
ツール->オプション->テキストエディタ
111110:2005/04/20(水) 17:47:57
->(Cなら)C/C++ ->全般
112108:2005/04/20(水) 17:49:42
即レスThx
これがないとなんだか気持ち悪い…
113デフォルトの名無しさん:2005/04/20(水) 18:45:06
うげ、あると気持ち悪いんだが。
もしかして、ROM-BASICでauto使う気分なんだろか。

>>107
設定画面をよく見よう。設定の脇に(/FA)とか書いてないか?
114105:2005/04/20(水) 19:35:23
>>113
/FAありました。とても助かりましたありがとうございました。
115デフォルトの名無しさん:2005/04/20(水) 19:42:10
VC++.net 2003で使えるクラスで、DelphiのTBitmapのScanlineのように、
ビットマップダンプイメージをポインタでそのまま操作できる画像表示クラスはありますか?
116デフォルトの名無しさん:2005/04/20(水) 20:01:56
Delphiスレで聞けば?
117デフォルトの名無しさん:2005/04/20(水) 20:31:58
それはどうなんだろうか
118デフォルトの名無しさん:2005/04/20(水) 20:45:18
>>115
無い。
DirectdrawのBltFastメソッド使え。
119デフォルトの名無しさん:2005/04/21(木) 13:41:26
VC++.NET2003でビルドしたものをデバッグ実行したら、

>HEAP[○○.exe]: HEAP: Free Heap block 3e61d0 modified at 3e61f8 after it was freed

このようなエラーが出ました。解放済みメモリにアクセスしたのが悪いのは
わかりましたが、それがソースプログラムのどの部分が原因で起こっているのかを
どうやって探せばいいのでしょうか?
VS上の呼び出し履歴では ntdll.dll!7c989d18() のようなものばかり並んでいるので、
どのクラス・関数でこのエラーが起きたのかもわかりません。
ソースは300ファイルぐらいありますので、「怪しいところをよく眺めて見る」という
対処法ではとても苦しいです。
合理的な検出が出来るようなツールの使い方もしくは検出テクニックを
教えていただけたらありがたいです。

なお、STLport4.6.2,boost1.32を使用しています。
120デフォルトの名無しさん:2005/04/21(木) 13:54:58
ここは「初心者に〜教えるスレ」ですよ
121デフォルトの名無しさん:2005/04/21(木) 14:42:48
>>119
free()を検索して、引き数をその直後でNULLにしておく。
Ex.
free(foo);→free(foo);foo = NULL;
まともなエディタを使えば一気に全部置換できるからそんなに手間でもなかろう。
#VisualStudioしか使えない? がんばってね。
122デフォルトの名無しさん:2005/04/21(木) 15:45:43
c++にもtryブロックがあると聞いたのですが。
tryが認識されません。
設定の例外処理もちゃんと有効にしているのですが。
もしかして、なにかincludeしないといけないのでしょうか?
ちなみに私はVCコンソールアプリケーションでやっています。
123デフォルトの名無しさん:2005/04/21(木) 15:49:15
>>122
>tryが認識されません。
具体的に。エラーメッセージが出たのならコピペ。
124デフォルトの名無しさん:2005/04/21(木) 15:49:25
MSDN、C++入門書などを読んで、構文を先ず理解してください。

#ただ「tryが認識されません」と書かれても、あなたがどんなコードを書いたのか誰にもわかりませんから。
125デフォルトの名無しさん:2005/04/21(木) 15:52:11
>>123
error C2065: 'try' : 定義されていない識別子です。
上記のエラーが出ました
126デフォルトの名無しさん:2005/04/21(木) 16:02:25
>>125
まずは該当部分を貼り付けろ。
127デフォルトの名無しさん:2005/04/21(木) 16:05:03
>>126
コードがかなり長いので一部のみ
printf("\t文字を入力してください(zで終了):");
try{
gets(str12);/*値を取得してstr12に格納*/
}catch(...){
printf("エラー");
}
128デフォルトの名無しさん:2005/04/21(木) 16:24:07
連レスすみません。
上記のコードでは一部過ぎてわからないと思うので全部の関数を丸ごと載せます。
長いので2回に分けて記述します
void mo12(void){
char str12[5]={0};/*結果を入れてもらう変数*/
int strbl;/*strlenghtの結果を入れる為の変数*/
putchar('\n');
for(;1;){
printf("\t文字を入力してください(zで終了):");
try{
gets(str12);/*値を取得してstr12に格納*/
}catch(...){
printf("エラー");
break;
}
129デフォルトの名無しさん:2005/04/21(木) 16:25:13
連レスすみません。
上記のコードでは一部過ぎてわからないと思うので全部の関数を丸ごと載せます。
長いので2回に分けて記述します
//str12[0]='z';
strbl=strlen(str12);//文字の最大数を測定
//元の値の表示
if(strbl>5){er=-3;error1(&er);break;}
putchar('\t');
for(i=0;i<strbl;i++){printf("%X ",str12[i]);}
printf("が入力されました\n\t");
for(count=0;count<strbl;count++){
er=mondai12(str12,count);/*文字をHEXコードに変換し、上位ビットと下位ビットを入れ替える関数*/
if(er<0){/*エラー処理*/error1(&er);}else{
//結果の表示
if(count==0){/*最初のみ表示*/printf("上位ビットと下位ビットを入れ替えると");}
printf("%X ",er);
}
}
printf("\n\n");
for(count=0;count<strbl;count++){/*大文字か小文字のzを検索該当する値があれば-5をerに代入*/
if(str12[count]==0x7a||str12[count]==0x5a){
er=-5;}
}
if(er==-5){break;}
}
}
130デフォルトの名無しさん:2005/04/21(木) 16:27:18
Cとしてコンパイルしている悪寒。
131デフォルトの名無しさん:2005/04/21(木) 16:28:28
ここC++のスレじゃないから
C++の質問はC++のスレへどうぞ
132デフォルトの名無しさん:2005/04/21(木) 16:31:22
>>131
このスレではないのなら別のスレで聞いてきます。
ありがとうございました
133デフォルトの名無しさん:2005/04/21(木) 16:39:21
>>132
移動するならこっちとか。
C++相談室 part40
http://pc8.2ch.net/test/read.cgi/tech/1113408957/


ソースの拡張子が*.cになってたりしないか?
134デフォルトの名無しさん:2005/04/21(木) 16:48:45
>>133ソースの拡張子は.cになってます(汗
135デフォルトの名無しさん:2005/04/21(木) 16:50:51
>>134
それじゃc++の機能が使える分けないじゃん。
*.cppに変えてもう一回試してみ。
136デフォルトの名無しさん:2005/04/21(木) 16:55:55
>>135
.cppに変えたら機能しました。
教えていただきありがとうございました。
137デフォルトの名無しさん:2005/04/21(木) 18:04:00
なんでこんな初心者が涌いてくるんだ?
138デフォルトの名無しさん:2005/04/21(木) 18:04:45
初心者スレだった・・・
139デフォルトの名無しさん:2005/04/21(木) 18:45:19
>>119
VC++に関係ない一般的なC言語での話は>>121さんがしてくれてるので、
私はVC++に特化した、より便利な方法を紹介します。

VC++にはデバッグ ヒープというものがあります。
そのようなエラーメッセージが出るのは、
問題を発見するためのデバッグ ヒープのメカニズムがうまく働いたからです。

まずは、MSDNライブラリで、
_CrtSetDbgFlag関数や、それに関連したところをあちこち読んでください。

具体的なやり方ですが・・・

そのエラーメッセージは、無効なヒープに書き込みの形跡があるかチェックした時に出ます。
チェックを行うのは、通常は、プログラムの終了時です。
(なので、その時のコールスタックを見ても、問題箇所はわかりません。)

そこで、
_CrtSetDbgFlag関数で_CRTDBG_CHECK_ALWAYS_DFを指定するか、
_CrtCheckMemoryをあちこちに挿入するなどして、
プログラム実行中に、ヒープのチェックをさせます。

そうすることで、どこまではチェックでエラーが出ず、
どこまで行くとチェックでエラーがでるかで、問題の範囲を絞りこむことができます。

便利のために、すべての関数の入り口と出口に、
FUNC_IN(funcname)、FUNC_OUT(retvalue)、といったマクロを仕込んでおくと、
いざという時に、チェックルーチン呼び出しを容易に仕掛けることができますよ。

ちなみに、毎回同じアドレスになるなら、デバッガでブレークポイントを張れば、
すぐに、そのアドレスに書き込んでいる箇所を発見できるかもしれません。
140121:2005/04/21(木) 18:47:43
>>139
( `・ω・´)参考になった♪
141139:2005/04/21(木) 18:49:20
補足

VC++自体に、メモリリークやヒープエラーの検出機能があるわけだけど、
それを使うのが面倒ならば、
CompuwareのBoundsChecker
のようなツールを使うと、ソースコードに手を入れずに、
同じような検出をしてくれます。

BoundsCheckerは単体売りもあるけど、他のツールとセットになったもののほうがお買い得。
無償バージョンアップの年間保守料金もあるけど、そんなにバージョンアップしないので、
毎回買うのと同じか、かえって高くつくので、予算計画が立てやすい以外にはメリットないかも。
142139:2005/04/21(木) 19:07:37
補足

もちろん、freeしたポインタをNULLにしておくのは、ぜひやるべきです。
さっくりNULLポインタ例外で問題箇所を発見できる可能性が高いですから。

問題は、ポインタをコピーして覚え続けている人がいる、ということです。
そういう場合に、デバッグ ヒープが必要になるんです。
143デフォルトの名無しさん:2005/04/21(木) 19:08:13
ぬるぽおぉ
144デフォルトの名無しさん:2005/04/21(木) 19:20:40
■━⊂( ・∀・) 彡 ガッ☆`Д´)ノ
145デフォルトの名無しさん:2005/04/21(木) 21:43:01
#define free(p) (free(p), (p) = 0)
146デフォルトの名無しさん:2005/04/21(木) 22:32:39
>>138 (´゚c_,゚` ) プッ
147デフォルトの名無しさん:2005/04/22(金) 00:00:46
ifstreamのgetline()を使ってファイルを一行ずつ読み取りたいんですが、
一度に読み込むバッファ長を越えた行を読み込むと、eof()がきちんと認識されないみたいなんです。
例えば・・・

const int BUFLEN = 10;
char buf[BUFLEN];

ifstream file("hoge.txt");

while ( file.eof() == false )
{
  file.getline(buf, BUFLEN);
  cout << buf << endl;
}

↑では、10文字を越える文字数を読み込むと、その後は無限ループになってしまいます。
BUFLENを1000などの大きめの数字にしとけば問題ないですが・・・
これってgetline()の仕様なんでしょうか?
148デフォルトの名無しさん:2005/04/22(金) 01:01:55
無料でダウンロードできるVisual C++ Toolkitと
市販のVisual C++はどう違うんでしょうか?
149デフォルトの名無しさん:2005/04/22(金) 01:32:12
IDEが付くか付かないか
150デフォルトの名無しさん:2005/04/22(金) 01:35:54
ATLとかMFCとかも
151デフォルトの名無しさん:2005/04/22(金) 09:37:20
>>147
C++スレで教えてもらえば?
152デフォルトの名無しさん:2005/04/22(金) 11:18:40
オーバーロードをしたいのですがうまくいきません、なぜでしょうか?
エラーは、'func' : 2 のオーバーロードは 1 番目の引数を 'char' から要求の型に変換できません。(新しい機能 ; ヘルプを参照)
と出ています
コードが長い為一部省略します
#include<stdio.h>
#define RESULT_OK 0
int main(void){
 char str3_1=61;
 char str3_2=62;
 func(str3_1,str3_2);
}
char func( char *buffp ){
char cnt=0;
cnt++;
return cnt;
}
char func( char *destp, char* srcp ){
char rtn = RESULT_OK;

return rtn;
}
153デフォルトの名無しさん:2005/04/22(金) 11:36:52
>>152
うまくいってないのはオーバーロードじゃない。
char* 型の引数に char を指定して一体何をやりたいのかと。
154デフォルトの名無しさん:2005/04/22(金) 11:38:58
>>153
すみません、一部訂正します。
func(str3_1,str3_2);

func(&str3_1,&str3_2);
155デフォルトの名無しさん:2005/04/22(金) 11:53:06
>>152 154
C++スレで教えてもらえば?
156デフォルトの名無しさん:2005/04/22(金) 11:57:23
>>155 ここではだめですか?
ある意味初心者的な質問だと思うのですが。
157デフォルトの名無しさん:2005/04/22(金) 12:03:22
>>156
ここでもいいけど、先ずはそのアホさ加減を何とかしてくれ。

>152のエラーメッセージでは、引き数がcharだと言っている。
実際コードもfunc(str3_1,...でcharを渡している。
ところが>154ではfunc(&str3_1,...だと言う。
それならば、>152のようなエラーメッセージになるはずがない。
158デフォルトの名無しさん:2005/04/22(金) 12:05:48
>>154
>>152のエラーはこれで出なくなるはずだが。
159デフォルトの名無しさん:2005/04/22(金) 12:24:11
>>158
すみません、実行してみたら、エラーが出なくなってました。
よく確認、しなくてすみませんでした。
お答えいただきありがとうございました。
160デフォルトの名無しさん:2005/04/22(金) 12:28:22
スレ汚し!
二度と来るな!!
161デフォルトの名無しさん:2005/04/22(金) 12:28:29
おいおい、>157には挨拶なしかい。
しかし、どうでもいいけど全貌を見たくなくなるような小汚いソースだな。
162デフォルトの名無しさん:2005/04/22(金) 12:41:41
>>157
>>161
すみません、忘れてました。
163デフォルトの名無しさん:2005/04/22(金) 19:08:29
初心者って付けば、どんなスレでも構わない、なんて思わないでくれよ。

言語と標準ライブラリと処理系、この3つの区別くらいしてくれ。
というか、区別をしてない解説書を読むのはやめてくれ。
164163:2005/04/22(金) 19:09:30
もとい
×標準ライブラリ
○ライブラリ

標準ライブラリでも、サードパーティでもいいが、
このスレで扱うライブラリは、MFCやATLなど、Visual C++特有のものだろ。
165デフォルトの名無しさん:2005/04/22(金) 22:39:48
そういう区別がつかない初心者を隔離する
スレだとばかり思っていた2005春
166デフォルトの名無しさん:2005/04/23(土) 08:40:29
昔プログラマをしていた者です。
ゲームが作りたくて、久しぶりにプログラムを組んだのですが、
いきなりLoadImage関数で詰まってしまっています。(SDKです)

case WM_CREATE
hbmp = (HBITMAP)LoadImage( hInstance, "gazou.bmp",
IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE );
// hInstanceはWinMainにて保存しています。NULLではありませんでした。

FormatMessageで調べると"パラメータが正しくありません"と返ってきてしまいます。
ヘルプを見てもどこが悪いか分かりません。
LoadImageのDesired引数等を変えたりして1、2時間この1行で悩んでいます。。
おまぬけな質問ですが、どなたか教えてくださいませ。
167デフォルトの名無しさん:2005/04/23(土) 08:58:10
たった1、2時間か。もっと悩もうよ。
168デフォルトの名無しさん:2005/04/23(土) 09:07:32
>>166
インスタンスハンドルはリソース用だからNULLでいいんじゃないか?
169デフォルトの名無しさん:2005/04/23(土) 09:11:05
WM_CREATE内ではreinterpret_cast<CREATESTRUCT *>(lParam)->hInstanceで
CreateWindowExを呼んだときに指定したインスタンスハンドルを入手できる。
170デフォルトの名無しさん:2005/04/23(土) 09:29:19
Visual Studio で使える、↓みたいなのありませんか?
http://www.gnu.org/software/ddd/
171デフォルトの名無しさん:2005/04/23(土) 09:49:35
LoadImageでファイルから画像を読み込む場合、HINSTANCEは「NULLでなければならない」
172166:2005/04/23(土) 10:58:31
>>167
昔散々やったことなので、時間が勿体無くて。。
他の人に聞くと一瞬で解決することが時々あるので質問させてもらいました。

>>168
リソースからロードする時はNULLで良い様な気がします。

>>169
WM_CREATEのlParamがCREATESTRUCT構造体へのポインタになってるんですね。
そういえばそんな記憶が。。

>>171
NULLでは駄目でした。

多くのレスありがとうございました。
もう少し悩んでみます。

P.S もしかして環境が悪いのでしょうか?
   WindowsME&VC++6.0です。
173デフォルトの名無しさん:2005/04/23(土) 11:00:42
>>170
詳しく
174171:2005/04/23(土) 12:07:04
>>172
ハァ?(゚д゚)
LR_LOADFROMFILE指定してんのに、何リソースからロードする時とかNULLではダメでしたとか言ってんの?(゚д゚)

MSDN見たりとか、GetLastError→FormatMessageしてエラー見たりとかしたのか?
時間が勿体無くてとか、他の人に聞くと一瞬で解決したとか
甘えすぎなんだよ
175デフォルトの名無しさん:2005/04/23(土) 12:12:04
昔さんざんやったとか言う割にはお粗末だな
176デフォルトの名無しさん:2005/04/23(土) 12:13:20
コボラーでな。
177デフォルトの名無しさん:2005/04/23(土) 12:13:47
>>174
モチツケ
FormatMesageは既に明かしている。(>>166)
178170:2005/04/23(土) 12:23:34
>>173
Visual Studio のデバッガだとリストとかのデータ構造を使ってるときに、
今実際にどういう値が入ってるのか把握するのが大変なので、

ttp://www.gnu.org/software/ddd/all.png

こんな感じに表示してくれるのがあったらいいなぁと思って書いてみました。
179デフォルトの名無しさん:2005/04/23(土) 12:30:34
VisualStudio以外のツールを求めてるなら完全なスレ違い。
よそへ行ってくれ
180デフォルトの名無しさん:2005/04/23(土) 12:47:19
visual studio .net2003の質問はいいのかな。。
インテリセンスの事だけど。

CreateWindow( xxx, xxx...と書いている時にはパラメータヒントが出てるんだが
他の行等にフォーカスし、その後また続きを書き始めようとすると
最初の括弧を書かないと、今は表示されません。

これを引数の","(コンマ)を入力するとヒントが出てくるようにはなりませんかね?
VBいぢっていた時は、これでヒントが出てきたので少し便利ですた。
181デフォルトの名無しさん:2005/04/23(土) 12:54:13
>>180
編集 → 一番下
182デフォルトの名無しさん:2005/04/23(土) 13:02:17
>>177
すまん、ついカッとなってしまったorz

>>172
まぁなんていうか、MSDN熟読しろ
183デフォルトの名無しさん:2005/04/23(土) 13:10:20
>>181
そういやショートカットがあったな。。
さんくす。コンマじゃぁ無理っぽいけど、まぁ慣れるようにします。
184デフォルトの名無しさん:2005/04/23(土) 17:00:17
1つのソリューションに複数のプロジェクトがある場合で、その中のプロジェクトのひとつを
別のソリューションに移動またはコピーしたいんですが、どうやればできますか?
185デフォルトの名無しさん:2005/04/23(土) 17:23:27
>>184
コピー元ソリューションの対象プロジェクトファイル(*.vcproj)をコピー先ソリューションのディレクトリにコピー。
コピー先ソリューションで既存項目の追加で対象プロジェクト(勿論コピーしたもの)を追加。
#但し、プロジェクト内の各ファイルについては適宜コピーするかプロジェクトファイルをテキストエディタで編集して相対パスにする。
##プロジェクトファイルを直接複数のソリューションに追加するのはやめた方がいい(若しくはできない)が、ソースファイルは共有可能。
186デフォルトの名無しさん:2005/04/23(土) 21:02:51
>>185
ありがとうございます。
IDE上からは出来ないんですね。
187デフォルトの名無しさん:2005/04/23(土) 21:26:47
visual c++ 2003.net なんですが
XPでプログラムを作ってw2000にファイルを
持って行きそこで実行するとエラーが出てしまいます。
「CLRエラー」ですとか「ほにゃららのハンドルされていない
例外が不明なモジュールです」などと表示されます。
原因はなんなのでしょうか?中学生ですけど教えてください。
188デフォルトの名無しさん:2005/04/23(土) 21:53:42
猫でもわかる を参照にして、
LRESULT CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {
switch (msg) {
   case WM_INITDIALOG: SetTimer(hWnd, ID_MYTIME, 1000, NULL);
   return TRUE;(略
のようなプログラムを作っていてたら、
ダイアログプロシージャの戻り値ってBOOLじゃなかったっけ?
っていうような指摘を受けました。確かに戻り値は TRUE か FALSE ですけど、
どっちが正しいのですか?
189デフォルトの名無しさん:2005/04/23(土) 22:28:52
コピペなり、入力支援で作ってください。
頭で覚えるとバグの元です。
190デフォルトの名無しさん:2005/04/23(土) 22:41:07
>>187
Win2kに.Net Freamworkをインストールするか、あるいはVC側でマネージ拡張を使わないようにすればいいんじゃないのか?
191デフォルトの名無しさん:2005/04/23(土) 22:48:10
>>188
昔 BOOL
今 INT_PTR
192デフォルトの名無しさん:2005/04/23(土) 22:56:45
>>188
ついでを言えば実際の値はBOOLでもLRESULTでも大差ない
BOOLはintのtypedefだしLRESULTはlongのtypedef
どちらも現時点で主流のWindowでは同じサイズ
193デフォルトの名無しさん:2005/04/23(土) 23:02:53
>>191-192
WINDEF.h というのを見つけてんで、さっそく確認して見ますた。
そうだったんですね、BOOL っていうからてっきり1ビットかと思っていました。
大変勉強になりました。ありがとうございます。
194デフォルトの名無しさん:2005/04/23(土) 23:04:55
>>193
そもそも1bitのデータ型なんか存在しないわけだが
195デフォルトの名無しさん:2005/04/24(日) 01:41:39
>>194
bool bool bool bool bool bool bool
196デフォルトの名無しさん:2005/04/24(日) 01:56:08
>>195
バーカ。
bool は Visual C++ 4.2 では 4 バイト、Visual C++ 5.0 以降では 1 バイト。

In Visual C++4.2, the Standard C++ header files contained a typedef that equated bool
with int. In Visual C++ 5.0 and later, bool is implemented as a built-in type with a
size of 1 byte. That means that for Visual C++ 4.2, a call of sizeof(bool) yields 4,
while in Visual C++ 5.0 and later, the same call yields 1.
197デフォルトの名無しさん:2005/04/24(日) 05:12:37
データ型とはちょっと違うが、ビットフィールド、ってのがあるよ。

で、多くのものが実際には32ビット幅なんだけど、
だからといって型を気にしなくていい、というわけじゃない。
198デフォルトの名無しさん:2005/04/24(日) 05:15:12
結構検索してみたんだけど・・無かったので質問させて下さい
vs.net2003でF1キーを押した時にヘルプが英語で表示されてしまいます。
日本語を優先的に表示させたいのですが、どこで設定すればいいのでしょうか・・?

フィルタ・言語設定等を日本語に設定してみても、
F1キーでは英語ヘルプが表示されてしまいます。
検索すれば日本語ヘルプは出てくるんだけど・・はぁ。。
199デフォルトの名無しさん:2005/04/24(日) 09:51:42
>>174
( ´,_ゝ`)プッ
200デフォルトの名無しさん:2005/04/24(日) 10:03:00
人に教えるレベルでもないのに
自惚れている馬鹿はどこにでもいる
201デフォルトの名無しさん:2005/04/24(日) 11:23:51
おいおい、今更煽りかよ
202デフォルトの名無しさん:2005/04/24(日) 11:57:04
187なのですが、同じXP上で動いていたプログラムが
今日になってエラーが出てしまうのは何が原因なのでしょうか?
w2kでも最初に実行した時はうまく動きましたが、
次からエラーになってしまいます。

>>190さんのおっしゃる通り、このパソコンには
.net freamworkが入ってますし、マネージ拡張を「はい」
にしないとビルドの段階でエラーになってしまいます。
お小遣いを出して解説書を買ったのですがのってないみたいです。
203デフォルトの名無しさん:2005/04/24(日) 12:42:43
>>196
実装は1バイトや4バイトでも
言語仕様としては1ビットなわけだが。

intが32ビットというのと同じくらい痛い発言。
204デフォルトの名無しさん:2005/04/24(日) 13:28:04
お小遣いというのが何ともかわいらしい
205デフォルトの名無しさん:2005/04/24(日) 13:31:42
だが大の大人のサラリーマンでもお小遣いな罠
206デフォルトの名無しさん:2005/04/24(日) 14:40:41
>>198
.NET IDE の
オプション -> 環境 -> 国際対応

Document Explorer の
オプション -> 国際対応
207デフォルトの名無しさん:2005/04/24(日) 16:07:52
結構調べてみたんですけど、よく分からなかったので教えてください。
visual studio.net使ってアプリケーション作れって課題出されたんです。
テンプレートでよく使われているのはMFCかwin32かのどちらかみたいなんですけど、
両者がどのように違うのかが良く分かりません。
出来れば、特徴とか記述方法の違いとか分かりやすく教えていただけると
うれしいです。
208デフォルトの名無しさん:2005/04/24(日) 16:17:50
多分、違い教えても君のレベルでは両方とも使えない
209デフォルトの名無しさん:2005/04/24(日) 16:36:04
その高慢な回答は全く無意味かと
210デフォルトの名無しさん:2005/04/24(日) 16:44:18
Win32=いわゆるWin32API。Windowsの機能に低レベルでアクセスできる。
MFC=クラスライブラリ。Windowsの機能にクラスを通じてアクセス可能
C++の知識が必要

でも>>208
211デフォルトの名無しさん:2005/04/24(日) 16:56:15
なんか簡単すぎる説明だな

Win32
  Win32APIやC/C++標準ライブラリなどを直接使ってWin32アプリを作る
  C/C++どちらでも作れる
  作ったアプリはWindowsが入っていて、使用APIとOSバージョンが合致してれば使える

MFC
  Win32APIやライブラリを分野ごとにクラスにまとめで使いやすくした(MS談)
  Microsoft Fundation Classというクラス群を使ってWin32アプリを作る
  クラスなので当然C++じゃないとダメ
  作ったアプリはMFCのDLLをインストールしてあるPCでないと動かない
  Windowsインストールしただけじゃだめ

212デフォルトの名無しさん:2005/04/24(日) 16:58:57
>>211
>なんか簡単すぎる説明だな

説明する方も良く分かってないみたいだからね
213デフォルトの名無しさん:2005/04/24(日) 17:00:35
ヘタレな俺の経験からいわせてもらうといきなりMFCより
Win32APIでシコシコ作った方が勉強になる
214デフォルトの名無しさん:2005/04/24(日) 17:10:11
つうかWinインストールしてあればMFCxx.DLLってインストールされなかったっけ
まぁバージョンの問題があるだろうけど
215デフォルトの名無しさん:2005/04/24(日) 17:15:16
スタティックリンクしたらMFCのDLLは要らない。

  作ったアプリはMFCのDLLをインストールしてあるPCでないと動かない
  Windowsインストールしただけじゃだめ
216デフォルトの名無しさん:2005/04/24(日) 17:17:26
>>214
御意。
例えば、Win2K以前にはMFC7.1以降のDLLはない。

>>207
どんなアプリケーションを作りたいのかを示さないと、斯くの如く混乱を招く。
作る課題はどんなものなのかね。
217デフォルトの名無しさん:2005/04/24(日) 17:18:31
漏れの持ってた98にはDLLそのものが無かったんだが
218デフォルトの名無しさん:2005/04/24(日) 17:18:54
>>215
誰があんなでかいもんスタティックリンクすんだよw
219198:2005/04/24(日) 17:58:44
>>206
答えてくれてありがと。
だた・・まだ変更されないです。。

とりあえず、↓の目に付いた設定は日本語にしています。
ツール -> オプション -> 国際対応の設定 -> 言語 = 日本語
ツール -> オプション -> ヘルプ -> 言語の選択 = 日本語

Document Explorerの
オプション -> 国際対応の設定 -> 言語 = 日本語

"ShowWindow" 、"RegisterClassEx"など日本語訳があるのに
F1押してみると、何故か英語が表示されてしまうです・・
220デフォルトの名無しさん:2005/04/24(日) 18:50:05
>>203
>言語仕様としては1ビットなわけだが。
言語仕様のどこに1ビットって書いてあるか教えてくれ。
221デフォルトの名無しさん:2005/04/24(日) 18:53:30
バイト単位でデータを扱うものにビット仕様があるわけがない
222デフォルトの名無しさん:2005/04/24(日) 19:27:01
>>207
マニュアル読め
じゃいかんのかね 最近は・・・

たいてい書いてあるんだがね
223デフォルトの名無しさん:2005/04/24(日) 19:32:04
というかインターネッツでしらべれば一発なんだけど
224207:2005/04/24(日) 19:55:37
>>216
エクセルファイルを開かないでデータのみを読み込んで、設定を入力
すると、計算して値の内容が合ってるかチェックできるような
アプリケーションなんですけど・・。
>>222
マニュアルは手元に無いので(回してインストールしたので)、
参照したいんですが出来ないのです。
>>223
どこかおすすめのサイトってありませんか?
225デフォルトの名無しさん:2005/04/24(日) 20:04:54
落としてきたんでしょw
226デフォルトの名無しさん:2005/04/24(日) 20:51:19
> マニュアルは手元に無いので(回してインストールしたので)、
> 参照したいんですが出来ないのです。

著作権法違反発見!!!!!
227デフォルトの名無しさん:2005/04/24(日) 21:11:06
アカデミックライセンスとかじゃないの?
228デフォルトの名無しさん:2005/04/24(日) 21:13:19
(CDをドライブ内で)回してインストール
229デフォルトの名無しさん:2005/04/24(日) 21:16:35
アカデミックライセンスでも回してインストールは駄目だろ。
230デフォルトの名無しさん:2005/04/24(日) 21:17:21
スゲー誤魔化し方だなw
231デフォルトの名無しさん:2005/04/24(日) 21:20:20
>>224
犯罪という意識がないんだろうな
232デフォルトの名無しさん:2005/04/24(日) 21:28:16
>>218
最近のPCはHDDの容量が多いので、スタティックリンクしたときの
メリットの方が多いですね。
233デフォルトの名無しさん:2005/04/24(日) 21:34:48
>>232
HDDの容量なんてどうでもいい罠
234デフォルトの名無しさん:2005/04/24(日) 22:00:50
どうせDLLヘル対策で実行ファイルと同じフォルダにDLL配置したりするから大差ないかも
235デフォルトの名無しさん:2005/04/24(日) 22:35:23
スクール アグリーメントとかじゃねぇの?
236デフォルトの名無しさん:2005/04/24(日) 23:15:01
そっちもさることながら、 「エクセルファイルを開かないでデータのみを読み込んで」の部分を誰か解説してくれ。
237デフォルトの名無しさん:2005/04/24(日) 23:17:20
俺のESPによると
「エクセルファイルを開く」とはxlsファイルをダブルクリックする事だと推測
つまりプログラムから読み込むのは「エクセルファイルを開く」にあたらない
238デフォルトの名無しさん:2005/04/24(日) 23:18:48
>>233
じゃ、なんでダイナミックリンクするの?
239デフォルトの名無しさん:2005/04/24(日) 23:52:02
猫のソケットプログラミングの
saddr.sin_addr = *((LPIN_ADDR)*lpHost->h_addr_list);
の一文の右の式の意味ってどういうこと?
lpHostこうぞうたいのh_addr_listの値をロングポインタ型のINADDRにキャストした
やつのポインタの中身を左辺に代入するってこと?

そもそもwsprintfのwとかLPIN_ADDRのLPとかなんのことなんでしょうか?
240デフォルトの名無しさん:2005/04/25(月) 00:10:58
w : winapi
l : long
p : pointer
241デフォルトの名無しさん:2005/04/25(月) 00:11:47
wの説明はネタだと信じたい
242デフォルトの名無しさん:2005/04/25(月) 00:15:47
w : wide -> wideってなんですか?(以下略
243デフォルトの名無しさん:2005/04/25(月) 00:15:49
ということは、lphostのh_Addr_listの中身をロング型のポインタに変換
したやつの中身(つまりアドレス?)がはいるということでしょうか。

244デフォルトの名無しさん:2005/04/25(月) 00:34:48
ていうか239でだいたい合ってると思うがどうか。
HOSTENT構造体のポインタlpHostのメンバのh_addr_listをLPIN_ADDRにキャストして参照してる。
h_addr_list自体はポインタのポインタ。要はネットワークアドレスの配列。

LPは普通のポインタだと思っとけばいいと思う。
245デフォルトの名無しさん:2005/04/25(月) 00:44:22
saddr.sin_addr = *((IN_ADDR*)*lpHost->h_addr_list);
246デフォルトの名無しさん:2005/04/25(月) 06:30:30
>>238
無い頭で考えろ
247デフォルトの名無しさん:2005/04/25(月) 06:53:29
なんとなくですがだいたいわかりました
ありがd
248デフォルトの名無しさん:2005/04/25(月) 10:08:25
CreateThreadでスレッドを作るだけで、複数のcpuを持つコンピュータで
実行させた場合それだけで複数のcpuに処理を分散させることになるのですか?
249デフォルトの名無しさん:2005/04/25(月) 10:54:49
>>246
結局、説明出来ないのですね
250デフォルトの名無しさん:2005/04/25(月) 11:02:47
>>248
むしろスレッドをどのcpuで実行させるかは指定できない。
OSが管理するので。
251デフォルトの名無しさん:2005/04/25(月) 14:17:39
楕円の画像処理をする場合、
1画素1画素処理していく以外に何か方法とかありますか?
252デフォルトの名無しさん:2005/04/25(月) 14:18:25
>>251
LineTo
253デフォルトの名無しさん:2005/04/25(月) 16:49:59
>>249
自分がわからんからって人のせいにするなよ
254デフォルトの名無しさん:2005/04/25(月) 17:04:37
質問です。
pgm形式の画像ファイルを読み込むので、一番簡単な方法ってなんでしょうか?
255デフォルトの名無しさん:2005/04/25(月) 17:12:11
pgm形式って何?
256デフォルトの名無しさん:2005/04/25(月) 17:15:41
スレッドについて質問があります。
マニュアル等では、各スレッドの処理がタイムスライスに従って
移行しているようですが、一時的にプリエンプションを禁止して、
その後解除するような事はできるのでしょうか?
257デフォルトの名無しさん:2005/04/25(月) 17:18:23
あんまりマイナーな話題は、他の初心者の役に立つと思えないな。
258デフォルトの名無しさん:2005/04/25(月) 17:28:41
>>254
Unix系のライブラリを使うのがいちばん簡単。
まぁ、自分で書いても大したことないけどね。
詳しくはVCスレではないC/C++初心者スレか画像スレにでも。

>>255
鸚鵡返しに質問しないで少しは自分で調べたら?
259デフォルトの名無しさん:2005/04/25(月) 18:00:00
>>254
pgmだけ読み込むなら自前で処理したほうがいいね。
ライブラリを使うという手もあるけど、
ライブラリの使い方を調べてる時間があったら充分自分で実装できる。
もし使うならSusie Plug-inあたりがお勧めだね。
単純な形式だから、UNIX系のライブラリがお勧めできないのはわかるよね?

>>255
はるか昔の画像形式。
おじさんが若い頃はpgm使ってたんだよ。
リソースの代わりにソースに画像を埋め込んだりするときに使える。
その代わりものすごく効率悪い。
今ネイティブ形式として使ってたら池沼だね。
260デフォルトの名無しさん:2005/04/25(月) 18:08:46
マルチメディアタイマーと普通のタイマーの違いは何ですか?
261デフォルトの名無しさん:2005/04/25(月) 18:22:06
>>260
あなたにとっての普通のタイマーとは?
262デフォルトの名無しさん:2005/04/25(月) 18:27:24
普通のタイマーの誤差はおよそ0.06秒(厳密にはOSに依存)
263デフォルトの名無しさん:2005/04/25(月) 18:33:05
>>259
もしや、xpmと勘違いしていませんか?
つーか、pgmをソースに埋め込んだら只の阿呆ですな。
今でも2次元のべたデータにpgmのヘッダだけ付け足してxvで表示するエンジニアは目の前にごろごろしているんだけど、
unixも使えないロートルには荷が重い話かな?
264デフォルトの名無しさん:2005/04/25(月) 18:39:45
スレ違い
265デフォルトの名無しさん:2005/04/25(月) 18:55:22
>>262
ありがざいました
266デフォルトの名無しさん:2005/04/25(月) 20:40:49
>250
つSetThreadAffinityMask

>256
スレッドのプライオリティを最大まで上げれば、他に対抗するスレッドが
現れない限り、似たような効果は得られるとおもう。CPUが複数あるなら
意味なしだけど。
267198:2005/04/25(月) 20:47:43
>>198
>>219
どなたか教えて貰えませんか?
>>219の設定にしたら通常は
日本語ヘルプが優先的に表示されるのでしょうか?
268デフォルトの名無しさん:2005/04/25(月) 21:18:17
>>267
再インストール
ここってパソコン初心者板だっけ?
269デフォルトの名無しさん:2005/04/26(火) 00:42:50
>>253
ここは初心者スレだぞ。
勿体ぶらずに説明しろよ。
270デフォルトの名無しさん:2005/04/26(火) 02:04:14
C++の基礎を勉強してからウィンドウズプログラミングをやろうと思っているのですが、
いきなりMFCから入っても大丈夫でしょうか?
MFCの方がWin32 APIだけよりも本格的っぽいので、いきなりこちらからやろうと思っているのです。
271デフォルトの名無しさん:2005/04/26(火) 02:42:37
とりあえずやってみろよ。
272デフォルトの名無しさん:2005/04/26(火) 03:15:32
SDKで++のライブラリを使いたいのですが(CFontなど)
インクルードファイルやリンクライブラリは何を指定すればいいのでしょうか?
その他注意点があったら教えて草代。
273デフォルトの名無しさん:2005/04/26(火) 05:30:37
MSDNのCFont見れば書いてあるんだがよ・・・
274デフォルトの名無しさん:2005/04/26(火) 10:39:47
基本クラスから継承してるから
それだけあってもダメかもしれんな
275デフォルトの名無しさん:2005/04/26(火) 11:56:15
MFC自体の初期化も必要かもしれんな。
276デフォルトの名無しさん:2005/04/26(火) 12:14:29
VS2003でクラスライブラリを作成して、「hello」というプロジェクトを作りました。

hello.cppのソースに

#include <ATLComTime.h>
を書き加えるとリンクエラーになるのですがどうしたらいいですか?
heloo.cppのソースは

// これは メイン DLL ファイルです。
#include "stdafx.h"
#include "hello.h"
#include <ATLComTime.h>

だけです。
初心者ですいませんがどなたか教えていただけないでしょうか?
277デフォルトの名無しさん:2005/04/26(火) 12:41:53
ATL使うならライブラリがいるんじゃないか?
ATLは初心者向けじゃないと思うから
それ以上はコメントしません。
278デフォルトの名無しさん:2005/04/26(火) 12:53:15
そうなんですか・・・。
サンプルソースがWindowアプリだったので内部処理の部分をDLL化してみたかったんです。
どうもありがとうございます。
279デフォルトの名無しさん:2005/04/26(火) 13:49:57
>>270
僕も君と同じような道を歩んだよ。C++を勉強して、MFCに入っていった。
Windowsプログラミングを習得するための入り口としては適してるかもしれない。
(というよりこれぐらいしかない?ATLはさすがに初心者は難しいだろうし)
ただ、int main(){}で始まるプログラミングしか知らない人は戸惑うと思う。
なんせ根幹となるループ構造が隠蔽されてるからね。フレームワークという概念を習得しよう。
MFCをある程度理解しWindowsMESSAGEとかも理解できてきたら、WIndowsがどのように成り立っているかが
ほんのすこし垣間見えるかも。

最終的には、MFCのダメさ加減を認識し始めたら一人前だ。
280デフォルトの名無しさん:2005/04/26(火) 13:58:53
>>218
static linkの場合は必要なものだけ選別してリンクするから
あの馬鹿でかいDLLの容量だけ増えるわけじゃないよ。

とはいえ、MFCはどういうわけかちょこっとstatic linkするだけでも、意外に容量的コストが
発生するという話だ。
281デフォルトの名無しさん:2005/04/26(火) 17:09:42
VC.NETで完全自作のエディタを作ろうと思ってます。
そこで、文字の色や文字数やデータ構造などを自由に決めるために、
CEditViewを使わずCViewで作ろうと思ってるのですが、
CViewにて日本語入力を受け付ける方法がわかりません。
今ひとつメッセージに関してわかっていない自分ですが、
どのように入力を受け付ければいいのか、
どなたか教えていただけませんでしょうか。
よろしくお願いいたします。
282デフォルトの名無しさん:2005/04/26(火) 17:13:22
>>281
ttp://home.h07.itscom.net/buruturi/VCTIPS_008.html
ちなみに(3)-(F)の直後でreturn 0;すれば(4)を書く必要はなくなる。
283デフォルトの名無しさん:2005/04/26(火) 17:48:39
> CViewで作ろうと思ってるのですが

完全自作じゃないじゃん
284281:2005/04/26(火) 17:53:18
>282
ありがとうございます。
ただ、早速試してみたのですが、どうもうまく行きません。
自分がメッセージ処理に疎いからだと思うのですが…。

-- CMyView.hの中身の一部 --
class CMyView : public CWnd {
protected:
 afx_msg void OnPaint();
 DECLARE_MESSAGE_MAP()
public:
 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
 afx_msg void OnDestroy();
 afx_msg void OnSize(UINT nType, int cx, int cy);
 afx_msg BOOL OnEraseBkgnd(CDC* pDC);
 afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
 /* (イ)ここに何を書けばいいのか */
}
(続く)
285続き:2005/04/26(火) 17:53:43
-- CMyView.cppの中身の一部 --
BEGIN_MESSAGE_MAP(CSuperLView, CWnd)
 ON_WM_PAINT()
 ON_WM_CREATE()
 ON_WM_DESTROY()
 ON_WM_SIZE()
 ON_WM_ERASEBKGND()
 ON_WM_KEYDOWN()
 /* (ロ)ここに何を書けばいいのか */
END_MESSAGE_MAP()

以上、(イ)と(ロ)の位置に何を書けばいいのかわかりません。それぞれに
(イ)afx_msg LRESULT OnIMEStartComposition(WPARAM wParam, LPARAM lParam);
(ロ)ON_WM_IME_STARTCOMPOSITION
を書いても「ON_WM_IME_STARTCOMPOSITIONが定義されてない」みたいな
エラーが出てきます。他に何をすればいいのでしょうか?

よろしくお願いします。
286281:2005/04/26(火) 17:56:20
>283
そうですね。すいません。
自分が使いやすいエディタを作りたいだけです^^
287281:2005/04/26(火) 18:00:37
>上×2
2行目、CSuperLViewではなくCMyViewです。すいません。
実際はCSuperLViewという名前にしてるだけです。
288デフォルトの名無しさん:2005/04/26(火) 18:02:30
なんつーか、免許取っていきなりレースに出るようなもんだな。
289デフォルトの名無しさん:2005/04/26(火) 19:52:29
// inside the class declaration
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);

BEGIN_MESSAGE_MAP(CMyWnd, CMyParentWndClass)
ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
END_MESSAGE_MAP()

これを真似すればできる
290281:2005/04/26(火) 21:44:35
>289
できました! 感激です!
どうもありがとうございました!
頑張って免許取りたてでレース出てみます!
291デフォルトの名無しさん:2005/04/26(火) 23:01:14
>>232
メモリが無駄になる。
DLLが同じアドレスにロードされれば、同じ物理メモリを共有するが、
スタティックリンクしてしまうと、そういうことができない。

>>248
スレッドにうまく処理を分けるのはプログラマの仕事。
どのスレッドをどのCPUでいつ走らせるかはOSの仕事。

>>250
嘘いうなよ。
Win32 APIのSetThreadAffinityMaskで指定できる。

>>256
普通のユーザモードで走るプロセスは、
プリエンプションを禁止して走ることはできない。
いついかなるタイミングでプリエンプションが発生しても良いようにコーディングしてね。
292デフォルトの名無しさん:2005/04/26(火) 23:57:07
>>291
最近のPCはメモリの容量が多いので、スタティックリンクしたときの
メリットの方が多いですね。
293デフォルトの名無しさん:2005/04/26(火) 23:58:44
いやメリットは特にないだろ
294デフォルトの名無しさん:2005/04/27(水) 00:12:55
ロード時間の短縮と言ってみるテスト
295デフォルトの名無しさん:2005/04/27(水) 00:44:40
DLL hellを避けられるのは大きなメリット
296デフォルトの名無しさん:2005/04/27(水) 00:53:34
・自作DLLのほとんどがPreferredBASE=1000:0000で
配布されて居る件について。
・MicrosoftはSxsを推奨している件について。
297デフォルトの名無しさん:2005/04/27(水) 03:18:45
>普通のユーザモードで走るプロセスは、
>プリエンプションを禁止して走ることはできない。
>いついかなるタイミングでプリエンプションが発生しても良いようにコーディングしてね。

これってasmで割り込み禁止にしても?
298デフォルトの名無しさん:2005/04/27(水) 03:24:42
普通、ユーザープログラムが割り込みフラグ操作したら例外起きるよ(´・ω・`)
299デフォルトの名無しさん:2005/04/27(水) 04:37:32
DOS時代のまま時間が止まっているプログラマは、
ちょっとはマルチタスクOSについて勉強してよ。

そういうプログラマが書いたプログラムって悲惨なんだよね。
空ループして何かを待ったりして、メッセージポンプ止めてるのに、
イベント来ないとか文句言ったりさ。

>>296
MFCのDLLの話とは関係ないじゃん。

自作DLLをたくさんのプロセスで共有することってあるかな。
MSVCRTとかMFCとかならともかくさ。

するとしても、そいつらはみな同じ0x10000000にロードされるだろうから、共有できるでしょ。
300デフォルトの名無しさん:2005/04/27(水) 04:39:12
もちろん、DLLのロードアドレスがバッティングしたら、そりゃズレるけど、
そういう自作DLLを多数使うアプリってあるのかな。

もしDLLとEXEを同じところで作っていれば、
デバッグ時にVC++が、
バッティングしたからズラしたぞゴルァ
って言ってくるから、気がつくでしょ。
301デフォルトの名無しさん:2005/04/27(水) 08:46:03
ヲタ話は他所でやってくれよ
302デフォルトの名無しさん:2005/04/27(水) 08:50:59
#if !defined(___XXXXX)
#define ___XXXXX

#endif

の代わりに

#if _MSC_VER > 1000
#pragma once
#endif

を使う利点、欠点を教えてください
303デフォルトの名無しさん:2005/04/27(水) 09:01:38
それは初心者にとって非常に重要な問題なんだろうか?
普通の人にとってはどうでもいい問題にしか思えんな
304デフォルトの名無しさん:2005/04/27(水) 09:10:30
>>302
既出。
・利点
ソースを全部評価しないで済む。
・欠点
(当然だが)他のコンパイラでは使えない。
305デフォルトの名無しさん:2005/04/27(水) 12:31:25
>(当然だが)他のコンパイラでは使えない。

主要なコンパイラはサポートしてるらしいよ。
306デフォルトの名無しさん:2005/04/27(水) 13:41:20
>>305
主要なコンパイラでは_MSC_VERが定義されているの?
それは不便だ……
307デフォルトの名無しさん:2005/04/27(水) 14:52:42
Xp+VC7.1(.NET2003)です。
XP風のビジュアルスタイルにしたくて調べているのですが
「ButtonコントロールのFlatStyleプロパティをSystemに設定して・・・」
とあります。
ところが、プロパティ設定の画面には"Flat"はあるのですが"FlasStyle"はありません。
何か根本的に間違っているのでしょうか?
よろしくお願いします。
308デフォルトの名無しさん:2005/04/27(水) 14:55:30
XPスタイルにしたいなら民主党のマニュフェストを参考にしろ
309デフォルトの名無しさん:2005/04/27(水) 15:18:01
>>308
綴りが違う
310デフォルトの名無しさん:2005/04/27(水) 16:04:10
XP風のビジュアルスタイルにしたいんだろうか?
ボタンをフラットにしたいんだろうか?
たまたま見つけたサイトに書いてあることが真実か知りたいんだろうか?
まずそこをはっきりしろ
311デフォルトの名無しさん:2005/04/27(水) 16:14:25
質問です。環境は XP、VC++ 6.0 です。

MFC で作ったアプリで、アイコンの設定で躓いています。
サイズ 32×32、24 bit の bmp の拡張子を ico に変えたものを用意し、
リソース IDB_ICON32 として取り込みました。

C○○App クラスの InitInstance において、
 HICON icon = LoadIcon( IDB_ICON32 ); // A
 m_pMainWnd->SetIcon(icon, true);     // B
として実行すると、起動中に B の行でアプリが強制終了されました。

24bit の bmp をリソースとして取り込むことはできないのでしょうか?
またその場合、リソースではなく外部からアイコンを取り込むにはどうすればいいのでしょうか?

よろしくお願いします。
312307:2005/04/27(水) 16:21:58
現在、フラットな画面をXP風のビジュアルスタイルにしたいんです。
プロジェクトはダイアログベースで作成しています。
313デフォルトの名無しさん:2005/04/27(水) 16:23:32
おま、そりゃアイコンじゃなくてビットマップだろうが
ビットマップをLoadIconしてどうすんだよ・・・

そのビットマップデータをペイントか他の適当なペイントツールで開いて全体をCtrl+Cでコピーして、
VCの新規リソースでICON作ってそこにペーストしる
314デフォルトの名無しさん:2005/04/27(水) 17:33:25
うーん……
8bit のビットマップをペイントで開いてコピー、
リソース作ってペーストして ico ファイルを作ったのですが、
どうしても再度読み込むと、パレット情報がばらばらになってしまいます。
(色がめちゃくちゃになる)

24->8 bit への減色は、ペイントで行なっています。
原因の見当がつきません。よろしくお願いします。
315311=314:2005/04/27(水) 17:33:59
名前を入れ忘れました、申し訳ないです。
316デフォルトの名無しさん:2005/04/27(水) 17:47:53
・普通、IDB_はビットマップに付ける名前。アイコンならIDI_。

・ペイントの原色の性能はまったくのポンコツ。
JPEGとかをGIFで保存してみたら一目瞭然。
317311=314:2005/04/27(水) 18:04:36
>>316
Photoshop で減色する際、使用中の入りを全て割り当てる、
Windows(システム)などが色々な種類がありますので、
アイコンなどに使われるパレットはもしかして固定なのかと思い、
もしそうなら Windows 付属のペイントならシステムにあった減色を
してくれるのでは?と思い、あえてこの方法をとりました。
間違った判断だったようですが……。

>>313 でお教えいただいた方法で IDI_*** として取り込むことはできました。
ところが、生成された ico ファイルは、パレットがむちゃくちゃでした。

むむー
318デフォルトの名無しさん:2005/04/27(水) 18:08:19
>>317
元々8bitで書いてないうえに、ペイントで原色してるんじゃそれはしょうがない
もっとちゃんとしたエディター使うべき
319311=314:2005/04/27(水) 18:09:10
>>318
なるほど、アイコン作成用のフリーソフトを探してみます。
ありがとうございました。
320デフォルトの名無しさん:2005/04/27(水) 18:21:33
あぁ、字が違う
原色→減色
321デフォルトの名無しさん:2005/04/27(水) 19:17:59
指定したフォルダの中に入っているファイル・フォルダの情報(ファイル名やサイズなど)を全て取得するにはどうすればよいのでしょうか?
322デフォルトの名無しさん:2005/04/27(水) 19:31:19
>>301
けっこう大切な話なんだけどな。

初心者にありがちなのが、
肝心なことをスルーしてしまうこと。

トレースに何か出ていても無視したりするんだよね。
323デフォルトの名無しさん:2005/04/27(水) 19:32:16
FindFirstFile
FindNextFile
FindClose

324デフォルトの名無しさん:2005/04/27(水) 20:00:12
Winコンソールで
int main(int argc,char** argv)の引数を入力して
デバッグはどうやってやるんですか
325デフォルトの名無しさん:2005/04/27(水) 20:53:02
gdb hoge a1 a2 a3
326デフォルトの名無しさん
>>324
VCでデバッグすればいいじゃない