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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
1 : ◆Manna2uCLg :2005/04/15(金) 13:33:14
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するとか)
・ネタや煽りは軽く流しましょう。

過去スレ、関連スレなどは>>2-3
2デフォルトの名無しさん:2005/07/01(金) 21:52:50
3デフォルトの名無しさん:2005/07/01(金) 21:57:52
【関連スレ】
■MFC相談室 mfc13d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1110179996/l50
Win32API質問箱 Build33
http://pc8.2ch.net/test/read.cgi/tech/1120153520/
鬱だ氏のう DirectX (Part 15)
http://pc5.2ch.net/test/read.cgi/tech/1096649788/l50
C言語なら俺に聞け! Part 109
http://pc8.2ch.net/test/read.cgi/tech/1119435171/
C++相談室 part41
http://pc8.2ch.net/test/read.cgi/tech/1120190961/
C/C++の宿題を片付けます 46代目
http://pc8.2ch.net/test/read.cgi/tech/1119514274/
【初心者歓迎】C/C++室 Ver.19【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1119793525/

【関連サイト】
猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
MSDN ライブラリ
http://www.microsoft.com/japan/msdn/library/
Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
Google
http://www.google.co.jp/
4デフォルトの名無しさん:2005/07/01(金) 21:58:05
5デフォルトの名無しさん:2005/07/01(金) 21:59:32
6デフォルトの名無しさん:2005/07/01(金) 22:04:39
var
s : string;
begin
s := 'こんにちは' 
end;

みたいな書き方を
C++は、できますか?

Cみたいに
*charしかないのでしょうか?
7デフォルトの名無しさん:2005/07/01(金) 22:05:48
あっ Visual C++ じゃないので やっぱりいいです
C++Builderできいてきます
8デフォルトの名無しさん:2005/07/01(金) 22:07:17
快調な滑り出しだな
9デフォルトの名無しさん:2005/07/01(金) 22:43:55
卒研で流れの解析をVC++でやろうと考えているのですが
簡単な数式くらいしか書けないしょぼい実力なので
なにから手をつけたらいいのかわかりません・・・

最終的には自動車丸ごと解析してやろうと考えています。
お勧めの書籍、サイト、プログラムなどアドバイスよろしくお願いします。
10デフォルトの名無しさん:2005/07/01(金) 22:46:41
>>9
スレ違い。

初心者向け言語スレもしくは書籍スレ、或いはこの辺。
http://pc8.2ch.net/test/read.cgi/tech/1118072681/
11デフォルトの名無しさん:2005/07/02(土) 00:34:44
っていうか、1年でできると思ってる?
12デフォルトの名無しさん:2005/07/02(土) 00:42:38
出来るだろ。
13デフォルトの名無しさん:2005/07/02(土) 01:09:43
>簡単な数式くらいしか書けないしょぼい実力なので

で、出来る?
14デフォルトの名無しさん:2005/07/02(土) 02:25:16
>>6

#include <string>

int main(int argc,char *argv[])
{
std::string s;

s = "こんにちは";

return EXIT_SUCCESS;
}

じゃ気に入らんか?
もっともこれは2バイト文字を考慮していない。
1514:2005/07/02(土) 02:26:21
や、ごめ。
#include <stdlib.h>すんの忘れてた。
16デフォルトの名無しさん:2005/07/02(土) 08:07:36
>>1
17デフォルトの名無しさん:2005/07/02(土) 11:32:10
 Visual C++て、デバッグ実行ができない問題が多くないか?
 Win2000にNET. 2003をインストールした2台のパソコンどちらも、デバッグ実行すると、プログラムの実行
が開始せずに、固まってしまってタスクマネージャーからVCを終了するしかなくなるのはどういうことか。
 会社では、Win2000にVC++6.0をインストールしたパソコンでデバッグ実行すると、同じ現象が発生すること
が多かったし。でも今は落ち着いてきて、特に対策をしたわけではなく、なぜかは分からないが、普通に実行
できるようになったが。
 でも、NET.2003が依然としてデバッグ実行ができない。困ったもんだ。
 デバッグなしで開始はできるが。

 VCてぼろいんじゃないか?
18デフォルトの名無しさん:2005/07/02(土) 11:45:08
そっちの環境がぼろいだけ
19デフォルトの名無しさん:2005/07/02(土) 11:59:50
NET. 2003
NET. 2003
NET. 2003
NET. 2003
NET. 2003
NET. 2003



.NET 2003だろ
20デフォルトの名無しさん:2005/07/02(土) 12:08:59
delphi2006最強
21デフォルトの名無しさん:2005/07/02(土) 15:08:48
とりあえず猫を読み終わったので、アクションゲームを作ってみたいのですが、
そういうゲームの作り方を解説しているサイトはないでしょうか?
22デフォルトの名無しさん:2005/07/02(土) 15:15:00
2つ質問させてください。

CTestView::CTestView()
: pMem(NULL)
{
}



CTestView::CTestView()
{
pMem = NULL;
}

ではどういう違いがあるのでしょうか?またどっちで記述するのがおすすめとか
ありますか?

あと

#include <stdio.h>



#include "stdio.h"

の違いはなんでしょうか?
23デフォルトの名無しさん:2005/07/02(土) 15:37:41
#include <stdio.h>と#include "stdio.h"の違いは検索パスが違う。
<>で指定した場合は開発環境で設定されたディレクトリからファイルを
探してインクルードするが""で指定した場合は、
カレントディレクトリからファイルを探し、無ければ開発環境で指定された
ディレクトリから探すようになる。

と言ってみる試験。
24デフォルトの名無しさん:2005/07/02(土) 15:37:45
>>22
pMem(NULL)は初期化、pMem = NULL;は代入。
pMemの型が何だか知らんが、クラスとかだとかなり意味が違う。

< >と" "の違いは、どこを最初に探しに行くかの違い。
2522:2005/07/02(土) 15:47:09
<> "" は理解しました。ありがとうございます。

pMem は CTestView のメンバで

u_char* pMem;

と宣言してます。なんか不定値入ってたら困るので生成されるときに
初期化しようとしてるんですが、いままでは

pMem = NULL;

でやってたんですが、VCで「メンバの追加」を選んだら

: pMem(NULL)

がソースに書き込まれたので気になって質問してみました。

26デフォルトの名無しさん:2005/07/02(土) 16:58:39
>>25
pMem(NULL)とpMem=NULLは実行されるタイミングが本質的に違う。
この場合はポインタのようだから実質問題ないが、
これがクラスになると大問題になる。
その辺の違いはわかるかな?
メンバ変数&コンストラクタで調べると吉。
2722:2005/07/02(土) 17:33:40
>>26
なるほどです。メンバ変数&コンストラクタをキーにしてもうちょっと
勉強してみます。

ありがとうございました!
28デフォルトの名無しさん:2005/07/02(土) 18:29:04
カラー画像をRGBからHSVに変換して、
csvファイルで保存する方法が全く分かりません。

どなたかプログラムとか、やり方を教えてください・・・
29デフォルトの名無しさん:2005/07/02(土) 18:30:44
カラー画像をどうやってカンマ」区切りにするんだろ

RGBからHSVは調べれば式がみつかるかと
30デフォルトの名無しさん:2005/07/02(土) 18:32:10
>>28
http://www.google.co.jp/search?num=50&hl=ja&newwindow=1&c2coff=1&q=RGB+HSV+%E5%A4%89%E6%8F%9B%E5%BC%8F&lr=lang_ja
あとはこれをfprintfかofstreamかなんかで出力しろ。

宿題なら宿題スレがある。
31デフォルトの名無しさん:2005/07/02(土) 19:24:24
いくら自分の会社が作ってるOS上の開発ツールとはいっても、デバッグ実行できない
のだから、本当にぼろいな。OSの本家のメーカーの製品だからといって、VCを選択す
るのが多いんだろうな。
32デフォルトの名無しさん:2005/07/02(土) 19:33:52
>>31
=>>17か?
粘着するなら他所へ行け。
33デフォルトの名無しさん:2005/07/03(日) 00:16:56
>>32
黙れ、野郎。
34デフォルトの名無しさん:2005/07/03(日) 00:43:50
黙ってあげるから別の所に行って下さい。
あなたのぼろいPCと一緒に。
35デフォルトの名無しさん:2005/07/03(日) 01:38:52
スライダーをエディットボックスに関連づけて使用したいと思い、
setbuddy という関数を使ってみたのですが、
これを使うと、余計なお世話で勝手にコントロールの配置が変えられてしまい
(エディットボックスとスライダーが横に並べられてしまう)
レイアウトが崩れてしまいました。

スピンボックスの時はエディットボックスにくっつけるかどうか
任意に選べたのですが、スライダーの時も何か方法があるのでしょうか?
36デフォルトの名無しさん:2005/07/03(日) 05:48:37
>>34
黙るとか言いながら、余計なことを書くな。
お前こそ別の所に行け。
37デフォルトの名無しさん:2005/07/03(日) 06:46:28
('A`)
38デフォルトの名無しさん:2005/07/03(日) 14:32:15
C++(VisualStudio6.0)で書かれたソースをC++.NETで開き、文法上のエラーを解消し、
ビルドしたところ、以下のメッセージが出てしまいました。

error LNK2001: 外部シンボル ""char * __cdecl fgets(char *,int,struct _iobuf *)" (?fgets@@$$J0YAPADPADHPAU_iobuf@@@Z)" は未解決です。

該当するソースはこのようになっています。

FILE *fstream;// ファイルディスクリプタ
char tLine[256];// 一行読み込み用
if( fgets( tLine, 128, fstream ) == NULL ){
 if( ferror( fstream ) ){// 一行読み出しエラー
  break;
 }
 break;// EOFに達した
}

その他,atoi、strstrなど、Cランタイムライブラリ関数(?)関連のものは
みな外部シンボルが未解決と出るんですが…何か参照設定が足りないのでしょうか?
ご教授いただければ思います。
39デフォルトの名無しさん:2005/07/03(日) 15:04:23
みなさん、>>36は真性のキチガイ厨房ですので、以下では
完全にスルーしましょう。よい子は>>36にレスしちゃだめですよ。
自分がぼろいことに気が付いていないのですから。
黄色い救急車マダー?
40デフォルトの名無しさん:2005/07/03(日) 15:23:14
>>38
できそうなのにね?
41デフォルトの名無しさん:2005/07/03(日) 16:13:24
ライブラリがリンクされて無いんだべ。
42ペー&(且つ)&パー:2005/07/03(日) 16:17:00
>>38
最初のほうに #include "stdio.h" といれてますか?
fgets の宣言はそこにあります。 #include でファイルを取り込んでます。
C にしろ、Win32API にしろ ver. の違いでは動かなくないと思うです
C はサンプル読めるけど書かないじんなので、間違いならごめんなサイ
どうでもいいけど、break いらないです。
sample をよく眺めて1つずつ意味(流れ)を理解したほうがよいのでは。
ところが、その質問マルチってやつです?
43デフォルトの名無しさん:2005/07/03(日) 16:58:08
間違ってマルチスレッド/シングルスレッド用ライブラリを
リンクするようにしている。/MDとかなんとかそういうの。
開発環境で設定しる。
ところでストリームがオープンされてないようだが、
省略しただけ?

44デフォルトの名無しさん:2005/07/03(日) 17:30:43
まず
#include <stdio.h>
は上のほうに記入済みです。
参照設定にはmscorlibを設定しました。
ストリームは取得しているところを略してしまいました。
こんな感じです↓
if ((fstream =fopen(ファイル名, "r")) == NULL) {
// エラー処理
} else {
// ファイルを一行ごとに読み出し
while (!feof(fstream)) {
if( fgets( tLine, 128, fstream ) == NULL ){
 if( ferror( fstream ) ){// 一行読み出しエラー
  break;
 }
 break;// EOFに達した
}
}
45デフォルトの名無しさん:2005/07/03(日) 17:31:31
こんにちは
Cの変数宣言で
char *a[5] = {"a","bc","def","gh","ijk"};
とよく書くんですが、
これをC++でクラスのメンバ変数に持たせたいの
ですよ。なにかいい方法あります?
46マルチすみませんでした:2005/07/03(日) 17:54:41
>>40-43さんありがとうございます。38(44)です。

> 間違ってマルチスレッド/シングルスレッド用ライブラリを
> リンクするようにしている。/MDとかなんとかそういうの

cppファイルのプロパティの[C/C++]-[コード生成]-[ランタイムライブラリ]
には[マルチスレッドデバッグ(/MTd)]が設定されていました。
もしやこれがいけないんでしょうか?
47デフォルトの名無しさん:2005/07/03(日) 17:59:39
>>45
今のC++では非静的メンバが配列のときに初期化するのは無理で、コンストラクタで代入するしかない。
4845:2005/07/03(日) 18:23:06
>>47 さん返事ありがとうございます。
地道にですね・・・。

実はCで作ったプログラムをC++の勉強がてらに
クラスで作り直していました。
元々がCプログラムの為、設計がまずいのかとも
思いましたが。。。
>今のC++では
今後に期待ですかね
49デフォルトの名無しさん:2005/07/03(日) 18:57:21
>>48
コンストラクタで、ローカルな配列からコピーすればいい。
例えば、
class foo {
char **array;
unsigned NofArray;
foo();
};
foo:foo()
{
char *s[] = {"a", "bc", "def", "gh", "ijk",};
array = s;
NofArray = sizeof(s) / sizeof(*s);
}
とすればほぼことは足りるだろ?
50デフォルトの名無しさん:2005/07/03(日) 19:12:09
> ローカルな配列からコピーすればいい
> array = s;

……
51デフォルトの名無しさん:2005/07/03(日) 19:37:56
public がない foo: ローカル変数を参照、、、
、、、難易度高いな、4つしかわからん。
52デフォルトの名無しさん:2005/07/03(日) 19:47:42
初心者と言うわけではないんですが、
プロジェクトの種類でフォームアプリケーションというのは、
.net frameworkを使ったプログラミングと考えてよいのでしょうか?
現状で、W32API, MFCなどのどれが普及、奨励されますか?
5345:2005/07/03(日) 20:00:42
>>49 ありがとうございます。

外れているかもだけど、追加で教えて下さい。
sの領域はコンストラクタから出た時に開放されますよね。
"a", "bc", "def", "gh", "ijk"はいつ開放されるんですか?
54デフォルトの名無しさん:2005/07/03(日) 20:19:40
>>53
プログラムが終了する直前
55デフォルトの名無しさん:2005/07/03(日) 20:25:39
>>46
そもそも、●●libをリンクしましたとかせにゃならんのが信じられん。
VisualStudioなら、ヘッダはインクルードせにゃならんが、リンクライブラリ自体はデフォルトで設定されてるのに・・・
56& ◆u9Q9Vrla1w :2005/07/03(日) 20:52:32
>>55さん
参照設定のmscorlibって
VisualStudio.NETなら一般的にデフォルトで設定されているものなんですか。
根本的にC++のつくりかたを自分は間違えているのでしょうか…。

#using <mscorlib.dll>もコードの先頭に当然必要ですよね?
それと質問なんですがmscorlibって何のために設定しているんですか?
自分は「System.〜のさまざまなメソッドを使用可能にするため」
と解釈してるんですけど…。
fgetsとかはstdio.hなどのヘッダファイル内に定義されてる、
だからincludeしなくちゃだめだよ、ということですよね?
5745:2005/07/03(日) 20:56:26
>>54
staticにしないと関数抜けた時に
開放されると思うのは勘違い???
ためしてみたけど、関数抜けて開放されてた。
staticにしたらOKでした。

#include <stdio.h>
char **array;
void poi()
{
char* s[] = {"abc", "de", "f", "gh"};
array = s;
return;
}
void main()
{
poi();
printf("%s\n", array[0]);
printf("%s\n", array[1]);
printf("%s\n", array[2]);
printf("%s\n", array[3]);
}
58デフォルトの名無しさん:2005/07/03(日) 21:03:58
"abc", "de", "f", "gh"自体はプログラム終了まで有効。
上の文字列の先頭アドレスが格納されたポインタ配列char* s[]は、>>57だとpoiから抜けた後は無効。
この場合、ポインタ配列の中身(文字列の先頭アドレス)をコピーしてしまえば
sが破棄されても大丈夫。
59.NETなんてしらん:2005/07/03(日) 21:50:20
stdio.hの入ってるdllの参照設定なんて不要なのかい?
60ペー&(且つ)&パー:2005/07/03(日) 21:55:07
>>52
ええ、きっとそうです。
プロジェクトを作成して、右にある
ソリューションエクスプローラの Form1.h を右クリック。
コードの表示をしてください。
public __gc class Form1 : public System::Windows::Forms::Form
とか普通に使ってます。

Win32API は内部呼び出ししてるですから、これは代替できるもの
がないと思います。しかし、MS さんは Longhorn を開発
してますが、これに.NetFrameworkみたいなのを搭載するとか見たこ
とあります。初期出荷には間に合わず後でって形になるそうですが。
Critical な操作でピンチにならないようにしたいそうですが、
そこまで危惧することかな?・・・MFC はなんとなく使えません。

APIのメッセージループ はWin の理解にいいと思うけれども
どれかを奨励する気はありません。win32 は言語ですらない。

>>56
include はそうです。
#using <mscorlib.dll>謎ですね。
.NetFramework のSystem 名前空間のメンバを使うなら
using namespace System でよいので。
6145:2005/07/03(日) 22:06:42
>>58
理論はなんとなくわかるんですが、
実装がわかりません。
色々試してるんですがうまくいかないっす。
62デフォルトの名無しさん:2005/07/03(日) 22:13:13
>>49
class foo (
// ...
public:
foo();
// ...
};
foo::foo()
{
static char * s[] = {...};
array = s;
NofArray = sizeof(s) / sizeof(*s);
}
6341:2005/07/03(日) 22:18:36
> #using <mscorlib.dll>謎ですね。
>.NetFramework のSystem 名前空間のメンバを使うなら
>using namespace System でよいので。

確かに記述しなくてもエラーになりませんね。
参照設定さえしておけばいいってことでしょうか、

> cppファイルのプロパティの[C/C++]-[コード生成]-[ランタイムライブラリ]
>には[マルチスレッドデバッグ(/MTd)]が設定されていました。
>もしやこれがいけないんでしょうか?

そうすると、あとはこれでしょうか…?
それとも、fgetsとかatoiとかC言語ランタイム関数使用する場合、
.NETでは何かincludeしないとだめなんでしょうか?
stdio.hとかその他ヘッダファイルは当然インクルードしてるんですが
ちなみにVisualStudio6.0だとコンパイルとおっちゃうんですよね…
64デフォルトの名無しさん:2005/07/03(日) 22:25:26
元々VC6で作ったんだからVC6で通らんかったら大問題だろう
6545:2005/07/03(日) 23:26:11
>> 63
staticってこと????
66ペー&(且つ)&パー:2005/07/03(日) 23:34:36
寝る前に書きます。
.NET でも 基本はC++でCです。
意識することはありません。
.NetFramework を搭載して .NET。
Cだけで書けます。まず、C/C++を!

>>59
stdio.h はdll に入ってるわけではないです。
.h はファイルとして実在します。
C でもstdio.h とその関数を使うので同じ。
stdio.h を開くと微妙にわからない宣言と定義が
ならんでます。c++ では .h にも
ソースをよく書きますから。

>>63
include しなくてはなりません。C/C++、ヴァージョン
は関係ないでしょう。
# はpre processer(プリプロセッサ)。pre のとおり、
コンパイル前に動きします。#define a 1 ならコン
パイル前にa をなにかしてるってこと。つまり、
宣言がある stdio.h を読み込まないとってこと。
ともあれ、
#using <mscorlib.dll>がわからなくても書けますよ。

>>65
どこから、static が??

長分、すみmAmせん。
6745:2005/07/03(日) 23:43:00
>>66
すみません。間違いです。
63じゃなくて62でした。
68デフォルトの名無しさん:2005/07/04(月) 00:42:38
>>67
staticな配列はどこにあろうと(関数内だろうと関数外だろうと)生存期間はプログラムそのものと同じ。
69デフォルトの名無しさん:2005/07/04(月) 15:25:39
strcpy()とlstrcpy()の使い分けってどうすればいいのですか?
結果自体は同じような気がするのですが。。。
70デフォルトの名無しさん:2005/07/04(月) 16:32:19
lstrcpy()は使わなくていいよ。非標準だし。
71デフォルトの名無しさん:2005/07/04(月) 16:42:07
>>69
strcpyはCの標準ライブラリ関数、どこでも使える
lstrcpyはWin32API
72デフォルトの名無しさん:2005/07/04(月) 18:36:13
ウィンアプリでstrcpyだと、容量が重くなったり、
正常に動かない場合があるらしい。
73デフォルトの名無しさん:2005/07/04(月) 18:42:30
>>72
根拠は?
つーか、「容量が重い」とは?
74デフォルトの名無しさん:2005/07/04(月) 18:43:07
つーかUNICODE
75デフォルトの名無しさん:2005/07/04(月) 18:51:29
strcpyはANSIだからな
76デフォルトの名無しさん:2005/07/04(月) 19:09:06
dynamic_castを使うための設定項目はどこにありますか?
77デフォルトの名無しさん:2005/07/04(月) 19:09:12
[main.cpp]
#include "aaa.h"
int main(){
aaa<int>();
}

[aaa.h]
template <typename MYTYPE> void aaa(void);

[aaa.cpp]
template <typename MYTYPE> void aaa(void){}

と書くとコンパイルが通らず以下のようなエラーが出ます。

[エラー]
main.obj : error LNK2001: 外部シンボル ""void __cdecl aaa(void)" (?aaa@@YAXXZ)" は未解決です
Debug/main.exe : fatal error LNK1120: 外部参照 1 が未解決です。


template <typename MYTYPE> void aaa(void){}をmain.cppに書くとコンパイルは通るのですが、何がおかしいのでしょうか?
aaa.cpp側にテンプレートを使わない関数を書いても普通に通ります。
78デフォルトの名無しさん:2005/07/04(月) 19:13:53
A.cppのB関数でA.hで作ったクラスCのインスタンスDを作ったとして
E.cppの関数FでそのDのメンバ変数にアクセスしたいのですが
どうやるのでしょうか?

A.h
class C{
public:
int x;
}


A.cpp
#include "A.h"
void B(){
C D;
  D.x=15;
}

E.cpp
void F(){
(ここでDのxを参照したいのです)
}
7977:2005/07/04(月) 19:15:04
書き忘れました。すみません。
環境はVC++6.0です。
それから、aaa.cppをmain.cppのプロジェクトへの追加もちゃんとしました。
80デフォルトの名無しさん:2005/07/04(月) 19:32:06
テンプレートって実態が別ファイルだといかんのじゃなかったっけ?
81デフォルトの名無しさん:2005/07/04(月) 20:06:30
>>78
Fが引数を取ればいいだけじゃないか。
D.xだけが必要ならintで、D全体が必要ならconst D&を。
82デフォルトの名無しさん:2005/07/04(月) 20:07:24
>>77
テンプレートはヘッダに書くか、明示的実体化をする必要がある。
ヘッダに書く方が一般的。
8377:2005/07/04(月) 20:37:25
>>82
ヘッダに書いたらOKでした
ありがとうございました
84デフォルトの名無しさん:2005/07/04(月) 20:43:14
>>69
strcpyはchar*のコピーに使う
_tcscpyとlstrcpyはTCHAR*のコピーに使う

UNICODEを定義していなければTCHAR*はchar*と同じ。

_tcscpyとlstrcpyの違いは、後者がWindows APIで、前者がCランタイムであること。
85デフォルトの名無しさん:2005/07/04(月) 20:57:55
UpdateData(TRUE);
ix = m_ix; //m_ixはエディットボックスのメンバ変数

こんな感じでエディットボックスの数値を取得しようとしたんですが、
エディットボックスの値が数値以外や空白の場合、固まってしまいます。

デバックモードで見たところ、UpdateData(TRUE);で止まっているようなのですが、
どうすればよいのでしょう?

環境はVC++6.0です。
86デフォルトの名無しさん:2005/07/04(月) 21:54:13
>>84
>>71,74-75
87デフォルトの名無しさん:2005/07/04(月) 22:02:18
>>86
>>84に述べた程度に正確な情報がかかれていなかったので、
敢えて書いておいたんだが
88デフォルトの名無しさん:2005/07/05(火) 00:38:34
>>85
CStringで受け取り数値に変換
またはDDV
8978:2005/07/05(火) 01:07:23
>>81
引数をとるって具体的にどう書くんですか?
A.cppでFを使うならF(D.x)でいいのはわかりますが
A.cpp以外のcppファイルでもFを使いたいのです。
90デフォルトの名無しさん:2005/07/05(火) 07:31:50
>>45
staticなメンバ変数を作ればよい。

class Sample{
static char *a[];
};
char *Sample::a[] = {"a","bc","def","gh","ijk};
91デフォルトの名無しさん:2005/07/05(火) 09:40:39
GDI+を使いたくてGdiplus.hをインクルードした途端に
GdiPlusEnums.hでエラーが7つ出るんです・・・
何が原因かわかりません。なぜなんでしょう?
92初心者:2005/07/05(火) 14:24:02
Visual C++ のダイアログで文字列はうまく表示できますが
数値がうまく表示できません。
例えば エディットボックス1の数値+エディットボックス2の合計が
エディットボックス3に表示のような簡単なものでいいのですが
教えていただけますか?

ちなみに
CString boxa,boxb;
float a,b;

CEdit* myED1=(CEdit*)GetDlgItem(IDC_EDIT1);
CEdit* myED2=(CEdit*)GetDlgItem(IDC_EDIT2);

myED1->GetWindowText(boxa);
a = atof(boxa);
b = a+10;
myED2->SetWindowText();

今はエディット1に入力した値に10を足してエディットボックス2に表示
というのを作っています。
93デフォルトの名無しさん:2005/07/05(火) 14:43:41
CString boxa;
reinterpret_cast<CEdit*>(GetDlgItem(IDC_EDIT1))->GetWindowText(boxa);
CString boxb;
reinterpret_cast<CEdit*>(GetDlgItem(IDC_EDIT2))->GetWindowText(boxb);
CString boxc;
boxc.Format("%d", atoi(boxa) + atoi(boxb));
reinterpret_cast<CEdit*>(GetDlgItem(IDC_EDIT3))->SetWindowText(boxc);
94初心者:2005/07/05(火) 15:28:13
できました。
ありがとうございました!
また質問があったらよろしくお願いします☆
9585:2005/07/05(火) 15:52:14
>>88
CStringでやれば簡単そうなんですが、
DDVとやらは初めて聞いたのでそっちを調べてみたら出来ました。

ありがとうございます。
96デフォルトの名無しさん:2005/07/05(火) 16:05:48
>>91
エラー内容くらい書けよ
VCのバージョンも
97初心者:2005/07/05(火) 17:34:06
たびたびすいません。
エディットボックスを使っての
ファイルの入出力は可能でしょうか?

例えば
C言語のfopenのようなものを使う感じで。

エディットボックス1にsample1.txt
エディットボックス2にsample2.txt
二つのファイルを開いて処理を行う場合などはどうしたらいいでしょうか?

ちなみにVisual C++ バージョンは6.0です

CFile CStdioFile などを使うのでしょうか?
98デフォルトの名無しさん:2005/07/05(火) 17:57:47
MFCでやるんならCFile
エディットボックスがCStringと関連付けてあるならあとはCFileとCStringのやりとりだけ
99初心者:2005/07/05(火) 18:16:20
なるほどありがとうございます。
初心者なもので色々わからない事だらけで
簡単なことも聞いてしまい申し訳ありません。
100デフォルトの名無しさん:2005/07/05(火) 22:05:36
>>91
stdafx.hで#define WIN32_LEAN_AND_MEANを定義していたら消す。
101デフォルトの名無しさん:2005/07/06(水) 06:21:10
最近、VC++6.0からVS.net2003に移行したのですが、
コードの左側に付く「+」とか「-」の定義を折りたためる
やつ(名前がわかりません)を消すことはできないのでしょうか?

ご存知の方、ご教示おねがいします。
102初心者:2005/07/06(水) 11:46:11
本に載っていたプログラムで
char crlf[]="\x0d|x0a";
こんな宣言がありましたがこれはどういった意味なのでしょうか?
簡単なことかもしれませんがすいません。
103デフォルトの名無しさん:2005/07/06(水) 12:08:41
>>102
それが、
char crlf[] = "\x0d\x0a";
ならば、
char crlf[] = "\r\n";
と等価だ。
そしてそれは、宣言ではなく定義だ。
104デフォルトの名無しさん:2005/07/06(水) 14:46:38
crlf=carriage return line feed
105デフォルトの名無しさん:2005/07/06(水) 14:47:42
これから勉強するなら、C++とC#どちらがいいでしょう?
106デフォルトの名無しさん:2005/07/06(水) 15:32:03
ケースバイケース
107デフォルトの名無しさん:2005/07/06(水) 16:11:13
C++で作ったライブラリをC#で使えるのかしら。。。
108デフォルトの名無しさん:2005/07/06(水) 17:14:59
>>96
stdafx.hにインクルードしました。2003.netです。
〜GdiPlusEnums.h(28) : error C2146: 構文エラー : ';' が、識別子 'GraphicsState' の前に必要です。
〜GdiPlusEnums.h(28) : error C2501: 'GraphicsState' : 識別名を宣言するのに、型が指定されていません。
〜GdiPlusEnums.h(520) : error C2146: 構文エラー : ';' が、識別子 'ObjectTypeIsValid' の前に必要です。
〜GdiPlusEnums.h(520) : error C2433: 'BOOL' : 'inline' はデータ宣言をするのに使用できません。
〜GdiPlusEnums.h(520) : error C2501: 'BOOL' : 識別名を宣言するのに、型が指定されていません。
〜GdiPlusEnums.h(548) : error C2065: 'META_SETBKCOLOR' : 定義されていない識別子です。
〜GdiPlusEnums.h(548) : fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。

GdiPlusEnums.hなんてまったく触ってないのに・・・


>>100
探してみたんですが#define WIN32_LEAN_AND_MEANは定義されていませんでした。
10991:2005/07/06(水) 17:15:58
すいません、91です。
110デフォルトの名無しさん:2005/07/06(水) 17:18:05
>>108
じゃあgdiplus.hより先にwindows.hをインクルードしている?
11191:2005/07/06(水) 17:32:14
windows.hってあるんですか?
とりあえずstdafx.hにはありませんでした。
gdiplus.hは#pragma onceの後にインクルードしています。
場所が悪いんでしょうか?
stdafx.hのほうがいいってどこかで聞いたんですが・・
112デフォルトの名無しさん:2005/07/06(水) 17:36:01
>>111
gdiplus.hはwindows.hがインクルードされていることを前提にしている。
11391:2005/07/06(水) 18:20:33
stdafx.hの下のほうに記述したらできました!
この上ら辺のがwindows.hなんですかね
ありがとうございます、助かりました!
114デフォルトの名無しさん:2005/07/06(水) 18:33:22
この上ら辺のが〜なんですかねって・・・
それも理解しないで作ろうと言うのか・・・
若いとは恐ろしいものだ・・・
115デフォルトの名無しさん:2005/07/06(水) 20:55:22
ExpandEnvironStrings()を使うと、環境変数文字列を展開できますが
逆の処理を行うAPIは存在しないのでしょうか?

 例:C:\Windows\System32 -> %windir%System32
116デフォルトの名無しさん:2005/07/06(水) 21:14:35
例えば
HOGE=C:\Windows\System32
なんて環境変数も定義されてたらどっちに変換していいかわからなくなるだろ
117デフォルトの名無しさん:2005/07/06(水) 21:25:54
うろ覚え・・・

class Question {
Hoge* fuga[100];
public:
virtual void print();
virtual void set( Hoge* pfuga, int num ) {
fuga[num] = pfuga;
}
};

void Question::print() {
// なんらかの処理
}

こんな感じで、全てのメソッドに virtual が付いているようなソースコード
を見た記憶があります。 virtual の意味は理解しているつもりだけど、この
意図がイマイチ理解できません。これって意味ないっすよね??
自分は別につける必要はないと思ってるんですが。
118デフォルトの名無しさん:2005/07/06(水) 21:28:46
>>117
継承&ポリモーフィズムするつもりなら意味がある
119デフォルトの名無しさん:2005/07/06(水) 21:36:56
なるほど、するつもりなら、という事は全部になんでもかんでも
全てに付けるような真似をしても、何らメリットはないと言うわけですね(´∀`)

ありがとうございました
120115:2005/07/06(水) 21:45:42
>>116
ご尤も。
CStringクラスのReplace()関数などで自分で環境変数文字列に置換するしかないですかね。
くだらない質問をしてしまってごめんなさい。
ありがとうございました。
121デフォルトの名無しさん:2005/07/06(水) 21:55:49
VC++を最近はじめた者です。

CListViewクラスを利用して、「開く」メニューで選択したフォルダの内容を
表示したいのですが、どのようにしたらようのでしょうか?

最終的には、リスト内で選択されたファイルを他のビューで表示することに使いたいんです。
簡単な画像ビューア(Windows画像とFAXビューア的なアプリケーション)を作ろうと四苦八苦しています。

参考サイトなど、オススメがあれば教えてください。
お願いします。
122デフォルトの名無しさん:2005/07/06(水) 22:49:15
>>121
フォルダの内容を取得して、リストアイテムを追加する。
123デフォルトの名無しさん:2005/07/06(水) 22:52:34
質問です

if (NULL == (fi2=fopen("Results.xls","w")))
{
printf("\7\n Cannot Make File : Results.xls\n");
exit(1);
}
とやって書いてるループを回して他の場所で毎回ファイルに書き出しているのだけれども
508回目に必ずifの仲に入ってしまいます.何か原因わかりますか?
ちゃんとクローズしたりています
stepoutでみてもpfpirnt("でif文の中に入ってhい
中断されちゃうんだけど原因わかる比問いますか・
124デフォルトの名無しさん:2005/07/06(水) 23:23:14
>>123
プログラムより前に日本語を直そう
125デフォルトの名無しさん:2005/07/06(水) 23:50:27
>>122
もうすこし、なんというか・・・詳しく・・・。
126デフォルトの名無しさん:2005/07/07(木) 00:05:44
>>125
CFileFindでファイル列挙。
リストアイテムを追加はMSDN見ればわかるだろ。
127デフォルトの名無しさん:2005/07/07(木) 00:09:06
>>126
おお、なんかわかりそうな予感。
ありがとうございます。
128デフォルトの名無しさん:2005/07/07(木) 12:32:01
>>123
コードを晒すなら、ファイルI/Oを行っている部分全部さらせ。
エラーになったのならエラー番号ぐらい見ろ。errnoだっけ?

#実はファイルを閉じていないだけな予感
129初心者:2005/07/07(木) 16:29:43
先日も質問したものですが
reinterpret_castではcharからintへの変換は可能かと思いますが
charからfloatまたはdoubleに変換したい場合は
何を用いればいいでしょうか?
よろしくお願いします。
130初心者:2005/07/07(木) 16:37:37
すいません
解決しました。
131初心者:2005/07/07(木) 16:44:25
すいません
解決しました。
132初心者:2005/07/07(木) 16:54:00
>>130-131
は偽物です。何卒よろしくお願いします。
133デフォルトの名無しさん:2005/07/07(木) 17:26:22
reinterpret_cast ってポインターをint とかに代入する時に使うんじゃないの?
基本的にキャストって使わないほうがいいと思う。
C#とかJavaとは違ってtemplateもあるし。

char c = 10;
int n = int( c );
float f = float( c );
double d = double( c );
char* p = &c;
__int64 np = reinterpret_cast< __int64 >( p );
134デフォルトの名無しさん:2005/07/07(木) 17:32:44
double d = static_cast<double>(static_cast<int>('\n'));
135デフォルトの名無しさん:2005/07/07(木) 17:42:26
ちょっとどこで聞けばよい性質のものか分からない質問なのですがお願いします。
やりたい事は、Windowsのテキストエリアコントロールみたいなのを自作する事なのですが、
プロポーショナルフォントを使った場合、
キャレットの位置の計算だとか、マウスカーソルが触ってるのが何文字目であるかとか、
そういったことを実現するにはどうしたらよいでしょうか。
文字のドット数を得る関数なんて、、ないですよね?
136デフォルトの名無しさん:2005/07/07(木) 18:04:36
プロポーショナルだと GetTextExtentPoint32 じゃ駄目っぽいよなぁ...
と思ったら GetTextExtentPointI ってのもあるぞ
今仕事中だから自分で調べてくれ
137デフォルトの名無しさん:2005/07/07(木) 18:43:03
親クラスの this ポインタをウォッチウィンドウで参照した時、
サブクラスのポインタが参照できるのですが、これってプログラムで参照する場合は、
どうしたらいいのでしょうか?

ウォッチウィンドウはこんな感じです。
this

├[子クラス名]
││
│├m_xxx
││
138デフォルトの名無しさん:2005/07/07(木) 18:51:54
>>137
dynamic_cast
しかしあまりよくない。
139デフォルトの名無しさん:2005/07/07(木) 18:53:53
>>135-136
GetTextExtentPoint32()を繰り返し呼べばいいだろ。
140デフォルトの名無しさん:2005/07/08(金) 11:04:01
isual C++.net 2003 を勉強中の初心者です。Cで基板組込型の開発の経験は有りますが、
C++は、本を読んだだけで実際に使ったことは有りません。日経BPの「ひとめでわかる VisualC++.NET アプリケーション開発入門」という本を読んでいます。この本の7章の6(122ページ)に

int money
 ・
 ・
money.ToString

という、記述が出てくるのですが、これが理解できません。int型の変数であるmoneyにToStringというメッソド(メンバー)が、あるのですか?
それとも、このintはクラスなのでしょうか。とすると、どのような機能を使って、クラスにできるのか教えて下さい。
よろしくお願いします。
141デフォルトの名無しさん:2005/07/08(金) 11:53:21
>>140
それはC++ではないと思う。
142デフォルトの名無しさん:2005/07/08(金) 12:53:37
>>141
じゃ、何なのでしょう。
143デフォルトの名無しさん:2005/07/08(金) 13:07:02
>141
それはManegedC++
144デフォルトの名無しさん:2005/07/08(金) 13:39:21
 >>143
すいません。ManegedC++ って、何ですか?
145デフォルトの名無しさん:2005/07/08(金) 13:46:36
>>144
C++とは別物です。
146デフォルトの名無しさん:2005/07/08(金) 15:03:06
>>145
VisualC++.netで開発して、動くのに、違うといわれても・・・。
147デフォルトの名無しさん:2005/07/08(金) 15:09:46
違うんだからしょうがないだろw
148デフォルトの名無しさん:2005/07/08(金) 15:46:05
>>146
VisualC++.netでCも開発できますが何か。
149デフォルトの名無しさん:2005/07/08(金) 16:24:35
ManegedC++=.NET FrameworkのAPIを使うC++。VB.NETとかそういうものの
仲間で、ネイティブコードのバイナリー実行形式を作れない。
動作させるには.NET Frameworkがインストールされている必要がある。
コンパイルして作れるのは中間コードと呼ばれるもので、クラックが容易。
ソースコードがほぼ完全に復元出来るので、あまり再配布されたがらない。
.NETアプリ普及を妨げている原因のひとつ?
起動する時にネイティブコードに変換したりセキュリティチェックを
行ったりするので実行速度が遅いと酷評されることが多いが、起動した後は
高速に動作させることが可能。
150Man"a"ged:2005/07/08(金) 16:32:28
さっきからManeged, Maneged言いおって!
151デフォルトの名無しさん:2005/07/08(金) 16:47:20
で、経験があるという割りには自分で調べることもできない困ったちゃんの>140はどこに逃げた?
152デフォルトの名無しさん:2005/07/08(金) 16:50:49
>>151
いますよ。おじさんは、仕事中でして。
いじめないでね。
皆さんよくわかりましたと言いたいのですが、さっぱりわからない。
でも、答えてくれてありがとうございました。
153デフォルトの名無しさん:2005/07/08(金) 19:12:55
こんばんわ

ダイアログリソースをつくり、クラスウィザードでダイアログクラスを作ったのですが、
再度、ダイアログリソースからクラスウィザードを立ち上げようとすると、
「新規リソースです」とダイアログを作るよう促されます。

そのダイアログリソースから作られたダイアログクラスはあるのに、
「新規ダイアログ」扱いをされ、再度ダイアログの生成を促されるのがわかりません。

VCはこの辺をどのファイル(設定ファイル)等で管理してるのでしょうか?
私個人で修正できるなら、直そうと思いますが。

ちなみに、VSSを使ってソース管理をしてまして、チェックインアウトをした後に起きるようです。
154デフォルトの名無しさん:2005/07/08(金) 19:42:07
*.aps、resource.h、*.rc、*.clw、*.opt、dlgxxx.cpp、dlgxxx.h
多分*.clwが原因だと思う。
155153:2005/07/08(金) 20:06:42
>>154
ご返答助かります。

clwファイルでした。
clwを消去して、再度生成したら直りました。

ありがとうございました。
156デフォルトの名無しさん:2005/07/09(土) 21:40:27
VC++を使い始めたばかりで右往左往している現状なのですが以下の点で悩んでいます。
コンパイルして実行し、「名前をつけて保存」を選択しても以下のイベントが呼び出されず
メッセージボックスが表示されないのですが、なぜ呼び出されないのでしょう?。

void CnvView::OnFileSaveAs()
{
// TODO : ここにコマンド ハンドラ コードを追加します。
MessageBox("aaa",0,MB_OK);
}
157デフォルトの名無しさん:2005/07/09(土) 22:11:27
>>156
俺んとこでは呼び出されるぞ。
メッセージマップに登録してないとかそんなオチじゃないだろうな?
158デフォルトの名無しさん:2005/07/09(土) 22:41:51
>>156
ClassWizzardが生成したコード(メッセージマップ関連)をいじくっただろ。
159デフォルトの名無しさん:2005/07/09(土) 22:49:50
MessageBoxを追加しただけなら絶対に動く
160デフォルトの名無しさん:2005/07/09(土) 23:10:41
>>158
ClassWizzardってなんですか?
161156:2005/07/09(土) 23:17:32
メッセージマップはClassWizzardが自動で生成してくれるのですよね?、でしたら弄っておりません。
プロパティのイベントにも載っておりますし、あちこちのCPPでも試してみましたが反応なし・・・。

CListViewで詳細表示も出来ない・・・。
SetExtendedStyle(LVS_REPORT)で詳細表示にならない。

私って馬鹿、馬鹿、馬鹿(ーー;)。
162デフォルトの名無しさん:2005/07/09(土) 23:47:38
ところで、CnvViewはなんのクラスだ
163デフォルトの名無しさん:2005/07/09(土) 23:50:54
CViewかその派生クラスから派生してないとかだったりして
164デフォルトの名無しさん:2005/07/10(日) 01:12:09
MFCのダイアログベースでプログラムを作成しています。
子ウィンドウにBMPを表示させたいのですがどうやればいいのか分かりません。
親ウィンドウに表示させる方法は、書籍を参考にしてどうにかできるのですが。
どなたか教えていただけないでしょうか。
165デフォルトの名無しさん:2005/07/10(日) 01:51:54
>>164
親ウィンドウと同じ方法でいいよ。
166デフォルトの名無しさん:2005/07/10(日) 10:54:25
ツリービューにMyDocumentの内容を取得するにはどうやればいいのでしょうか?
どなたかご教授ください。
お願いします。
167デフォルトの名無しさん:2005/07/10(日) 10:58:06
Visual C++ Ver.6 でMFC Appwizardを利用してダイアログベース
アプリケーションを作ろうとしています。

ダイアログ上に、エディットボックスを3つ作り、それぞれ
IDC_BOX1,IDC_BOX2,IDC_BOX3 という名前になっているのですが、
変数として m_hoge[0],m_hoge[1],m_hoge[2] と配列型にしたいのです。

IDC_BOX1にm_hogeを割り当てることはできるのですが、
m_hoge[0]もしくは m_hoge[1]を割り当てることができません。
複数のコントロールを一度に選択できるのかな、と思ったのですが、
1つずつしか指定できないようです(/_;)

hogehoge.h のダイアログの変数のところで
CString m_hoge[3]
とでてくるようにしたいのですけれど。。。。。

ClassWizard でメンバ変数に配列型変数を追加するとき、どういう手順で
やればいいのでしょうか?

よろしくお願いします。
168デフォルトの名無しさん:2005/07/10(日) 11:19:45
コントロール配列 ddx でぐぐったらそれらしきものは見つかるな
169デフォルトの名無しさん:2005/07/10(日) 12:08:42
>>166
MyDocumentの内容とは?
170156:2005/07/10(日) 12:44:58
[View.h]
public:
afx_msg void OnFileSave();

[View.cpp]
void CView::OnFileSave()
{
// TODO : ここにコマンド ハンドラ コードを追加します。
MessageBox("test",0,MB_OK);
}

通常はこれで上書き保存時に読び出されますよね?
171デフォルトの名無しさん:2005/07/10(日) 13:07:57
>>170
俺はわざわざ新規プロジェクト作って確認したらそれで呼ばれたけど、
お前は新規プロジェクト作って確認したのか?
172デフォルトの名無しさん:2005/07/10(日) 13:12:31
>>169
フォルダの内容をツリー表示したいのです。
ちょうどエクスプローラみたいに。

で、そこで選択したファイルの内容を別のビューにおくりたいわけです。
173156:2005/07/10(日) 13:58:55
>>171
もちろん、下手に弄ってる可能性も考えて新規プロジェクト作って確認しました。が・・・反応なし。
かなり間抜けな事をしているんだと思うのですが、それが何だかわからない-;。
174156:2005/07/10(日) 14:08:44
あれ、、前に作ったプロジェクトのものが急に動くようになってる。
これはこれで、また原因が何だったかわからない-;。
変更が上手く更新されてなかったのだろうか・・・。

お騒がせしましたm(_)m

次は、CListViewで起動直後から詳細で表示したいので頑張ります!。
175デフォルトの名無しさん:2005/07/10(日) 14:39:41
>>172
フォルダの内容を取得してツリービューアイテムに追加。
176デフォルトの名無しさん:2005/07/10(日) 18:53:09
CLeftView(CTreeView)で発生したイベントOnTvnSelchangedを異なるクラスの
CListViewに持ってゆく事は出来るのでしょうか?。
CTreeViewで選択された項目に従ってCListViewの内容を変更したいと考えて
おります。

それとも、theApp.ListType = "aaa";という受け渡しをするのが本当なのでしょうか?。


void CLeftView::OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult)
{


}
177デフォルトの名無しさん:2005/07/10(日) 19:28:02
ビューを更新
178デフォルトの名無しさん:2005/07/10(日) 22:17:39
>167
Class Wizzardで作る方法はないんじゃないのかな。

ソースの中で定義して使うよ。

CEdit* m_hoge[3];
m_hoge[0] = (CEdit*)GetDlgItem(IDC_BOX1);
m_hoge[1] = (CEdit*)GetDlgItem(IDC_BOX2);
m_hoge[2] = (CEdit*)GetDlgItem(IDC_BOX3);

以上
179デフォルトの名無しさん:2005/07/11(月) 08:20:36
>>167
ClassWizardではできないと思うので、

hogehoge.h
//{{AFX_DATA(CHogeDlg)
//}}AFX_DATA
CStringm_hoge[3];

hogehoge.cpp
//{{AFX_DATA_INIT(CHogeDlg)
//}}AFX_DATA_INIT
m_hoge[0] = _T("");
m_hoge[1] = _T("");
m_hoge[2] = _T("");

//{{AFX_DATA_MAP(CHogeDlg)
//}}AFX_DATA_MAP
DDX_Text(pDX, IDC_BOX1, m_hoge[0]);
DDX_Text(pDX, IDC_BOX2, m_hoge[1]);
DDX_Text(pDX, IDC_BOX3, m_hoge[2]);

注) 『//{{AFX〜』のコメントで挟まれた部分はClassWizardが使うため、
その外側(上下どちらでもいい)に追加
180デフォルトの名無しさん:2005/07/11(月) 16:56:00
CxxxView::OnFileSave()が実行されたい件に関してソースを眺めて色々考えて
みたのですが、つまりafx_msgは同じウインドウで発生したイベントにしか反応
しないと考えたら良いのでしょうか?。最初は全てのクラスに対してメッセージを
送信しているのだと考えていたのですが、CxxxDoc::OnFileSave()が呼ばれても
CxxxView::OnFileSave()が呼ばれないところをみると、そうとしか思えないのですが-;。
181デフォルトの名無しさん:2005/07/11(月) 17:17:33
そりゃ無理だ。
182デフォルトの名無しさん:2005/07/11(月) 17:24:29
送り先はどれか1つじゃないか?
ウイザードが作ったメンバ関数の中で
基底クラスの同じ関数呼んでたりするじゃん
183180:2005/07/11(月) 18:29:36
空プロジェクトを作り、CxxxViewのCPPで
プロパティ->イベント->ID_FILE_SAVE->COMMAND->OnFileSave()を追加
すれば最初はCxxxView::OnFileSave(){}が呼ばれると思っていたのですが
呼ばれないのであちこちでOnFileSave(){}を作ってみた所、
CxxxDoc::OnFileSave(){}だけが呼ばれている事がわかったのです。

もう、頭の中がぐちゃぐちゃに(~o~)。

>>182

>送り先はどれか1つじゃないか?。

送り先の指定は何処を見たら判るのでしょうか?。
それともOnFileSave()は1つしか作るべきではないという事でしょうか。
184デフォルトの名無しさん:2005/07/11(月) 18:45:06
>>183
きのうも言ったはず
CxxxView::OnFileSave()はちゃんと呼ばれる
すでに何度も複数の人間が確認済み
185デフォルトの名無しさん:2005/07/11(月) 18:52:14
>>183
Splitter使ってるとすれば、そのViewにフォーカスがあたってない可能性が。
あと、念のため聞いとくけど
BEGIN_MESSAGE_MAP〜END_MESSAGE_MAPの中に
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)は書かれてる?

>>送り先はどれか1つじゃないか?。
>送り先の指定は何処を見たら判るのでしょうか?。

送り先は一つじゃないよ。(語弊があるが)
MFCのメッセージディスパッチについては、ソース読めば分かるが
とりあえず「CCmdTarget」でgoogleれ
186180:2005/07/11(月) 19:29:55
>>185
185さんのおっしゃる通りでしたm(_)m。ありがとうございます。
Splitterを使用しており、アプリを起動してフォーカスを移してから「名前をつけて保存」すると
CxxxView::OnFileSaveAs()が実行されました。

「CCmdTarget」は今から勉強してきますε=ε=ε=ε=┏(; ̄▽ ̄)┛ 。

[xxxView.h]
public:
afx_msg void OnFileSave();
afx_msg void OnFileSaveAs();

[xxxView.cpp]
IMPLEMENT_DYNCREATE(CxxxView, CListView)

BEGIN_MESSAGE_MAP(CxxxView, CListView)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
END_MESSAGE_MAP()
187デフォルトの名無しさん:2005/07/11(月) 20:23:05
モンテカルロシミュレーションで乱数を与えたいのですが
0から1までの乱数を与えるにはどうしたらよいのでしょうか?
188デフォルトの名無しさん:2005/07/11(月) 20:35:28
MFCはVSを買わないと使えないのは知っているのですが、
かならずVSでビルドやコンパイルをしないといけないのでしょうか?
Win32みたいにコマンドラインからコンパイルとかはできないのでしょうか?
189デフォルトの名無しさん:2005/07/11(月) 20:41:45
>>188
できる
190デフォルトの名無しさん:2005/07/11(月) 23:02:29
他スレで見かけた宣言に long long ていう型があったけど、
VCでこれを使うにはどうすればいいの?
(宣言型名が変わってもOK)
191デフォルトの名無しさん:2005/07/11(月) 23:03:43
__int64
192デフォルトの名無しさん:2005/07/11(月) 23:10:46
>>190
VC7か7.1からlong longはそのまま使える。
193デフォルトの名無しさん:2005/07/11(月) 23:15:02
表示の部分を下記に変更して、
printf("%lld ") -> printf("%I64d ")

>>191
これで上手くいった感じです。
どうもありがとう。
194デフォルトの名無しさん:2005/07/12(火) 00:01:22
VC6ではm_carray.GetCount()の返り値がintだったと思うのですが、
VC7では返り値がINT_PTRとなっており調べてみるとポインタの
ようなのですが、ここから配列の数を収得するにはどうしたら良い
のでしょうか?
195デフォルトの名無しさん:2005/07/12(火) 00:09:14
196デフォルトの名無しさん:2005/07/12(火) 00:21:07
>>195
ありがとうございます。
エラーがズラズラ出て気持ち悪いので(int) m_carray.GetCount()としてみました。
はじめたばかりで正しいのか良く判りませんが^^;。
197デフォルトの名無しさん:2005/07/12(火) 08:07:51
おはようございます。

fp.WriteStringでの質問です。fp.WriteStringで一行書き込みを行おうとしているのですが、
m_list.GetAt(i) + "\n"を書き込もうとすると\nのみが書き込まれm_list.GetAt(i)の内容が
消えてしまうようです。これはどうしてなのでしょうか?。
m_list.GetAt(i)だけを書き込めば改行はされないもののm_list.GetAt(i)の内容は書き込まれ
るのですが、+"\n"を追加すると内容が消えてしまいます。

int c = (int) m_list.GetCount(),i = 0;
CString line;

CStdioFile fp("C:\\list.log",CFile::modeCreate|CFile::modeWrite);

for(i=0; i<c; i++){
//line = m_list.GetAt(i) + "\n";
line = m_list.GetAt(i) ;
fp.WriteString(line);
}
fp.Close();
198デフォルトの名無しさん:2005/07/12(火) 09:11:41
取り敢えず別々にWriteString()してみたら?
199デフォルトの名無しさん:2005/07/12(火) 09:39:51
CStdioFile::WriteString の解説みればすぐ解決
200197:2005/07/12(火) 10:07:40
VCは古い本しかないので細かい事が載ってなかったです^^;。

「オンラインMSDN引用」
文字列の終わりを示す NULL 文字 ('\0') は、ファイルには書き込みません。
この関数は NULL 文字で終わる文字列ではなく、バイト数を指定してファイルに書き込みます。

たぶん、この上記2件のどちらかだと思うのですが、WriteString(buf)でbufのサイズを自動計算
して書き込んでいるのだろうと思うのでバイト数は関係ないですよね。
だから、\0が含まれているという事なのでしょうか?。つまり、+"\n"を付加する事により\0が
含まれてしまうのかな・・・。

198さんのアドバイスの別々に挑戦してみます^^。

201197:2005/07/12(火) 10:11:09
WriteString()を別々にする事により上手く書き込めましたm(_)m。
でも、"\n"と\0の関係が良く判りません・・・・。
202デフォルトの名無しさん:2005/07/12(火) 10:28:13
はじめまして。質問してもよろしいでしょうか。

ラベルに、中国語の文字を入力したら一部の文字が「・」と
化けてしまいました。

これを正しく表示させるには、どうしたらいいのでしょうか?
中国語に対応させる必要があって、頭を悩ませています。

お分かりの方、ご教授いただけましたら幸いです。
203デフォルトの名無しさん:2005/07/12(火) 11:02:56
>>202
Unicode
204198:2005/07/12(火) 12:10:46
>>200
>199は頓珍漢なことを言っていると思われ。

で、問題はWriteString()ではなく、m_list.GetAt(i)の方ではないかと。
今朝は資料がないから放置したが、今調べたらGetAt()が戻すものによっては
lineへの代入前に"\n"を足したのが拙いと思われ。
試しに、line = m_list.GetAt(i) + "\n"の後のlineの値をデバッガでも何でも使って
確認してみるといいと思う。
もしその状態でlineに思う文字列が入っていなければ、問題の行を
line = CString(m_list.GetAt(i)) + '\n'にしてみて再挑戦。
205202:2005/07/12(火) 14:14:51
>>203
UNICODEで入力する前に、コードエディタにコピーすると
文字が化けてしまうんです。
これは、開発環境を変えなきゃダメって事ですかね?

206デフォルトの名無しさん:2005/07/12(火) 14:25:40
MFCのソースにいろんな言語のリソーススクリプトがあるから
コンパイラは多言語に対応してるはず
207197:2005/07/12(火) 15:51:05
以下の2つの方法でlineを作ってMessageBox(line,0,MB_OK)としてみましたが、
どちらも空白(改行のみ)?の表示となりました。+"\n"または+'\n'とする事で
文字が消えてしまう所を考えるとGetAt()で収得した最後に\0などが追加され
その後に+"\n"などとしてしまうと文字列として扱えなくなるのではないでしょうか?。
デバッガの使い方も良く判らない低レベルな者なので間抜けな事をやっている
とは思うのですが報告します。

CString line = m_list.GetAt(i) + "\n"
CString line = m_list.GetAt(i) + '\n'
208198:2005/07/12(火) 16:00:00
>>207
少しは人が書いたことを理解してみよう。

GetAt()は何を返しているかが問題。CString(もしくはその類似型)を返しているのでなければ'\n'も"\n"も足せない。
なので、強制的にCStringに変換させるため、>204の最下行。
209デフォルトの名無しさん:2005/07/12(火) 16:15:49
すみませんが質問させてください。
プログラムのウィンドウ外の任意の座標の色を得るにはどうしたらいいんでしょうか。
210デフォルトの名無しさん:2005/07/12(火) 16:49:02
>>209
GetPixel,GetDC

>>207
ところでm_listの型は?197にも書いてないけど

>>205
開発環境は?202にも書いてないけど
国際化対応のサンプルは↓
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vcsample/html/vcoriInternationalSamples.asp
211197:2005/07/12(火) 17:12:04
>>204,208,210

204>line = CString(m_list.GetAt(i)) + '\n'
208>GetAt()は何を返しているかが問題。CString(もしくはその類似型)を返しているのでなければ'\n'も"\n"も足せない。

あぁ、「CString(m_list.GetAt(i))」で型変換している事に気づきませんでした。
POPUPヘルプに、const CString & GetAt(INT_PTR nIndex)と表示されるのでCStringで良いのかと
思っていたのですが「もしくはその類似型」を返しているのですね。それで足せなかったんだ。
MessageBox(CString(m_user_list.GetAt(i))+"\n");とする事で内容の文字が表示されたので型の
変換を行う必要があったのだと納得しました。

>>210
CArrayです。


ありがとうございました。
212デフォルトの名無しさん:2005/07/12(火) 18:16:51
209
int x, y;//スクリーン座標
・・・
HDC hdc = GetDC( NULL );
COLORREF color = GetPixel(hdc, x, y );
213デフォルトの名無しさん:2005/07/12(火) 21:42:06
>>196
INT_PTRは紛らわしいが結局はintのtypedef。
214202:2005/07/13(水) 10:02:27
>>210
ごめんなさい。VisualStudio6.0、Win2K+SP4です。
ご返答いただき感謝します。
引き続きご教授いただけますでしょうか。
215デフォルトの名無しさん:2005/07/13(水) 13:07:36
>>214
UnicodeかMBCS
216デフォルトの名無しさん:2005/07/13(水) 13:25:46
質問です。ListViewで選択されているアイテムを消そうとしているのですが
以下の方法ではDeleteItemを行う度にnItemがシフトされるらしく上手く消す
事が出来ません。nItemの大きい方から消してゆけば良いのだとは思うので
すが他にスマートな方法はないのでしょうか?。

CListCtrl& ctrl = GetListCtrl();
int c = (int) ctrl.GetItemCount(),i = 0;

for(i=0; i<c; i++){
if (ctrl.GetItemState(i,LVIS_SELECTED) == LVIS_SELECTED){
ctrl.DeleteItem(i);
}
}
>>216
GetFirstSelectedItemPosition
GetNextSelectedItem
↑を使うのもありかと思われ
218デフォルトの名無しさん:2005/07/13(水) 15:35:46
どういうわけなのかD&Dでゲットしたパンチをm_StringArrayに追加して、
それをGetAt(i)したatにDelete(0,3)などを実行しても加工されないのですが、
これはどうしてなのでしょうか?。
D&Dされたpathを配列に追加したデータだけが無加工になってしまいます。

DragQueryFile(hDropInfo,i,n.GetBuffer(l+1),l+1);
m_StringArray.Add(n);

ctrl.InsertItem(i,m_StringArray.GetAt(i));
at = m_StringArray.GetAt(i);
at.Delete(0,3);
at = at.Mid(0,at.Find("\\",0));
ctrl.SetItemText(i,1,at);

219デフォルトの名無しさん:2005/07/13(水) 15:46:53
>>217
これだと上手く消えなかったです。
私が使い方を間違えているのかな・・・。

POSITION p = ctrl.GetFirstSelectedItemPosition();

int n;
while(p != NULL){
n = ctrl.GetNextSelectedItem(p);
ctrl.DeleteItem(n);
}
220デフォルトの名無しさん :2005/07/13(水) 16:04:21
>>219

POSITION p = ctrl.GetFirstSelectedItemPosition();

int n;
while(p){
n = ctrl.GetNextSelectedItem(p);
ctrl.DeleteItem(n);
p = ctrl.GetFirstSelectedItemPosition();
}
221デフォルトの名無しさん:2005/07/13(水) 16:43:10
>>220
こんな事をしていたのですが219さんのやり方を使わせて頂きますm(_)m。

int c = (int) ctrl.GetItemCount();

while(c != -1){
if (ctrl.GetItemState(c,LVIS_SELECTED) == LVIS_SELECTED){
ctrl.DeleteItem(c);
}
c--;
}
222デフォルトの名無しさん:2005/07/13(水) 19:01:31
>>214
MFC & ソースへUNICODE直書きでよければ・・・
(GetDlgItem(IDC_LABEL))->SetWindowText(_T("\u662F\u665A\u996D\u7684\u65F6\u95F4"));
223デフォルトの名無しさん:2005/07/14(木) 01:13:55
Visual C++で別ファイルのインクルードをしたいのですが、
インクルードファイルを開けませんとなってしまいます。
パスの設定などはどこですればいいのでしょうか?
224デフォルトの名無しさん:2005/07/14(木) 06:17:25
ソースと同じとこに置いとけば通るだろ
225デフォルトの名無しさん:2005/07/14(木) 07:47:49
>>223
・プロジェクトの設定でパスを指定する。
・ツール→オプションでパスを指定する。
・#Includeでフルパスor相対パスで指定する。
・ファイルの置き場所を変える
好きな方法で対応してくれ。
226デフォルトの名無しさん:2005/07/14(木) 09:31:21
ユーザー関数の返り値にCStringArrayを用いたいと考えているのですが、
以下の方法ではエラーになってしまいます。返り値にCStringArrayを用いる
事は出来ないのでしょうか?。

CStringArray CxxxView::UserKansuu(){
CStringArray dat;

return dat;
}
227デフォルトの名無しさん:2005/07/14(木) 09:46:07
>>226
悪いことは言わん。
std::vector<CString>を使っとけ。
話はそれからだ。
228デフォルトの名無しさん:2005/07/14(木) 10:26:36
>>226
コピーコンストラクタが無いから無理。
229デフォルトの名無しさん:2005/07/14(木) 10:44:24
>>227,228

std::vector<CString>というのが解らなかったので以下のサイトを
眺めていたのですが、これはstd::vector<CString>とする事で配列と
等価の働きをするのですね。
でも使い方が今一つ解らないのでhファイルにCStringArray等を追加
してあくどく使おうかと妄想してたりします^^;。

ttp://www.fides.dti.ne.jp/~oka-t/vc-mfc.html

勉強になります。ありがとうございます。
230デフォルトの名無しさん:2005/07/14(木) 11:08:29
>>226
たとえstd::vector<CString>を使うとしてもローカルな実体を戻すのはどうかと。
231デフォルトの名無しさん:2005/07/14(木) 11:17:19
>>230
コピーされるから大丈夫。
232デフォルトの名無しさん:2005/07/14(木) 11:21:38
それはわかる。
だがわざわざ重くする必要はあるまい。
参照渡しで不都合が生じるのか?
233デフォルトの名無しさん:2005/07/14(木) 11:24:55
>>226
引数でCStringArrayの参照かポインタ受け取って返り値は成否とかもできる
そんなに使いたいのなら
234226:2005/07/14(木) 15:49:00
みなさん、色々考えていらっしゃいますね。(*..)φ)) メモメモ
文字列の分割をユーザー関数に処理させて返り値を配列で受けとろうと思い、
その時に返り値が配列だとありがたいなと思ったのですが、こういう場合は
みなさん、どうされているのでしょう?。
235227:2005/07/14(木) 16:11:29
>>234
だからstd::vector<CString>。
それを参照で渡すか戻り値で戻すかは兎も角。
236デフォルトの名無しさん:2005/07/14(木) 16:24:57
>>234
参照かポインタでユーザ関数に渡してるときの方が多いな
戻り値はエラーとかのフラグ用にとってる場合が多い
237デフォルトの名無しさん:2005/07/14(木) 17:05:18
>>230-232
今時はそのコピーをなくす最適化もしてくれる。
238デフォルトの名無しさん:2005/07/14(木) 17:32:06
>>226
そのViewクラスにCStringArrayのメンバ変数を作って
メンバ関数で書いてやればいいんじゃね
でもVCとあんまり関係ない話だな
239デフォルトの名無しさん:2005/07/14(木) 17:36:49
ノ 236に一票
240239:2005/07/14(木) 17:37:25
場合によっては238も有り
241226:2005/07/14(木) 18:13:35
今は238で行っているんですが、std::vector <CString>;の使い方が解らない。
Hファイル書いても、CPPファイルに書いてもstdメンバーでないとか怒られます(^^;。
何処かに詳しいサイトありませんでしょうか?。
242デフォルトの名無しさん:2005/07/14(木) 18:20:34
>>241
#include <vector>
243デフォルトの名無しさん:2005/07/14(木) 20:19:49
extern char*Err_Message[];

char*Err_Message[] = { "",
"ERR1:",
"ERR2:",
"ERR3:",
〜(省略) 〜

"ERRXXXX:"
};

という配列を作ったのですが、
この配列(Err_Message)のサイズを取得するにはどうすれば良いのでしょう?
244デフォルトの名無しさん:2005/07/14(木) 20:31:46
質問に割り込んで申し訳ありませんが、お聞きしたいことがあります。

report2.obj : error LNK2001: 外部シンボル "__imp__pthread_create" は未解決です
Debug/Robot.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と言うエラーが出ており、ライブラリが不足しているのかリンクに抜けがあるということまではわかるのですが、後を王したら良いのかがわかりません。
設定→C/C++→コード生成でマルチスレッドに変更したのですがそれでもエラーが消えません。
初心者丸出しで申し訳ありませんがよろしくお願いします。
因みに言語はCです。
245226:2005/07/14(木) 20:32:40
以下のwhile(p){}の間でループに嵌ってしまうのですがどうしてなのでしょうか?。
原因となる部分がわからないのです。

void CxxxView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
int c = ctrl.GetSelectedCount();
POSITION p = ctrl.GetFirstSelectedItemPosition();

int n;
while(p){
n = ctrl.GetNextSelectedItem(p);
//ctrl.SetItemText(n,2,a1);
p = ctrl.GetFirstSelectedItemPosition();
}
}

>>242
includeが必要なのですね^^;;。ありがとうございます。




246デフォルトの名無しさん:2005/07/14(木) 21:30:02
>>245
なんでループ中でGetFirstSelectedItemPosition呼んでんだよ
247226:2005/07/14(木) 21:50:09
>>246
あっ、本当だ。教えて貰ったのを削除用に使わせて頂いていたのですが他の所でも
使おうと思い、深く考えずにコピーして使っていました。ヾ(_ _。)ハンセイ…。

指摘、ありがとうございます。
248デフォルトの名無しさん:2005/07/14(木) 22:43:55
>>244
pthreadのライブラリをリンクしていないのが原因。
249243:2005/07/14(木) 22:44:23
書き忘れましたが、開発環境はVC++6.0です。
250デフォルトの名無しさん:2005/07/14(木) 22:45:54
ウィンドウプログラムを勉強中の初心者です
環境は VC++6.0、WINXP(HOME)、ペンティアムV800MHZです
ツールバーの作り方を勉強しているのですが
TBBUTTON tbb[]={{0, IDM_MARU, TBSTATE_ENABLED, BTNS_BUTTON}};
のようにTBBUTTON構造体のfsStylオプションを
BTNS_BUTTONやBTNS_SEPに指定してビルドすると、
「error C2065: 'BTNS_BUTTON':定義されていない識別子です」
とエラーが出てしまいます
プログラム自体は初歩本のサンプルそのままですので、設定の問題だと思うのですが
どのように設定すればよいか教えていただけませんか?

comct32.libをリンクせよ、と書いてあったので、
プロジェクトの設定>リンク>オブジェクト/ライブラリモジュールの最後に
comct32.libを書き加えましたがダメでした
comct32.dllはHDD内を検索した所8個あり
c\WINDOWS\system32にバージョン5.82が1つ
c\WINDOWS\WINDOWS\WinSxS\〜〜〜 に6.0が2つ
C\WINDOWS\SoftwareDistribution\Download に5.82が2つ、6.0に3つあります
インクルードは #include <windows.h> #include <commctrl.h> #include "resource.h" となっております
Platform SDK を http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en
からダウンロードしてみましたが、PSDK-amd64.exeとPSDK-ia64.exeは32ビット環境ではダメとメッセージが出たので
PSDK-x86.exeをダウンロード・インストールしましたがビルドできません
他の掲示板でも相談させてもらった所、
1・そこのPlatform SDKはVC++6.0ではダメ、
2・定義を読め
#if (_WIN32_IE >= 0x0500)
#define BTNS_BUTTON TBSTYLE_BUTTON // 0x0000
と、2つアドバイス頂きましたが、
代わりのどのSDKをダウンロードすればよいのか?2の定義とは?
と、色々調べてみましたが分かりませんでした
教えて頂けると助かります、宜しくお願いします
251デフォルトの名無しさん:2005/07/14(木) 22:46:49
>>243
sizeof Err_Message
要素数が欲しいのならsizeof Err_Message / sizeof Err_Message[0]
たぶんヘッダの宣言に要素数がないと駄目だと思うけど。(あっても無理だったかもしれないけど)
252デフォルトの名無しさん:2005/07/14(木) 22:48:52
>>250
つまりcommctrl.hやwindows.hのインクルードより前に#define _WIN32_IE 0x500と書けばいい。
あるいはBTNS_BUTTONをTBSTYLE_BUTTONに置き換えればいい。
253244:2005/07/14(木) 22:57:52
>248さん
ありがとうございます
具体的になんという名前のlibファイルをリンクしたらよろしいでしょうか。
254デフォルトの名無しさん:2005/07/14(木) 23:19:01
最近は一から全て教えないと何もできない奴が多いな
255244:2005/07/14(木) 23:19:57
連投スイマセン。
自己解決しました。使っている関数が悪かったようです。
WindowsとLinuxにおいて仕様が違うところがあるのですね。勉強になりました。
ご迷惑おかけして申し訳ありませんでした。
256初心者:2005/07/14(木) 23:41:33
StdAfx.cpp
c:\program files\microsoft visual studio\vc98\include\oaidl.h(6827) : fatal error C1073: インクリメンタル コンパイルを伴う内部エラーが発生しました(コンパイラ ファイル '.\p0io.c', 行番号 1142)
cl.exe の実行エラー
ブラウザ データベースを作成中...
BSCMAKE: error BK1506 : コンパイラは、指定されたファイル '.\Debug\StdAfx.sbr'を開くことができません。: No such file or directory
bscmake.exe の実行エラ

ビルドしたらこんなエラーが出たんですけど、なんなんですか?会社でかいたソースをフロッピにいれて
家で立ち上げたんですけど、こんなエラーがでてしまいました。どうすれば実行できますか?
257デフォルトの名無しさん:2005/07/14(木) 23:45:11
>>256
中間ファイルは全て消せ。
258デフォルトの名無しさん:2005/07/14(木) 23:49:50
VC6.0でdouble型×2コで256*256の配列を取ろうと思ったんですが実行中に落ちてしまいます
メモリを確保できる最大とかは決まっているのでしょうか?
259デフォルトの名無しさん:2005/07/14(木) 23:55:01
>>258
大丈夫、そのくらいならnewで問題なく取ってこれる。
#どうしてもローカル変数にしたいなら設定でスタックサイズを調整したまえ。
260初心者:2005/07/15(金) 00:20:00
>>257さん
リビルドでいいんですか?
261初心者:2005/07/15(金) 00:25:01
>>257さん
リビルドしてもだめでした・・・・また同じエラーがでます。
262デフォルトの名無しさん:2005/07/15(金) 01:08:22
>>261
いっそ、Debugフォルダごと一度消してしまえ。
#つーか、持って帰るのに邪魔だろうに……
263デフォルトの名無しさん:2005/07/15(金) 09:27:34
using namespace std;
は問題なくとおるのに
using namespace System;
だと名前空間が存在しないというエラーが出ます。
Systemだけ特別な場所に記述しなきゃいけないってことはないですよね・・・?
ご指導お願いします。
264デフォルトの名無しさん:2005/07/15(金) 10:16:14
managedもこのスレでやるの?
265デフォルトの名無しさん:2005/07/15(金) 12:25:38
VB.NET2003で コンポーネントで参照設定したクラスや名前空間のヘルプが
検索してもみつかりません。このような場合はどうしたらいいのでしょうか?
教えてくださいませ。
266初心者ゴン:2005/07/15(金) 14:45:00
エディットボックスで入力してエンターを押して
次のエディットボックスへ移ることってできますか?

例ですけど
_____________ ______________
名前:|____________|E-mail(省略可):|____________|

名前を入力したらE-mail(省略可)のエディットボックスへ
移動できるのでしょうか?
267デフォルトの名無しさん:2005/07/15(金) 14:47:31
できる
268初心者ゴン:2005/07/15(金) 15:07:10
>>267
どうしたらできるのでしょうか?
269デフォルトの名無しさん:2005/07/15(金) 15:08:44
Enterの押下を検出して、フォーカスをセットする。
270真のデフォルトの名無しさん:2005/07/15(金) 15:15:25
おい!269!
265の俺のも答えろよ!
271269:2005/07/15(金) 15:18:14
>>270
しらねーよ
272初心者ゴン:2005/07/15(金) 15:33:23
>>270さん、すみませんいま作業してまして、
なかなかネットできなくて!ありがとうございます。
273デフォルトの名無しさん:2005/07/15(金) 16:14:53
>>270
超サンクス!
274真のデフォルトの名無しさん:2005/07/15(金) 16:16:22
271
しっとけよこのバカ!
275初心者ゴン:2005/07/15(金) 16:31:11
コメントなんか勘違いしてた。。。で、
Enterの押下を検出して、フォーカスをセットする
ってどうやるのか分からないっす・・・
276デフォルトの名無しさん:2005/07/15(金) 16:50:24
>>274
しらねーよ

>>275
WM_KEYDOWN
SetFocus
277初心者ゴン:2005/07/15(金) 17:01:48
あと聞きたいんですけど、エンター押して、OKボタンと同じ役目を果たしたいんですけど
できますか?
278デフォルトの名無しさん:2005/07/15(金) 17:02:36
>>277
どっちなのかと
279初心者ゴン:2005/07/15(金) 17:23:32
どっちなのかと?
280デフォルトの名無しさん:2005/07/15(金) 17:30:28
Enterの押下を検出して、OK押したときと同じ処理をする。
281デフォルトの名無しさん:2005/07/15(金) 19:34:41
VCで指定フォルダ以下を丸ごと他のフォルダにコピーする関数などあるのでしょうか?。
282デフォルトの名無しさん:2005/07/15(金) 19:54:14
VCに関数など無い
283281:2005/07/15(金) 20:34:09
指定フォルダ以下のファイル一覧を収得しようと想い、以下のように作ってみたのですが、
どうしてか4つファイルがある内の3つしか拾えません。1つファイルを増やすと4/5になって
しまいます。1.txt...5.txtという空ファイルを作成してテストしたのですが5つの場合は1〜.4の
数のテキストファイル、4つの場合は1〜3の数のテキストファイルだけしか拾えません。
特定のファイルが拾えていないのではなく最後のファイルだけ拾えないようなのですが
どうしてでしょうか?。

CFileFind FileFind;
if (!FileFind.FindFile("C:\\*.*")) return;

while(FileFind.FindNextFile()){
MessageBox(FileFind.GetFilePath(),0,MB_OK);
}

>>282
その言葉の関数はVCには「関数」という言葉はないという意味も含まれてたりするのでしょうか。
揚げ足ではなく少し気になったもので・・・。
284デフォルトの名無しさん:2005/07/15(金) 20:59:59
VCは言語やライブラリの類ではない。
ただの開発ツール名。
285デフォルトの名無しさん:2005/07/15(金) 21:02:24
関数を持つのはVCではなくそこから使う各インターフェース群だ

SHFileOperationなぞどうかね?
286デフォルトの名無しさん:2005/07/15(金) 22:10:00
>>283
ヘルプでCFileFind::FindNextFileの戻り値を良く見てみるといいよ
287デフォルトの名無しさん:2005/07/15(金) 22:12:49
Worthless error LNK2019: 未解決の外部シンボル __imp__mciGetErrorStringA@12 が
関数 "public: void __thiscall CWorthlessDlg::ErrMsgOut(unsigned long)"
(?ErrMsgOut@CWorthlessDlg@@QAEXK@Z) で参照されました。

こんなのが出てリンクが出来ません
Visual C++.NETで簡単なCDプレーヤーを作成しているのですが、
winmm.libをインポートライブラリに指定しているのにうまくいきません。
どなたか、解決法がお判りでしょうか?
288デフォルトの名無しさん:2005/07/15(金) 22:16:24
重い処理をさせるとそのWindowがフリーズしたようになるんですが、
コレを回避させるにはその処理をスレッド化するんでしょうか?
それとも他の方法があるんですか?
定番を教えてください。
289デフォルトの名無しさん:2005/07/15(金) 22:26:10
ループ中にsleepをかます
290デフォルトの名無しさん:2005/07/15(金) 22:27:11
おれは普通にスレッド作ってるな。
291デフォルトの名無しさん:2005/07/15(金) 22:28:17
3Dアプリでsleep使ってるけどsleep(0)とsleep(1)とどっちがいいんだろう。
あんまし変わんない気がするんだけど
292デフォルトの名無しさん:2005/07/15(金) 22:29:35
>>289-291
Sleep(1)を試してみて、駄目ならスレッド化させます。どーもでした。
293厨房質問:2005/07/15(金) 22:32:31
static const * char const hoge= "";
の意味がわかりません。教えて下さい。
294デフォルトの名無しさん:2005/07/15(金) 22:35:52
つーか自ウインドウが固まるの防止したかったら単にSleepじゃだめだべ。
295デフォルトの名無しさん:2005/07/15(金) 22:56:14
GUIスレッドを使うか自前でメッセージポンプを回さないと固まるよ
296デフォルトの名無しさん:2005/07/15(金) 23:00:06
自ウインドウ固まるの防止したければ、
ループ中にかますのはGetMessage/DispatchMessageだな。
297デフォルトの名無しさん:2005/07/15(金) 23:04:44
>>293
そのコード通るコンパイラあるの?
static const char* const hoge="";
これならわかるけど。
298デフォルトの名無しさん:2005/07/15(金) 23:14:30
>>288
処理を分割する。
少し処理し、最後にWM_APP+aをPostするのを繰り返す。
299281:2005/07/15(金) 23:26:29
昨日、ちょっとパソコンと睨めっこしすぎて吐きそうになったので今日は早めに休もうと想います^^;。
みなさん、頑張ってください。


>>285
SHFileOperationは便利そうですね^^。今、いじりながら使おうとしているのですがエラーが出て
コピー出来ない-;。読み取り側のファイルが読めないとかいうエラーが出ます。何が原因なのか
教えて頂けないでしょうか?。

SHFILEOPSTRUCT sfo;
sfo.wFunc = FO_COPY;
sfo.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMMKDIR | FOF_MULTIDESTFILES;
sfo.hwnd = m_hWnd;
sfo.pFrom = "c:\\*.*";
sfo.pTo = "c:\\abc";

if (SHFileOperation(&sfo)){
MessageBox("失敗",0,MB_OK);
return FALSE;
}

>>286
見てもわからなかった-;。返り値がBOOLになっていますし、一部のサイト(Cかな)では成功で0、
失敗またはファイルがあればそれ以外と書いてありました。前はこう書いてて上手く行ってた
記憶があるんだけど今回のはどこかのサイトのを引用したから失敗したのかなぁ。

CFileFind finder;
BOOL id = finder.FindFile();
while (bWorking){
id = finder.FindNextFile();
}
300デフォルトの名無しさん:2005/07/16(土) 01:32:04
>>288

スレッドを使わないなら、

if(PeekMessage(&msg,hWnd,0,0,PM_REMOVE)){
TranslateMessage(&msg); //アクセラレータキーを処理しないなら不要
DispatchMessage(&msg);
}

をループの中に入れる。MFCを使っている場合、hWndの箇所にGetSafeHwnd()を書く。
301デフォルトの名無しさん:2005/07/16(土) 02:23:19
質問ですが


#include <stdio.h>
#include <math.h>
#define N 10000 /* ステップ数 */
#define T 1000 /* t=0 から t=T まで計算する */

double f1(double t, double x,double y);
double f2(double t, double x,double y);

int main(){
double t[N+1], x[N+1],y[N+1], dt, k11,k12,k21,k22,k31,k32,k41,k42; int i;


dt=(double)T/(double)N; /* ステップ幅 */
printf("dt=%f\n",dt);
t[0]=0.0; x[0]=100;y[0]=100; /* 初期値の設定 */
for(i=0;i<N;i++){
k11=dt*f1(t[i],x[i],y[i]);
k12=dt*f2(t[i],x[i],y[i]);
k21=dt*f1(t[i]+dt/2,x[i]+k11/2,y[i]+k12/2); k22=dt*f2(t[i]+dt/2,x[i]+k11/2,y[i]+k12/2);
k31=dt*f1(t[i]+dt/2,x[i]+k21/2,y[i]+k22/2); /* 未完成 */
k32=dt*f2(t[i]+dt/2,x[i]+k21/2,y[i]+k22/2);
k41=dt*f1(t[i]+dt/2,x[i]+k31/2,y[i]+k32/2); /* 未完成 */
k42=dt*f2(t[i]+dt/2,x[i]+k31/2,y[i]+k32/2);
x[i+1]=x[i]+(k11+2*k21+2*k31+k41)*1/6;
y[i+1]=y[i]+(k12+2*k22+2*k32+k42)*1/6;
302301続き:2005/07/16(土) 02:23:44
t[i+1]=t[i]+dt; }
return(0);
}

double f1(double t, double x,double y);

{
return (0.01*x-0.0001*x*y);

}

double f2(double t, double x,double y);

{
return (-0.05*x+0.0001*x*y);

}


というプログラムで「error C2447: グローバルスコープで中カッコ ({) が見つかりましたが、対応する関
数ヘッダーがありません。」というエラーが出たんですが対処法が分かりません。どうか教えてください。


303デフォルトの名無しさん:2005/07/16(土) 02:33:56
>>302

double f1(double t, double x,double y);   ←";"いらない
{
  :
}

double f2(double t, double x,double y);   ←";"いらない
{
  :
}
304デフォルトの名無しさん:2005/07/16(土) 12:37:42
モードレスダイナログのラジオボタンのチェックの有無を収得するにはどうしたら良いのでしょうか?。
Dlg.GetDlgItem(IDC_R1);とするとコンパイルは通るものの実行して確かめると例外だよ!と
怒られてしまいます。

CDlgSelect Dlg;
int rd = (int) Dlg.DoModal();

CButton *R;
R = (CButton *) Dlg.GetDlgItem(IDC_R1);
if (R->GetCheck()){
MessageBox("aa");

}
305304:2005/07/16(土) 12:49:34
自己レス
GetCheckedRadioButton()が使えそうなのでこちらを使ってみようと想います^^。
306304:2005/07/16(土) 13:27:08
モードレスダイアログのラジオボタンのキャプションの文字列を書き換えたいのですが、
どうすれば良いでしょうか?。これでは書き換える事は出来ないようです。

CDlgSelect Dlg;
Dlg.SetDlgItemText(IDC_R1,"aaa");
307デフォルトの名無しさん:2005/07/16(土) 14:47:15
なんでモードレスダイアログなのにDoModalしてるわけ?
308デフォルトの名無しさん:2005/07/16(土) 15:06:04
GetDlgItem(IDC_R1)->SetWindowText(_T"お前は馬鹿か?");
309304:2005/07/16(土) 15:06:59
>>307
検索してサイトを見て回ると、そうしている所が多いいから・・・・。
変数を追加してチェックが入る時に変数に代入するしかないのかな。
310デフォルトの名無しさん:2005/07/16(土) 15:26:40
>>309
・モードレスダイアログとはなんであるのか
・DoModalとはなんであるのか

おまいはまずこれらを調べ理解してこい
311デフォルトの名無しさん:2005/07/16(土) 15:31:09
>>309
先に>>310の答えを言っちゃうと、DoModalはモーダルダイアログを作る。モードレスダイアログはCreateだ。

312デフォルトの名無しさん:2005/07/16(土) 16:36:58
答えになってねぇw
313304:2005/07/16(土) 17:41:56
そうだったのか・・・開いたまま使うのと、そうでないものなんですね。
それで私が使いたいのは「モーダルダイアログ」でラジオボタンの選択をさせてチェックの
有無を確かめたいのです^^;。
そして今から「DoModal」を調べてきます。
314デフォルトの名無しさん:2005/07/16(土) 23:06:36
>>313
モーダルにするんならダイアログを起動したスレッドからは変更は不可能。
監視用の別スレッド作って変更するか、ダイアログのプロシージャ内で変更しろ。
315デフォルトの名無しさん:2005/07/17(日) 20:09:01
CListView().SetItemText(0,2,hIcon);という感じでnSubItemの2のテキストの左にアイコンを
表示したいのですが、どうやったら出来るのでしょうか?。
316デフォルトの名無しさん:2005/07/18(月) 00:05:02
アイコンが表示できない、なぜ-;。

CTreeCtrl & c = GetTreeCtrl();

SHFILEINFO sfi;
SHGetFileInfo(path,FILE_ATTRIBUTE_ARCHIVE,&sfi,sizeof(sfi),SHGFI_ICON|SHGFI_SMALLICON);

c.InsertItem(path,imglist->Add(sfi.hIcon),imglist->Add(sfi.hIcon),TVI_ROOT,TVI_LAST);
317デフォルトの名無しさん:2005/07/18(月) 09:45:48
コンソールアプリケーションでprintf等の出力をIDE内に
出すことは可能でしょうか。
318デフォルトの名無しさん:2005/07/18(月) 10:08:30
デバッグビルドの設定を変更してMFCとリンク。
そんでもってTRACEマクロを使用すればできるかな。
319デフォルトの名無しさん:2005/07/18(月) 10:33:24
>>318
それって質問に対する回答にはなってないな。オナニーご苦労。
320デフォルトの名無しさん:2005/07/18(月) 10:44:05
>>317
コマンドラインでリダイレクト。
321デフォルトの名無しさん:2005/07/18(月) 11:12:46
わざわざIDEへ出力する必要性がいまいちわからん。
コンソールアプリならコンソールかファイルへ出力できれば十分だろ
322デフォルトの名無しさん:2005/07/18(月) 11:14:43
>>321
このスレでは質問するのにいちいち必要性を説明しなければならないのですか?
必要なくても技術的に可能かどうか疑問を持ってはいけませんか?
323デフォルトの名無しさん:2005/07/18(月) 11:19:25
無料で教えられることには限りがあるからな
よっぽどひまで物好きな人がいるといいね
324デフォルトの名無しさん:2005/07/18(月) 11:21:28
それはお前に教える能力があるという前提での話だな。
前提を満たしてないのに話を先に進めちゃダメよ。
プログラムもそうでしょ。
325デフォルトの名無しさん:2005/07/18(月) 11:23:34
とりあえずMFCでやってるからMFCのソース読めばわかる。
afxDumpとか
暇なら調べてみ
326デフォルトの名無しさん:2005/07/18(月) 11:31:39
前にもどこかのスレで同じようなような質問があって
誰か答えてたような気もするが、勘違いかもしれない。
過去ログ調べてみるのも手だな
327デフォルトの名無しさん:2005/07/18(月) 12:45:11
一応調べてみたらIDEへ出力するのはAPIでやってた。
質問者が気に入らんから回答はここまで
誰か親切なやつがいるといいね
328デフォルトの名無しさん:2005/07/18(月) 18:38:58
InsertItemの引数が間違っているからIDEへ出力出来ない。
329デフォルトの名無しさん:2005/07/18(月) 20:02:55
>>325
>>327
サンキュー。分かったよ。
何が気に入らなかったのかは理解不能ですが。
330デフォルトの名無しさん:2005/07/18(月) 21:25:07
>>317
printf()の出力はそのままでは出せないので
vsprintf()とOutputDebugString()で我慢しろ
331288:2005/07/19(火) 15:05:20
>>288です。
みなさん回答ありがとうございました。
メッセージポンプをループ中に入れることにします。
332デフォルトの名無しさん:2005/07/19(火) 15:31:06
C言語のスレで誘導されました。
vc++でcのプログラムを作成しているのですが、

最大表示件数を5件、↑↓キーでのページ切り替えを行うにはどうしたらよいのでしょうか?
よろしくお願いします。
333デフォルトの名無しさん:2005/07/19(火) 15:32:28
とりあえず日本語の勉強から
334デフォルトの名無しさん:2005/07/19(火) 15:38:32
う、申し訳ないです。あわてて書き込んだらわけわかりませんね。

vc++6.0にてc言語のプログラムを作成しています。
ファイルの読み込み>一覧表示の際に
仮に50件のデータがあるとして、5件までを1ページの最大の表示件数に設定し、
↑↓キーによってページを切り替えられるようにしたいわけです。
この場合だと10ページの切り替えにしたいと言えばいいのでしょうか。

こ、これで伝えられてるでしょうか・・・。
335デフォルトの名無しさん:2005/07/19(火) 15:47:48
コンソールアプリでって事?
336デフォルトの名無しさん:2005/07/19(火) 15:49:35
はい、そうです。
337デフォルトの名無しさん:2005/07/19(火) 18:38:50
>>334
conio.hのgetch()を使えば、↑↓を押したときもすぐ返してくれます。
とりあえず、getch()の戻り値をモニターするプログラムを作って、
↑↓を押したときにどんな値が返るか調べましょう(そのくらい作れるよね。できないならあきらめな)。
338デフォルトの名無しさん:2005/07/19(火) 19:01:47
>>334
>vc++6.0にてc言語のプログラムを作成しています。

作成しようと思っているんじゃなく、作成し始めてるんだな?どこまでできたんだ?
339デフォルトの名無しさん:2005/07/19(火) 20:31:12
scanf("%d",&data);
scanf("%c",&ch);
printf("%d,%c",data,ch);

上のようにint型dataとchar型chに数と文字を入れ
printfで出力しようと思うのですが
実行するとdataを入力したら文字入力が飛ばされ終了してしまいます
scanfを上下入れ替えて文字、数字の順にすると問題なく動きます
文字入力のscanfを%sで実行すると飛ばされはしませんがdataの中が0になってしまします

色々調べてみたのですが原因がわかりません
よろしければご教授ください
340デフォルトの名無しさん:2005/07/19(火) 20:51:12
読み込み不一致だな。
fgets()で文字列にしてからatoi()なり何なりを使って変換汁。
341デフォルトの名無しさん:2005/07/19(火) 21:34:30
Cの質問をVCスレに誘導されても迷惑だな
なんとかならんのか
342デフォルトの名無しさん:2005/07/19(火) 21:46:36
C言語の標準関数だけでは無理という理由でここへ誘導されてるわけだし
C言語の標準関数だけでやってるならCのスレへ行くべきだろう

http://pc8.2ch.net/test/read.cgi/tech/1121657911/60-63n
>
> 63 :デフォルトの名無しさん :2005/07/19(火) 14:14:02
> >>60
> C言語の標準関数だけでは無理なので、該当スレへどうぞ。
> ・VCスレ
> ・初心者質問スレ
> ・MFCスレ
343デフォルトの名無しさん:2005/07/19(火) 22:07:10
>>339
scanf("%d"のときに数字を入力した後の改行が次の%cで読み込まれている。
scanf("%d%*[^\n]%*c", &data, %ch);とでもすればいいんじゃない?
344デフォルトの名無しさん:2005/07/19(火) 22:57:31
改行が読み込まれている、をヒントに調べ直しました
scanf("%c", &dummy);
上記を各scanfの後に行いダミー変数に放り込む方法で解決しました
アドバイスありがとうございました
345デフォルトの名無しさん:2005/07/19(火) 23:13:27
C++で狽ナk=0から∞の特別なプログラムってある??
誰か教えてください!!
346デフォルトの名無しさん:2005/07/19(火) 23:16:35
ぼるじょあがC/C++の宿題を片づけますYO! 48代目
http://pc8.2ch.net/test/read.cgi/tech/1121471445/
347デフォルトの名無しさん:2005/07/19(火) 23:25:49
ありがとうございます.
348デフォルトの名無しさん:2005/07/19(火) 23:30:49
>>344
余りいい方法じゃないね。
>340がずっと使える一般的な手法かと。
>343でもいいけど毎回そのフォーマットを編集するのも気が萎えるだろうしね。
349デフォルトの名無しさん:2005/07/20(水) 00:37:55
VC++でエクセルを読み込んで処理を行いたいと思っているのですが、
ハイパーリンクを取り込むことができません。
どなたかお知恵を貸してください。
350デフォルトの名無しさん:2005/07/20(水) 00:52:36
エクセルを読み込むのか……
大変そうだ。
#ブックファイルを読むならいざ知らず。
351デフォルトの名無しさん:2005/07/20(水) 01:39:14
おい!おまいら!あほのマイクロソフトの3万近くの有償サポートについてどう思う!?
完全に自社製品のサポートに対する怠慢だとおもうのだが!
自社製品の不備が多すぎるので答えるのが面倒で防御策をしていると
思われるがどう思う?

352デフォルトの名無しさん:2005/07/20(水) 07:13:35
>>351
そういう香具師は、Eclipse+GCCでも使うよろし
353デフォルトの名無しさん:2005/07/20(水) 12:00:38
なんで?<352
354デフォルトの名無しさん:2005/07/20(水) 12:22:42
VC6.0でリストビューを使ってレポート形式のリストを作ったんですけど、
リスト上部のカラムをドラックしてサイズを変えると、行がずれた時に
再描画されてないらしくて灰色の線が残っちゃったりします。
スクロールの機能自体は残したいのですが、カラムをクリックした時とか
カラムのサイズが変わったのを検知して、再描画を促す手段とかご存知ないでしょうか?
355デフォルトの名無しさん:2005/07/20(水) 12:55:50
>>354
わざわざそんなことやんなくてもいいはず
描画してる場所がまずいんじゃないの?
356デフォルトの名無しさん:2005/07/20(水) 13:09:15
>>355
タブコントロールの上にリストビューを2個重ねておいていて、タグが選択されたら
対応するリストビューをm_listctrl.ShowWindow(SW_SHOW);で描画するってことを
やってるんですけど、原因はそれですかね?
357初心者ゴン:2005/07/20(水) 13:13:18
メモリーリーク検出方法ってどうやるんでしょうか?よろしくお願いします。
358355:2005/07/20(水) 13:14:14
試しにリストビューをタグの上じゃなくて、離れたところにずらしてカラムを
左右に振ってみたら、前述の描画異常は起きませんでした。
どうも、タグの上への重ね方が悪かったみたいです。
359デフォルトの名無しさん:2005/07/20(水) 13:36:59
>>357
デバッグビルドするだけじゃないかな
360初心者ゴン:2005/07/20(水) 13:50:04
デバックビルド?デバッガのことですか?
361デフォルトの名無しさん:2005/07/20(水) 13:51:20
デバッグで動かせば実行終了した時リークした場所が出てくゆ
362デフォルトの名無しさん:2005/07/20(水) 14:01:51
>>357
#define MLCHECK() do { \
  _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); \
  _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE); \
  _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); \
  _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT); \
  _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT); \
  _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT); \
  _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); \
} while(0)

コンソールアプリならmain() 入ってすぐに MLCHECK(); しとけばいい。
試しに new int; return 0; とかやってみればどうなるかはわかる。
363初心者:2005/07/20(水) 14:24:54
例えば
void CSample2View::OnButton1() このクラス内で
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
CFileDialog filedlg(TRUE, "txt", "*.txt");
CString file1;
FILE *fp1;
int i=0;
int c;
char boxa[200];

if(filedlg.DoModal() == IDOK)
{
file1 = filedlg.GetPathName();
fp1 = fopen(file1,"r");

while( (fscanf(fp1,"%f",&boxa[i]) )!=EOF)
{
fscanf(fp1,"%f",&boxa[i]);
i++;
}
c=i-1;

fclose(fp1);
}

}

などの計算をしてそのboxaの値を他のクラス内で使用したい場合は
どのようにすればよいですか??
publicなどで宣言すればよいのですか??
よろしくお願いします。
364初心者ゴン:2005/07/20(水) 14:29:07
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
ってメモリーリークなんですかね?
365初心者ゴン:2005/07/20(水) 14:30:01
↑メモリーリーク検出なんですかね?
366初心者ゴン:2005/07/20(水) 14:39:48
チェックの方法がわかりました!みなさんありがとうございます。
367354:2005/07/20(水) 18:01:05
ダイアログの[書式]-[タブオーダー]でリスト2個の優先順位をタブコントロールより上にしたら解決しました。
リストの描写が潰れていたのはそこら辺が原因みたいでした。
どうもお騒がせしました。
368デフォルトの名無しさん:2005/07/20(水) 21:19:27
>>363
Getter,Setter
369初心者:2005/07/21(木) 13:52:55
ダイアログでデータを入力してグラフ表示させる場合は最初に選択する画面で
SDI、MDI、ダイアログってありますがどれを選択すればよいでしょうか?
簡単に言うと
1.2つのファイル(.txt)を入力(オープン)。
2.閾値などを入力し2つのファイルのデータを処理。
3.処理されたデータをグラフ表示。

C言語ではファイルのオープンから閾値などを入力し
出力ファイルを作るところまではできたのですが
C++ではなかなかうまくいきません。
お教えいただけますか??
370デフォルトの名無しさん:2005/07/21(木) 14:56:00
>>369
>ダイアログでデータを入力して
単一ダイアログモデルでいいなら、ダイアログを選択すればいいじゃん。
グラフを別ウィンドウにするとしても、別ダイアログで事は足りるだろうし。
SDI/MDIはファイル依存型、ダイアログは操作依存型と思えばいい。
371デフォルトの名無しさん:2005/07/21(木) 14:56:14
どれでもできる
372デフォルトの名無しさん:2005/07/21(木) 15:08:32
違いがわからんのだったら
どれを選択なんていわずに全部作ってみる。
373デフォルトの名無しさん:2005/07/21(木) 16:14:36
>>369
初心者ならまずダイアログから入ったほうがよさげ。
374デフォルトの名無しさん:2005/07/21(木) 17:42:39
>>373
Document/Viewアーキテクチャーを理解できなくなる罠
375デフォルトの名無しさん:2005/07/21(木) 17:47:49
いまだ理解できていない俺ガイル。
376デフォルトの名無しさん:2005/07/21(木) 17:52:37
理解する必要なし
377369:2005/07/21(木) 18:25:39
>>373
そう思って書きましたが。
つーか、漏れも余程のことがないとダイアログだなぁ。
378デフォルトの名無しさん:2005/07/21(木) 18:28:13
俺ダイアログ以外で作ったことないぜ
379デフォルトの名無しさん:2005/07/21(木) 18:29:55
メニューとかつけるのめんどいし
380デフォルトの名無しさん:2005/07/21(木) 20:35:14
今、ダイアログ上のスクロールバーのデータ(数値)をSDIのデータクラスへ
受け渡しするプログラムを作っています。
DDXを使うのは分かるのですが、スクロールバーを移動した際のデータの
反映がうまくいきません。

UpdataDataを使ってデータの更新をしようと試みていますが、
起動してスクロールバーを移動させるとエラーが出て止まります。
何かいい方法は無いでしょうか?
381288:2005/07/22(金) 11:02:49
秀丸やOpenJaneの設定のようなコントロールは
全く同じ実装にみえますが、
どんなコントロールを使ってるのでしょうか?
382デフォルトの名無しさん:2005/07/22(金) 11:58:54
OpenJaneはソース公開されてます
383288:2005/07/22(金) 12:20:23
そっすか
384288:2005/07/22(金) 16:12:32
そっすよ
385デフォルトの名無しさん:2005/07/22(金) 16:30:47
ど素人です
C#.NETで作ったDLLを、アンマネージコードから呼ぶにはどうしたらよいのでしょうか?
386デフォルトの名無しさん:2005/07/22(金) 17:15:57
>>385
ど素人から卒業できるよう勉強する。
387デフォルトの名無しさん:2005/07/22(金) 19:06:03
COM
388デフォルトの名無しさん:2005/07/22(金) 19:56:04
1 番目の引数を 'void (void *)' から 'void (__cdecl *)(void *)' に変換できません。
とは具体的にどのようにすればいいのでしょうか?

ちなみに関数は、virtual void CApp001::Func(void* p)です。
389デフォルトの名無しさん:2005/07/22(金) 20:39:21
static void CApp001::Func(void* p)
とか
void Func(void* p)
390デフォルトの名無しさん:2005/07/22(金) 22:25:19
>>387
たびたびすみません。度素人です。
.NETのDLLをCOM化するにはどうしたらよいのでしょうか。
COM化とはActiveXにするということですか?
391デフォルトの名無しさん:2005/07/22(金) 22:52:16
新規作成ウィザードにCOMってあるだろ
392デフォルトの名無しさん:2005/07/23(土) 01:37:38
VC++ .NET2003 MFCベースで開発していますが、
最初はそんな事はなかったのですが、
ブレークポイントを置いてデバッグ実行する際、
ブレークポイントが、下に数行勝手にずれてしまいます・・・orz
(ブレークポイントで止まります・・・が、自分が見たい変数の内容や条件文は
すでに実行された後で、デバッグが非常にやりずらい状況です)

解決する方法はありますでしょうか?

新規に別プロジェクトで作成するアプリケーションでは発生しません。
開発環境の問題と言うより、おかしくなるプロジェクトの問題なのでしょうか?
393デフォルトの名無しさん:2005/07/23(土) 01:40:20
Releaseビルドで最適化がかかっちゃってるとか。
394デフォルトの名無しさん:2005/07/23(土) 06:04:41
ブレークポイントを設定できないとこに設定しようとしてるだけじゃねぇの?
395デフォルトの名無しさん:2005/07/23(土) 08:26:21
>>392
[ビルド(B)] - [(プロジェクト)の消去(N)]
396デフォルトの名無しさん:2005/07/23(土) 09:40:30
>>388
そのCApp001::Funcを関数へのポインタの変数に代入しようとしているかほかの関数の引数に渡そうとしているだろ。
397デフォルトの名無しさん:2005/07/23(土) 13:45:11
ピクチャーボックスにグラフの目盛りを線描画(SelectClipRgnでクリップする)、
数値を文字描画するプログラムを作ったのですが(クリップしない)、
文字を消去する時、ピクチャーボックス外にはみ出た文字が消去されません。

これ以外の処理は何をすればよいでしょうか?
 CWnd* h = GetDlgItem(IDC_PICTURE);
 h->Invalidate(); //再描画すべき領域を設定

開発環境はVC++6.0です。
398デフォルトの名無しさん:2005/07/23(土) 13:58:38
>>397
描き直したい領域全てをInvalidate()しろ。
ぶっちゃけ、ダイアログ全体で試してみればよかろう。
#つーか、はみ出したところが判っているならそこだけInvalidate()すればいいのだが。
399397:2005/07/23(土) 16:20:23
ダイアログ全体でやってみたら、Invalidateの行でエラー終了してしまいました。
//CWnd* h = GetDlgItem(IDC_PICTURE);
 CWnd* h = GetDlgItem(IDD_KYOKUSEN01_DIALOG);
 h->Invalidate(); //再描画すべき領域を設定

はみ出したところだけInvalidateするという方法も調べてもわかりません。
とりあえず、ピクチャーボックスの4方にこんな感じではみ出ている状態です。
 a
a□a
 a
400デフォルトの名無しさん:2005/07/23(土) 16:28:50
そもそもはみ出すような設計が悪い
401デフォルトの名無しさん:2005/07/23(土) 18:18:59
vc++とc++の違いってなんですか?
402デフォルトの名無しさん:2005/07/23(土) 18:21:15
統合開発環境かただの言語だけかの違い
403デフォルトの名無しさん:2005/07/23(土) 19:45:38
ワープロと日本語の違いってなんですか?
って言ってるのと同じだな。
404デフォルトの名無しさん:2005/07/23(土) 20:25:53
ちょっと違うな、日本語ワープロと日本語の違い、かな
405デフォルトの名無しさん:2005/07/23(土) 21:02:08
v(開発環境)c++(言語)
って感じか。
406デフォルトの名無しさん:2005/07/23(土) 21:13:26
Visual C++はWindows用のC++
407デフォルトの名無しさん:2005/07/23(土) 21:38:51
>>406
C++にWindows用も何もないだろ。
Microsoftが開発・販売している、プログラミング言語にC++を採用した、Windowsアプリ統合開発環境ソフトの商品名がVisualC++。
408デフォルトの名無しさん:2005/07/23(土) 22:09:32
オープンソースのものを見て、C++を覚えようと思っているんですが、
.cppと.hで書き分けるのにはどういう意味があるんでしょうか?
回答お願いします。
409デフォルトの名無しさん:2005/07/23(土) 22:16:55
とりあえず人に偉そうに説明できるほど理解してないから説明できんけど
C/C++スレの過去スレで同じ質問があったな
410408:2005/07/23(土) 22:28:17
>>409
レスありがとうございます。
けれどdat落ちしていて見れませんでした・・・。

411デフォルトの名無しさん:2005/07/23(土) 22:50:46
C++勉強してるならC++スレへ
ここはウインドウズ用のアプリを開発する人のスレ
412392:2005/07/24(日) 00:48:24
アドバイスありがとうございます。

>>393
確認してみましたが、デバッグ実行です。コードの最適化も「なし」になっています。

>>394
それはありません。自分で作成したクラスのコンストラクタや、メンバ関数内です。

>>395
はい。既に何度も行っています。オブジェクトファイルや .ncb ファイルの削除も効果がありませんでした。


他に確認すべき所はありますでしょうか?
413デフォルトの名無しさん:2005/07/24(日) 00:50:31
>>412
混合モードでみてみろ。
414392:2005/07/24(日) 01:26:47
>>413

早速見てみました。

004FBD4E push 800h
004FBD53 push 0
004FBD55 mov eax,dword ptr [this]
004FBD58 add eax,78h
004FBD5B push eax
004FBD5C call @ILT+11765(_memset) (4D7DFAh)
004FBD61 add esp,0Ch
pThread = NULL;
004FBD64 push offset string "LogicCam" (6AAEE8h)
004FBD69 mov ecx,dword ptr [this]
004FBD6C call CWnd::SetWindowTextA (4DB874h)
#ifdef OFFLINE
pThreadOffLine = NULL;
004FBD71 mov eax,dword ptr [this]
004FBD74 mov dword ptr [eax+0A84h],0
#endif
004FBD7E mov eax,dword ptr [this]
004FBD81 mov dword ptr [eax+0A88h],0
memset(&PostResultStr[0], 0x00, sizeof(PostResultStr));
004FBD8B mov eax,dword ptr [this]
004FBD8E mov dword ptr [eax+0A8Ch],27Fh
this->SetWindowText("LogicCam");

のようになりました。

this->SetWindowText("LogicCam"); に該当すると思われるニーモニックが上にずれています。
ちょうど、ブレークポイントのズレ量と一致します。
415デフォルトの名無しさん:2005/07/24(日) 01:47:02
コンボボックスの項目が空の場合の高さってリソースエディタで
設定したデフォルトの高さになってしまうようですが、
項目が空の場合だけ高さを調整することってできませんか?
もしくは空の場合にドロップダウンできなくする方法はありませんか?
ただし、ドラッグ&ドロップに対応させたいので無効にしない方法で。
うまく説明できませんがお願いします。
416デフォルトの名無しさん:2005/07/24(日) 02:34:49
質問なんですが
関数呼出しごとに引数で渡されたポインタのメモリ確保領域をインクリメントする
ということは可能でしょうか?
417デフォルトの名無しさん:2005/07/24(日) 02:43:18
>>416

うーん。
void piyo(int* fuga){
}
みたいな関数で、fugaの内容をインクリメントするって事??

void piyo(int* fuga){
++(*fuga);
}

じゃダメ? これって、基本的な部分のC言語のお話ですよね。
418デフォルトの名無しさん:2005/07/24(日) 02:50:25
CをUNIXでEUC-JPで書いたんですけど
そのファイルをVisual C++で扱えないんですか?
Visual C++はEUC-JPはサポートしてませんか?
419デフォルトの名無しさん:2005/07/24(日) 02:59:42
>>418

うーん。文字コードだったらSHIFT-JISへ変換して使えば??

変換ツールなら、オンラインソフトでもいくつかあります。
ttp://www.vector.co.jp/vpack/filearea/win95/util/text/conv/code/index.html


もしくは、秀丸みたいにサポートしているテキストエディタで開いて
VC++画面へコピペするとか。

420デフォルトの名無しさん:2005/07/24(日) 08:23:23
>>418
少なくとも2003は開けるはずだぞ。
C++ソースコードエディター(エンコード付)
を使えば開ける。
421デフォルトの名無しさん:2005/07/24(日) 11:01:01
>>414
IDEはOFFLINEが定義されてないと思ってるけどコンパイラはOFFLINEが定義されていると思ってる。
OFFLINEの定義を確認してリビルドしてみる。
422392:2005/07/24(日) 11:55:30
>>421

OFFLINEは、 stdafx.h で
#define OFFLINE
として、定義しています。試しにプロジェクトのプリプロセッサ定義の所で

WIN32;_WINDOWS;_DEBUG



WIN32;_WINDOWS;_DEBUG;OFFLINE

にしてみました。コンパイラは
warning C4005: 'OFFLINE' : マクロが再定義されました。
と、言ってきました。(予想通りですが)

ちなみに、OFFLINE を無効にしても、同様にブレークポイントのズレは
発生してしまいます。

IDEがOFFLINEが定義されてないと思ってる・・・とありますが、
これは、どのように確認するのでしょうか?
423デフォルトの名無しさん:2005/07/24(日) 13:34:59
>>422
キミが返答してる先に、「OFFLINEの定義を確認してリビルドしてみる」と書いてあるのにキミは何をやってるのかね?
424392:2005/07/24(日) 14:15:30
>>423

すみません。何か間違っていますでしょうか?
「OFFLINEの定義を確認してリビルドしてみる」をやってみた結果、
422 のようになりました。
OFFLINEは、 stdafx.h で #define OFFLINE として、定義されている事を
確認した上でリビルドしてみましたが、状況に変化はありませんでした。

stdafx.h 内の定義とは別に、プロジェクトのプロジェクトの
プリプロセッサ定義を変更してみましたが、ブレークポイント停止位置が
ずれる現象に変化はありませんでした。
また、OFFLINE の定義を無効にしてリビルドしても、同様に状況は変わりません。
425デフォルトの名無しさん:2005/07/24(日) 14:38:22
>>424
メンバ変数をmemsetで2048byteほど0クリアしているところをコメントアウトしてみなさい。
それでも変わらないならそのプロジェクトをどこかのアップローダに丸ごとあげてみてください。
誰かヒマな人がみてくれるでしょう。
426誰か教えて!!:2005/07/24(日) 22:01:29
すみません・・・超初心者なんですが誰か教えてくれませんか???
ホンマにお願いします!!!!!!!!!!!


下記に示したマージソートの中の最終行にある関数、divide_from(),merge()を
実装すること。
(不足部分がある場合は適切に補うこと。細かい誤りがある場合は訂正せよ)
参考:マージソートの手順(下記を再起的に行なう)
1.リストを分割する。(クイックソートとは異なり、単に前半と後半に分ける)
2.分割したリストをそれぞれマージソートする。
3.ソートした二つのリストをマージする。

template < class Node_entry >
struct Node
{
Node_entry entry ;
Node < Node_entry > *next;
Node() { next == NULL; }
};

template < class List_entry >
class List
{
protected :
int count ;
Node < List_entry > *head ;
};

427デフォルトの名無しさん:2005/07/24(日) 22:04:23
>>426
ぼるじょあがC/C++の宿題を片づけますYO! 48代目
http://pc8.2ch.net/test/read.cgi/tech/1121471445/l50
428誰か教えて!!(続き):2005/07/24(日) 22:04:39
template < class Record >
class Sortable_list : public List < Record >
{
public :
void merge_sort();
private :
void recursive_merge_sort( Node < Record > * & );
Node < Record > * divide_from( Node < Record > * );
Node < Record > * maege( Node < Record > *, Node < Record > * );
};

template < class Record >
void Sortable_list < Record > :: merge_sort()
{
recursive_merge_sort( head ) ;
}

template < class Record >
void Sortable_list < Record > :: recursive_merge_sort( Node < Record > * &head )
{
if ( head != NULL && head -> next != NULL ) {
Node < Record > * second_harf = divide_from( head );
recursive_merge_sort( head );
recursive_merge_sort( second_half ) ;
head = merge ( head, second_half ) ;
}
}


お願いしますm(__)m
429デフォルトの名無しさん:2005/07/24(日) 22:16:17
>>428
君も初心者を超越したのなら聞き分けたまえ。
430デフォルトの名無しさん:2005/07/25(月) 13:59:51
まだか、早くしろ!!
431デフォルトの名無しさん:2005/07/25(月) 14:49:34
VC.NET 2003 にて
右クリック→宣言へ移動
に相当するショートカットってありますか?
VB6はShift + F2で行けたので、重宝してたのですが・・・
432デフォルトの名無しさん:2005/07/25(月) 14:53:55
>>431
設定でいろいろ変えられるが、デフォルトはCtrl+F12 かな。
ツール-オプション-環境-キーボードで検索できる
433デフォルトの名無しさん:2005/07/25(月) 15:00:50
そのままF12じゃねぇか?
いや、.NETは知らんが、VC6はF12なもんでよ
434デフォルトの名無しさん:2005/07/25(月) 15:03:15
こにちあ。
static TCHAR strFile[MAX_PATH];
ofn.lpstrFile = strFile;
を宣言しといて、
GetOpenFileName(&ofn) で strFile にファイルパスを格納。

その後、 VCMP3 の vbmp3_open(const char *, InputInfo *) で
vbmp3_open(strFile, &audioData);
として strFile を再生したいんですが、コンパイラに型が一致しないと蹴られます。
詳しい方おせえてくらさい。
435431:2005/07/25(月) 15:06:09
>>432-433
F12で出来ました!助かりました。
ありがとうございます。
436デフォルトの名無しさん:2005/07/25(月) 15:11:22
>>434
そりゃそうだ。
strFileはTCHAR[MAX_PATH]型、配列だからTCHAR *やconst TCHAR *には変換できる。
しかしvbmp3_openの引数はconst char *、どれとも一致していないじゃないか。

ATL::CT2AやCStringを使って変換すればよし。
437434:2005/07/25(月) 15:19:30
どうも。

VC++ 2005 Express Edition を使っとりまして、 ATL 系は使えないという…。
CString についても知識がありません。

Win32 API で変換できません?
438デフォルトの名無しさん:2005/07/25(月) 15:24:31
サンプルにVCのプロジェクトが入ってるじゃん
そのままビルドすれば動くだろ
動いたやつを真似するだけだ
439デフォルトの名無しさん:2005/07/25(月) 15:32:55
>>437
WTLにCStringあったと思うけど
Unicodeでコンパイルしてる?

440デフォルトの名無しさん:2005/07/25(月) 15:46:07
vbmp3_open((LPCTSTR)strFile, &audioData);

これでコンパイル通らんか?
441434:2005/07/25(月) 15:48:32
うーん、分からん(笑)
WTL とは何でしょーか...?(^^;;

CString でいけるみたいなんで、そっち覚えます。
資料読んでますけど、今ひとつ…。

どなたか簡単なソースを示してもらえません?
442434:2005/07/25(月) 15:50:44
>>440
弾かれました…。
443デフォルトの名無しさん:2005/07/25(月) 15:52:37
キャストしなくてもこいうコードでコンパイル通るな
型は合ってるんじゃないか?
static TCHAR strFile[MAX_PATH];
const char * hoge=strFile;
444デフォルトの名無しさん:2005/07/25(月) 15:55:00
>>441
vbmp3_open(CStringT<char>(strFile), &audioData);

>>440>>443
だからUnicodeにしたら駄目なんだって。
445434:2005/07/25(月) 16:02:05
初めから怪しいと思っとりましたけど、
VC++ 2005 Express Edition では、ATL に加えて MFC もないようです。

ちょっと知識がないのであれですが、
MFC が死んでると CString も使えない?
446デフォルトの名無しさん:2005/07/25(月) 16:08:19
>>445
CStringはMFCとATLの共用。どっちかがあればいい。
で、VC2005にはどっちもないと。
447434:2005/07/25(月) 16:14:33
そりゃ困ったな'`'`'`'`'`
448デフォルトの名無しさん:2005/07/25(月) 16:41:10
WideCharToMultiByte使えばえーやん
449デフォルトの名無しさん:2005/07/25(月) 16:56:26
スレッドセーフじゃないけど、こんな感じでやればconst TCHAR*を受け付ける。
inline const char *ToCharStr(const char *p)
  return p;
}

const char *ToCharStr(const wchar_t *p)
{
  static char buf[1024];
  WideCharToMulchByte();
  return buf;
}
450デフォルトの名無しさん:2005/07/25(月) 17:10:00
簡単なことをわざわざ難しくやってるとしか思えんな
451381:2005/07/25(月) 17:10:30
>>381ですが、JaneのソースはDelphiのようなのです。
VCにて秀丸のような設定ができるコントロールはどうやって作るのでしょうか。
452デフォルトの名無しさん:2005/07/25(月) 17:20:47
>>451
普通のツリーコントロール、チェックボックス、ボタンとかですね
特別なコントロールは使ってないはず
453381:2005/07/25(月) 17:26:00
これがなんかズバリっぽいので、ちょっとやってみます。
http://www.codeguru.com/Cpp/controls/treeview/misc-advanced/article.php/c727/
>>452回答ありがとうございます。
454434:2005/07/25(月) 18:36:43
戻って参りました(^^;;;

char *szName;
szName = (char*)malloc(MAX_PATH);
WideCharToMultiByte(CP_ACP, 0, strFile, -1, szName, 0, NULL, NULL);
MessageBox(NULL, (LPCTSTR)szName, NULL, MB_OK);

としましたが、無意味な文字列が szName に入ります…。
んと…、これ↑は一体何をやってるんでしょうか?
マルチバイト文字への変換が char * 型と関係あるのか分かってません。
455381:2005/07/25(月) 18:55:38
>>453
これはさっぱり使えませんでした。

一般的にはツリー型ダイアログというそうですが、サンプルとか
全然無いのに、みなさん実装してますね。
456381:2005/07/25(月) 19:18:44
ここにもっといいのがありました。
使ってみます。
http://www.codeproject.com/property/treepropsheet.asp
457デフォルトの名無しさん:2005/07/25(月) 20:51:38
>>454
MSDNを100回嫁
458デフォルトの名無しさん:2005/07/25(月) 21:27:07
int num[][]; ---(1)
num=new int[5][5]; ---(2)

(1)(2)は何を行う命令かをおしえてください。


for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
System.out.print(num[i][j]+"");
}
System.out.println("");

何を行う命令か教えてください。お願いします。
459デフォルトの名無しさん:2005/07/25(月) 21:29:21
>>458
Visual C++と関係ないだろ。
460デフォルトの名無しさん:2005/07/25(月) 21:40:54
>>459
まぁまぁ、どこに書いていいか分からないだけかもしれないから
そんなに角立てないで。
(1) int num[][] を行う命令。
(2) num=new int[5][5] を行う命令。
461デフォルトの名無しさん:2005/07/25(月) 21:58:01
>>458
C宿題にも来てただろ
462デフォルトの名無しさん:2005/07/25(月) 22:09:17
夏ですかね?
463デフォルトの名無しさん:2005/07/25(月) 22:35:10
マルチが急増してきたね。
そんなに難しくないんだから自分で考えればいいのに。
464434:2005/07/25(月) 23:13:31
>>457の仰るとおり MSDN を読み直したら簡単にできました(汗
WideCharToMultiByte の使い方が分かってなかった...orz
---
char szName[MAX_PATH];
DWORD dwLen = WideCharToMultiByte(CP_ACP, 0, strFile, -1, NULL, 0, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, strFile, -1, szName, dwLen, NULL, NULL);
szName[dwLen] = '\0';
vbmp3_open(szName, &audioData);
---

皆さん助かりました。どもです^^
465デフォルトの名無しさん:2005/07/25(月) 23:15:19
そうすると今度はUNICODEの定義をなくしたときに喚く予感。
466434:2005/07/25(月) 23:21:58
>>465
「UNICODEの定義」ってのは、どういうことなんでしょ?
自分がどの文字コードでコンパイルしてるかはどうすれば分かるんでしょうか。

適当なテキストエディタでソース開いて→UNICODEで保存。
あとは普通にVC++で開いてコンパイル。これでおk?
467デフォルトの名無しさん:2005/07/25(月) 23:27:08
>>466
そうじゃなくてTCHARは#define UNICODE(あるいはそれに相当するコンパイラオプション)が書いてあるかどうかで
wchar_tとcharのどっちからtypedefされるのかが切り替わるような仕組みになっている。

で、このUNICODEの定義を消したら……、ということ。
468デフォルトの名無しさん:2005/07/25(月) 23:29:49
UNICODEよりもDBCSが好きさ
469434:2005/07/25(月) 23:34:25
あーなるなる。そゆことか。

今の環境では UNICODE が define されてますけども、
これは何もいじらなければ、ずっとこのままですよね?
特にいじったりする気はないんで問題なさげに見えますが…。
470434:2005/07/25(月) 23:44:15
static TCHAR strFile[MAX_PATH];

static LPTSTR strFile;
として直しました。
これで良くなった?
471デフォルトの名無しさん:2005/07/25(月) 23:51:16
( ゚д゚)ポカーン
472デフォルトの名無しさん:2005/07/26(火) 04:20:13
インテリセンスで呼び出せるグローバル関数群の定義はどのようにするのがお勧めでしょうか?
とりあえず思いつくのは

1.グローバル関数をnamespaceでくくる
namespace Hoge {
 void Mage();
 void Moge();
};
Hoge::Mage();
Hoge::Moge();
たいていクラスで実装してるんであまり使えないかな・・・。

2.適当なグローバルなインタフェースポインタを使う
extern Hoge* g_pHoge;
g_pHoge->Mage();
g_pHoge->Moge();
ポインタ生アクセス嫌なら
Hoge* GetHoge(){ return g_pHoge; }
GetHoge()->Mage();
とかかな。

3.シングルトン使う
Hoge::getInstance()->Mage();
Hoge::getInstance()->Moge();
ちょっとタイプ量が長くなりそ・・・。

なんかこうすればお勧めとか、
アレはこういう欠点が、コレはこういう長所がとかあればご教授ください。
473デフォルトの名無しさん:2005/07/26(火) 07:51:00
try-catch 文を書いていて、エラーが出たなと思ったら、
// xstring internal header (from <string>)
#if _MSC_VER > 1000
#pragma once
#endif
....
って続くxstringファイルが表示されました。
このあと、どんなスケルトンプログラムをつくってもエラーが多数生じ、
このファイルが表示されるようになってしまったのですが、解決法はないでしょうか。
VC++6.0sp6ですが、再インストールしかないでしょうか?
474デフォルトの名無しさん:2005/07/26(火) 08:29:50
>>472
俺だったら1にする。
あるいは普通に作って、「::(最初の数文字)」と打ったり、「(最初の数文字)Ctrl+Space」と打ったりする。
475デフォルトの名無しさん:2005/07/26(火) 09:21:04
>>472
一番やらなさそうなのは2
476デフォルトの名無しさん:2005/07/26(火) 10:25:42
インテリセンスに頼る段階でカス。
477デフォルトの名無しさん:2005/07/26(火) 11:23:22
インテリセンスなんて無い方がいいなんて言わないよ絶対
478デフォルトの名無しさん:2005/07/26(火) 12:07:57
あるフォルダの中にあるソース・ヘッダに書いてある変数名や関数名を
一括で置換する場合どうやってます?
編集→ファイルから検索で該当ファイルをリストアップし
一つずつ開いて置換してるんですけど、ファイルが多いと大変です。
いい方法ないでしょうか? VC++6.0です。
479デフォルトの名無しさん:2005/07/26(火) 12:23:00
>>478
find あるフォルダ -name "*.[ch]*" -type f|xargs grep -l '変数名'|xargs vi
viが起動したら
:%s/変数名/新変数名/gc
480デフォルトの名無しさん:2005/07/26(火) 12:26:59
思いっきりスレ違いのアホ登場
481デフォルトの名無しさん:2005/07/26(火) 13:55:00
リナ厨ってどこでも沸いて出てviを押し付けてくる。
482デフォルトの名無しさん:2005/07/26(火) 14:01:08
VisualStudioとCygwin連携させてますが何か。
483デフォルトの名無しさん:2005/07/26(火) 14:02:33
まぁ、ある程度まともなエディタなら大抵一括置換くらいできると思うが。
484デフォルトの名無しさん:2005/07/28(木) 00:58:14
おれは「Grep and Replace」使ってる
単語置換ができるオプションがあるが、動作がまともじゃないとおもう。
485デフォルトの名無しさん:2005/07/28(木) 18:01:20
VC++2005ベータ版を入れてみたんですが

include ファイルを開けません。'windows.h': No such file or directory

なにこれなんかパスが設定されて無いの…?windows.hってどこにありますか?
486デフォルトの名無しさん:2005/07/28(木) 18:18:53
>>485
F3で検索できるだろ。
487デフォルトの名無しさん:2005/07/28(木) 18:25:36
Windowsキー+Fでディスク内検索できるだろ
488デフォルトの名無しさん:2005/07/28(木) 18:25:43
>>486
記憶から完璧に消えてました。ありがとう
489デフォルトの名無しさん:2005/07/28(木) 18:26:00
VC++2005 Express Edition b2 だったら、
PlatformSDKが含まれてなかったような気がしないでもない。
-> 別途DLして自前でインスコ

VS2005b2なら同時にインスコされるけど。
490デフォルトの名無しさん:2005/07/28(木) 18:27:19
>>487
>>489
さんくす
491デフォルトの名無しさん:2005/07/28(木) 18:45:59
File Name: File Size
PSDK-amd64.exe
1319 KB

PSDK-ia64.exe
1418 KB

PSDK-x86.exe
1294 KB


すいませんどれですか?
492デフォルトの名無しさん:2005/07/28(木) 18:50:54
>>491
環境に合わせろとしか言いようがないなぁ。
上:Athlonの64bit版ならこれ
中:Pen4等の64bit版ならこれ
下:従来の32bitCPUならこれ
493デフォルトの名無しさん:2005/07/28(木) 18:53:13
>>492
すみませんありがとうございます。
494デフォルトの名無しさん:2005/07/28(木) 18:59:07
>>492
>中:Pen4等の64bit版ならこれ
嘘はいかんよ。
495デフォルトの名無しさん:2005/07/28(木) 19:08:28
嘘なんですか?いや一番下だから問題ないですよね。
496デフォルトの名無しさん:2005/07/28(木) 19:18:59
>>494
スマン。何も考えずに書いた。
Ita用か
497デフォルトの名無しさん:2005/07/28(木) 19:52:38
度々すいません。

手順 2. Microsoft Platform SDK をインストールします。
Platform SDK は、ウェブ上の Platform SDK 更新サイトからインストールすることができます。サイトにアクセスしたら、[Download] をクリックし、リストから Windows SDK、続いて Core SDK を忘れずに選択してください。

手順 3. [オプション] ダイアログ ボックスの [プロジェクトとソリューション] セクションで [Visual C++ フォルダ] を更新します。
このセクションでは、適切なサブセクションにパスを追加します:

Executable ファイル - 「C:\Program Files\Microsoft SDK\Bin」
Include ファイル - 「C:\Program Files\Microsoft SDK\include」
Library ファイル - 「C:\Program Files\Microsoft SDK\lib」

一応この手順3にたどり着いたのですが意味がわかりません。というか手順2の時点で間違っていたのでしょうか?
498デフォルトの名無しさん:2005/07/28(木) 19:56:32
育てられねーだろ、よく考えて出産しろや
499デフォルトの名無しさん:2005/07/28(木) 19:57:46
スマン誤爆
500デフォルトの名無しさん:2005/07/28(木) 20:56:50
>>497
インストールしたSDKの方にパスを通すということだ。
501デフォルトの名無しさん:2005/07/28(木) 22:02:54
[オプション] ダイアログ ボックスの [プロジェクトとソリューション] セクションで [Visual C++ フォルダ] を更新します。

これって「ツール」→「オプション」で出てくるプロジェクトおよびソリューションのどっかいじれってことですよね?
すいません、よくわからなくて…。って俺は何時間こんなことやったんだ!!!!!!!
502デフォルトの名無しさん:2005/07/28(木) 22:42:19
質問させていただきます。よろしくお願いいたします。
WIN32APPLICATIONで、
親ウインドウより、ダイアログをCreateDialogで、
ダイアログを表示していますが、ダイアログが、閉じると同時に、
親ウインドウも閉じてしまいます。
親ウインドウは、閉じない方法はありますでしょうか。
503デフォルトの名無しさん:2005/07/28(木) 22:56:20
もしかして親WindowとWindowハンドル同じってはなし?
504デフォルトの名無しさん:2005/07/28(木) 23:00:07
すいません、お聞きしたいのですが、
VC++6.0 Win2k 非MFCで
ダイアログボックス表示中に他のアプリのウインドウを操作できないようにしたいのですが
何か方法はありますか?
フックとか使えばできるんでしょうか?
(っていうかフックってのがよくわかってないのですが。。)
505デフォルトの名無しさん:2005/07/28(木) 23:14:32
>>503さんありがとうございます。
int WINAPI WinMain(HINSTANCE , HINSTANCE,LPSTR,int);
この、第一引数を、
DialogBox(この第一引数にわたしています。)
それから、CreateDialog でなくて、DialogBoxでした。
BOOL CALLBACK dlgproc(HWND,UINT,WPARAM,LPARAM);
この第一引数を
EndDialog(この第一引数にわたしています。);
で答えになっていますか?
506デフォルトの名無しさん:2005/07/28(木) 23:38:03
>505
話すと長くなるけど、
メインウィンドウとダイアログを表示することに関してはHINSTANCEハンドルはどこも同じでいいから、
HWNDハンドルに関して、
CreateWindowの戻り値入れるHWNDハンドルと
DialogBoxのHWNDハンドルと
CALLBACK dlgprocのHWNDハンドルと
EndDialogのHWNDハンドルを
それぞれ1つだけ変えて走らせてみるとおもしろいことが分かるよ(きっと理解が深まる)

それと、HWNDハンドルが複数要った場合、定義する位置も考えて、
すなはち、グローバルにコードの頭でなのか関数の中(例えば、CALLBACK WndProc(?)の中)でなのか
507デフォルトの名無しさん:2005/07/28(木) 23:55:05
ちゃんとした日本語を話してください><
508デフォルトの名無しさん:2005/07/29(金) 00:33:41
c言語で
char a[4];
printf("4文字入力");
scanf("%s",a);
のようにして、4文字を一文字づつ読み取るにはどうすばいい?
初心者に教えてください。
509デフォルトの名無しさん:2005/07/29(金) 00:41:02
>508
いた間違えた。
510デフォルトの名無しさん:2005/07/29(金) 00:41:52
>>504
フックとか使えばできると思うよ。
511デフォルトの名無しさん:2005/07/29(金) 01:06:21
マック用はないんですか?
ググってもマック用のCコンパイラソフトが見つからなかったので、、、
512デフォルトの名無しさん:2005/07/29(金) 01:12:51
マックはOSのインストールCDに
デベロッパーツールが入ってるから買う必要はない
513デフォルトの名無しさん:2005/07/29(金) 01:16:15
円周率を計算式から実行結果を表示させる時、%の次を何にすれば
よりたくさんの数字が表示されますか?
514どくろべい:2005/07/29(金) 02:12:38
すみませんー教えてください。
DirectXをVC++で使うのにDirectX9.0SDKを
インストールしたのですが、
VC++でプロジェクト新規作成時、
DirectX9 AppWizardが表示されません。
どうやれば表示できるかおしえて〜(><)
515デフォルトの名無しさん:2005/07/29(金) 02:20:38
>>514
DirectX SDK Sample Browser
516デフォルトの名無しさん:2005/07/29(金) 02:34:55
>>513
取り敢えず%.15gとデモして味噌。
517デフォルトの名無しさん:2005/07/29(金) 06:23:08
>>505って、DialogBoxが終ったらそのままWinMainが終了してるだけちゃうの?
518デフォルトの名無しさん:2005/07/29(金) 09:46:39
すいません。
VC++Standard.NET2003を買おうと思うのですが、最適化をするためにtoolkitを使おうと思っています。
そのためには特別な設定が必要なのでしょうか?
また、このコンパイラを使った場合、エラーメッセージ等は英語になってしまうのでしょうか。
VC++を買う前に検討したいと思いました。
519デフォルトの名無しさん:2005/07/29(金) 10:27:37
VC++Standard.NET2003を買おうと思うのですが = プログラミング経験なしか超初心者
そのためには特別な設定が必要なのでしょうか? = PC初心者
エラーメッセージ等は英語になってしまうのでしょうか。 = 低学歴

心配ありません
最適化とは無縁です
520518:2005/07/29(金) 10:52:47
>プログラミング経験なしか超初心者

初心者ですが、BCC+BCCDevで少し勉強しています。
次のステップに買おうと思っています。

>PC初心者

というかVC++初心者なのでどういう設定が必要なのか教えて下さい。

>低学歴

ということは英語になるという事ですね?

また、初心者で無い人はどのバージョンを買うのも合わせて教えていただけると嬉しいです。
521デフォルトの名無しさん:2005/07/29(金) 10:56:49
最低でも最適化のあるProfessional以上だな。
会社とかならMSDNとかボリュームライセンスで入手するだろうな。
学生なら初心者かどうかにかかわらず、the Spokeが安くてPro相当だからそれを買えばいい。
522デフォルトの名無しさん:2005/07/29(金) 11:17:10
>>516
ありがとうございます!16桁以上がどうしてもでなくて・・・
でもありがとうございました!
523518:2005/07/29(金) 11:41:46
>>521
そうですか。どうもありがとうございます。
で、当方学生じゃないし、金額の面でもstandardを買おうと思うのですが、
>>518の質問なのですがどのような設定をするのでしょうか。
「visualC++ standard 最適化 toolkit」なのでググって見たのですが
設定の仕方を解説した記事等が見当たりませんでした。
524デフォルトの名無しさん:2005/07/29(金) 12:01:00
toolkitは無料なんだし、それ落として来てコンパイルするだけだろうが
visual c++ toolkit でぐぐったら使い方なんかいくらでも見つかるし、
それ見てわからんのだったらあきらめろ

Standard.からtoolkit使うのはそれができてから考えろ
525518:2005/07/29(金) 12:32:10
>>524
>Standard.からtoolkit使うのはそれができてから考えろ

いちいちレスするの面倒だろうし、レス消費ももったいないのでサクっと教えてくれませんか?
526デフォルトの名無しさん:2005/07/29(金) 12:49:20
いちいちレスするの面倒だし、レス消費ももったいないのでサクっとPro以上を買ってください。
527デフォルトの名無しさん:2005/07/29(金) 12:58:35
Q.standardでtoolkitを使うための設定の方法を教えて下さい。

A.pro以上を買って下さい。


じゃなくて、Qを教えて下さい。
528デフォルトの名無しさん:2005/07/29(金) 13:06:09
>>527
A.自分で調べましょう。それができないなら>526で。
529518:2005/07/29(金) 13:08:00
答えるのが面倒。自分で調べろって
おまえさぁ・・・このスレにいる意味ないだろ
530518:2005/07/29(金) 13:16:25
>>529はニセモノです。
が、代弁してくれてありがとうw。
以降、ニセモノ出るかもしれないけど、答えられない人は無駄なレスはしてないでおとなしくしていましょうよ。

自分で調べましょうとか、〜のあとに考えろとか、お前じゃ無理だから心配するなとか、
無意味なアドバイスはいらないです。
531デフォルトの名無しさん:2005/07/29(金) 13:23:39
>>530
ああ書いちゃった。
漏れ知らね
532デフォルトの名無しさん:2005/07/29(金) 13:23:44
というかtoolkitはインストールしたのか?
それできないと質問自体無意味だぞ
533デフォルトの名無しさん:2005/07/29(金) 13:34:21
>>518
エラーメッセージ等は英語にならない
534デフォルトの名無しさん:2005/07/29(金) 13:40:44
>>530
つ[分相応]
535デフォルトの名無しさん:2005/07/29(金) 13:47:05
>>530
つ[ぬるぽ]
536デフォルトの名無しさん:2005/07/29(金) 15:45:58
VC++2003 standard + toolkitの話題が出てたから調べてみたら良さそうだね。
いいかげん6.0だと無理が出てきたんで乗り換えようと思ったけど
2005はstandardでも最適化できるっぽい・・・悩む
537518:2005/07/29(金) 15:50:25
>>529
>>530
は本物です。
538初心:2005/07/29(金) 16:34:40
: fatal error C1083: インクルード ファイルがオープンできません。'sys\socket.h': No such file or directory
どうすれば実行できますか?
539デフォルトの名無しさん:2005/07/29(金) 16:56:29
>>538
Windows には UNIX のソケットはありません。
WinSock について調べてみてください。
540初心:2005/07/29(金) 17:03:08
はい、調べてみます。
541デフォルトの名無しさん:2005/07/29(金) 19:31:38
いつも思うけどPro以上、Pro以上って誰それかまわず薦めてる奴は
アホだと思う。
542デフォルトの名無しさん:2005/07/29(金) 20:07:39
>>505です
>>506さん
>>517さん
いろいろアドバイスいただきまして、ありがとうございました、
ハンドルいろいろ変えて試してみました。
理解が深まってきたと思います。
画面が、すべて閉じてしまったのは、
コマンドイベントの終わりに、break;を入れてないからでした。
みなさまありがとうございました。
543デフォルトの名無しさん:2005/07/29(金) 20:12:32
いつも思うけどPro以上、Pro以上って誰それかまわず薦めてる奴は
素直だと思う。
544デフォルトの名無しさん:2005/07/29(金) 20:59:10
最適化が必用なら素直にpro買っとけ
初心者スレで裏技質問するなアホ
545デフォルトの名無しさん:2005/07/29(金) 21:19:11
最適化が不用なら素直にtoolkit落としとけ
初心者スレで表技質問しろアホ
546デフォルトの名無しさん:2005/07/29(金) 21:35:07
VC toolkitは最適化有ります
547デフォルトの名無しさん:2005/07/29(金) 22:17:24
すいません現在C言語とgcc ver3.4.4でpthread_create()を使っているのですが、
win環境で実行するにはどうしたらよいのでしょうか?
pthread_create()をそのまま使いたいというわけではなく、
winでも同じ機能を持った関数があればそちらを教えていただきたいと思っています。
VC++.net2003をwin環境でのプログラム用として使っています。
548デフォルトの名無しさん:2005/07/29(金) 22:17:52
>>547
_beginthreadex()かな。
549デフォルトの名無しさん:2005/07/29(金) 22:19:24
550デフォルトの名無しさん:2005/07/29(金) 22:53:55
toolkitは裏技じゃありません。
むしろStandardユーザーのためのものです。
551デフォルトの名無しさん:2005/07/29(金) 23:40:47
>>550
MSのサポート受けられなくなる時点で裏技。
552デフォルトの名無しさん:2005/07/29(金) 23:44:33
HWND CreateWindow( の
第10引数
HANDLE hInstance, // handle to application instance
は hInstance なのに、ヘルプで HINSTANCE になっているのは
どうしてですか?
GetModuleHandle(0) でパラメータを与えてるソースを見たこと
があるのですが、これは問題ないでしょうか?
553デフォルトの名無しさん:2005/07/29(金) 23:45:16
学生:Spoke(4000円ぐらい、商用OK)

趣味:VC++2005expressβ(無料、配布OK)

商用:pro以上(10万円以上、商用OK)
554552:2005/07/29(金) 23:49:29
×ヘルプで HINSTANCE になっているのはどうしてですか?
○ヘルプで HINSTANCE になっていないのはどうしてですか?
どっちでも同じなんでしょうけど、悪いのはヘルプという認識でよい??でしょか
555デフォルトの名無しさん:2005/07/29(金) 23:53:55
>>552
HANDLEなのはたぶん修正漏れだと思われる。

Win32ではHMODULEとHINSTANCEは同一の扱いだから、GetModuleHandleの戻り値をHINSTANCEとして扱うのは全然問題ない。
そしてGetModuleHandleは引数0だとWinMainの最初の引数のHINSTANCEと同じ値を返す。
(というよりWinMainを呼ぶ側がWinMain(GetModuleHandle(0), ..);としている)
556デフォルトの名無しさん:2005/07/29(金) 23:58:05
>WinMain(GetModuleHandle(0), ..);
おぉ・・・こんなことを実際していたのですか。
ひとつ勉強になりました。ありがとうございます。
557デフォルトの名無しさん:2005/07/30(土) 03:47:22
>>553
VC++2005expressβはMFC付いてないだろ。
製品版はいつ発売だ?
558デフォルトの名無しさん:2005/07/30(土) 05:11:55
製品版にもつかない
559デフォルトの名無しさん:2005/07/30(土) 06:15:40
Visual Studio 2005 mfc の検索結果のうち 日本語のページ 約 5,510 件中 1 - 10 件目 (0.20 秒)

Visual Studio 2005 Express Edition よく寄せられる質問
Visual C++ 2005 Express Edition には MFC と ATL が含まれますか。 いいえ、MFC と
ATL は Visual C++ 2005 Express Edition には含まれません。MFC と ATL は、その他
のすべての Visual Studio 2005 エディションに含まれる予定です。 ...
www.microsoft.com/japan/msdn/ vstudio/2005/express/faq/default.aspx - 70k - キャッシュ - 関連ページ

560デフォルトの名無しさん:2005/07/30(土) 09:22:47
すみません、別スレで質問したんですが
過疎スレだったみたいでレスがつきません、誘導させてください。
http://pc8.2ch.net/test/read.cgi/tech/1035653663/359
561デフォルトの名無しさん:2005/07/30(土) 09:40:26
おはようございます。
もし、クラスを多appにわたり活用したいとき、
同じプロジェクト内だけですが、
ヘッダーファイルに、class定義を書き込むという方法になるのでしょうか。
hファイルに
class Mocc{
Mocc();
open();
}
このように宣言して、使うのでしょうか。
562デフォルトの名無しさん:2005/07/30(土) 10:46:06
>>560
あんな過去からある過疎スレに誘導しないでこっちで仕切りなそうよ。
で、情報量が少ないので追加希望。
・VCのバージョンは?
・DDXのm_ixに関わるコードはどうなっている?
要は、自分のプロジェクト内を問題のメンバ変数名で検索してみろと。
563デフォルトの名無しさん:2005/07/30(土) 11:01:01
>561です。
すみませんでした。
classの追加でできそうです。
564デフォルトの名無しさん:2005/07/30(土) 14:24:48
>>562
>VCのバージョンは?
Ver.は確かsp6だったと思います。

>DDXのm_ixに関わるコードはどうなっている?
すみません、素人なもんで質問の意味がピンときません。
AfxBeginThread近辺のコードと言うことでしょうか?

コードを貼りたいのですが今手元に無いので
月曜日にでも改めてこちらに伺いますのでよろしくお願いします。
565デフォルトの名無しさん:2005/07/30(土) 14:32:21
ワークスペースA
 |
 |−プロジェクト1
 |
 |−プロジェクト2

こういう場合、プロジェクト1のグローバル関数を、プロジェクト2から呼び出すことは出来るのでしょうか?
そのまま呼んでみたら、ビルドで外部参照エラーが出てしまうのですが。
566デフォルトの名無しさん:2005/07/30(土) 14:47:28
>565
簡単にやるんなら片方をdll化しといて、
VSのプロジェクト>設定>リンクで他方からリンク張ってやるのは?

て、やってだめだったのかな
567デフォルトの名無しさん:2005/07/30(土) 15:20:44
viewのクライアント領域にbitmap画像を表示させようとしているのですが、
クライアント領域の内、bitmapが表示されていない部分の色(背景色?)を変えようとして、

OnEraseBkgndをオーバーライドしてPatBltでクライアント領域全体を塗りつぶし、
OnDraw内で、bitbltでbitmapを結びつけたメモリDCを表画面に転送しているのですが、

OnEraseBkgndよりも先にOnDrawが実行されているのか、bitmapが表示されずに
OnEraseBkgndで指定した色でクライアント領域が塗りつぶされてしまいます。

何か良い方法はないでしょうか?
(OnEraseBkgndを消せばbitmapはちゃんと表示されます)
568デフォルトの名無しさん:2005/07/30(土) 15:25:12
>>567
>OnEraseBkgndをオーバーライドしてPatBltでクライアント領域全体を塗りつぶし、
必要な部分だけにして→クライアント領域全体
569デフォルトの名無しさん:2005/07/30(土) 16:12:44
>>566
それは試していなかったです。
今、ソース環境がないので後でやってみます。
ありがとうござます。
570デフォルトの名無しさん:2005/07/30(土) 16:14:03
>>565
社内(同一ワークスペース)の別プロジェクトに有用なスキル(関数)を持った人材(ソース)がいるのなら、
自分のプロジェクトに参加させればいいじゃない。
但し、人間関係(インクルードなどの依存)に注意で。
571デフォルトの名無しさん:2005/07/30(土) 16:15:00
>>567
OnEraseBkgndで上書きしちゃうなら、OnEraseBkgndからOnDrawを呼べばいいじゃない。
572デフォルトの名無しさん:2005/07/30(土) 16:26:04
>>568
つまり、bitmap部分を避けて、矩形を二つ塗りつぶせって事でしょうか?
矩形1:(0, bitmap.height, bitmap.width, client.height)
矩形2:(bitmap.width, 0, client.width, client.width)

それとも何かスマートな方法があるのでしょうか?
___________________
| |///////|
| bitmap |///背//|
| |///景//|
|___________|///////|
|///////////////////|
|///////////////////|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>567
そうするとOnDrawが2回実行されて、ちらつきが起きませんかね?
573デフォルトの名無しさん:2005/07/30(土) 16:54:22
開発環境 Visual C++.NET 2003 MFCウィザード使用
今ListCtrl(リストコントロール)を使用して、データーベースから
取ってきたアイテムを、各リストに表示するアプリケーションを作っています。
それで、とってきた文字列の最大長に応じて、リストコントロールの
カラムのサイズを変更したいのですが、何か使える関数ありますでしょうか?
今の段階だと、各列の文字列の最大長をstrlen()関数ではかり、
それに応じてカラムのサイズサイズを変更してるのですが、とても
スマートな方法ではない気がします。
ご存知の方はご教授願います。
574デフォルトの名無しさん:2005/07/30(土) 17:01:00
>OnEraseBkgndからOnDrawを呼べばいいじゃない

を発展させて、OnDraw内にフラグを設けてやるのはどうでしょう?
フラグが0なのでbitmap貼らない

OnEraseBkgnd呼び出し

OnEraseBkgnd内でフラグを1にして、OnDraw実行

(もしここで、フラグを0に戻したりすると、延々ループにはまって固まっちゃうかも、
あんまりフラグはCALLBACKルーチンでは禁じ手のような気がするけど)
575デフォルトの名無しさん:2005/07/30(土) 17:03:55
>>558-559
まじかよ。
じゃあ2005待つ理由が無くなったね。
576デフォルトの名無しさん:2005/07/30(土) 17:15:46
>延々ループにはまって固まっちゃうかも
というのは、ちょっと言葉足らずだったかもしれないけど、
マウスが動くだけでも再描画でしょう
その時、呼び出される最初のOnDrawはフラグが1でそのままOnDraw終了しないといけない。
だから、フラグを0に戻す場所は非常にシビア
以前、これ試してみて、マウスの動きがガックンガックン固まったことがある
やっぱ禁じ手だろうね。駄レスすんまそん。
577デフォルトの名無しさん:2005/07/30(土) 17:59:27
>>575
standardはMFC, ATLが付いて最適化ができるぞ。
いままでのproユーザーがstandardに移る感じ。
578567:2005/07/30(土) 18:02:59
色々試してみましたところ、
どうもOnDrawの実行後にOnEraseBkgndが上書きしているわけではなさそうでした。

現在OnDrawではbitmapの全体を描画しているわけではなく、
クリッピング領域のみを描画しているのですが、
OnEraseBkgndを書かなければOnDraw実行時にbitmap領域がクリッピングにある為正しく描画されるが、
OnEraseBkgndを書くとOnDraw実行時にはbitmapがクリッピングから消えてしまっており、
描画されなくなってしまうような気がしてきました。
(全然見当違いの可能性もありますが…)

引き続き悩み続けます…。
579デフォルトの名無しさん:2005/07/30(土) 19:52:45
>>578
OnEraseBkgndで0を返せ。
580デフォルトの名無しさん:2005/07/30(土) 20:37:05
CListViewでCImageListを割り当てたのですが、このCListViewを再利用する時に
DeleteAllItemsとしてもアイコン部分だけが残ってしまいます。このアイコン部分も
削除するにはどうしたら良いのでしょうか?。
581567:2005/07/30(土) 20:58:11
>>579
ダメでしたorz
ちなみにOnEraseBkgndで0を返すとどんな効果があるんですか?
(特に意味も考えずに試してみましたけど)

何かOnDrawの中のbitbltが失敗するんですよ…。(戻値が0)
bitmapが描画されない直接的原因はここのようです。

OnEraseBkgnd中のpDC->GetSafeHdc()をコメントアウトすると成功するんですけど(戻値が1)、
もうわけわかりません…。
582デフォルトの名無しさん:2005/07/30(土) 21:14:29
、i`ヽ                        ,r‐'ァ 
 `ヽ::                      ::´
   ヽ ヽ        , -‐--、         / /
    ヽ \      I:::::::I_      _ / /
     ヽ  ヽ    i,(;;;ノI、;;;)l    ,,/  , '
      ヽ  ` ー 、.,,ゝ´ヮ`,ノュ_, - '   r'     うはwwwwww8月17日発売のザ・テレビジョンにHG出演www
        ` 、_ /::: `山':::::    /      皆で買って一位にしようぜwwwwww
         ヽ:::::::::::|::::::::"",r‐'         それがHGクオリティ   
          〉::::::::|::::::::::¨/
         /;;;;;;;/;;;;;;;;;;/             
        /;;;;;;;/:::::::::::《              http://that3.2ch.net/test/read.cgi/event/1122721667/l50
        <;;;;;;;《:::::::::::::ヽ              http://ex10.2ch.net/test/read.cgi/heaven4vip/1122723881/l50
      /   ヽI,r''"""^~ヽ            詳しくはこのスレでwwwwww
     /   ,/ ヽ    ヽ    
583デフォルトの名無しさん:2005/07/30(土) 21:17:28
>>581
>何かOnDrawの中のbitbltが失敗するんですよ…。(戻値が0)

NT系ならGetLastError()で原因調べれ。
584567:2005/07/30(土) 21:31:27
>>583
もうこれ以上頭を使う元気がないので、

pDC->GetSafeHdc()
::PatBlt()
の使用を諦めて

pDC->FillSolidRect()
を使うことで解決としました。

アドバイスくれた方々、ありがとうございました。
585デフォルトの名無しさん:2005/07/30(土) 21:35:19
ビューにテキストと画像を表示させ(表示のみ)、テキスト部分は
マウスで選択してクリップボードにコピーできたらなと思っています。

私の目的には、たまたまCHtmlViewがほぼ理想でOKなのですが、
もっと正統派?な方法(ビューでテキスト選択を実現する方法)って何だろなと気になりました。
テキスト選択をイチから実装するのは難儀でしょうから、CEditViewに画像を表示させたりする
のがいいのかなーと思ったのですが、実際のところどうなのでしょう?

詳しいお兄ちゃん方、教えて頂けないでしょうか?
586デフォルトの名無しさん:2005/07/30(土) 22:46:21
>>577
いくら位かわかる?
587デフォルトの名無しさん:2005/07/30(土) 23:27:11
>>573
CDC::GetCharABCWidths()
588デフォルトの名無しさん:2005/07/31(日) 03:24:02
うまく書けなくてスマソなんですけど

ひとつのファイルを無事成功し、
違うファイルを作り、実行しようとすると
コンパイルの時点で「_main はすでに 定義されています」
とでて、そこから先へ進めません。
成功したファイルには「プロジェクトファイル」なるものなどが勝手に作られています。
一つを実行させた後でも、何個も作業を実行するにはどうすればいいのでしょうか?
589588:2005/07/31(日) 03:28:26
あとすいません、すれ違いなのですが
ついでにコンパイルとビルドの違いを教えていただけますか?
よろしくお願いします
590デフォルトの名無しさん:2005/07/31(日) 08:24:03
コンパイルはC/CPP等をコンパイルすることで、
ビルドはプロジェクトをビルドすることだな。
って全然説明になってないよ!
591デフォルトの名無しさん:2005/07/31(日) 12:06:05
コンパイル:オブジェクトモジュールを作る
ビルド:実行ファイルを作る(リンクまで行う)
592デフォルトの名無しさん:2005/07/31(日) 12:34:20
WNDCLASSEX構造体の背景ブラシ(hbrBackground)を定義する時に、黒、白、灰色以外の色のブラシを指定することはできるのでしょうか?
593デフォルトの名無しさん:2005/07/31(日) 13:02:58
>>592
できる。
594592:2005/07/31(日) 14:47:05
>>593
どうやって指定するんですか?
595デフォルトの名無しさん:2005/07/31(日) 15:19:43
596デフォルトの名無しさん:2005/07/31(日) 16:10:04
すいません、質問なんですが
VBでかいた関数をVCから呼び出すことは不可能でしょうか?
597デフォルトの名無しさん:2005/07/31(日) 16:27:19
>588
状況がいまいち理解できないんだけど、
1つのプロジェクトの中にmain関数が2個あるんじゃないの?
コンソールアプリならmain関数は1個じゃないとダメだよ。

あと、その質問の内容だと状況がいまいちわからないので、
長文になっても構わないから、操作手順とかをもう少し詳しく教えてください。
598デフォルトの名無しさん:2005/07/31(日) 16:45:07
>>596
不可能です。VC++で書いた関数をVBから呼ことは出来ます。
599デフォルトの名無しさん:2005/07/31(日) 17:01:32
>>598
うそ教えるな。できるよ。
600588:2005/07/31(日) 17:15:52
>>588レスどうもです。
私は超初心者ですので、質問がへたくそだったのは申し訳ありません。
でも本当にどうやって質問したらいいか…

例えば
VISUAL C++を開き、

main()
{
int abc,opq,xyz;

abc = 180;
opq = 200;

xyz = abc + opq ;
printf("xyz:%d",xyz);
}

というのを作成し、成功しますよね。そしてそのままC++を開いたまま
次に

main()
{
int abc = 180, opq = 200, xyz;

xyz = abc + opq;

printf("abc(%d) + opq(%d) = %d",abc,opq,xyz);
}
を実行しようとすると
「_main はすでに定義されています」と出てしまい、実行できないのです。
これで困っているのです。なぜ実行できないのでしょうか?
601デフォルトの名無しさん:2005/07/31(日) 17:16:51
>>597レスどうもです。 、の間違いです
602588:2005/07/31(日) 17:19:44
ついかすいません
あと「1 つ以上の複数回定義されているシンボルが見つかりました」というのもでます
603デフォルトの名無しさん:2005/07/31(日) 17:30:33
さすが、夏休みだな。
604デフォルトの名無しさん:2005/07/31(日) 17:47:38
いくつか確認。
>>588の理解度を知っておきたい

1) プログラミングについて、どれくらい理解している? 
  ・C言語は知ってる(プログラムを作ったことがある)
  ・VCは初めて
  ・何もかも初めて       などなど

2) エラーが出るまでの操作手順を最初から教えて
  プログラムのソースじゃなくて、VC++の操作。
  メニューで新規作成を何を選んでどうのこうの、って感じで
605デフォルトの名無しさん:2005/07/31(日) 17:52:08
>>599
ありがとうございます。
それはどうやればできるんでしょうか?
または、推奨の書籍はありますか?
606588:2005/07/31(日) 18:03:37
>>604
1)学校でCを習い始めて四ヶ月です
2)ですが、学校ではC++を使ってはいないのです
なので、C++を使うのは実質初めてです
607デフォルトの名無しさん:2005/07/31(日) 18:20:22
>>606
会津大学生?
608デフォルトの名無しさん:2005/07/31(日) 18:20:43
>>606
C++じゃなくて、VC++を使った経験はあるかって聞いてるんだと思うぞ。
まあその様子じゃ使ったこと無いようだが。

ぶっちゃけプロジェクトとかワークスペースとかソリューションとか、
そういうのが分からないんじゃないかな?
609588:2005/07/31(日) 18:39:05
>>608そうですね、ないですし、わからないです。

なぜか知りませんが、学校ではコマンドプロンプトをつかって
コンパイルなどをさせられるのです。
それをそのまま家のPCでやろうとするとソフトが立ち上がってしまうので…
610デフォルトの名無しさん:2005/07/31(日) 18:51:28
>>609
- C言語
- Cコンパイラ、リンカ
- 統合開発環境(IDE)
の違いが解ってないっぽいね
611604:2005/07/31(日) 18:56:46
OK、とりあえず理解度はわかった。
それじゃ、ちょっとだけVC++基礎を説明。

VC++では、プロジェクトという単位でプログラム開発をする。
プロジェクトというのは、プログラムを作るために必要なファイルや情報を
まとめたもの、って考えおけばいいと思う。

ワークスペース(ソリューション)ってのはプロジェクトを管理するための入れ物みたいなもの。
ワークスペース上でプロジェクトをビルドすることで、プログラムが作られる。
尚、ワークスペースやプロジェクトのファイルは、VC++で新規作成したときに自動的に作られる。

で、たぶんココが一番大事だと思うんだけど、
1つのプロジェクトからは1つの実行ファイル(プログラム)しか作れない。

C言語やってるなら、main関数がプログラム本体だってのは知ってると思うけど
1つのプロジェクトの中にmain関数を2個入れたらダメ。
どういう操作をしたかわからないけど、たぶんコレが今回のエラーの原因。
新しくもう1個プロジェクトを作れば、とりあえずは解決すると思う。

長文スマン。
612デフォルトの名無しさん:2005/07/31(日) 19:12:55
長文が最初から悪いと思ってるならなんで書いた後に謝るんだろうな。
でも悪くないから、全然^^
613デフォルトの名無しさん:2005/07/31(日) 19:16:56
無料コンパイラ使ってれば悩まなくてすむものを
必用もないのにVC買ってしまうやつが後をたたない
614デフォルトの名無しさん:2005/07/31(日) 19:18:46
買ったかどうかはわからんがな
615604:2005/07/31(日) 19:18:54
もうちょっと基礎の基礎から説明。

プログラムを作るためには、
ソースコード(C言語)をコンパイラに通して
プログラムコード(実行ファイル)に変換してもらう。

ソースコード中で定義してないprintfとかの関数の
プログラムコードを他から持ってきてくっつけるのがリンクという作業。
これをするをリンカって言うんだけど、大抵はコンパイラが兼業してる。

で、学校ではコマンドプロンプトを使ってコンパイルしてるって言うけど
普通、コンパイラはコマンドラインで動くもの。
VC++のような総合開発環境は、コンパイラの上にGUIをかぶせて、
プログラムの開発を楽にした物とでも考えればわかりいいと思う。

言ってることに間違いがあったらツッコミよろしく。

>>612
ありがd
616デフォルトの名無しさん:2005/07/31(日) 19:31:25
ベターCってなんですか?
617588:2005/07/31(日) 19:37:11
>>604さん、とても優しく教えて頂きありがとうございます。
最近、ネットでは心を傷つけられてばかりいたので、余計にありがたい気持ちです

では本題に戻ると、
新しくまた違うファイルを実行させようとするなら、
新しいプロジェクトを作ればいいのですね。

んで、早速やってみたのですよ。
ですが、「この名前では出来ません」とかでちゃいますし、
名前を入れる欄の左でいくつかあるやつの中から選びますが、
それぞれが何なのか分かりませんし、且つどれを選んだらいいかわかりません。

今度はどなたか、プロジェクトの作り方を教えていただけますか?
聞いてばっかで本当に申し訳ありません。m(__)m
618デフォルトの名無しさん:2005/07/31(日) 19:39:19
本ぐらい買えよ馬鹿
619デフォルトの名無しさん:2005/07/31(日) 19:44:39
あてずっぽう、行き当たりばったり
620604:2005/07/31(日) 19:49:33
最初のプログラムは何のプロジェクトで作ったの?
>600のようなソースなら普通はWin32 Consoleでいいと思うけど。
あと、既にある物と同じ名前のプロジェクトは作れないので注意。

VCでの開発の仕方は、「VisualC++」 「VC」 「VC++」 「入門」 「初心者」あたりの
キーワードを組み合わせてググれば、いろいろ出てくるよ。

621デフォルトの名無しさん:2005/07/31(日) 19:51:05
>>588
他人の心を慮ることもせずに他人に対して刃を振り翳す者に、
全ての人が慈悲の手を差し伸べるとお思いか?
あなたが傷つけられたと言うその刃は、あなた自身が振り翳したものではないのですか?
622デフォルトの名無しさん:2005/07/31(日) 20:02:08
>>617
ネットで傷つくなよw

学校でVC++使ってないなら、まずは学校と同じ環境する事をオススメする。
それでもVC++使いたかったら、本とかネットで勉強しながら並行してやった方がいいよ。
VC++ってツールの使い方を覚えるのもC言語そのものを覚えるのも両方とも難しいものだよ。
623デフォルトの名無しさん:2005/07/31(日) 20:36:32
一冊、初心者向けの本かっちゃえば幸せになれるぞ。
624デフォルトの名無しさん:2005/07/31(日) 20:37:16
金が惜しいなら図書館から借りるという手もある。
625デフォルトの名無しさん:2005/07/31(日) 20:38:27
>>594
GetSysColorの引数のCOLOR_なんたらを使ってreinterpret_cast<HBRUSH>(COLOR_なんたら + 1)としたり、
Create何とかBrushでブラシを作ってそれをhbrBackgroundに入れたりする。
後者のブラシを作る方法の場合は後でDeleteObject()が必要。
626デフォルトの名無しさん:2005/07/31(日) 20:47:04
明智光秀は敵は本能寺にありとか言って、織田信長を攻撃しましたが、
光秀の部下は反対しなかったんですか?反対したら殺されるとかいう
こともあったかもしれませんが、誰かがこっそりと信長の所へ光秀の
謀反を報告に行かせるとか、そういうことすら無かったのでしょうか?
そんなに信長は嫌われていたんですかね?
627588:2005/07/31(日) 20:47:53
>>620
最初に作る場合は、こっちがプロジェクトを作らなくても
勝手にに作ってしまいますからね、わかりません。
ですが、604さんがWin32 Consoleと教えてくれたので
自分で作るときはそれでやってみたいと思います。

>>621
そうですね、もちろん自分にも責任はあります。
おっしゃるとおりです。人間って、難しいですね。
特に、ネットだと殆どの人が本性丸出しになってなってしまうから…

>>622
上でも書いたのですが、
学校と同じ様にVC++を使わずやろうとしても、ソフトが勝手に立ち上がって
しまうのですよ…
確かに>>618の言うとおり、本を買ったりするなどしてみたいと思います。

皆さんご迷惑を掛けました。そしてありがとうございました。
これを反省して、ネットで安易に人に聞くことをやめようとおもいます。
ご迷惑はかかるし、自分もやな思いするばっかりですしね。
すいませんでした。

628626:2005/07/31(日) 20:48:25
誤爆しました。
板間違えました。
スミマセング
629604:2005/07/31(日) 21:03:12
名無しで安易に聞くためにココがあるんだけどね・・・。

もういなくなっちゃったかもしれないけど、
人に教わるよりも、自分で調べて、自力でやったほうがいろいろ身に付くよ。
特にVC++なんてのはその辺にたくさん情報が転がってるしね。

とはいえ、どうしても自分だけではわからないこともあるだろうから、
その時はまた質問においでよ。
読み手にちゃんと内容が伝わるように、要点をまとめて質問すれば
ちゃんと回答してくれる人が出てくるよ。

あと、さっきも言ったけど、コマンドラインでも普通にビルドはできる。
どういう手順でビルドしようとしてるのか、どういうソフトが立ち上がるのか
その辺をちゃんとまとめて質問すれば、対処法が見つかるかもよ?

>>626
素敵な誤爆ですね。
630デフォルトの名無しさん:2005/07/31(日) 21:08:31
>>627
ネットで傷つけられたってのは、

C言語なら俺に聞け! Part 111
http://pc8.2ch.net/test/read.cgi/tech/1121657911/

の634以降の話か?
まあ、お前がこの先、言語やツールを学んで理解できるようになったら、
いかにアホな質問をしていたか、気づくと思うよ

まあ、がんばれ!
631デフォルトの名無しさん:2005/07/31(日) 21:23:23
>>605
DLL作成する。
632デフォルトの名無しさん:2005/07/31(日) 21:34:03
今回、ツールの使い方くらい自分で読め、というだけなんだよなあ。
なによりも、質問がアホな以前にまともに内容を伝える日本語になっていない。
そんな事をうだうだとうらみがましく聞かされたほうがまず不愉快だからなあ。
本性丸出しじゃあんなもんじゃすまないだろう。
自分のことを棚に上げて傷ついたふりをするのも今時は子供の間でも通じないし。
633デフォルトの名無しさん:2005/07/31(日) 21:49:25
てかよくあることだけど、本人がいなくなってからグチグチ言うな。

そんなことはいいから、ベターCって何さ?
634デフォルトの名無しさん:2005/07/31(日) 21:55:08
C言語やVC++よりも、まずは質問の仕方を勉強しないとね〜
エラーの詳細とか操作手順とかわからないと答えようがないし。
635デフォルトの名無しさん:2005/07/31(日) 22:31:23
>>627
>学校と同じ様にVC++を使わずやろうとしても、ソフトが勝手に立ち上がって
>しまうのですよ…

VC++の関連付けを外せばいいだけのような…。
勝手に立ち上がるからダメって事はない。
これ説明するのはWindowsの使い方を教える事になるからスレ違い。
636デフォルトの名無しさん:2005/07/31(日) 22:42:27
VectorCの間違いではないか?
637デフォルトの名無しさん:2005/07/31(日) 22:47:59
Better C = ちょっと良いC

例えば、C++でクラスを使わずに、
手続き型のCとして使うようなやり方。
拡張機能をいろいろ使えるから、ただのCより使い勝手が良い。
・・で、あってるんだっけ?
638デフォルトの名無しさん:2005/07/31(日) 22:58:50
たとえばより厳しい型チェックやboolやどこでも変数宣言とか関数定義時の仮引数名の省略とか。
俺の思いつくのはこんなもん。
639デフォルトの名無しさん:2005/07/31(日) 23:00:30
あと俺が思うに参照とデフォルト引数くらいまで。
STLまでくると流石にC++そのものだな。
640デフォルトの名無しさん:2005/07/31(日) 23:04:25
>>605
だから出来ないと言うのに。試しにGoogleかなんかで検索かけてみなよ。
同じような質問をしている人をあちこちでみかけるだろうけど、全部否定
されてるよ。第一、VBの関数作っても、引数の型をどうやって呼び出し時に
VC++のものに変換するんだ?VBの変数型でVC++がサポートしてないものは幾つもあるぞ。
呼び出し方はどうする?extern "VB"なんてのも無いぞ。いっそのことVBで
dllを作るか?でも、それをVC++でも呼び出せるか?逆は出来るぞ。
WinAPIをVBに取り込むのと同じようにすれば良いだけだからな。
結局、こういう制限があるということがVBの限界であるから仕方が無いんだが、
VC++で書き直すことをすすめる。
641デフォルトの名無しさん:2005/07/31(日) 23:09:21
まあ、VBでActiveXコントロールあたりにすればVC++で
使えないことも無いけど、そういう使い方を望んでいるわけでも
ないんでしょ?
悪いことはイワン。そのVBの関数をVC++で書き直した方が良い。
642デフォルトの名無しさん:2005/07/31(日) 23:16:29
>>637-639
そういう意味か。
全然違う意味かと思ってた。
要するに、基本Cで、C++の使いやすい所を使うって事ね。
ニュアンスは分かった。ありがd。
643デフォルトの名無しさん:2005/08/01(月) 00:00:15
>>640-641
>いっそのことVBで dllを作るか?でも、それをVC++でも呼び出せるか?逆は出来るぞ。

VBでDLL作ればVC++から呼び出せるけど?
644デフォルトの名無しさん:2005/08/01(月) 00:22:34
>>643

俺もコレが気になる。
>第一、VBの関数作っても、引数の型をどうやって呼び出し時に
>VC++のものに変換するんだ?VBの変数型でVC++がサポートしてないものは幾つもあるぞ。
645デフォルトの名無しさん:2005/08/01(月) 00:31:20
>>644
いや、>641の戯言は忘れた方がいいと思うのだが。
VBとVCとでお互い擦り合わせのできる型で呼び出せばいいだけだからね。
646デフォルトの名無しさん:2005/08/01(月) 04:06:12
VC++7のプロジェクトでのメモリリークについて質問です。
あるダイアログアプリと、そいつから利用されるスタティックライブラリやらDLLやらのプロジェクトが10個くらいあつまったソリューションがありまして、
さらにこのAPにはプロジェクトとしては提供されていないDLLもダイナミックリンクします。(つまりそのDLLのソースは機密なのでDLLファイルだけもらった)

このダイアログAPを起動してある操作をして終了させるとメモリリークが検出されまする。
残念ながらソースの箇所は表示されません。
そこですべてのソースファイルに_malloc_dbg()やfree_dbg()を使うように以下の記述を各ファイルの先頭に追加しました。
(ファイルの先頭に入れとけばよいんですよね?)

#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

そしてスタートアッププロジェクトはダイアログアプリにして実行させてみます。
しかし残念ながらメモリリークは検出しますが場所が出ませんでした。

これはやはりプロジェクトとして提供されていないDLLの中でリークしてるのでしょうか?
647デフォルトの名無しさん:2005/08/01(月) 07:34:48
メモリリークの意味わかっちょるのか?
648デフォルトの名無しさん:2005/08/01(月) 07:57:13
つまり何が言いたいのですか?
どの辺の記述がどう変なのか指摘していただかないと。
分っている、としか言いようが無い。
649デフォルトの名無しさん:2005/08/01(月) 08:22:44
>>648
その疑わしいDLLを外してやってみればいいじゃん。
DLL関数のところは使わないようにするか、ダミーを作って差し替えればOK

それでメモリリークとやらが起きなければ、お前さんの考えが正しいってこと。
650649:2005/08/01(月) 08:23:47
アンカー間違えた。>>648じゃなくて>>646
651592:2005/08/01(月) 15:12:44
>>625
流されてたと思ってた(涙 さんくす!
652デフォルトの名無しさん:2005/08/01(月) 15:48:43
こんにちは、質問です。よろしくお願いします。
win32で
ウインドプロシージャーのなかで、
LRESULT CALLBACK WndProc(HWND hwnd,UINT im, WPARAM wp,LPARAM lp){
switch(im){
case WM_CREATE:
ここを最初に表示するときに通らないのです。
そんなものなのでしょうか。
653デフォルトの名無しさん:2005/08/01(月) 16:11:32
>>652
すみません通っていました。
654デフォルトの名無しさん:2005/08/01(月) 17:00:44
理由があって
CDialog の DoModal() をやって
そのダイアログを見えないようにしたいのですが
そのようなことはできますか?
655デフォルトの名無しさん:2005/08/01(月) 17:37:43
>>654
やったことないから推測で言うけど
ダイアログのWS_VISIBLEいじればいいんじゃないの?

しかし・・・DoModalやった後、どうやってそのダイアログを閉じるんだ?
656デフォルトの名無しさん:2005/08/01(月) 17:39:40
>>654
ShowWindow使え
657デフォルトの名無しさん:2005/08/01(月) 17:41:15
VisualC++.NETで、ArrayListクラスを利用していますが
Arrayの特定のIndexのみに要素を設定する方法が分かりません。
-----------------
ArrayList* ar = new ArrayList();
ar->Add(S"a");
// 間を22個空けたい
ar->set_Item(24, S"z");//Insertでも同様の結果
-----------------
このようにした場合、4行目を実行すると不正な参照として落ちてしまいます。
また、ArrayListをnewする際に要素数を36に指定してみましたが結果は同じでした。
(間を空けるだけならfor文で空白をAddすればいいのですが…)

何か他に上手い方法はありますでしょうか?
658デフォルトの名無しさん:2005/08/01(月) 17:49:47
>>656
DoModal() する前では
窓が初期化されておらず
DoModal() してしまうと制御がかえってきません

いつ ShowWindow(SW_HIDE) すればいいのでしょうか?
659デフォルトの名無しさん:2005/08/01(月) 17:53:35
>>658
そのDoModalするダイアログ内ですれば?
660デフォルトの名無しさん:2005/08/01(月) 17:56:45
>658
OnInitDialog作ったらダメ?
661デフォルトの名無しさん:2005/08/01(月) 17:58:07
>>659
一回表示して
なにかボタンとか押して,という意味でしょうか?

いっさいダイアログを出したくないんです
662デフォルトの名無しさん:2005/08/01(月) 18:02:26
663デフォルトの名無しさん:2005/08/01(月) 18:04:51
>>660
OnInitDialog 内で

ShowWindow(SW_HIDE)

したんですが,
あれ〜普通に表示されますね
なんでだろう…
664デフォルトの名無しさん:2005/08/01(月) 18:10:09
>This message is sent to the dialog box during the Create, CreateIndirect, or DoModal calls, which occur immediately before the dialog box is displayed.

OnInitDialogからユーザメッセージをpostしてそこで非表示にすれば?
665デフォルトの名無しさん:2005/08/01(月) 18:18:08
>>664
>ユーザメッセージをpostして

すいません.これがわかりません
どう書けばいいのでしょうか?
666デフォルトの名無しさん:2005/08/01(月) 18:29:17
見えないんだったらDoDialog()する必要ないような……

OnInitDialog()でEndDialog()すれば表示されないけどね(勿論すぐ処理は戻る)。
667デフォルトの名無しさん:2005/08/01(月) 18:31:51
>>665
WM_APPでぐぐれ
668デフォルトの名無しさん:2005/08/01(月) 18:32:11
>>665
PostMessage関数を使って、自身にメッセージを送る
ダイアログプロシージャの中に、そのメッセージのハンドラを作って
その中でShowDialogをする。

PostMessageだと、今のメッセージの処理が終わった後に
メッセージが送られてくる。

・・・と、ここまで描いてて思ったが、OnDrawじゃダメかな?
669668:2005/08/01(月) 18:33:40
×ShowDialog
○ShowWindow
疲れてるかもしんない・・・
670デフォルトの名無しさん:2005/08/01(月) 18:53:47
OnInitDialog の中で

SetWindowPos( &wndTop, 0, 0, 0, 0, SWP_HIDEWINDOW );

してやると表示されなくなりましたが
タスクバーにはこのダイアログの項目が残っています
これをうまく消せないでしょうか?
671デフォルトの名無しさん:2005/08/01(月) 19:12:08
>>670
ShowWindow(FindWindow("Shell_TrayWnd", NULL), SW_HIDE);

672デフォルトの名無しさん:2005/08/01(月) 19:42:26
タスクバーにはダイアログの項目がって、親ウィンドウ無いんか?
673デフォルトの名無しさん:2005/08/01(月) 21:14:04
トロイでも作ってるんだろう
674デフォルトの名無しさん:2005/08/01(月) 21:18:34
こんばんは、ツールバーを表示させたいのですが、
やり方が、わかりません。どうか、教えてください。
win32アップリケーションです。
CreateWindowEx(WS_EX_TOOLWINDOW,"ToolBarWindow32",
"ID_TOOLE1",WS_VISIBLE,
CW_USEDEFAULT,0,100,
100,h,NULL,hinstance,NULL);
上記のようにしたのですが、表示されませんでした。
675デフォルトの名無しさん:2005/08/01(月) 22:13:10
デバイスコンテキストについての質問ってここでよし?
676デフォルトの名無しさん:2005/08/01(月) 22:15:41
HDCならWin32APIスレ、CDCならここ。
677デフォルトの名無しさん:2005/08/01(月) 22:29:19
ちょっとソースが手元に無いのでうろ覚えで申し訳ないんですが、
デバイスコンテキストって完全に一対一対応だと思ってたから、
ツール起動時にメイン画面のを取得してそれを使いまわそうと思ってました。

m_pDC = m_main.GetDC();
m_pDC->m_hDC = m_pDC->GetSafeHdc();

//m_pDCはヘッダでCDC*で宣言
//m_mainはメイン描画部分のハンドル持ち
//以降はm_hDCを使用してOpenGL処理

とやると上手くいきます。しかし、

m_pDC->m_hDC = m_main.GetDC()->GetSafeHdc();

とやると、描画は上手くいくんですが、
ツール終了時にwinhand.cppの251行目、ASSERT部分で怒られます。
何がいけないのでしょうか?見た目、同じように思えるのですが
678677:2005/08/01(月) 22:36:58
質問がごっちゃになってしまった。
677の2,3行目はなしで。で、改めて追加質問。

デバイスコンテキストって完全に一対一対応だと思ってたから、
ツール起動時にメイン画面のを取得してそれを使いまわそうと思ってました。
で、起動時にメイン描画部のをm_pDCに取得して677の場所で使おうと思い、

m_pDC->m_hDC = m_pDC->GetSafeHdc();

とだけやりましたら、描画されませんでした。
ここ以外では取得はしてません。
m_pDCではなく、それぞれの関数内で

CDC* h_pDC

とか作ってそれに取得はしてますが、最初にとったm_pDCはそのままです。
しかし、上記のように、最初に取ったDCが反映?されてません。
677のように取り直すと上手くいくのですが、
最初に取ってそれを何度も使いまわす、といったことはできないのでしょうか?
679デフォルトの名無しさん:2005/08/01(月) 23:05:00
vc++バージョン6を使っています。
初めてunicode対応をやろうとして、とりあえず

MessageBoxA( NULL, "ANSI test(テスト)", NULL, MB_OK );
MessageBoxW( NULL, L"unicode test(テスト)",NULL, MB_OK );

と続けて実行すると、ANSIの方はうまく表示できますが、
UNICODEの方は「テスト」の部分が文字化けしてしまいます。
フォントが変わってしまっているようなのですが、
unicode対応アプリにするためのコンパイラやリンカのオプション
がたりないのでしょうか。_UNICODEは定義しています。
680デフォルトの名無しさん:2005/08/01(月) 23:31:02
>>678
OpenGLスレのほうがいいような気もするが
そもそもm_pDC取得すればm_hDCは取得する必要ないんじゃないか?

>m_pDC->m_hDC = m_pDC->GetSafeHdc();

m_pDC->m_hDC = m_pDC->m_hDC;
と大して変わらないような気がする。意味ないような・・・
681デフォルトの名無しさん:2005/08/02(火) 00:06:30
>>679
エントリポイントは変更したか?
682679:2005/08/02(火) 00:11:18

エントリポイントもwWinMainCRTStartup に変更したのですが。
683デフォルトの名無しさん:2005/08/02(火) 00:12:54
>>682
小出しで書くな。やったこと全部書けよ。
いちいち確認させる気か?

ちなみに漏れは>>679のソースそのままでちゃんと出たんで、あんたのやり方が何かおかしいんだろ。
684デフォルトの名無しさん:2005/08/02(火) 01:07:38
メインスレッドはメッセージハンドラを同時にひとつしか処理しないはずだけど例外はありますか?
いまCOMを使うアプリでこのCOMをReleaseしているメソッドがあるんですが、こいつを処理中に
メインスレッドが他のイベントを受けて、動いてしまいます。
COMをReleaseするメソッドを処理してから他のイベントを処理してほしい。。
メインスレッドが同時に複数(あるいは同じハンドラ)を処理してしまうことはあるのですか?
685684:2005/08/02(火) 01:35:19
ちなみにコールスタックは次のように呼ばれます。(↓方向に関数呼び出ししていきます。)
mfc71d.dll!AfxWndProcBase ←ここでメッセージ処理開始
mfc71d.dll!AfxWndProc
mfc71d.dll!AfxCallWndProc
mfc71d.dll!CWnd::WindowProc
mfc71d.dll!CWnd::OnWndMsg
myapp.exe!CMyDlg::OnFoo() ←自分のAPのメッセージハンドラ
mydll.dll!CMyCom::UnInitialize() ←ここではCOMのインタフェースをRelease
quartz.dll!7cfa6e72()
省略
user32.dll!77cf8816()
user32.dll!77cf8734()
mfc71d.dll!AfxWndProcBase ←あれ??またメッセージ処理開始?
mfc71d.dll!AfxWndProc
mfc71d.dll!AfxCallWndProc
mfc71d.dll!CWnd::WindowProc
mfc71d.dll!CWnd::OnWndMsg
myapp.exe!CMyDlg::OnFoo()

です。なぜですか?
686デフォルトの名無しさん:2005/08/02(火) 03:47:30
>>679
実はOSが9xとか
687デフォルトの名無しさん:2005/08/02(火) 08:26:33
>>686
MessageBoxWは9xでも問題なく使える数少ない関数の1つ。
688デフォルトの名無しさん:2005/08/02(火) 09:52:46
>>685
Release内にメッセージループ回す処理があるとか
689デフォルトの名無しさん:2005/08/02(火) 10:46:47
CDialog は CWnd から派生してますよね?
で,CDialog が CWnd を
どのように変更(もしくは追加)しているのを
知る手だてはありますか?

特にどのような引数をあたえて Create しているのか
知る必要があるのです
690デフォルトの名無しさん:2005/08/02(火) 10:48:33
>>689
MFCのソース読む
691デフォルトの名無しさん:2005/08/02(火) 11:20:10
>>690
それができればいいんですが,
MFCのソースは開発環境についているのでしょうか?

CDialog の部分をどのように
探りあてればいいのでしょうか?
692デフォルトの名無しさん:2005/08/02(火) 11:21:40
すみません、質問です。

先日VCを再インストールしたんですが、
前は関数名の上にカーソルを乗せたら出た
関数の説明(ポップアップ?)が出なくなってしまいました orz

http://49uper.com:8080/html/img-s/69227.jpg

上の絵だと、dwFileSizeの説明は出るのですが、
::GetFileSize() の引数の説明なんかが、一切出なくなってしまったんです。

どなたかご存知の方いらっしゃいましたら、
どうかお願いいたします m(__)m

使ってるのは VisuaC++ 6.0 Standard です。
693デフォルトの名無しさん:2005/08/02(火) 11:28:06
>>691
付いてるからインストールしとけ。
CDialog::Createを追っかけてけばわかるんじゃない?
694デフォルトの名無しさん:2005/08/02(火) 12:01:36
>>691
MSDNライブラリで探せ
695デフォルトの名無しさん:2005/08/02(火) 12:22:43
つーか、IDEを使っているならCDialogと書いて定義へ移動で事足りそうだ。
696デフォルトの名無しさん:2005/08/02(火) 14:41:09
>>686
たとえばこんなん書くと同じスレッドIDのダイアログいっぱいでるね
void CTestDlg::OnTimer(UINT nIDEvent) {
  CString msg;
  msg.Format( "id:%lu", ::GetCurrentThreadId() );
  ::MessageBox( NULL, msg, msg, MB_OK );
  CDialog::OnTimer(nIDEvent);
}
697デフォルトの名無しさん:2005/08/02(火) 14:59:54
質問です。
ボタンの文字サイズを変えるにはどうしたらいいでしょうか。
ダイアログではなくてウィンドウに貼り付けたボタンですが。
698デフォルトの名無しさん:2005/08/02(火) 15:08:23
ウィンドウに貼り付けたボタン?
699697:2005/08/02(火) 15:43:10
すんません、表現の仕方が・・・
子ウィンドウと言うんでしょか。
CreateWindowで作ったボタンに表示される文字のサイズです。
700デフォルトの名無しさん:2005/08/02(火) 19:09:40
CPropertyPageに配置したコントロールを初期化しようと思い、
CPropertySheetのOnInitDialogをオーバーライドしたのですが、
DoModal()を呼び出してもOnInitDialogが実行されません。

CPropertySheetがCWndから継承してるのも不可解なのですが、
DDXを使うしかないのでしょうか?
701デフォルトの名無しさん:2005/08/02(火) 19:25:12
CPropertyPageの基本クラスが何か見てみよう
702700:2005/08/02(火) 19:44:16
>>701
ありがとうございます。
CPropertyPageのOnInitDialogでコントロールを初期化してこれを
CPropertySheetにAddPageしたところ
CPropertySheetのOnInitDialogが呼び出されました。
コントロールの初期化はサブクラスでやらなきゃいけないのね...
703デフォルトの名無しさん:2005/08/02(火) 19:46:05
MSDNオンラインのページに行って色々調べようと思ったのですが使い方が分かりません。
例えばCreateProcess()関数を調べたい時、トップページ右上にある検索欄に『CreateProcess』と書いても何も見つかりません。
どうやって調べたらいいのでしょうか?
704592:2005/08/02(火) 20:07:11
705名も無き冒険者:2005/08/02(火) 20:08:14
名前みすったorz
706700:2005/08/02(火) 20:56:18
>>701
702の補足:
AddPageした場合は、
CPropertySheet::OnInitDialogから
各 CPropertyPage::OnInitDialogが呼び出されるという仕組みのようでした。
初期化を遅延しないといけないからこうなってるのかも...
707679:2005/08/03(水) 00:45:40
683さん、どうもすいませんでした。

その後も自分でいろいろやったのですが、
1) bcc 5.5 なら問題ない(文字化けしない)。
2) Lマクロを使わず直接unicode文字列を引数に与えれば文字化けしない。

ちなみに、
unsigned char buf[10];
unsigned char buf2[10];

buf[0] = 0xb5;// 「サ」のユニコード
buf[1] = 0x30;
buf[2] = '\0'; buf[3] = '\0';

buf2[0] = 0xda;// 「サ」の丸囲文字のユニコード
buf2[1] = 0x32;
buf2[2] = '\0'; buf2[3] = '\0';

MessageBoxW(NULL,
(const wchar_t *)buf,
(const wchar_t *)buf2,
MB_OK);  // これは正しく表示。丸サも出る。

MessageBoxW(NULL,
L"サ",
L"サ",
MB_OK); // こっちは化ける。

こんなことってあるんでしょうか


708デフォルトの名無しさん:2005/08/03(水) 01:11:28
L"サ"のバイナリはどうなってる?
709デフォルトの名無しさん:2005/08/03(水) 07:06:55
>>707
そこはこうだろ。とのんきに言ってみるテス
wchar_t buf[2];
buf[0] = 0x30b5; //L'\u30b5';
buf[0] = 0x0; // L'\0';
710デフォルトの名無しさん:2005/08/03(水) 07:18:29
679ではないけど、
ソースファイルはShift-JISで保存されているから、
その文字コードがそのままバイナリになるってこと?
711デフォルトの名無しさん:2005/08/03(水) 08:58:58
なんらかの原因でL"サ"が0x30b5 0x0000になってないんだろうな。
712679:2005/08/03(水) 16:00:27
遅くなりました。 ヒントありがとうございます。


L"サ" がなぜか
0x0192 0x0054 0x0000

になっていました。0x0192 はラテン拡張文字で
そういう意味では文字化けではなく、ちゃんと表示している
だけみたいです。

どうやら私の環境が変で、Lマクロが異常な変換
をしているようです。

お騒がせしました。

でもBCC5.5 だとちゃんと 0x30b5 0x0000 になるのにな。

713デフォルトの名無しさん:2005/08/03(水) 18:08:14
>>712
ところでLはマクロではないのだが……。
714679:2005/08/03(水) 20:56:38
私もマクロではないな、と思いながらつい使ってしまいました。

L はプリプロセッサで処理されるわけでは
ないですものね。
かといって、実行時関数でもなく、あくまでコンパイル時に
処理されるのですよね。正確にはなんというのでしょう?


ちなみに、L"サ" をアセンブルしたら、
$SG41923 DB092H, 01H, 'T', 00H,
(つまり0x192 0x54)
この段階ですでに変になっていることを確認しました。

715679:2005/08/03(水) 21:08:10
またまた変な言い方をしてしまいました。

> ちなみに、L"サ" をアセンブルしたら

L"サ" を含むc++ソースをコンパイルしてアセンブリリストファイル
を出力したら、という意味です。
716デフォルトの名無しさん:2005/08/03(水) 21:20:36
ワイド文字のLは単にワイド文字(列)の接頭辞とでも言えばいい。
尤もX3010/X3014にこう書いているわけではないが。
717デフォルトの名無しさん:2005/08/04(木) 09:33:56
2つの似て非なるソースがあるとき
これらをマージするのに便利なソフトウェアとか
「俺はこうやってるよ」みたいな方法論があったら
おしえてください
718デフォルトの名無しさん:2005/08/04(木) 10:25:18
テストで一次元配列および二次元配列のポインタ表記について簡潔に説明せよって問題が出そうなんだがなんて答えればイイと思う??
719デフォルトの名無しさん:2005/08/04(木) 11:39:51
>>717
diff, patch, cvs使用。
或いはエディタで。

>>718
C/C++には二次元配列はありません。
それは配列の配列か、ポインタの配列か、或いはポインタのポインタに過ぎません。
720デフォルトの名無しさん:2005/08/04(木) 11:47:18
え?
じゃあ
int i[10][20];ってやったらこれ二次元配列じゃないの?
721デフォルトの名無しさん:2005/08/04(木) 11:48:26
それは配列の配列
722デフォルトの名無しさん:2005/08/04(木) 11:51:32
だからそれを2次元配列って言うんだろ
723デフォルトの名無しさん:2005/08/04(木) 12:21:58
配列の配列は二次元配列ではない。
現に、二次元配列を扱える言語では厳密に区別されている。
724デフォルトの名無しさん:2005/08/04(木) 12:31:02
VC以外も厳密に区別してほしいな
甘すぎ
725デフォルトの名無しさん:2005/08/04(木) 13:20:26
int i[10][20]は二次元配列でないのか。知らんかった。
それと同じC言語でも、仮引数がこの形だと
VCやBCCではOKだが、gccではNG聞いた事があるけど、
>>723の原因と同じ所なのかな。
726デフォルトの名無しさん:2005/08/04(木) 14:25:32
>>725
仮引き数は配列ではなくポインタでしかないから、配列を渡すことはできない。
つまり、配列へのポインタを渡すことになる。
#或いは配列へのポインタへのポインタか。
727678:2005/08/04(木) 16:05:15
解決しました。
プログラムでも、ましてやコンパイラの問題でもありません
でした。

OSの設定で、地域オプションの数値や通貨の設定がなぜか
英語(米国)になっていて、それを日本語に戻してコンパイルし直す
とすべてうまくいきました。

お騒がせしてすみませんでした。
728679:2005/08/04(木) 16:08:28
自己をいつわり、かつあげてしまいました。
申し訳ありません。
729デフォルトの名無しさん:2005/08/04(木) 16:21:28
VCの開発環境で作られる中間ファイルなんですが
どうしてこんなにサイズが大きくなければいけないのでしょうか?

最終的に作られる exe や dll の
数十倍から100倍あったりするんですが…
もう馬鹿じゃないかと
いつも思います

なんとか,小さくして
なおかつかわりなく部分コムパイルできないもんでしょうか?
730デフォルトの名無しさん:2005/08/04(木) 16:40:08
>>729
馬鹿はお前
731デフォルトの名無しさん:2005/08/04(木) 16:47:51
とりあえず自分でコンパイラ作ってMSよりいいものができたら馬鹿にしてくれ
732デフォルトの名無しさん:2005/08/04(木) 17:02:10
>>728
言葉が足りないから、>727で間違えたということが判りにくい。
#かつ上げしたのかと思ったよw
733デフォルトの名無しさん:2005/08/04(木) 17:03:31
>>729
何故中間ファイルを小さくしたいと思うのかね?
734729:2005/08/04(木) 17:11:48
>>733
モードっていうんですかね?
Debug とか Release とか
それだけならまだいいんですけど
どうしてもヴァリエイションをいつくも作る
必要が出てくるわけです

そうすると中間ファイルがとんでもないことになっている
735デフォルトの名無しさん:2005/08/04(木) 17:17:17
中間ファイルごときで尻の穴小さいこと言うなよ。
ていうかなんで何が不便なの?
736729:2005/08/04(木) 18:36:35
どんどんハードディスクの空き容量を食い潰していくので。
737デフォルトの名無しさん:2005/08/04(木) 18:46:06
>>736
どうせnyかしゃれのせいでHDDがいっぱいって言うんだろ?
738デフォルトの名無しさん:2005/08/04(木) 19:25:36
いくつ「か」は必要だろうけど、いくつ「も」必要かどうか、
つうか整理すれ。
君だって、馬鹿だから机小さくていいだろ、と言われたら困るだろ?
必要な作業域ぐらいおごっといてやれよ、そのほうが無難だ。
739デフォルトの名無しさん:2005/08/04(木) 20:00:40
>>729
フォルダ管理ができているなら
*.ilk;*.obj;*.pch;*.pdb;*.idb;*.pdb;*.opt
などで検索してゴミ箱に捨てればいいじゃん
740デフォルトの名無しさん:2005/08/04(木) 20:06:47
そう言う香具師に限って古いプロジェクトのDebugディレクトリまでそのままの罠。
つーか、プロジェクトのクリアくらいしとけって。
741デフォルトの名無しさん:2005/08/05(金) 00:33:45
>>729
↑をビルド後の処理にいれとけばビルドする度に勝手にやってくれるぞ。

>>717
WinMerge日本語版お勧め。
742デフォルトの名無しさん:2005/08/05(金) 09:15:25
>>739
それらの拡張子のファイルは消してしまっても
部分コムパイルできるんですか?

もしそうだとすれば,なんのためにあるんでしょう?
743デフォルトの名無しさん:2005/08/05(金) 09:31:26
いい加減コムパイルって言うのやめようよ。
744デフォルトの名無しさん:2005/08/05(金) 10:13:49
>>742
>>729で「中間ファイル」と言ってるじゃないか
745デフォルトの名無しさん:2005/08/05(金) 13:21:48
馬鹿って口にする奴が馬鹿な質問をしてくるのはなんだかウザイ
746デフォルトの名無しさん:2005/08/05(金) 16:59:19
コンパイラの批判する前にコンパイラを知れやホケェ
747デフォルトの名無しさん:2005/08/05(金) 17:37:55
CreateCompatibleBitmapでビットマップ作成して、メモリデバイスコンテキストに
それを選択させて描画行った後そのビットマップを白黒に変換したいのですが、どのようにすればいいですか?
今まではGetDIBitでDIB形式に変換してピクセルデータをいじっていたんですが、処理スピードの関係でそのやり方は没に・・・
他に方法等ありましたらご教授お願いします
748デフォルトの名無しさん:2005/08/05(金) 22:03:25
>>747
1ビットビットマップを作り、それを元画像で白にしたい部分を(他は黒になる)
その色でSetBkColorし、そのビットマップに元画像を描画すればいい。
749デフォルトの名無しさん:2005/08/05(金) 22:05:47
ほほぉ、なるほど。>>747じゃないけど、覚えておこっと。
750デフォルトの名無しさん:2005/08/05(金) 23:43:59
白黒とは、マスクのことだと勘違いしているらしい>748がいるのはこのスレですか?
751749:2005/08/06(土) 00:19:49
そうかしまった関心してしまった。でもマスク作成技術として覚えておこう…
752748:2005/08/06(土) 00:33:11
>>750
そうか。これはまさに、ビットマップを透過する時に
マスク画像の生成に使っていた方法。

だと、その白黒にするというのはどういう事?
例えば、色が指定より明るいか暗いかで変化させるとかかな。
753デフォルトの名無しさん:2005/08/06(土) 00:35:25
>色が指定より明るいか暗いかで変化させる
まぁそれだろうな。
パレットがあればそれを入れ替えるだけで済むんだが…
754デフォルトの名無しさん:2005/08/06(土) 00:53:37
白黒二値と書かれていない以上、グレイ諧調の可能性も……
というのはおいといて。

単純に明るさが閾値より高いか低いかだけでもいいが、
その場合でもRGBを等価に扱うのか真面目に3:6:1にするかが問題になる。
また、ディザ処理をするか、ディザ処理のパターンはどうするかなど、
考えるべき点は山ほどある。
755748:2005/08/06(土) 08:38:27
>>753>>754
なるほど。サンクス。
マスク製作さえも覚えたてなので難しい。

方法としては、>>748の方法を使い、複数色を白する感じで、
>>753>>754の条件を満たした色でのマスク画像を複数作り、
それらを白の部分のみ何回も描画する感じかな。
756747:2005/08/06(土) 10:53:29
みなさん、ありがとうございます。レス遅くてすいません。
白黒にするのは2値化でマスク画像作りたかったのでSetBKColorでやってみま。
(=゜ω゜)ノそれでは、ありがとですた
757デフォルトの名無しさん:2005/08/06(土) 15:26:13
>>755
> 条件を満たした色でのマスク画像を複数作り、
> それらを白の部分のみ何回も描画する感じかな。

>>747
> 今まではGetDIBitでDIB形式に変換してピクセルデータをいじっていたんですが、
> 処理スピードの関係でそのやり方は没に・・・

755>> のほうが遅い予感
758デフォルトの名無しさん:2005/08/06(土) 15:28:41
初心者スレでヲタ話は遠慮してほしいものだ
759デフォルトの名無しさん:2005/08/07(日) 17:17:29
質問です。環境は WindowsXP です。

Visual C++ .NET Version 2003 を購入しました。
メッセージハンドラの追加が分からず・・・。
コードを書くのは可能なのですが、簡易な方法はないでしょうか。

例えば MFC を用いているのですが、
クラスビューの CChildView (クラス名)を右クリックすると、
6.0 のときは「メッセージハンドラの追加」という項目があったのですが、
.NET だと「関数の追加」「変数の追加」しか見当たりませんでした。

よろしくお願いします。
760デフォルトの名無しさん:2005/08/07(日) 17:31:55
クラスビューの下にプロパティのペインが無いかな?
無かったらクラスを右クリックでプロパティを選べば出る。
そこのタブ(?)の右から2番目がメッセージ一覧になってるから、
追加したいメッセージを探して、その項目の横のリストから
<追加> OnActive
みたいなのを選べば追加できる。
761759:2005/08/07(日) 17:38:24
>>760
こんなところに・・・ありがとうございました!
762デフォルトの名無しさん:2005/08/07(日) 17:56:23
6.0の時はスプラッシュスクリーンとか追加出来たのに
.NETではそういうコンポーネントを追加出来無くなったんですか?
自分で全部実装しろと?
763759:2005/08/07(日) 18:55:35
もう1つ質問です。

.NET において、MFC のアプリケーションを、ドキュメント・ビューアーキテクチャをはずして構築しました。
クラスビューに C○○○App がなく、手動で C○○○App の InitInstance() を探すと、
6.0 のころにあった 「ここに重要な初期化処理を書きます」 といったコメントがありませんでした。

srand(time(NULL)); や、ImmDisableIME(-1); などはどこで書くのが普通なのでしょうか。
764デフォルトの名無しさん:2005/08/07(日) 19:05:48
>クラスビューに C○○○App がなく
あるはずだが。

>手動で
どこでどうやって探したんだ?

>コメントがありませんでした。
まさかCWinAppのInitInstance()見つけたんじゃあるまいな。

あとsageろ。MFC専門はこっち
ttp://pc8.2ch.net/test/read.cgi/tech/1121200124/l50
765デフォルト名無しさん:2005/08/08(月) 07:49:42
少々質問させてください。
API板に記載しようか迷ったのですが、処理的にC++だったのでこちらで質問させていただきます。
プログラム作成の過程で_beginthreadを使うことになったのですが、以下のエラーメッセージが表示されます。

error C2664: '_beginthread' : 1 番目の引数を 'void (unsigned long)' から 'void (__cdecl *)(void *)' に変換できません。 (新しい機能 ; ヘルプを参照)
スコープ内でこの名前を持つ関数でターゲット型に一致するものはありません
調べた限りC++で作成している為Cでコンパイルされた関数を呼び出す為にC++で指示する必要がある、という事は理解できたのですが、いまいち修正の方法が判りません。

下記に関連部分ソースの一部と開発環境を記載します。
どなたかご教授の方よろしくお願いいたします。
開発環境:Visual C++6.0,WINAPIとしてcppファイルで作成中
プロジェクトの設定でランタイムライブラリはマルチスレッドに設定済み。
指定URLに接続するためのスレッドを作成したい
-------------------グローバル一部---------------
DWORD cthread=0; //グローバルで宣言している
addurl[1];
-----------問題の処理WndProc内部(メイン部)---------
addurl[0]=url; //編集したアドレスを貼り付け
cthread=_beginthread(OpenURL,0,0); //ここでエラー
-----------送る先(OpenURL)-------------
void __cdecl OpenURL(DWORD index)
{
BASS_StreamFree(chan); // close old stream
SendMessage(Edit,WM_SETTEXT,0,"connecting...");
if (!(chan=BASS_StreamCreateURL(addurl[index],0,BASS_STREAM_META|BASS_STREAM_STATUS,StatusProc,0))) {
SendMessage(Edit,WM_SETTEXT,0,"not playing");
Error("Can't play the stream");
--------------以下省略---------------
宣言順番はOpenURLのあとにWndProc
base.dllのnetradioのソースを流用して製作しているので、OpenURLをそのまま使える構造にしたいです。
どなたかご教授お願いします・・・
766デフォルトの名無しさん:2005/08/08(月) 08:09:41
>>765
OpenURLを、明示的にcastすればいい。
関数型は複雑だから、typedefすれば簡単だろう。
typedef void (__cdecl * ThreadFunc_t)(void *);
_beginthread((ThreadFunc_t) OpenURL, ...
767765:2005/08/08(月) 08:22:00
>>766

通過できました、ありがとうございます!!
768765:2005/08/08(月) 09:43:46
765です。
上記のやりかたでOpenURLへの処理へ送ることはできましたが、想定してた動きとまったく異なってしまいました・・・。

以下に作成過程のデータとサンプルとして使っていたbass.dllに付属してたサンプルを置いておきます

本プログラム
ttp://astria.ddo.jp/data/testpg.zip
参考に使ってたサンプル
ttp://astria.ddo.jp/data/sample.zip

望む動作は以下の通りです・・。

サンプルを参考にし
本プログラム部分のmain.cppの243行目で取得したURLデータを
OpenURLに引っ張り、対象サーバーに接続する。
main.cppの133行目の処理がサンプルプログラムの方と同じ動作で接続処理を行ってくれればなんとかなりそうなのですが・・。
うまくいってくれるのかな・・と思っていますが・・・サンプルがCで記述されているため、格差で頭の中身がぐっちゃになってしまいました・・。

bass.dllを利用したストリーミングプログラムで、サンプルを参照しても良いと課題出されましたが・・・ここまで訳のわからないものになるとは・・・
あつかましい行為だというのは自覚していますが、どなたか助け舟をお願いいたします・・・
769デフォルトの名無しさん:2005/08/08(月) 10:16:54
ソースを解読してクラス間の関係を図示してくれる
フリーソフトを知りませんか?
770デフォルトの名無しさん:2005/08/08(月) 10:57:04
doxygen
771デフォルトの名無しさん:2005/08/08(月) 13:34:55
メモリリークをデバッグするときに
効果的な方法はありますか?
772デフォルトの名無しさん:2005/08/08(月) 14:01:04
タスクマネージャ
773デフォルトの名無しさん:2005/08/08(月) 14:16:15
int memchk(void *min, void *foo, void max)
{
char ss[3][9];
int ret = 0;
sprintf(ss[0], "%p", min);
sprintf(ss[1], "%p", foo);
sprintf(ss[2], "%p", max);
ret = ((strcmp(ss[0], ss[1]) <=0) && (strcmp(ss[1], ss[2]) < 0));
return ret;
}

これを随所に埋め込んでみる位しか知らん
774初心:2005/08/08(月) 15:05:55
TCP/IPのバイナリ形式でクライアント側のなんかサンプルがほしいんですけど、
なんかありませんか?win2000,CV++6.0
よろしくお願いします。
775初心:2005/08/08(月) 15:08:42
誤り CV++
正しい VC++
でした。ごめんなさい・
776デフォルトの名無しさん:2005/08/08(月) 15:11:20
>>771
_CrtSetAllocHookでMSDN見てみ
777デフォルトの名無しさん:2005/08/09(火) 02:55:44
>>774
CV++6.0とは何ぞや?
778デフォルトの名無しさん:2005/08/09(火) 04:57:29
visual C++.netってコンパイル、いやビルドか・・するとき、どっかに通信してない?
コンパイル情報を送ってるぽいけど。どなたか詳細ご存知ありませんか?
何のデータ送ってるのか気になる。
779デフォルトの名無しさん:2005/08/09(火) 05:16:03
>>778
あー、ウイルスに犯されちゃってますね
クラックものはだいたいそうかもね
780デフォルトの名無しさん:2005/08/09(火) 05:22:07
>>779
正規版だよ。アカデミックだけど。
なんでもウィルスにすんなよ。素人臭い。
781デフォルトの名無しさん:2005/08/09(火) 07:12:40
そう思うんならいちいち反応すんなよ
782デフォルトの名無しさん:2005/08/09(火) 07:16:06
アカデミックも高かった労に
the spokeで具具ってみなはれ
783デフォルトの名無しさん:2005/08/09(火) 09:26:32
Visual C++ .NET 2003 を使っています。
エディタ上で http:// から始まる文字列を入力すると
勝手に下線が付いてしまうんですが、これを付けないようにするには
どうすればいいですか?
784デフォルトの名無しさん:2005/08/09(火) 11:01:41
>>783
ツール->オプションをよく探せ。
785デフォルトの名無しさん:2005/08/09(火) 11:33:08
>>782
すみません。。アカデミックではなくて、the spoke の方でした。。

で、>>778 に答えられる人いますか?
786デフォルトの名無しさん:2005/08/09(火) 11:57:11
ファイアウォール入れてみればわるだろうに
787783:2005/08/09(火) 12:13:39
>>784
見つかりました!同じとこ何度も探したつもりだったんですが見落としてました。orz
788デフォルトの名無しさん:2005/08/09(火) 12:17:04
789デフォルトの名無しさん:2005/08/09(火) 20:09:33
>>778
なんでそう思うの?
790デフォルトの名無しさん:2005/08/09(火) 20:11:32
どなたか、教えてください

自分で作ったアプリケーションをノンアクティブ状態でジョイパッドを使用できる状態にしたいのですが、どうすれば
よろしいでしょうか?ダイレクトインプットを使えば簡単なのですが、どうも難しすぎて私の手には負えません。
それ以外で方法はないでしょうか?

もう一つ質問があるのですが、自分で作ったアプリケーション以外で新規に起動したアプリのウィンドウハンドルを
取得したいのですが、どうすればいいのですか?

一度に二つも質問してすみません
791デフォルトの名無しさん:2005/08/09(火) 20:27:16
APIスレの法外隠者ね?
792デフォルトの名無しさん:2005/08/09(火) 20:30:54
すみませんでした。APIスレに書き込みます
793デフォルトの名無しさん:2005/08/09(火) 21:11:57
法外隠者?
794デフォルトの名無しさん:2005/08/09(火) 23:01:53
>>789
ビルド中に何気なくハブみたら、通信ランプが点滅してて「あれ?」と思ったのがきっかけ。
で、ビルドするたびにルータとハブみてたら、通信してるから、どこの通信してるのかなーって。
気になって・・。
漏れと同じでvisual studio.net the spoke版なら、みんなもそういう風になってるのか気になったものだから。
795デフォルトの名無しさん:2005/08/09(火) 23:04:04
>>794
たぶん、おまえが裏で動かしているnyのせい。
796デフォルトの名無しさん:2005/08/09(火) 23:14:17
被害妄想
797デフォルトの名無しさん:2005/08/09(火) 23:43:50
Visual Studio .NET The Spok版なら論理的に構成されてない
ソースは全部コンパイルエラーにしてくれるぞ
798デフォルトの名無しさん:2005/08/09(火) 23:55:05
788のパケットキャプチャ使ってみたか?
799デフォルトの名無しさん:2005/08/10(水) 11:09:26
>>794
ビルド中以外、ってか、VS使ってる時以外にも通信ランプ見てみたか?
800デフォルトの名無しさん:2005/08/10(水) 12:13:31
>>794
中身はアカデミックと一緒なんだからそれはない
気になるならパケットでも取ればいい

と、使ってる俺が言ってみる
801デフォルトの名無しさん:2005/08/10(水) 18:44:10
質問です。
環境は、Visual C++ .NETです。

Unicode文字セットを使用しています。
テキストファイルに文字列を出力したいのですが、日本語文字のところで
止まってしまい全て出力できません。

CStdioFile file;
file;.Open( szFileName, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite | CFile::typeText )

_TCHAR strText[256];
_tcscpy((_TCHAR*)strRow, _T("abcあいう"));

file.WriteString(strRow);

こんな感じなんですが。。。
どうも、WriteString中で2バイト文字が弾かれているみたいなのですが。。。
原因、回避方法があればご教授ください。
802デフォルトの名無しさん:2005/08/10(水) 19:02:49
細かいことだがUnicodeは2バイトじゃねぇぞ
803801:2005/08/10(水) 19:32:00
>>802
2バイトっていうか、16bitフルに使い表現している文字で
弾かれるみたいなのです。
言い方悪かったですねすいません。

それと訂正です。
_TCHAR strText[256]; −> _TCHAR strRow[256];
でした。
804デフォルトの名無しさん:2005/08/10(水) 21:41:50
setlocale
が必要なんじゃね?
805デフォルトの名無しさん:2005/08/10(水) 21:49:49
CStdioFileでUnicode出力する場合はtypeTextではなくtypeBinaryを指定。
806デフォルトの名無しさん:2005/08/11(木) 03:22:14
VisualC++.net the spokeを使っているのですが作業用ディレクトリの指定はどこでやればいいのでしょうか?
807デフォルトの名無しさん:2005/08/11(木) 04:58:52
すいません質問なのですが。
新しいPCを買って開発環境を移したいのですが、
そちらにVisualC++.netをまたインストールすると違法になったりするのでしょうか?
前に家族での間でも共有はいけないとどこかで聞いた事がありひっかかってしかたありません・・・
808デフォルトの名無しさん:2005/08/11(木) 05:03:23
前のPCからアンインストールすれば問題ない
809デフォルトの名無しさん:2005/08/11(木) 05:06:30
>>808
即レスありがとうございます。
これで心置きなく新しいPCが買えます^^
810デフォルトの名無しさん:2005/08/11(木) 06:30:42
>>808
アクティベーションはどうするの?
811デフォルトの名無しさん:2005/08/11(木) 07:30:12
>>810
もう一度、アクティベーションをするだけだよ。
ライセンスどおりに使っているのだから恥じる必要は無い。
警告が表示されても、どうどうとMicrosoftにTELで「もっかいアクティベーションしたいんだけど」と言えばよい。
812デフォルトの名無しさん:2005/08/11(木) 08:46:59
一回アクティベーションしたらもうだめなんてありえんしな
再インストールもできんのですかと
813デフォルトの名無しさん:2005/08/11(木) 09:15:08
何度もアクティベーション出来るって事は、
複数のマシンにインスコされているかのチェックもされているのだろうか。
814801:2005/08/11(木) 10:51:15
>>804-805
レスありがとうございます。
どちらを試しても動きました。
今回はUnicodeファイル形式にしようかと思ってましたので
typeBinaryでやることにしました。
ありがとうございました。
815デフォルトの名無しさん:2005/08/11(木) 11:22:24
VC++6.0でピクチャボックスへの線描画アプリを作ってたのですが、
ウィンドウからフォーカスから外れると、描画が消えてしまいます。
どうすれば消えずに済むのか、よろしければ教えて下さい。

具体的には下記のような感じです。

@線を描画させる

____
|   |
|   |
|___|


A他ウィンドウにフォーカスを移す。
____
|  _|_
|  |   |
|_|   |
   |__ |


B他ウィンドウを消してフォーカスを戻す。
(フォーカスが外れた時に見えなくなった描画部分だけ消えてる。)
____
|  _|
| |
|_|
816デフォルトの名無しさん:2005/08/11(木) 12:29:31
>>815
よし、全くの素人の俺が適当に答えてみる。
WM_PAINTでBeginPaint()とEndPaint()を使って無効領域を再描画すればいいんじゃね?
817デフォルトの名無しさん:2005/08/11(木) 13:52:12
>>816
無効領域を再描画というのは消えた部分だけ再描画ということでしょうか?
具体的にどうすればよいのでしょう?

ちなみに現在の線描画処理(MoveToやらLineTo)はOKボタン押下時にしているので、
WM_PAINT(::OnPaint() )の中のコードはプロジェクト生成時のままです。
818デフォルトの名無しさん:2005/08/11(木) 14:46:21
>>817
悪いことは言わん、初心者向けの本かサイトを捜して読んでこい。
#勿論、Windowsプログラミングの本ね。できればMFCで。
819816:2005/08/11(木) 16:43:00
>>817
さっきも言ったけど俺のレスは信用するな。
ちょうど俺もそこらへんをMFC使わずにAPIの勉強をしている。
てかVC++持ってないからMFCの事はわからん。
で、どうやらそこそこ的を射てるようなので答えるが、プロジェクト生成時のままだったら何も書かれていないんじゃ?
線描画って事はGetDC()でWinMainの中に書いていないかい?
(MFCはWinMainすら隠蔽されてるんだっけ??)

素人考えだけど、オススメはMFCを扱わないWinプログラミングの本を読んだ方がいいと思う。
きっとメッセージループとかを理解していないっぽいから。
820デフォルトの名無しさん:2005/08/11(木) 17:14:06
まあ、面倒なのでOnPaint中に全体を再描画でいいんじゃない。

>>819
まあ、Windowsプログラムの入り口としてMFCからアプローチするのが近道なんじゃないか?
いきなり自力でWindowを作成するのは初心者にはやっぱり難しいよ。

821デフォルトの名無しさん:2005/08/11(木) 17:17:39
>>817
WM_PAINTが来たときに線を描画するようにすればいいだけ。
WM_PAINT内でBeginPaint()〜EndPaint()を使えば、それが無効領域の再描画になる。

>>820
MFCはその後がもっと難しいではないかと思う。
822815:2005/08/11(木) 17:51:03
BeginPaint()〜EndPaint()
とやらを調べていたら、無効な領域だけを再描画するという方法が載ってるページを見つけました。
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win16.html

これを参考にして出来るかやってみます。
823デフォルトの名無しさん:2005/08/11(木) 17:51:11
>>821
別にいいじゃん。そこまで>817がやるかどうかも判らんのだし。
824デフォルトの名無しさん:2005/08/12(金) 16:32:28
質問です。

exeプログラムの一部の関数をEXPORTする方法を教えてください。
別のプログラムから利用したいという要望が来まして……

それともdllを生成する別プロジェクトを作るしかないのでしょうか。

よろしくお願いします。
825デフォルトの名無しさん:2005/08/12(金) 16:44:55
素直に必要な分だけ別のプログラムのプロジェクトに参加させるのではダメ?
826デフォルトの名無しさん:2005/08/12(金) 17:05:38
exeプログラムでエクスポートしたい関数をdllからの
エクスポートと同じようにすればOKですよ。例えば、
__declspec(dllexport) void Func();として、exeのソースに書けば
void Func()がエクスポート出来ます。グローバル変数も同様です。
827デフォルトの名無しさん:2005/08/12(金) 17:10:29
もしかしたら静的リンクさせたかったり?
828824:2005/08/12(金) 17:41:27
ありがとうございました。
何とか解決しました
829デフォルトの名無しさん:2005/08/12(金) 18:46:01
VC++でダイアログを幾つか使うようなアプリを作っています
作っていて気付いたのですがタブオーダーがどのダイアログでも効かないのですが

ダイアログはリソースエディタで作ったものでタブストップのプロパティを変えても
tabキーでコントロールの移動が出来ません
なんか変なとこ弄っちゃったのでしょうか?
830デフォルトの名無しさん:2005/08/12(金) 18:57:51
タブオーダーが効かないコントロールは何?
ボタン?
831829:2005/08/12(金) 19:00:19
>>830
そうです。
832デフォルトの名無しさん:2005/08/12(金) 19:01:29
キャプションの文字列に何か入れなさい。
空はよくない。
833829:2005/08/12(金) 19:02:39
お?出来ました!まさか、キャプションとはorz
ありがとうございました。
834デフォルトの名無しさん:2005/08/12(金) 21:18:20
.net 2003ってc99に対応しているのでしょうか?
可変長引数マクロでエラーになるのですが、
何か設定がいるのでしょうか?
835デフォルトの名無しさん:2005/08/12(金) 21:24:40
MSDN見たらVisual Studio.NETのVC++にはCランタイムライブラリの所に
>C99 のリリース時期により、このバージョンの Visual C++ はこの規格に準拠していません。
の記述あり。
836829:2005/08/12(金) 21:46:36
>>831,833
困ったな、別な人が勝手に私の悩み解決してもらっても
私は解決して無いからな^-^;

>>830
ちなみにタブオーダーが効かないのは総てのコントロールです
ダイアログのテストとかではちゃんとタブオーダー効いているのですが
何故か普通に動かすと効かなくて困ってます
837デフォルトの名無しさん:2005/08/12(金) 23:07:28
キー入力がどっかに取られているとか。
838デフォルトの名無しさん:2005/08/13(土) 09:40:44
char error[3] ={0xEB,0xA7,0x00};
size_t size = ::MultiByteToWideChar(
CP_OEMCP
,MB_PRECOMPOSED | MB_ERR_INVALID_CHARS
,error
,-1
,0
,0);
MB_ERR_INVALID_CHARSを有効にするとGetLastErrorが1113を返されます。
(1113:Unicode 文字のマッピングがターゲットのマルチバイト コード ページにありません。)
SJISの漢字は(0x81〜0x9F || 0xE0〜0xFF)+(1BYTE)で大丈夫な気がするのですが、
何が起きているのでしょうか?
839デフォルトの名無しさん:2005/08/13(土) 16:35:04
>>838
そのコードの文字が何か分からんけど、Unicodeに対応する文字が無いんじゃないの?
SJISにあるかどうかなんてのは、関係ないだろ。
840838:2005/08/13(土) 21:34:35
>>839
どうも、その通りでした。
(CP932の変換テーブルみてみたらなかった)

・mbstowcsは変換エラーを検出するので
MB_ERR_INVALID_CHARSがEnableですね。
・CStringWはMB_ERR_INVALID_CHARSはDisableでした。
標準関数は文字列の一部で変換エラーがあった場合、
どうするんだろう...

841デフォルトの名無しさん:2005/08/13(土) 23:22:19
ウィンドウ作成の初歩で躓いてます。
作成された実行ファイルのアイコンは変わってるんですが
ウィンドウ左上のアイコンが表示されず
黄色い三角形の!アイコンになってしまいます…。
派生した(?)ダイアログではアイコン表示されてるんです。
なんでかわかりませんか?

842デフォルトの名無しさん:2005/08/14(日) 00:37:23
エスパーさん出番ですよ。
843デフォルトの名無しさん:2005/08/14(日) 00:40:58
>>841
アイコンエディタの左上のテコンボボックスを標準(32x32)からスモール(16x16)に替えてえて見る。


844デフォルトの名無しさん:2005/08/14(日) 02:44:18
VC++.NET2003を買おうと思っているのですが、これって例えば、
ウィンドウプロシージャにメッセージ定数を書くときに、WM_って書いた時にリストが出てくれたりしますか?
それ以外にも、普通のエディタで書く時と比べて、
リストが出てくれて便利だったりしますか?
845デフォルトの名無しさん:2005/08/14(日) 03:43:42
>>844
オートコンプリートでってこと?ならでない。
でもClass PropertyでMessagesを選択するとリストアップしてくれる。
WM_...のとなりのプルダウンメニューからメッセージイベントハンドラを選ぶと、コードを挿入してくれる。

もうすぐVS2005がでるし、しばらくVisual Studio 2005 Team Suit β2版を使っていたら?
MSDN会員でないなら、".NET Expert"などの雑誌にCDがついているよ。
846デフォルトの名無しさん:2005/08/14(日) 04:20:53
>>845
そうです!オートコンプリートの事でした。
オートコンプリートではなくて、他の機能でリストアップ(コード挿入)してくれるのですね。
親切にどうもありがとうございます。

VS2005を待つことも考えたのですが、VC++を学習用に使いのですが、(学生ではありません)
2003と2005を価格的に比べても、VC++単品を買った方が安上がりかなと思ってる次第です。
2万円という絶妙な値段ですが、その後で慣れた後に上位バージョン(やstudio)にでも移行しようかなと考えています。

でもとりあえず、薦めていただいたVisual Studio 2005 Team Suit β2版もチェックしてみたいと思います。
847デフォルトの名無しさん:2005/08/14(日) 09:54:13
質問です
「猫でも〜」のSDK編の46章で、
case WM_DRAWITEM:
lpDI = (LPDRAWITEMSTRUCT)lParam;
if(lpDI->itemState == ODS_SELECTED)
で場合分けする、という部分があったのですがうまく働きません
プログラムは右クリックでメニュー(オーナードロー)を呼び出して
「選択状態になったら」(ここが効かない)その部分の色を変えて
ボタンを押されたら作業を実行、というものでした
if文が真になるタイミングでWM_DRAWITEMが出ていないようですが、
どうすればいいでしょうか?VC++6.0です
848デフォルトの名無しさん:2005/08/14(日) 12:48:14
質問です
自作プログラム中からTerminateThreadを使って他プロセスを終了
させるものをかいていたのですが上の関数を使うとexplorerの場合
勝手に再起動されてしまうのです。タスクマネージャのようにexplorer
を終了させたいのですがどうすればよろしいでしょうか?
環境:BC++
849デフォルトの名無しさん:2005/08/14(日) 14:43:05
ソース(またはプロジェクト)がCかC++かって設定必要ですか?
関数プロトタイプとかC++だと必要ないと思ってたのに、
書かなきゃ動かなかったりするんですけど…。

クラスとか作ったら勝手にC++のソースになるもんだと思ってるんだけど。。。
850デフォルトの名無しさん:2005/08/14(日) 15:57:22
>>847
lpDI->itemState & ODS_SELECTEDぽい。

>>848
TerminateProcess()とかExitWindowsEx()とかじゃ?

>>849
hoge.cpp C++
hoge.c C
じゃない。
851デフォルトの名無しさん:2005/08/14(日) 15:59:42
>>847
if(lpDI->itemAction & ODA_SELECT)



if(lpDI->itemState & ODS_SELECTED) 

どっちかでいければいいな
852デフォルトの名無しさん:2005/08/14(日) 16:31:35
http://pc8.2ch.net/test/read.cgi/tech/1120190961/
このスレの890-894がVC6++でコンパイルが通りません。
どこに問題があるでしょうか。7では通るようですが、
6でも通るように書き換えるとしたらどのようにしたらよいでしょうか。
853デフォルトの名無しさん:2005/08/14(日) 18:07:56
すみません、TerminateThreadではなくTerminateProcess()でした。
あと、ExitWindowsEx()はWindowsの終了などを操作するものですよね。
私はexplorerのプロセスを操作したいのです。
854847:2005/08/14(日) 18:44:39
>850,851
&に変えたらいけました どうもサンクス
855デフォルトの名無しさん:2005/08/15(月) 13:10:41
エラーが出た時にすぐにコンパイルを終了する方法を教えて下さい。
856デフォルトの名無しさん:2005/08/15(月) 13:17:52
エラーが出たときにすぐにコンパイルが停止するように設定する。
857デフォルトの名無しさん:2005/08/15(月) 21:46:10
out lookの予定表の様な物を作ることになったのですが、助けてください。
858デフォルトの名無しさん:2005/08/15(月) 22:07:58
WndProcを扱っています。
文字が入力されはじめたことを監視して、適宜の処理をしたいと思っています。

その際に、WndProcとWM_IME_STARTCOMPOSITIONを利用しようと考えています。
859858:2005/08/15(月) 22:11:49
しかしながら、
Console.Writelieでm.Msgを監視しても、
一向に、0x010Dが出力されません。
http://www.pinvoke.net/ ←WM_IME_STARTCOMPOSITIONの定義

参考にしたサイト様
http://www.ne.jp/asahi/oh/landd/prog_html/prog64.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/327notitlebardlg/notitlebardlg.html
http://www.microsoft.com/japan/msdn/net/winforms/bettercombobox.asp
http://dobon.net/vb/bbs/log3-11/6224.html

宜しくお願い申し上げます。
860858:2005/08/15(月) 22:12:49
private const UInt32 WM_IME_STARTCOMPOSITION = 0x010D;
public Form1()
{
InitializeComponent();
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_IME_STARTCOMPOSITION)
{
MessageBox.Show("やたー");
return;
}

Console.WriteLine(String.Format("{0,5:X}",m.Msg));
base.WndProc(ref m);
}
861デフォルトの名無しさん:2005/08/16(火) 00:20:09
Winsockで通信するプログラム作ろうと思ってるんですが、
Winsock2で最初やろうと思ってて
#include <winsock2.h>
をしたら再定義等のエラーが沢山出てきました。
winsock.hが先にインクルードされているからなんだな。
と、なんとなくわかり、
検索もしてwindows.hに含まれている事がわかりました。

自分はwinsock2の機能を使うわけじゃない(というかどう違うのかさえ知らない)ので、
winsock2のインクルードやめたらコンパイル-実行できて。ホッとしたんですが、
この先winsock2の機能を勉強して、使いたくなった時どうすれば良いですか?

windows.hで
#include <winsock.h>→#include <winsock2.h>
にするくらいしか対策は無いんでしょうか?
862デフォルトの名無しさん:2005/08/16(火) 00:25:05
VCとWindowsってUNICODE完全対応ですか?
もしそうでないとした場合に自分でUNICODE完全対応にしてソフトを配布するってこと可能ですか?
863デフォルトの名無しさん:2005/08/16(火) 00:40:30
>>861
#include <winsock2.h>
#include <windows.h>

とMSDNのサンプルに書いてあったような希ガス。
864デフォルトの名無しさん:2005/08/16(火) 10:42:11
すいません、教えて下さい。
iostreamをincludeしても、
cout が「定義されていない識別子です。」になってしまうのですが
どうしたら直せますでしょうか?

include自体は成功していますし、
cout自体のヘルプに乗っているコードをそのまま使っても
駄目なので、手の打ちようがなく困っています。
865デフォルトの名無しさん:2005/08/16(火) 10:54:00
std::cout
866デフォルトの名無しさん:2005/08/16(火) 12:29:44
Windows 9xはUNICODE非対応だったかな。NT系はUNICODE対応。
というか、内部ではアスキー文字もUNICODEに変換しているので
UNICODEとしてプログラムを作る方が効率がいい、というような
ことがAdvanced Windowsに書いてあった。
VC++のUNICODE対応というのが、UNICODEを扱えるバイナリを
作れるかということなら、作れる。MSDNでUNICODEを検索汁。
もちろん、自分で全部コーディングするならUNICODE対応でも何でも
お好きなやうに。
867デフォルトの名無しさん:2005/08/16(火) 12:55:25
>>864
C++を利用するのならnamespaceを勉強しなさい
868デフォルトの名無しさん:2005/08/16(火) 13:13:43
C++相談室から誘導されてきました(内容は同じ)

ウインドウ内で画像を移動させたいのですが何度やっても上手くいきません。
色々調べてみましたが結局詰まってしまったのでご助言をお願いします。

以下描画部分(メッセージ処理の一部)を書きますが、それ以外で必要な部分があれば言ってください。
case WM_CREATE:
 SetLayeredWindowAttributes(hWnd, RGB(255, 0, 255), 0, LWA_COLORKEY);          //紫を透明に
 SetTimer(hWnd,1,100,NULL);
 break;

case WM_PAINT:
 hdc = BeginPaint(hWnd, &ps);
 ExtFloodFill(hdc, 1, 1, RGB(255, 255, 255), FLOODFILLSURFACE);
 hbmp = (HBITMAP)LoadImage(hInst, "BITMAP1",IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
 hdc_mem = CreateCompatibleDC(hdc);
 SelectObject(hdc_mem, hbmp);
StretchBlt(hdc, POSX, 0, 100, 100, hdc_mem, 0, 0, 100, 100, SRCCOPY);             //POSXは変動
 EndPaint(hWnd, &ps);
 break;

--続く
869デフォルトの名無しさん:2005/08/16(火) 13:14:47
続き--

case WM_TIMER:
 hdc = BeginPaint(hWnd, &ps);
 ExtFloodFill(hdc, 1, 1, RGB(255, 255, 255), FLOODFILLSURFACE);
 hbmp = (HBITMAP)LoadImage(hInst, "BITMAP1",IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
 hdc_mem = CreateCompatibleDC(hdc);
 SelectObject(hdc_mem, hbmp);
StretchBlt(hdc, POSX, 0, 100, 100, hdc_mem, 0, 0, 100, 100, SRCCOPY);             //POSXは変動
 EndPaint(hWnd, &ps);
 break;

紫を透明色にし、ウインドウのメニュー・枠線を消して画像だけを表示させることをしようとしています。
WM_TIMERは何度も通っているのを確認、POSXの値は変わっています。
一度WM_PAINTで描画するとどうやってもウインドウ内の位置は変わらないようです。
環境はWindowsXP VC++.NETです。
870デフォルトの名無しさん:2005/08/16(火) 13:24:42
>>868
WM_PAINT時に移動すんじゃね
871868-869:2005/08/16(火) 13:55:49
ありがとうございます
WM_TIMER(というかWM_PAINT以外)では描画されないのですね。
872デフォルトの名無しさん:2005/08/16(火) 14:01:24
描画されないというか、WM_PAINT以外でBeginPaint, EndPaintを呼んでは駄目だ。
WM_PAINT以外で描画するんならGetDC使え。
873デフォルトの名無しさん:2005/08/16(火) 14:26:28
コンパイルされたアセンブリファイル(*.s)を見るにはどうしたらいいんでしょうか?
874デフォルトの名無しさん:2005/08/16(火) 15:34:26
バイナリエディタで開いてください
875864:2005/08/16(火) 15:56:21
すいません。自己解決しました。
876デフォルトの名無しさん:2005/08/16(火) 15:58:17
>>865 >>867さん
ありがとうございます。
Cと違って標準ライブラリのスコープがはっきり存在するのを
初めて知りました。
877873:2005/08/16(火) 16:10:13
ニモニックで見たいのですが・・・。
878デフォルトの名無しさん:2005/08/16(火) 16:16:49
CListCtrlについて質問です。
スクロールバーを使わずに、別にボタンを用意して、
ボタンを押すごとに下に1行ずつスクロールさせるようにしたいのですが、
可能でしょうか?
もし可能であれば方法など教えてください。
いろいろサイト検索したのですが、なかなかみつかりませんでした…orz
879デフォルトの名無しさん:2005/08/16(火) 16:28:06
また質問です。
VC++.NETで作っていますがMicrosoft .NET Frameworkを使用しないexeファイルを作ることは可能なのでしょうか?
880デフォルトの名無しさん:2005/08/16(火) 16:31:25
Unmanagedで作りゃいいんじゃなかったっけ?
881デフォルトの名無しさん:2005/08/16(火) 16:58:05
レスありがとうございます。
>アプリケーションの開発に Visual C++ を使用している場合は、
>Visual StudioR .NET の下でも Visual C++ でアンマネージド アプリケーションを生成することができます
と言うところまでたどり着いているのですが、そこから先がどう調べても出てきませんでした。
現在の.NET Frameworkが必要な(マネージド)環境からアンマネージドに変えるにはどういう設定をすればいいのでしょうか。
882デフォルトの名無しさん:2005/08/16(火) 17:26:36
>> 873
コマンドラインでよければ。

hoge.cpp のアセンブル結果を見るには

cl /c /Fahoge.s hoge.cpp

とすれば、hoge.s が作れますよ。

883882:2005/08/16(火) 17:44:22
アセンブル結果

ではなくて、アセンブリリストファイルです。

アセンブル結果じゃバイナリだ…
884879:2005/08/16(火) 18:18:18
やはり.NET Frameworkを使わないexeファイルの作り方がわかりません。
881にも書きましたがUnmanagedでの作り方が調べても分からず、
そもそも何をしたら.NET Frameworkが使用される(使用しなくなる)のかも不明・・・。
何方か詳しい方はいませんでしょうか。
885デフォルトの名無しさん:2005/08/16(火) 18:31:33
.NETプロジェクトを選べばmanaged
886デフォルトの名無しさん:2005/08/16(火) 20:08:35
ありがとうございます。多分できました。
もう1つ追加質問、.NET Frameworkを使っているかどうかを既にインストールしている人が調べるには、
一度アンインストールし、exeを開くときにエラー等が出るかで無いかで判断するしかないのでしょうか。

887デフォルトの名無しさん:2005/08/16(火) 20:23:01
内部構造が違うはずだが
888デフォルトの名無しさん:2005/08/16(火) 21:34:56
ん?.NETは中間コードしか吐けないんじゃなかったか?
コンソールアプリで.NETを使わないでプログラムした場合は直接実行できると認識していたんだが

違ってたらスマソ
889デフォルトの名無しさん:2005/08/16(火) 22:34:08
>886
あるEXEが.Netを使っているか、Nativeなのか、については、
dependsに食わせてみれば判る。
890デフォルトの名無しさん:2005/08/16(火) 22:54:30
>>889
おお、これは便利ですね。
ありがとうございます。
891デフォルトの名無しさん:2005/08/17(水) 23:37:02
質問なのですが、DevPartner Profilerについてもこのスレでいいのかな?
プログラムのプロファイルを取りたくて上記のものに行き着いたのですが、
プロファイル結果がどうしても表示されないよ。

nativeなプログラムだと思うので
ツール->DevPartner Profileのinstrument managerでnative用の設定をしてビルド、
更にツール->DevPartner Profile->enable profilingでデバッグ無しで開始をやると
「.xxxxxx」(xxxの内容は忘れてしまいました)というファイルはちゃんとできるんですが、
結果が表示されません。
いろいろと調べてみるとプロファイリングしたいプログラムが終了するとプロファイル結果が
ウィンドウに自動で表示されるらしいのですがその結果が出ないということです。
仕方なくソリューションエクスプローラのDevPartner Profilerの項目で
先程生成された.xxxxxxファイルをダブルクリックで開いて見ると中身は空のようでした。

いろいろ設定を変えてみてもどうもうまくいかないのでDevPartner Profilerを
使っている方がいましたらお知恵をお貸しください。
892デフォルトの名無しさん:2005/08/18(木) 01:21:49
質問、横入りスミマセン。
入力の際、スペースの変換の確定のVK_RETURNを取得しない
方法を探しています。

GetWindowLong(hEditBox,GWL_WNDPROC,(LONG)EditProc);
で、エディットボックスのキー操作をフックしています。

EditProc内では
if( wparam==VK_RETURN ) {}内で、文字列を取得しています。
(今のやり方)

初め if( msg==WM_KEYDOWN && wparam==VK_RETURN ) {}で取得を
試みましたが出来ず(WM_KEYDOWNを拾えない)、調べてみると
ダイアログなどでは不適切らしいので、修正しました。
893デフォルトの名無しさん:2005/08/18(木) 02:01:50
画面(そのプログラムが実行しているウインドウ)を一番手前に呼び出す関数はあるのでしょうか?
894デフォルトの名無しさん:2005/08/18(木) 02:21:56
>>893
SetWindowPos
895デフォルトの名無しさん:2005/08/18(木) 02:35:24
>>869
タイマイベント処理でデータ更新して、終わったら再描画イベント発生させせばいいんでない?
再描画はInvalidRect とかつかって。
896893:2005/08/18(木) 02:35:31
>>894
ありがとうございます
897895:2005/08/18(木) 02:36:11
う、更新し忘れて、えらい古いレスしちまった。
898デフォルトの名無しさん:2005/08/18(木) 22:47:18
質問があります。
メタセコイアで使用している色設定のコントロールのようなものを
自前で作成したいのですが、カーソル位置からRGBにどのようにして
変換しているのかわかりません。
あのような色空間はどのような基準で描画すればいいのでしょうか?
カーソル位置からRGBにどのようにして変換すればいいのでしょうか?
899デフォルトの名無しさん:2005/08/18(木) 23:23:30
質問させてくださいな。

uintptr_t _beginthreadex(
void *security,
unsigned stack_size,
unsigned ( __stdcall *start_address )( void * ),
void *arglist,
unsigned initflag,
unsigned *thrdaddr
);

この関数の引数stack_sizeの意味がよく分かりません。
stack_sizeというのはどんな代物なんでしょうか

たとえば、
unsigned __stdcall ThreadFunc(void *arg)
{
int i;
char ss[128];

//色々な処理

_endthreadex( 0 );
return 0;
}

こんな関数があるとすると、_beginthreadexでThreadFunc()を
スレッドとして呼び出したい場合、stack_sizeは(sizeof(int)+sizeof(char)*128)を
指定しないといけないと言うことでしょうか?
900デフォルトの名無しさん:2005/08/18(木) 23:29:21
>>899
MSDNを見よ。
>また、引数 stack_size に 0 を指定すると、オペレーティング システムはメイン スレッドに対して指定したスタックと同じ値を使用します。
こう書かれている。
901デフォルトの名無しさん:2005/08/18(木) 23:32:54
>>898
寡聞にしてメタセコイアが何かは知らぬが、
色相環からrgb値を得たいと言うことかな?
それなら戦略は二つ。
・クリックした座標の画素を拾ってrgb値を得る。
・クリックした座標値からrgb値を算出する。
#これ以上の情報が必要なら画像処理スレ向きかな。
902デフォルトの名無しさん:2005/08/18(木) 23:48:53
>>899
関数呼び出しでもスタックを消費するから、そのサイズだと足りない。
まあ0でも指定しとけ。
903デフォルトの名無しさん:2005/08/19(金) 08:52:01
こんにちは

_T(" ")とはどういう機能なのでしょうか。

よろしく願います。
904デフォルトの名無しさん:2005/08/19(金) 09:14:55
HINSTANCE hInstanceというのがありますが、
具体的にどのようなものなのでしょうか。
905デフォルトの名無しさん:2005/08/19(金) 09:30:57
>>904
HINSTANCEと言う型のhInstanceと言う変数の宣言。
詳細はF1を押してMSDNを見るか「宣言へ移動」を使ってインクルードファイルを見よ。
906デフォルトの名無しさん:2005/08/19(金) 09:44:53
>>905
ググルで探してみます。
意味を知りたかっただけです。
907デフォルトの名無しさん:2005/08/19(金) 10:14:55
>>903
Unicodeビルドか否かで L" " か " " になるマクロ。
908デフォルトの名無しさん:2005/08/19(金) 11:53:33
GetWindowRectだと、スクリーン座標でのウィンドウ位置が得られます、
GetClientRectだと、クライアント座標でのウィンドウ位置が得られますが、left,topは常に0です。

では、子ウィンドウを作成したとして、子ウィンドウが属する親ウィンドウを基準としたleft,topを得たいのですが、どのAPIを使えばいいのでしょうか。
909デフォルトの名無しさん:2005/08/19(金) 12:28:16
>>908
GetWindowRectしてScreenToClient
910デフォルトの名無しさん:2005/08/19(金) 14:38:44
指定日から、○日後や○ヶ月後の日付を知りたいのですが、
何かいい方法はありますか?
911デフォルトの名無しさん:2005/08/19(金) 15:33:32
>>910
CTimeクラス、tm構造体、mktime関数あたりを使えばいいと思う。
912910:2005/08/19(金) 16:10:19
>>911
ありがとうございました
それで挑戦してみます
913デフォルトの名無しさん:2005/08/19(金) 21:29:29
>904
簡単にいうとインスタンスハンドルというハンドル、
もっと砕けていうと、mainが持っているハンドルだよ
非常に荒く言うと、WIN32アプリ(コンソールアプリではない)ではハンドルがないと関数が動かない、ハンドルがないと車動かせないのと一緒
だから、メインウィンドウの初期化であるWNDCLASS(EX)やメインウィンドウ作るCREATEWINDOWはmainからインスタンスハンドルを頂かないと動かない
また、WIN32アプリではHWNDというウィンドウハンドルというのもある(WNDCLASS(EX)でHINSTANCEからCALLBACK関数へ関連付けされる、それと、CREATEWINDOWの戻り値でHINSTANCEから関連付けされる)
これは、メインウィンドウとダイアログとか、2つ以上のウィンドウのハンドルを分けるために存在する
具体的に言うと、メインとダイアログがHWNDハンドル同じ時は、例えばダイアログが開いている間はハンドル奪われて、メインウィンドウは操作できない
逆に、メインとダイアログがHWNDハンドル違うときは、ダイアログが立ち上がっている時でもメインウィンドウを操作できる
MFCになると、これをMODEL(前者)、MODELESS(後者)と言う
MFCにはMODELが標準になっている、そして、MFCではハンドルという概念がほぼ消えている
どういうことかというと、ハンドル分けてってことができないから、MODELESSが難しくなってくる
914デフォルトの名無しさん:2005/08/19(金) 22:22:49
ファイルを選択するにはCFileDialogを使いますが、
フォルダを選択したい場合にはどうしたらよいのでしょうか?

915デフォルトの名無しさん:2005/08/19(金) 22:42:56
>>914
SHBrowseForFolder
916デフォルトの名無しさん:2005/08/19(金) 23:02:05
ハンドルとステアリングの区別がつかない香具師発見。
917デフォルトの名無しさん:2005/08/19(金) 23:33:38
>>915

できました。ありがとう。
918デフォルトの名無しさん:2005/08/20(土) 01:55:05
>>913
インスタンスハンドルはアプリケーションの、
ウィンドウハンドルはウィンドウの、
独特の数値?(IDみたいなもん?)って事かな?
919デフォルトの名無しさん:2005/08/20(土) 02:16:40
>>916 華麗にスルーされてる香具師発見
920デフォルトの名無しさん:2005/08/20(土) 16:29:09
>918
まぁそんなもんだが、>913はほぼ間違ってるので注意。
921デフォルトの名無しさん:2005/08/20(土) 22:50:54
基本的なことですいません。

VS.NET2003でMFCを使ったりしてウィザードから作成する際、インクルードの書式が'/'でなくて'\'になってしまいます。
'/'にする方法はありますか?
922デフォルトの名無しさん:2005/08/20(土) 22:53:12
ひょっとしてインスタンスハンドルってアプリの先頭アドレス?
923デフォルトの名無しさん:2005/08/20(土) 22:58:07
>>922
今はモジュールハンドルと同じ扱いだからそうだよ。
924デフォルトの名無しさん:2005/08/21(日) 03:50:59
コンソールアプリケーションのmainの引数には
インスタンスハンドルの項がないんだけど、
この実行プロセスがインスタンスハンドルを持ってないってことはないの?
925デフォルトの名無しさん:2005/08/21(日) 04:11:27
ない
926デフォルトの名無しさん:2005/08/21(日) 04:18:41
持ってる、という解釈でよろしいのか。
927デフォルトの名無しさん:2005/08/21(日) 07:20:32
>>921
英語フォントを選択する。
928デフォルトの名無しさん:2005/08/21(日) 09:09:43
>>926
うん
929デフォルトの名無しさん:2005/08/21(日) 10:21:32
>>924
欲しければGetModuleHandle(0)で手に入る。
930デフォルトの名無しさん:2005/08/22(月) 01:16:51
DOSプロンプトでUNICODEで表示ってできるんですか?
931デフォルトの名無しさん:2005/08/22(月) 09:12:17
>>930
表示にUNICODEもなにもないだろう。
932デフォルトの名無しさん:2005/08/22(月) 20:08:49
MFCでキー入力判断って出来ますか?

あとファイルから読み込んだ文字列を多次元(forで繰り返せる形)にするやり方教えてください
933デフォルトの名無しさん:2005/08/22(月) 20:13:29
>MFCで(略
できる

>あとファイル(略
元からChar配列だろ
934デフォルトの名無しさん:2005/08/22(月) 21:56:29
>>981
たぶんのUNICODE文字列をcoutとかprintfとかで表示できるか?
という質問じゃないか?
まあ、答えは無理なので、
UnicodeToAnsiとか使ってコンバートした文字列を表示させましょう。
935デフォルトの名無しさん:2005/08/22(月) 22:02:13
>>934
printfは%lc, %lsで表示できる。
936デフォルトの名無しさん:2005/08/22(月) 22:07:32
>>933
ダイアログベースでした説明不足すまそ

多次元はstrcpy使って出来ました。ありがとうございました。
937デフォルトの名無しさん:2005/08/22(月) 22:14:29
#pragma comment( lib, "test/hoge.lib" ) というように、
自作の static library 専用のフォルダを作って、相対パスで
pragma しても、うまく結合(?)されませんでした。仕方ないので、
絶対パスで指定していますが、そうする他どうしようもないのでしょうか?
938デフォルトの名無しさん:2005/08/22(月) 22:31:38
"../"は使えない理由があるの?
939デフォルトの名無しさん
>>937
VCのディレクトリ設定に親ディレクトリを追加しろ