★初心者にVisual C++を教えるスレ★ Part20
1 :
デフォルトの名無しさん :
2005/07/01(金) 21:52:02
var s : string; begin s := 'こんにちは' end; みたいな書き方を C++は、できますか? Cみたいに *charしかないのでしょうか?
あっ Visual C++ じゃないので やっぱりいいです C++Builderできいてきます
快調な滑り出しだな
卒研で流れの解析をVC++でやろうと考えているのですが 簡単な数式くらいしか書けないしょぼい実力なので なにから手をつけたらいいのかわかりません・・・ 最終的には自動車丸ごと解析してやろうと考えています。 お勧めの書籍、サイト、プログラムなどアドバイスよろしくお願いします。
11 :
デフォルトの名無しさん :2005/07/02(土) 00:34:44
っていうか、1年でできると思ってる?
出来るだろ。
>簡単な数式くらいしか書けないしょぼい実力なので で、出来る?
>>6 #include <string>
int main(int argc,char *argv[])
{
std::string s;
s = "こんにちは";
return EXIT_SUCCESS;
}
じゃ気に入らんか?
もっともこれは2バイト文字を考慮していない。
15 :
14 :2005/07/02(土) 02:26:21
や、ごめ。 #include <stdlib.h>すんの忘れてた。
17 :
デフォルトの名無しさん :2005/07/02(土) 11:32:10
Visual C++て、デバッグ実行ができない問題が多くないか? Win2000にNET. 2003をインストールした2台のパソコンどちらも、デバッグ実行すると、プログラムの実行 が開始せずに、固まってしまってタスクマネージャーからVCを終了するしかなくなるのはどういうことか。 会社では、Win2000にVC++6.0をインストールしたパソコンでデバッグ実行すると、同じ現象が発生すること が多かったし。でも今は落ち着いてきて、特に対策をしたわけではなく、なぜかは分からないが、普通に実行 できるようになったが。 でも、NET.2003が依然としてデバッグ実行ができない。困ったもんだ。 デバッグなしで開始はできるが。 VCてぼろいんじゃないか?
そっちの環境がぼろいだけ
NET. 2003 NET. 2003 NET. 2003 NET. 2003 NET. 2003 NET. 2003 .NET 2003だろ
delphi2006最強
21 :
デフォルトの名無しさん :2005/07/02(土) 15:08:48
とりあえず猫を読み終わったので、アクションゲームを作ってみたいのですが、 そういうゲームの作り方を解説しているサイトはないでしょうか?
2つ質問させてください。 CTestView::CTestView() : pMem(NULL) { } と CTestView::CTestView() { pMem = NULL; } ではどういう違いがあるのでしょうか?またどっちで記述するのがおすすめとか ありますか? あと #include <stdio.h> と #include "stdio.h" の違いはなんでしょうか?
#include <stdio.h>と#include "stdio.h"の違いは検索パスが違う。 <>で指定した場合は開発環境で設定されたディレクトリからファイルを 探してインクルードするが""で指定した場合は、 カレントディレクトリからファイルを探し、無ければ開発環境で指定された ディレクトリから探すようになる。 と言ってみる試験。
>>22 pMem(NULL)は初期化、pMem = NULL;は代入。
pMemの型が何だか知らんが、クラスとかだとかなり意味が違う。
< >と" "の違いは、どこを最初に探しに行くかの違い。
25 :
22 :2005/07/02(土) 15:47:09
<> "" は理解しました。ありがとうございます。 pMem は CTestView のメンバで u_char* pMem; と宣言してます。なんか不定値入ってたら困るので生成されるときに 初期化しようとしてるんですが、いままでは pMem = NULL; でやってたんですが、VCで「メンバの追加」を選んだら : pMem(NULL) がソースに書き込まれたので気になって質問してみました。
>>25 pMem(NULL)とpMem=NULLは実行されるタイミングが本質的に違う。
この場合はポインタのようだから実質問題ないが、
これがクラスになると大問題になる。
その辺の違いはわかるかな?
メンバ変数&コンストラクタで調べると吉。
27 :
22 :2005/07/02(土) 17:33:40
>>26 なるほどです。メンバ変数&コンストラクタをキーにしてもうちょっと
勉強してみます。
ありがとうございました!
28 :
デフォルトの名無しさん :2005/07/02(土) 18:29:04
カラー画像をRGBからHSVに変換して、 csvファイルで保存する方法が全く分かりません。 どなたかプログラムとか、やり方を教えてください・・・
カラー画像をどうやってカンマ」区切りにするんだろ RGBからHSVは調べれば式がみつかるかと
いくら自分の会社が作ってるOS上の開発ツールとはいっても、デバッグ実行できない のだから、本当にぼろいな。OSの本家のメーカーの製品だからといって、VCを選択す るのが多いんだろうな。
黙ってあげるから別の所に行って下さい。 あなたのぼろいPCと一緒に。
35 :
デフォルトの名無しさん :2005/07/03(日) 01:38:52
スライダーをエディットボックスに関連づけて使用したいと思い、 setbuddy という関数を使ってみたのですが、 これを使うと、余計なお世話で勝手にコントロールの配置が変えられてしまい (エディットボックスとスライダーが横に並べられてしまう) レイアウトが崩れてしまいました。 スピンボックスの時はエディットボックスにくっつけるかどうか 任意に選べたのですが、スライダーの時も何か方法があるのでしょうか?
>>34 黙るとか言いながら、余計なことを書くな。
お前こそ別の所に行け。
('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ランタイムライブラリ関数(?)関連のものは みな外部シンボルが未解決と出るんですが…何か参照設定が足りないのでしょうか? ご教授いただければ思います。
みなさん、
>>36 は真性のキチガイ厨房ですので、以下では
完全にスルーしましょう。よい子は
>>36 にレスしちゃだめですよ。
自分がぼろいことに気が付いていないのですから。
黄色い救急車マダー?
40 :
デフォルトの名無しさん :2005/07/03(日) 15:23:14
ライブラリがリンクされて無いんだべ。
42 :
ペー&(且つ)&パー :2005/07/03(日) 16:17:00
>>38 最初のほうに #include "stdio.h" といれてますか?
fgets の宣言はそこにあります。 #include でファイルを取り込んでます。
C にしろ、Win32API にしろ ver. の違いでは動かなくないと思うです
C はサンプル読めるけど書かないじんなので、間違いならごめんなサイ
どうでもいいけど、break いらないです。
sample をよく眺めて1つずつ意味(流れ)を理解したほうがよいのでは。
ところが、その質問マルチってやつです?
間違ってマルチスレッド/シングルスレッド用ライブラリを リンクするようにしている。/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)]が設定されていました。
もしやこれがいけないんでしょうか?
>>45 今のC++では非静的メンバが配列のときに初期化するのは無理で、コンストラクタで代入するしかない。
48 :
45 :2005/07/03(日) 18:23:06
>>47 さん返事ありがとうございます。
地道にですね・・・。
実はCで作ったプログラムをC++の勉強がてらに
クラスで作り直していました。
元々がCプログラムの為、設計がまずいのかとも
思いましたが。。。
>今のC++では
今後に期待ですかね
>>48 コンストラクタで、ローカルな配列からコピーすればいい。
例えば、
class foo {
char **array;
unsigned NofArray;
foo();
};
foo:foo()
{
char *s[] = {"a", "bc", "def", "gh", "ijk",};
array = s;
NofArray = sizeof(s) / sizeof(*s);
}
とすればほぼことは足りるだろ?
> ローカルな配列からコピーすればいい > array = s; ……
public がない foo: ローカル変数を参照、、、 、、、難易度高いな、4つしかわからん。
初心者と言うわけではないんですが、 プロジェクトの種類でフォームアプリケーションというのは、 .net frameworkを使ったプログラミングと考えてよいのでしょうか? 現状で、W32API, MFCなどのどれが普及、奨励されますか?
53 :
45 :2005/07/03(日) 20:00:42
>>49 ありがとうございます。
外れているかもだけど、追加で教えて下さい。
sの領域はコンストラクタから出た時に開放されますよね。
"a", "bc", "def", "gh", "ijk"はいつ開放されるんですか?
>>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しなくちゃだめだよ、ということですよね?
57 :
45 :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]);
}
"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 でよいので。
61 :
45 :2005/07/03(日) 22:06:42
>>58 理論はなんとなくわかるんですが、
実装がわかりません。
色々試してるんですがうまくいかないっす。
>>49 class foo (
// ...
public:
foo();
// ...
};
foo::foo()
{
static char * s[] = {...};
array = s;
NofArray = sizeof(s) / sizeof(*s);
}
63 :
41 :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だとコンパイルとおっちゃうんですよね…
元々VC6で作ったんだからVC6で通らんかったら大問題だろう
65 :
45 :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せん。
67 :
45 :2005/07/03(日) 23:43:00
>>66 すみません。間違いです。
63じゃなくて62でした。
>>67 staticな配列はどこにあろうと(関数内だろうと関数外だろうと)生存期間はプログラムそのものと同じ。
69 :
デフォルトの名無しさん :2005/07/04(月) 15:25:39
strcpy()とlstrcpy()の使い分けってどうすればいいのですか? 結果自体は同じような気がするのですが。。。
lstrcpy()は使わなくていいよ。非標準だし。
>>69 strcpyはCの標準ライブラリ関数、どこでも使える
lstrcpyはWin32API
ウィンアプリでstrcpyだと、容量が重くなったり、 正常に動かない場合があるらしい。
つーかUNICODE
strcpyはANSIだからな
dynamic_castを使うための設定項目はどこにありますか?
[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を参照したいのです) }
79 :
77 :2005/07/04(月) 19:15:04
書き忘れました。すみません。 環境はVC++6.0です。 それから、aaa.cppをmain.cppのプロジェクトへの追加もちゃんとしました。
テンプレートって実態が別ファイルだといかんのじゃなかったっけ?
>>78 Fが引数を取ればいいだけじゃないか。
D.xだけが必要ならintで、D全体が必要ならconst D&を。
>>77 テンプレートはヘッダに書くか、明示的実体化をする必要がある。
ヘッダに書く方が一般的。
83 :
77 :2005/07/04(月) 20:37:25
>>82 ヘッダに書いたらOKでした
ありがとうございました
>>69 strcpyはchar*のコピーに使う
_tcscpyとlstrcpyはTCHAR*のコピーに使う
UNICODEを定義していなければTCHAR*はchar*と同じ。
_tcscpyとlstrcpyの違いは、後者がWindows APIで、前者がCランタイムであること。
UpdateData(TRUE); ix = m_ix; //m_ixはエディットボックスのメンバ変数 こんな感じでエディットボックスの数値を取得しようとしたんですが、 エディットボックスの値が数値以外や空白の場合、固まってしまいます。 デバックモードで見たところ、UpdateData(TRUE);で止まっているようなのですが、 どうすればよいのでしょう? 環境はVC++6.0です。
>>86 >>84 に述べた程度に正確な情報がかかれていなかったので、
敢えて書いておいたんだが
>>85 CStringで受け取り数値に変換
またはDDV
89 :
78 :2005/07/05(火) 01:07:23
>>81 引数をとるって具体的にどう書くんですか?
A.cppでFを使うならF(D.x)でいいのはわかりますが
A.cpp以外のcppファイルでもFを使いたいのです。
>>45 staticなメンバ変数を作ればよい。
class Sample{
static char *a[];
};
char *Sample::a[] = {"a","bc","def","gh","ijk};
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に表示 というのを作っています。
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
できました。 ありがとうございました! また質問があったらよろしくお願いします☆
95 :
85 :2005/07/05(火) 15:52:14
>>88 CStringでやれば簡単そうなんですが、
DDVとやらは初めて聞いたのでそっちを調べてみたら出来ました。
ありがとうございます。
>>91 エラー内容くらい書けよ
VCのバージョンも
97 :
初心者 :2005/07/05(火) 17:34:06
たびたびすいません。 エディットボックスを使っての ファイルの入出力は可能でしょうか? 例えば C言語のfopenのようなものを使う感じで。 エディットボックス1にsample1.txt エディットボックス2にsample2.txt 二つのファイルを開いて処理を行う場合などはどうしたらいいでしょうか? ちなみにVisual C++ バージョンは6.0です CFile CStdioFile などを使うのでしょうか?
MFCでやるんならCFile エディットボックスがCStringと関連付けてあるならあとはCFileとCStringのやりとりだけ
99 :
初心者 :2005/07/05(火) 18:16:20
なるほどありがとうございます。 初心者なもので色々わからない事だらけで 簡単なことも聞いてしまい申し訳ありません。
>>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"; こんな宣言がありましたがこれはどういった意味なのでしょうか? 簡単なことかもしれませんがすいません。
>>102 それが、
char crlf[] = "\x0d\x0a";
ならば、
char crlf[] = "\r\n";
と等価だ。
そしてそれは、宣言ではなく定義だ。
crlf=carriage return line feed
105 :
デフォルトの名無しさん :2005/07/06(水) 14:47:42
これから勉強するなら、C++とC#どちらがいいでしょう?
ケースバイケース
C++で作ったライブラリをC#で使えるのかしら。。。
>>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は定義されていませんでした。
109 :
91 :2005/07/06(水) 17:15:58
すいません、91です。
>>108 じゃあgdiplus.hより先にwindows.hをインクルードしている?
111 :
91 :2005/07/06(水) 17:32:14
windows.hってあるんですか? とりあえずstdafx.hにはありませんでした。 gdiplus.hは#pragma onceの後にインクルードしています。 場所が悪いんでしょうか? stdafx.hのほうがいいってどこかで聞いたんですが・・
>>111 gdiplus.hはwindows.hがインクルードされていることを前提にしている。
113 :
91 :2005/07/06(水) 18:20:33
stdafx.hの下のほうに記述したらできました! この上ら辺のがwindows.hなんですかね ありがとうございます、助かりました!
この上ら辺のが〜なんですかねって・・・ それも理解しないで作ろうと言うのか・・・ 若いとは恐ろしいものだ・・・
115 :
デフォルトの名無しさん :2005/07/06(水) 20:55:22
ExpandEnvironStrings()を使うと、環境変数文字列を展開できますが 逆の処理を行うAPIは存在しないのでしょうか? 例:C:\Windows\System32 -> %windir%System32
例えば HOGE=C:\Windows\System32 なんて環境変数も定義されてたらどっちに変換していいかわからなくなるだろ
うろ覚え・・・ class Question { Hoge* fuga[100]; public: virtual void print(); virtual void set( Hoge* pfuga, int num ) { fuga[num] = pfuga; } }; void Question::print() { // なんらかの処理 } こんな感じで、全てのメソッドに virtual が付いているようなソースコード を見た記憶があります。 virtual の意味は理解しているつもりだけど、この 意図がイマイチ理解できません。これって意味ないっすよね?? 自分は別につける必要はないと思ってるんですが。
>>117 継承&ポリモーフィズムするつもりなら意味がある
なるほど、するつもりなら、という事は全部になんでもかんでも 全てに付けるような真似をしても、何らメリットはないと言うわけですね(´∀`) ありがとうございました
120 :
115 :2005/07/06(水) 21:45:42
>>116 ご尤も。
CStringクラスのReplace()関数などで自分で環境変数文字列に置換するしかないですかね。
くだらない質問をしてしまってごめんなさい。
ありがとうございました。
VC++を最近はじめた者です。 CListViewクラスを利用して、「開く」メニューで選択したフォルダの内容を 表示したいのですが、どのようにしたらようのでしょうか? 最終的には、リスト内で選択されたファイルを他のビューで表示することに使いたいんです。 簡単な画像ビューア(Windows画像とFAXビューア的なアプリケーション)を作ろうと四苦八苦しています。 参考サイトなど、オススメがあれば教えてください。 お願いします。
>>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い 中断されちゃうんだけど原因わかる比問いますか・
>>122 もうすこし、なんというか・・・詳しく・・・。
>>125 CFileFindでファイル列挙。
リストアイテムを追加はMSDN見ればわかるだろ。
>>126 おお、なんかわかりそうな予感。
ありがとうございます。
>>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
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 );
double d = static_cast<double>(static_cast<int>('\n'));
ちょっとどこで聞けばよい性質のものか分からない質問なのですがお願いします。 やりたい事は、Windowsのテキストエリアコントロールみたいなのを自作する事なのですが、 プロポーショナルフォントを使った場合、 キャレットの位置の計算だとか、マウスカーソルが触ってるのが何文字目であるかとか、 そういったことを実現するにはどうしたらよいでしょうか。 文字のドット数を得る関数なんて、、ないですよね?
136 :
デフォルトの名無しさん :2005/07/07(木) 18:04:36
プロポーショナルだと GetTextExtentPoint32 じゃ駄目っぽいよなぁ... と思ったら GetTextExtentPointI ってのもあるぞ 今仕事中だから自分で調べてくれ
137 :
デフォルトの名無しさん :2005/07/07(木) 18:43:03
親クラスの this ポインタをウォッチウィンドウで参照した時、 サブクラスのポインタが参照できるのですが、これってプログラムで参照する場合は、 どうしたらいいのでしょうか? ウォッチウィンドウはこんな感じです。 this │ ├[子クラス名] ││ │├m_xxx ││
>>137 dynamic_cast
しかしあまりよくない。
>>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はクラスなのでしょうか。とすると、どのような機能を使って、クラスにできるのか教えて下さい。 よろしくお願いします。
142 :
デフォルトの名無しさん :2005/07/08(金) 12:53:37
>141 それはManegedC++
144 :
デフォルトの名無しさん :2005/07/08(金) 13:39:21
>>143 すいません。ManegedC++ って、何ですか?
146 :
デフォルトの名無しさん :2005/07/08(金) 15:03:06
>>145 VisualC++.netで開発して、動くのに、違うといわれても・・・。
違うんだからしょうがないだろw
>>146 VisualC++.netでCも開発できますが何か。
ManegedC++=.NET FrameworkのAPIを使うC++。VB.NETとかそういうものの 仲間で、ネイティブコードのバイナリー実行形式を作れない。 動作させるには.NET Frameworkがインストールされている必要がある。 コンパイルして作れるのは中間コードと呼ばれるもので、クラックが容易。 ソースコードがほぼ完全に復元出来るので、あまり再配布されたがらない。 .NETアプリ普及を妨げている原因のひとつ? 起動する時にネイティブコードに変換したりセキュリティチェックを 行ったりするので実行速度が遅いと酷評されることが多いが、起動した後は 高速に動作させることが可能。
さっきからManeged, Maneged言いおって!
で、経験があるという割りには自分で調べることもできない困ったちゃんの>140はどこに逃げた?
152 :
デフォルトの名無しさん :2005/07/08(金) 16:50:49
>>151 いますよ。おじさんは、仕事中でして。
いじめないでね。
皆さんよくわかりましたと言いたいのですが、さっぱりわからない。
でも、答えてくれてありがとうございました。
こんばんわ ダイアログリソースをつくり、クラスウィザードでダイアログクラスを作ったのですが、 再度、ダイアログリソースからクラスウィザードを立ち上げようとすると、 「新規リソースです」とダイアログを作るよう促されます。 そのダイアログリソースから作られたダイアログクラスはあるのに、 「新規ダイアログ」扱いをされ、再度ダイアログの生成を促されるのがわかりません。 VCはこの辺をどのファイル(設定ファイル)等で管理してるのでしょうか? 私個人で修正できるなら、直そうと思いますが。 ちなみに、VSSを使ってソース管理をしてまして、チェックインアウトをした後に起きるようです。
*.aps、resource.h、*.rc、*.clw、*.opt、dlgxxx.cpp、dlgxxx.h 多分*.clwが原因だと思う。
155 :
153 :2005/07/08(金) 20:06:42
>>154 ご返答助かります。
clwファイルでした。
clwを消去して、再度生成したら直りました。
ありがとうございました。
VC++を使い始めたばかりで右往左往している現状なのですが以下の点で悩んでいます。 コンパイルして実行し、「名前をつけて保存」を選択しても以下のイベントが呼び出されず メッセージボックスが表示されないのですが、なぜ呼び出されないのでしょう?。 void CnvView::OnFileSaveAs() { // TODO : ここにコマンド ハンドラ コードを追加します。 MessageBox("aaa",0,MB_OK); }
>>156 俺んとこでは呼び出されるぞ。
メッセージマップに登録してないとかそんなオチじゃないだろうな?
>>156 ClassWizzardが生成したコード(メッセージマップ関連)をいじくっただろ。
MessageBoxを追加しただけなら絶対に動く
>>158 ClassWizzardってなんですか?
161 :
156 :2005/07/09(土) 23:17:32
メッセージマップはClassWizzardが自動で生成してくれるのですよね?、でしたら弄っておりません。 プロパティのイベントにも載っておりますし、あちこちのCPPでも試してみましたが反応なし・・・。 CListViewで詳細表示も出来ない・・・。 SetExtendedStyle(LVS_REPORT)で詳細表示にならない。 私って馬鹿、馬鹿、馬鹿(ーー;)。
ところで、CnvViewはなんのクラスだ
CViewかその派生クラスから派生してないとかだったりして
MFCのダイアログベースでプログラムを作成しています。 子ウィンドウにBMPを表示させたいのですがどうやればいいのか分かりません。 親ウィンドウに表示させる方法は、書籍を参考にしてどうにかできるのですが。 どなたか教えていただけないでしょうか。
ツリービューにMyDocumentの内容を取得するにはどうやればいいのでしょうか? どなたかご教授ください。 お願いします。
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 でメンバ変数に配列型変数を追加するとき、どういう手順で やればいいのでしょうか? よろしくお願いします。
コントロール配列 ddx でぐぐったらそれらしきものは見つかるな
170 :
156 :2005/07/10(日) 12:44:58
[View.h] public: afx_msg void OnFileSave(); [View.cpp] void CView::OnFileSave() { // TODO : ここにコマンド ハンドラ コードを追加します。 MessageBox("test",0,MB_OK); } 通常はこれで上書き保存時に読び出されますよね?
>>170 俺はわざわざ新規プロジェクト作って確認したらそれで呼ばれたけど、
お前は新規プロジェクト作って確認したのか?
>>169 フォルダの内容をツリー表示したいのです。
ちょうどエクスプローラみたいに。
で、そこで選択したファイルの内容を別のビューにおくりたいわけです。
173 :
156 :2005/07/10(日) 13:58:55
>>171 もちろん、下手に弄ってる可能性も考えて新規プロジェクト作って確認しました。が・・・反応なし。
かなり間抜けな事をしているんだと思うのですが、それが何だかわからない-;。
174 :
156 :2005/07/10(日) 14:08:44
あれ、、前に作ったプロジェクトのものが急に動くようになってる。 これはこれで、また原因が何だったかわからない-;。 変更が上手く更新されてなかったのだろうか・・・。 お騒がせしましたm(_)m 次は、CListViewで起動直後から詳細で表示したいので頑張ります!。
>>172 フォルダの内容を取得してツリービューアイテムに追加。
CLeftView(CTreeView)で発生したイベントOnTvnSelchangedを異なるクラスの CListViewに持ってゆく事は出来るのでしょうか?。 CTreeViewで選択された項目に従ってCListViewの内容を変更したいと考えて おります。 それとも、theApp.ListType = "aaa";という受け渡しをするのが本当なのでしょうか?。 void CLeftView::OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult) { }
ビューを更新
>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); 以上
>>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()が呼ばれないところをみると、そうとしか思えないのですが-;。
そりゃ無理だ。
送り先はどれか1つじゃないか? ウイザードが作ったメンバ関数の中で 基底クラスの同じ関数呼んでたりするじゃん
183 :
180 :2005/07/11(月) 18:29:36
空プロジェクトを作り、CxxxViewのCPPで
プロパティ->イベント->ID_FILE_SAVE->COMMAND->OnFileSave()を追加
すれば最初はCxxxView::OnFileSave(){}が呼ばれると思っていたのですが
呼ばれないのであちこちでOnFileSave(){}を作ってみた所、
CxxxDoc::OnFileSave(){}だけが呼ばれている事がわかったのです。
もう、頭の中がぐちゃぐちゃに(~o~)。
>>182 >送り先はどれか1つじゃないか?。
送り先の指定は何処を見たら判るのでしょうか?。
それともOnFileSave()は1つしか作るべきではないという事でしょうか。
>>183 きのうも言ったはず
CxxxView::OnFileSave()はちゃんと呼ばれる
すでに何度も複数の人間が確認済み
>>183 Splitter使ってるとすれば、そのViewにフォーカスがあたってない可能性が。
あと、念のため聞いとくけど
BEGIN_MESSAGE_MAP〜END_MESSAGE_MAPの中に
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)は書かれてる?
>>送り先はどれか1つじゃないか?。
>送り先の指定は何処を見たら判るのでしょうか?。
送り先は一つじゃないよ。(語弊があるが)
MFCのメッセージディスパッチについては、ソース読めば分かるが
とりあえず「CCmdTarget」でgoogleれ
186 :
180 :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みたいにコマンドラインからコンパイルとかはできないのでしょうか?
他スレで見かけた宣言に long long ていう型があったけど、 VCでこれを使うにはどうすればいいの? (宣言型名が変わってもOK)
__int64
>>190 VC7か7.1からlong longはそのまま使える。
表示の部分を下記に変更して、
printf("%lld ") -> printf("%I64d ")
>>191 これで上手くいった感じです。
どうもありがとう。
VC6ではm_carray.GetCount()の返り値がintだったと思うのですが、 VC7では返り値がINT_PTRとなっており調べてみるとポインタの ようなのですが、ここから配列の数を収得するにはどうしたら良い のでしょうか?
>>195 ありがとうございます。
エラーがズラズラ出て気持ち悪いので(int) m_carray.GetCount()としてみました。
はじめたばかりで正しいのか良く判りませんが^^;。
おはようございます。 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();
取り敢えず別々にWriteString()してみたら?
CStdioFile::WriteString の解説みればすぐ解決
200 :
197 :2005/07/12(火) 10:07:40
VCは古い本しかないので細かい事が載ってなかったです^^;。 「オンラインMSDN引用」 文字列の終わりを示す NULL 文字 ('\0') は、ファイルには書き込みません。 この関数は NULL 文字で終わる文字列ではなく、バイト数を指定してファイルに書き込みます。 たぶん、この上記2件のどちらかだと思うのですが、WriteString(buf)でbufのサイズを自動計算 して書き込んでいるのだろうと思うのでバイト数は関係ないですよね。 だから、\0が含まれているという事なのでしょうか?。つまり、+"\n"を付加する事により\0が 含まれてしまうのかな・・・。 198さんのアドバイスの別々に挑戦してみます^^。
201 :
197 :2005/07/12(火) 10:11:09
WriteString()を別々にする事により上手く書き込めましたm(_)m。 でも、"\n"と\0の関係が良く判りません・・・・。
202 :
デフォルトの名無しさん :2005/07/12(火) 10:28:13
はじめまして。質問してもよろしいでしょうか。 ラベルに、中国語の文字を入力したら一部の文字が「・」と 化けてしまいました。 これを正しく表示させるには、どうしたらいいのでしょうか? 中国語に対応させる必要があって、頭を悩ませています。 お分かりの方、ご教授いただけましたら幸いです。
204 :
198 :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'にしてみて再挑戦。
205 :
202 :2005/07/12(火) 14:14:51
>>203 UNICODEで入力する前に、コードエディタにコピーすると
文字が化けてしまうんです。
これは、開発環境を変えなきゃダメって事ですかね?
MFCのソースにいろんな言語のリソーススクリプトがあるから コンパイラは多言語に対応してるはず
207 :
197 :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'
208 :
198 :2005/07/12(火) 16:00:00
>>207 少しは人が書いたことを理解してみよう。
GetAt()は何を返しているかが問題。CString(もしくはその類似型)を返しているのでなければ'\n'も"\n"も足せない。
なので、強制的にCStringに変換させるため、>204の最下行。
209 :
デフォルトの名無しさん :2005/07/12(火) 16:15:49
すみませんが質問させてください。 プログラムのウィンドウ外の任意の座標の色を得るにはどうしたらいいんでしょうか。
211 :
197 :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です。
ありがとうございました。
209 int x, y;//スクリーン座標 ・・・ HDC hdc = GetDC( NULL ); COLORREF color = GetPixel(hdc, x, y );
>>196 INT_PTRは紛らわしいが結局はintのtypedef。
214 :
202 :2005/07/13(水) 10:02:27
>>210 ごめんなさい。VisualStudio6.0、Win2K+SP4です。
ご返答いただき感謝します。
引き続きご教授いただけますでしょうか。
質問です。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
↑を使うのもありかと思われ
どういうわけなのか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);
>>217 これだと上手く消えなかったです。
私が使い方を間違えているのかな・・・。
POSITION p = ctrl.GetFirstSelectedItemPosition();
int n;
while(p != NULL){
n = ctrl.GetNextSelectedItem(p);
ctrl.DeleteItem(n);
}
>>219 POSITION p = ctrl.GetFirstSelectedItemPosition();
int n;
while(p){
n = ctrl.GetNextSelectedItem(p);
ctrl.DeleteItem(n);
p = ctrl.GetFirstSelectedItemPosition();
}
>>220 こんな事をしていたのですが219さんのやり方を使わせて頂きますm(_)m。
int c = (int) ctrl.GetItemCount();
while(c != -1){
if (ctrl.GetItemState(c,LVIS_SELECTED) == LVIS_SELECTED){
ctrl.DeleteItem(c);
}
c--;
}
>>214 MFC & ソースへUNICODE直書きでよければ・・・
(GetDlgItem(IDC_LABEL))->SetWindowText(_T("\u662F\u665A\u996D\u7684\u65F6\u95F4"));
223 :
デフォルトの名無しさん :2005/07/14(木) 01:13:55
Visual C++で別ファイルのインクルードをしたいのですが、 インクルードファイルを開けませんとなってしまいます。 パスの設定などはどこですればいいのでしょうか?
ソースと同じとこに置いとけば通るだろ
>>223 ・プロジェクトの設定でパスを指定する。
・ツール→オプションでパスを指定する。
・#Includeでフルパスor相対パスで指定する。
・ファイルの置き場所を変える
好きな方法で対応してくれ。
ユーザー関数の返り値にCStringArrayを用いたいと考えているのですが、 以下の方法ではエラーになってしまいます。返り値にCStringArrayを用いる 事は出来ないのでしょうか?。 CStringArray CxxxView::UserKansuu(){ CStringArray dat; return dat; }
>>226 悪いことは言わん。
std::vector<CString>を使っとけ。
話はそれからだ。
>>226 たとえstd::vector<CString>を使うとしてもローカルな実体を戻すのはどうかと。
それはわかる。 だがわざわざ重くする必要はあるまい。 参照渡しで不都合が生じるのか?
>>226 引数でCStringArrayの参照かポインタ受け取って返り値は成否とかもできる
そんなに使いたいのなら
234 :
226 :2005/07/14(木) 15:49:00
みなさん、色々考えていらっしゃいますね。(*..)φ)) メモメモ 文字列の分割をユーザー関数に処理させて返り値を配列で受けとろうと思い、 その時に返り値が配列だとありがたいなと思ったのですが、こういう場合は みなさん、どうされているのでしょう?。
235 :
227 :2005/07/14(木) 16:11:29
>>234 だからstd::vector<CString>。
それを参照で渡すか戻り値で戻すかは兎も角。
>>234 参照かポインタでユーザ関数に渡してるときの方が多いな
戻り値はエラーとかのフラグ用にとってる場合が多い
>>226 そのViewクラスにCStringArrayのメンバ変数を作って
メンバ関数で書いてやればいいんじゃね
でもVCとあんまり関係ない話だな
ノ 236に一票
240 :
239 :2005/07/14(木) 17:37:25
場合によっては238も有り
241 :
226 :2005/07/14(木) 18:13:35
今は238で行っているんですが、std::vector <CString>;の使い方が解らない。 Hファイル書いても、CPPファイルに書いてもstdメンバーでないとか怒られます(^^;。 何処かに詳しいサイトありませんでしょうか?。
243 :
デフォルトの名無しさん :2005/07/14(木) 20:19:49
extern char*Err_Message[]; char*Err_Message[] = { "", "ERR1:", "ERR2:", "ERR3:", 〜(省略) 〜 "ERRXXXX:" }; という配列を作ったのですが、 この配列(Err_Message)のサイズを取得するにはどうすれば良いのでしょう?
質問に割り込んで申し訳ありませんが、お聞きしたいことがあります。 report2.obj : error LNK2001: 外部シンボル "__imp__pthread_create" は未解決です Debug/Robot.exe : fatal error LNK1120: 外部参照 1 が未解決です。 と言うエラーが出ており、ライブラリが不足しているのかリンクに抜けがあるということまではわかるのですが、後を王したら良いのかがわかりません。 設定→C/C++→コード生成でマルチスレッドに変更したのですがそれでもエラーが消えません。 初心者丸出しで申し訳ありませんがよろしくお願いします。 因みに言語はCです。
245 :
226 :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が必要なのですね^^;;。ありがとうございます。
>>245 なんでループ中でGetFirstSelectedItemPosition呼んでんだよ
247 :
226 :2005/07/14(木) 21:50:09
>>246 あっ、本当だ。教えて貰ったのを削除用に使わせて頂いていたのですが他の所でも
使おうと思い、深く考えずにコピーして使っていました。ヾ(_ _。)ハンセイ…。
指摘、ありがとうございます。
>>244 pthreadのライブラリをリンクしていないのが原因。
249 :
243 :2005/07/14(木) 22:44:23
書き忘れましたが、開発環境はVC++6.0です。
ウィンドウプログラムを勉強中の初心者です
環境は 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の定義とは?
と、色々調べてみましたが分かりませんでした
教えて頂けると助かります、宜しくお願いします
>>243 sizeof Err_Message
要素数が欲しいのならsizeof Err_Message / sizeof Err_Message[0]
たぶんヘッダの宣言に要素数がないと駄目だと思うけど。(あっても無理だったかもしれないけど)
>>250 つまりcommctrl.hやwindows.hのインクルードより前に#define _WIN32_IE 0x500と書けばいい。
あるいはBTNS_BUTTONをTBSTYLE_BUTTONに置き換えればいい。
253 :
244 :2005/07/14(木) 22:57:52
>248さん ありがとうございます 具体的になんという名前のlibファイルをリンクしたらよろしいでしょうか。
最近は一から全て教えないと何もできない奴が多いな
255 :
244 :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 の実行エラ ビルドしたらこんなエラーが出たんですけど、なんなんですか?会社でかいたソースをフロッピにいれて 家で立ち上げたんですけど、こんなエラーがでてしまいました。どうすれば実行できますか?
258 :
デフォルトの名無しさん :2005/07/14(木) 23:49:50
VC6.0でdouble型×2コで256*256の配列を取ろうと思ったんですが実行中に落ちてしまいます メモリを確保できる最大とかは決まっているのでしょうか?
>>258 大丈夫、そのくらいならnewで問題なく取ってこれる。
#どうしてもローカル変数にしたいなら設定でスタックサイズを調整したまえ。
260 :
初心者 :2005/07/15(金) 00:20:00
261 :
初心者 :2005/07/15(金) 00:25:01
>>257 さん
リビルドしてもだめでした・・・・また同じエラーがでます。
>>261 いっそ、Debugフォルダごと一度消してしまえ。
#つーか、持って帰るのに邪魔だろうに……
using namespace std; は問題なくとおるのに using namespace System; だと名前空間が存在しないというエラーが出ます。 Systemだけ特別な場所に記述しなきゃいけないってことはないですよね・・・? ご指導お願いします。
managedもこのスレでやるの?
265 :
デフォルトの名無しさん :2005/07/15(金) 12:25:38
VB.NET2003で コンポーネントで参照設定したクラスや名前空間のヘルプが 検索してもみつかりません。このような場合はどうしたらいいのでしょうか? 教えてくださいませ。
エディットボックスで入力してエンターを押して 次のエディットボックスへ移ることってできますか? 例ですけど _____________ ______________ 名前:|____________|E-mail(省略可):|____________| 名前を入力したらE-mail(省略可)のエディットボックスへ 移動できるのでしょうか?
できる
Enterの押下を検出して、フォーカスをセットする。
270 :
真のデフォルトの名無しさん :2005/07/15(金) 15:15:25
おい!269! 265の俺のも答えろよ!
271 :
269 :2005/07/15(金) 15:18:14
>>270 さん、すみませんいま作業してまして、
なかなかネットできなくて!ありがとうございます。
274 :
真のデフォルトの名無しさん :2005/07/15(金) 16:16:22
271 しっとけよこのバカ!
コメントなんか勘違いしてた。。。で、 Enterの押下を検出して、フォーカスをセットする ってどうやるのか分からないっす・・・
あと聞きたいんですけど、エンター押して、OKボタンと同じ役目を果たしたいんですけど できますか?
どっちなのかと?
Enterの押下を検出して、OK押したときと同じ処理をする。
VCで指定フォルダ以下を丸ごと他のフォルダにコピーする関数などあるのでしょうか?。
VCに関数など無い
283 :
281 :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には「関数」という言葉はないという意味も含まれてたりするのでしょうか。
揚げ足ではなく少し気になったもので・・・。
VCは言語やライブラリの類ではない。 ただの開発ツール名。
関数を持つのはVCではなくそこから使う各インターフェース群だ SHFileOperationなぞどうかね?
>>283 ヘルプでCFileFind::FindNextFileの戻り値を良く見てみるといいよ
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がフリーズしたようになるんですが、 コレを回避させるにはその処理をスレッド化するんでしょうか? それとも他の方法があるんですか? 定番を教えてください。
ループ中にsleepをかます
おれは普通にスレッド作ってるな。
3Dアプリでsleep使ってるけどsleep(0)とsleep(1)とどっちがいいんだろう。 あんまし変わんない気がするんだけど
292 :
デフォルトの名無しさん :2005/07/15(金) 22:29:35
>>289-291 Sleep(1)を試してみて、駄目ならスレッド化させます。どーもでした。
static const * char const hoge= ""; の意味がわかりません。教えて下さい。
つーか自ウインドウが固まるの防止したかったら単にSleepじゃだめだべ。
GUIスレッドを使うか自前でメッセージポンプを回さないと固まるよ
自ウインドウ固まるの防止したければ、 ループ中にかますのはGetMessage/DispatchMessageだな。
>>293 そのコード通るコンパイラあるの?
static const char* const hoge="";
これならわかるけど。
>>288 処理を分割する。
少し処理し、最後にWM_APP+aをPostするのを繰り返す。
299 :
281 :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;
302 :
301続き :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: グローバルスコープで中カッコ ({) が見つかりましたが、対応する関 数ヘッダーがありません。」というエラーが出たんですが対処法が分かりません。どうか教えてください。
>>302 double f1(double t, double x,double y); ←";"いらない
{
:
}
double f2(double t, double x,double y); ←";"いらない
{
:
}
モードレスダイナログのラジオボタンのチェックの有無を収得するにはどうしたら良いのでしょうか?。 Dlg.GetDlgItem(IDC_R1);とするとコンパイルは通るものの実行して確かめると例外だよ!と 怒られてしまいます。 CDlgSelect Dlg; int rd = (int) Dlg.DoModal(); CButton *R; R = (CButton *) Dlg.GetDlgItem(IDC_R1); if (R->GetCheck()){ MessageBox("aa"); }
305 :
304 :2005/07/16(土) 12:49:34
自己レス GetCheckedRadioButton()が使えそうなのでこちらを使ってみようと想います^^。
306 :
304 :2005/07/16(土) 13:27:08
モードレスダイアログのラジオボタンのキャプションの文字列を書き換えたいのですが、 どうすれば良いでしょうか?。これでは書き換える事は出来ないようです。 CDlgSelect Dlg; Dlg.SetDlgItemText(IDC_R1,"aaa");
なんでモードレスダイアログなのにDoModalしてるわけ?
GetDlgItem(IDC_R1)->SetWindowText(_T"お前は馬鹿か?");
309 :
304 :2005/07/16(土) 15:06:59
>>307 検索してサイトを見て回ると、そうしている所が多いいから・・・・。
変数を追加してチェックが入る時に変数に代入するしかないのかな。
>>309 ・モードレスダイアログとはなんであるのか
・DoModalとはなんであるのか
おまいはまずこれらを調べ理解してこい
>>309 先に
>>310 の答えを言っちゃうと、DoModalはモーダルダイアログを作る。モードレスダイアログはCreateだ。
答えになってねぇw
313 :
304 :2005/07/16(土) 17:41:56
そうだったのか・・・開いたまま使うのと、そうでないものなんですね。 それで私が使いたいのは「モーダルダイアログ」でラジオボタンの選択をさせてチェックの 有無を確かめたいのです^^;。 そして今から「DoModal」を調べてきます。
>>313 モーダルにするんならダイアログを起動したスレッドからは変更は不可能。
監視用の別スレッド作って変更するか、ダイアログのプロシージャ内で変更しろ。
CListView().SetItemText(0,2,hIcon);という感じでnSubItemの2のテキストの左にアイコンを 表示したいのですが、どうやったら出来るのでしょうか?。
アイコンが表示できない、なぜ-;。 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);
コンソールアプリケーションでprintf等の出力をIDE内に 出すことは可能でしょうか。
デバッグビルドの設定を変更してMFCとリンク。 そんでもってTRACEマクロを使用すればできるかな。
>>318 それって質問に対する回答にはなってないな。オナニーご苦労。
わざわざIDEへ出力する必要性がいまいちわからん。 コンソールアプリならコンソールかファイルへ出力できれば十分だろ
>>321 このスレでは質問するのにいちいち必要性を説明しなければならないのですか?
必要なくても技術的に可能かどうか疑問を持ってはいけませんか?
無料で教えられることには限りがあるからな よっぽどひまで物好きな人がいるといいね
それはお前に教える能力があるという前提での話だな。 前提を満たしてないのに話を先に進めちゃダメよ。 プログラムもそうでしょ。
とりあえずMFCでやってるからMFCのソース読めばわかる。 afxDumpとか 暇なら調べてみ
前にもどこかのスレで同じようなような質問があって 誰か答えてたような気もするが、勘違いかもしれない。 過去ログ調べてみるのも手だな
一応調べてみたらIDEへ出力するのはAPIでやってた。 質問者が気に入らんから回答はここまで 誰か親切なやつがいるといいね
InsertItemの引数が間違っているからIDEへ出力出来ない。
>>317 printf()の出力はそのままでは出せないので
vsprintf()とOutputDebugString()で我慢しろ
331 :
288 :2005/07/19(火) 15:05:20
>>288 です。
みなさん回答ありがとうございました。
メッセージポンプをループ中に入れることにします。
332 :
デフォルトの名無しさん :2005/07/19(火) 15:31:06
C言語のスレで誘導されました。 vc++でcのプログラムを作成しているのですが、 最大表示件数を5件、↑↓キーでのページ切り替えを行うにはどうしたらよいのでしょうか? よろしくお願いします。
とりあえず日本語の勉強から
334 :
デフォルトの名無しさん :2005/07/19(火) 15:38:32
う、申し訳ないです。あわてて書き込んだらわけわかりませんね。 vc++6.0にてc言語のプログラムを作成しています。 ファイルの読み込み>一覧表示の際に 仮に50件のデータがあるとして、5件までを1ページの最大の表示件数に設定し、 ↑↓キーによってページを切り替えられるようにしたいわけです。 この場合だと10ページの切り替えにしたいと言えばいいのでしょうか。 こ、これで伝えられてるでしょうか・・・。
コンソールアプリでって事?
336 :
デフォルトの名無しさん :2005/07/19(火) 15:49:35
はい、そうです。
337 :
デフォルトの名無しさん :2005/07/19(火) 18:38:50
>>334 conio.hのgetch()を使えば、↑↓を押したときもすぐ返してくれます。
とりあえず、getch()の戻り値をモニターするプログラムを作って、
↑↓を押したときにどんな値が返るか調べましょう(そのくらい作れるよね。できないならあきらめな)。
>>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になってしまします 色々調べてみたのですが原因がわかりません よろしければご教授ください
読み込み不一致だな。 fgets()で文字列にしてからatoi()なり何なりを使って変換汁。
Cの質問をVCスレに誘導されても迷惑だな なんとかならんのか
>>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から∞の特別なプログラムってある?? 誰か教えてください!!
ありがとうございます.
>>344 余りいい方法じゃないね。
>340がずっと使える一般的な手法かと。
>343でもいいけど毎回そのフォーマットを編集するのも気が萎えるだろうしね。
VC++でエクセルを読み込んで処理を行いたいと思っているのですが、 ハイパーリンクを取り込むことができません。 どなたかお知恵を貸してください。
エクセルを読み込むのか…… 大変そうだ。 #ブックファイルを読むならいざ知らず。
351 :
デフォルトの名無しさん :2005/07/20(水) 01:39:14
おい!おまいら!あほのマイクロソフトの3万近くの有償サポートについてどう思う!? 完全に自社製品のサポートに対する怠慢だとおもうのだが! 自社製品の不備が多すぎるので答えるのが面倒で防御策をしていると 思われるがどう思う?
>>351 そういう香具師は、Eclipse+GCCでも使うよろし
353 :
デフォルトの名無しさん :2005/07/20(水) 12:00:38
なんで?<352
VC6.0でリストビューを使ってレポート形式のリストを作ったんですけど、 リスト上部のカラムをドラックしてサイズを変えると、行がずれた時に 再描画されてないらしくて灰色の線が残っちゃったりします。 スクロールの機能自体は残したいのですが、カラムをクリックした時とか カラムのサイズが変わったのを検知して、再描画を促す手段とかご存知ないでしょうか?
>>354 わざわざそんなことやんなくてもいいはず
描画してる場所がまずいんじゃないの?
>>355 タブコントロールの上にリストビューを2個重ねておいていて、タグが選択されたら
対応するリストビューをm_listctrl.ShowWindow(SW_SHOW);で描画するってことを
やってるんですけど、原因はそれですかね?
メモリーリーク検出方法ってどうやるんでしょうか?よろしくお願いします。
358 :
355 :2005/07/20(水) 13:14:14
試しにリストビューをタグの上じゃなくて、離れたところにずらしてカラムを 左右に振ってみたら、前述の描画異常は起きませんでした。 どうも、タグの上への重ね方が悪かったみたいです。
デバックビルド?デバッガのことですか?
デバッグで動かせば実行終了した時リークした場所が出てくゆ
>>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などで宣言すればよいのですか?? よろしくお願いします。
#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ってメモリーリークなんですかね?
↑メモリーリーク検出なんですかね?
チェックの方法がわかりました!みなさんありがとうございます。
367 :
354 :2005/07/20(水) 18:01:05
ダイアログの[書式]-[タブオーダー]でリスト2個の優先順位をタブコントロールより上にしたら解決しました。 リストの描写が潰れていたのはそこら辺が原因みたいでした。 どうもお騒がせしました。
369 :
初心者 :2005/07/21(木) 13:52:55
ダイアログでデータを入力してグラフ表示させる場合は最初に選択する画面で SDI、MDI、ダイアログってありますがどれを選択すればよいでしょうか? 簡単に言うと 1.2つのファイル(.txt)を入力(オープン)。 2.閾値などを入力し2つのファイルのデータを処理。 3.処理されたデータをグラフ表示。 C言語ではファイルのオープンから閾値などを入力し 出力ファイルを作るところまではできたのですが C++ではなかなかうまくいきません。 お教えいただけますか??
>>369 >ダイアログでデータを入力して
単一ダイアログモデルでいいなら、ダイアログを選択すればいいじゃん。
グラフを別ウィンドウにするとしても、別ダイアログで事は足りるだろうし。
SDI/MDIはファイル依存型、ダイアログは操作依存型と思えばいい。
どれでもできる
違いがわからんのだったら どれを選択なんていわずに全部作ってみる。
>>369 初心者ならまずダイアログから入ったほうがよさげ。
>>373 Document/Viewアーキテクチャーを理解できなくなる罠
いまだ理解できていない俺ガイル。
理解する必要なし
377 :
369 :2005/07/21(木) 18:25:39
>>373 そう思って書きましたが。
つーか、漏れも余程のことがないとダイアログだなぁ。
俺ダイアログ以外で作ったことないぜ
メニューとかつけるのめんどいし
今、ダイアログ上のスクロールバーのデータ(数値)をSDIのデータクラスへ 受け渡しするプログラムを作っています。 DDXを使うのは分かるのですが、スクロールバーを移動した際のデータの 反映がうまくいきません。 UpdataDataを使ってデータの更新をしようと試みていますが、 起動してスクロールバーを移動させるとエラーが出て止まります。 何かいい方法は無いでしょうか?
381 :
288 :2005/07/22(金) 11:02:49
秀丸やOpenJaneの設定のようなコントロールは 全く同じ実装にみえますが、 どんなコントロールを使ってるのでしょうか?
OpenJaneはソース公開されてます
383 :
288 :2005/07/22(金) 12:20:23
そっすか
384 :
288 :2005/07/22(金) 16:12:32
そっすよ
385 :
デフォルトの名無しさん :2005/07/22(金) 16:30:47
ど素人です C#.NETで作ったDLLを、アンマネージコードから呼ぶにはどうしたらよいのでしょうか?
COM
1 番目の引数を 'void (void *)' から 'void (__cdecl *)(void *)' に変換できません。 とは具体的にどのようにすればいいのでしょうか? ちなみに関数は、virtual void CApp001::Func(void* p)です。
static void CApp001::Func(void* p) とか void Func(void* p)
390 :
デフォルトの名無しさん :2005/07/22(金) 22:25:19
>>387 たびたびすみません。度素人です。
.NETのDLLをCOM化するにはどうしたらよいのでしょうか。
COM化とはActiveXにするということですか?
新規作成ウィザードにCOMってあるだろ
VC++ .NET2003 MFCベースで開発していますが、 最初はそんな事はなかったのですが、 ブレークポイントを置いてデバッグ実行する際、 ブレークポイントが、下に数行勝手にずれてしまいます・・・orz (ブレークポイントで止まります・・・が、自分が見たい変数の内容や条件文は すでに実行された後で、デバッグが非常にやりずらい状況です) 解決する方法はありますでしょうか? 新規に別プロジェクトで作成するアプリケーションでは発生しません。 開発環境の問題と言うより、おかしくなるプロジェクトの問題なのでしょうか?
Releaseビルドで最適化がかかっちゃってるとか。
ブレークポイントを設定できないとこに設定しようとしてるだけじゃねぇの?
>>392 [ビルド(B)] - [(プロジェクト)の消去(N)]
>>388 そのCApp001::Funcを関数へのポインタの変数に代入しようとしているかほかの関数の引数に渡そうとしているだろ。
397 :
デフォルトの名無しさん :2005/07/23(土) 13:45:11
ピクチャーボックスにグラフの目盛りを線描画(SelectClipRgnでクリップする)、 数値を文字描画するプログラムを作ったのですが(クリップしない)、 文字を消去する時、ピクチャーボックス外にはみ出た文字が消去されません。 これ以外の処理は何をすればよいでしょうか? CWnd* h = GetDlgItem(IDC_PICTURE); h->Invalidate(); //再描画すべき領域を設定 開発環境はVC++6.0です。
>>397 描き直したい領域全てをInvalidate()しろ。
ぶっちゃけ、ダイアログ全体で試してみればよかろう。
#つーか、はみ出したところが判っているならそこだけInvalidate()すればいいのだが。
399 :
397 :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
そもそもはみ出すような設計が悪い
vc++とc++の違いってなんですか?
統合開発環境かただの言語だけかの違い
ワープロと日本語の違いってなんですか? って言ってるのと同じだな。
ちょっと違うな、日本語ワープロと日本語の違い、かな
v(開発環境)c++(言語) って感じか。
Visual C++はWindows用のC++
>>406 C++にWindows用も何もないだろ。
Microsoftが開発・販売している、プログラミング言語にC++を採用した、Windowsアプリ統合開発環境ソフトの商品名がVisualC++。
オープンソースのものを見て、C++を覚えようと思っているんですが、 .cppと.hで書き分けるのにはどういう意味があるんでしょうか? 回答お願いします。
とりあえず人に偉そうに説明できるほど理解してないから説明できんけど C/C++スレの過去スレで同じ質問があったな
410 :
408 :2005/07/23(土) 22:28:17
>>409 レスありがとうございます。
けれどdat落ちしていて見れませんでした・・・。
C++勉強してるならC++スレへ ここはウインドウズ用のアプリを開発する人のスレ
412 :
392 :2005/07/24(日) 00:48:24
アドバイスありがとうございます。
>>393 確認してみましたが、デバッグ実行です。コードの最適化も「なし」になっています。
>>394 それはありません。自分で作成したクラスのコンストラクタや、メンバ関数内です。
>>395 はい。既に何度も行っています。オブジェクトファイルや .ncb ファイルの削除も効果がありませんでした。
他に確認すべき所はありますでしょうか?
414 :
392 :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
質問なんですが 関数呼出しごとに引数で渡されたポインタのメモリ確保領域をインクリメントする ということは可能でしょうか?
>>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はサポートしてませんか?
>>418 少なくとも2003は開けるはずだぞ。
C++ソースコードエディター(エンコード付)
を使えば開ける。
>>414 IDEはOFFLINEが定義されてないと思ってるけどコンパイラはOFFLINEが定義されていると思ってる。
OFFLINEの定義を確認してリビルドしてみる。
422 :
392 :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が定義されてないと思ってる・・・とありますが、
これは、どのように確認するのでしょうか?
>>422 キミが返答してる先に、「OFFLINEの定義を確認してリビルドしてみる」と書いてあるのにキミは何をやってるのかね?
424 :
392 :2005/07/24(日) 14:15:30
>>423 すみません。何か間違っていますでしょうか?
「OFFLINEの定義を確認してリビルドしてみる」をやってみた結果、
422 のようになりました。
OFFLINEは、 stdafx.h で #define OFFLINE として、定義されている事を
確認した上でリビルドしてみましたが、状況に変化はありませんでした。
stdafx.h 内の定義とは別に、プロジェクトのプロジェクトの
プリプロセッサ定義を変更してみましたが、ブレークポイント停止位置が
ずれる現象に変化はありませんでした。
また、OFFLINE の定義を無効にしてリビルドしても、同様に状況は変わりません。
>>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 ; };
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
>>428 君も初心者を超越したのなら聞き分けたまえ。
まだか、早くしろ!!
431 :
デフォルトの名無しさん :2005/07/25(月) 14:49:34
VC.NET 2003 にて 右クリック→宣言へ移動 に相当するショートカットってありますか? VB6はShift + F2で行けたので、重宝してたのですが・・・
>>431 設定でいろいろ変えられるが、デフォルトはCtrl+F12 かな。
ツール-オプション-環境-キーボードで検索できる
そのまま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 を再生したいんですが、コンパイラに型が一致しないと蹴られます。 詳しい方おせえてくらさい。
435 :
431 :2005/07/25(月) 15:06:09
>>434 そりゃそうだ。
strFileはTCHAR[MAX_PATH]型、配列だからTCHAR *やconst TCHAR *には変換できる。
しかしvbmp3_openの引数はconst char *、どれとも一致していないじゃないか。
ATL::CT2AやCStringを使って変換すればよし。
437 :
434 :2005/07/25(月) 15:19:30
どうも。 VC++ 2005 Express Edition を使っとりまして、 ATL 系は使えないという…。 CString についても知識がありません。 Win32 API で変換できません?
サンプルにVCのプロジェクトが入ってるじゃん そのままビルドすれば動くだろ 動いたやつを真似するだけだ
>>437 WTLにCStringあったと思うけど
Unicodeでコンパイルしてる?
vbmp3_open((LPCTSTR)strFile, &audioData); これでコンパイル通らんか?
441 :
434 :2005/07/25(月) 15:48:32
うーん、分からん(笑) WTL とは何でしょーか...?(^^;; CString でいけるみたいなんで、そっち覚えます。 資料読んでますけど、今ひとつ…。 どなたか簡単なソースを示してもらえません?
442 :
434 :2005/07/25(月) 15:50:44
キャストしなくてもこいうコードでコンパイル通るな 型は合ってるんじゃないか? static TCHAR strFile[MAX_PATH]; const char * hoge=strFile;
>>441 vbmp3_open(CStringT<char>(strFile), &audioData);
>>440 >>443 だからUnicodeにしたら駄目なんだって。
445 :
434 :2005/07/25(月) 16:02:05
初めから怪しいと思っとりましたけど、 VC++ 2005 Express Edition では、ATL に加えて MFC もないようです。 ちょっと知識がないのであれですが、 MFC が死んでると CString も使えない?
>>445 CStringはMFCとATLの共用。どっちかがあればいい。
で、VC2005にはどっちもないと。
447 :
434 :2005/07/25(月) 16:14:33
そりゃ困ったな'`'`'`'`'`
WideCharToMultiByte使えばえーやん
スレッドセーフじゃないけど、こんな感じでやれば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; }
簡単なことをわざわざ難しくやってるとしか思えんな
451 :
381 :2005/07/25(月) 17:10:30
>>381 ですが、JaneのソースはDelphiのようなのです。
VCにて秀丸のような設定ができるコントロールはどうやって作るのでしょうか。
452 :
デフォルトの名無しさん :2005/07/25(月) 17:20:47
>>451 普通のツリーコントロール、チェックボックス、ボタンとかですね
特別なコントロールは使ってないはず
453 :
381 :2005/07/25(月) 17:26:00
454 :
434 :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 * 型と関係あるのか分かってません。
455 :
381 :2005/07/25(月) 18:55:38
>>453 これはさっぱり使えませんでした。
一般的にはツリー型ダイアログというそうですが、サンプルとか
全然無いのに、みなさん実装してますね。
456 :
381 :2005/07/25(月) 19:18:44
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 まぁまぁ、どこに書いていいか分からないだけかもしれないから
そんなに角立てないで。
(1) int num[][] を行う命令。
(2) num=new int[5][5] を行う命令。
夏ですかね?
マルチが急増してきたね。 そんなに難しくないんだから自分で考えればいいのに。
464 :
434 :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);
---
皆さん助かりました。どもです^^
そうすると今度はUNICODEの定義をなくしたときに喚く予感。
466 :
434 :2005/07/25(月) 23:21:58
>>465 「UNICODEの定義」ってのは、どういうことなんでしょ?
自分がどの文字コードでコンパイルしてるかはどうすれば分かるんでしょうか。
適当なテキストエディタでソース開いて→UNICODEで保存。
あとは普通にVC++で開いてコンパイル。これでおk?
>>466 そうじゃなくてTCHARは#define UNICODE(あるいはそれに相当するコンパイラオプション)が書いてあるかどうかで
wchar_tとcharのどっちからtypedefされるのかが切り替わるような仕組みになっている。
で、このUNICODEの定義を消したら……、ということ。
UNICODEよりもDBCSが好きさ
469 :
434 :2005/07/25(月) 23:34:25
あーなるなる。そゆことか。 今の環境では UNICODE が define されてますけども、 これは何もいじらなければ、ずっとこのままですよね? 特にいじったりする気はないんで問題なさげに見えますが…。
470 :
434 :2005/07/25(月) 23:44:15
static TCHAR strFile[MAX_PATH]; ↓ static LPTSTR strFile; として直しました。 これで良くなった?
( ゚д゚)ポカーン
インテリセンスで呼び出せるグローバル関数群の定義はどのようにするのがお勧めでしょうか? とりあえず思いつくのは 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(); ちょっとタイプ量が長くなりそ・・・。 なんかこうすればお勧めとか、 アレはこういう欠点が、コレはこういう長所がとかあればご教授ください。
try-catch 文を書いていて、エラーが出たなと思ったら、 // xstring internal header (from <string>) #if _MSC_VER > 1000 #pragma once #endif .... って続くxstringファイルが表示されました。 このあと、どんなスケルトンプログラムをつくってもエラーが多数生じ、 このファイルが表示されるようになってしまったのですが、解決法はないでしょうか。 VC++6.0sp6ですが、再インストールしかないでしょうか?
>>472 俺だったら1にする。
あるいは普通に作って、「::(最初の数文字)」と打ったり、「(最初の数文字)Ctrl+Space」と打ったりする。
インテリセンスに頼る段階でカス。
インテリセンスなんて無い方がいいなんて言わないよ絶対
あるフォルダの中にあるソース・ヘッダに書いてある変数名や関数名を 一括で置換する場合どうやってます? 編集→ファイルから検索で該当ファイルをリストアップし 一つずつ開いて置換してるんですけど、ファイルが多いと大変です。 いい方法ないでしょうか? VC++6.0です。
>>478 find あるフォルダ -name "*.[ch]*" -type f|xargs grep -l '変数名'|xargs vi
viが起動したら
:%s/変数名/新変数名/gc
思いっきりスレ違いのアホ登場
リナ厨ってどこでも沸いて出てviを押し付けてくる。
VisualStudioとCygwin連携させてますが何か。
まぁ、ある程度まともなエディタなら大抵一括置換くらいできると思うが。
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ってどこにありますか?
Windowsキー+Fでディスク内検索できるだろ
>>486 記憶から完璧に消えてました。ありがとう
VC++2005 Express Edition b2 だったら、 PlatformSDKが含まれてなかったような気がしないでもない。 -> 別途DLして自前でインスコ VS2005b2なら同時にインスコされるけど。
File Name: File Size PSDK-amd64.exe 1319 KB PSDK-ia64.exe 1418 KB PSDK-x86.exe 1294 KB すいませんどれですか?
>>491 環境に合わせろとしか言いようがないなぁ。
上:Athlonの64bit版ならこれ
中:Pen4等の64bit版ならこれ
下:従来の32bitCPUならこれ
>>492 >中:Pen4等の64bit版ならこれ
嘘はいかんよ。
嘘なんですか?いや一番下だから問題ないですよね。
>>494 スマン。何も考えずに書いた。
Ita用か
度々すいません。 手順 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の時点で間違っていたのでしょうか?
育てられねーだろ、よく考えて出産しろや
スマン誤爆
>>497 インストールしたSDKの方にパスを通すということだ。
[オプション] ダイアログ ボックスの [プロジェクトとソリューション] セクションで [Visual C++ フォルダ] を更新します。 これって「ツール」→「オプション」で出てくるプロジェクトおよびソリューションのどっかいじれってことですよね? すいません、よくわからなくて…。って俺は何時間こんなことやったんだ!!!!!!!
502 :
デフォルトの名無しさん :2005/07/28(木) 22:42:19
質問させていただきます。よろしくお願いいたします。 WIN32APPLICATIONで、 親ウインドウより、ダイアログをCreateDialogで、 ダイアログを表示していますが、ダイアログが、閉じると同時に、 親ウインドウも閉じてしまいます。 親ウインドウは、閉じない方法はありますでしょうか。
もしかして親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(この第一引数にわたしています。);
で答えになっていますか?
>505 話すと長くなるけど、 メインウィンドウとダイアログを表示することに関してはHINSTANCEハンドルはどこも同じでいいから、 HWNDハンドルに関して、 CreateWindowの戻り値入れるHWNDハンドルと DialogBoxのHWNDハンドルと CALLBACK dlgprocのHWNDハンドルと EndDialogのHWNDハンドルを それぞれ1つだけ変えて走らせてみるとおもしろいことが分かるよ(きっと理解が深まる) それと、HWNDハンドルが複数要った場合、定義する位置も考えて、 すなはち、グローバルにコードの頭でなのか関数の中(例えば、CALLBACK WndProc(?)の中)でなのか
ちゃんとした日本語を話してください><
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 いた間違えた。
511 :
デフォルトの名無しさん :2005/07/29(金) 01:06:21
マック用はないんですか? ググってもマック用のCコンパイラソフトが見つからなかったので、、、
マックはOSのインストールCDに デベロッパーツールが入ってるから買う必要はない
513 :
デフォルトの名無しさん :2005/07/29(金) 01:16:15
円周率を計算式から実行結果を表示させる時、%の次を何にすれば よりたくさんの数字が表示されますか?
514 :
どくろべい :2005/07/29(金) 02:12:38
すみませんー教えてください。 DirectXをVC++で使うのにDirectX9.0SDKを インストールしたのですが、 VC++でプロジェクト新規作成時、 DirectX9 AppWizardが表示されません。 どうやれば表示できるかおしえて〜(><)
>>514 DirectX SDK Sample Browser
>>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初心者 エラーメッセージ等は英語になってしまうのでしょうか。 = 低学歴 心配ありません 最適化とは無縁です
520 :
518 :2005/07/29(金) 10:52:47
>プログラミング経験なしか超初心者 初心者ですが、BCC+BCCDevで少し勉強しています。 次のステップに買おうと思っています。 >PC初心者 というかVC++初心者なのでどういう設定が必要なのか教えて下さい。 >低学歴 ということは英語になるという事ですね? また、初心者で無い人はどのバージョンを買うのも合わせて教えていただけると嬉しいです。
最低でも最適化のあるProfessional以上だな。 会社とかならMSDNとかボリュームライセンスで入手するだろうな。 学生なら初心者かどうかにかかわらず、the Spokeが安くてPro相当だからそれを買えばいい。
522 :
デフォルトの名無しさん :2005/07/29(金) 11:17:10
>>516 ありがとうございます!16桁以上がどうしてもでなくて・・・
でもありがとうございました!
523 :
518 :2005/07/29(金) 11:41:46
>>521 そうですか。どうもありがとうございます。
で、当方学生じゃないし、金額の面でもstandardを買おうと思うのですが、
>>518 の質問なのですがどのような設定をするのでしょうか。
「visualC++ standard 最適化 toolkit」なのでググって見たのですが
設定の仕方を解説した記事等が見当たりませんでした。
toolkitは無料なんだし、それ落として来てコンパイルするだけだろうが visual c++ toolkit でぐぐったら使い方なんかいくらでも見つかるし、 それ見てわからんのだったらあきらめろ Standard.からtoolkit使うのはそれができてから考えろ
525 :
518 :2005/07/29(金) 12:32:10
>>524 >Standard.からtoolkit使うのはそれができてから考えろ
いちいちレスするの面倒だろうし、レス消費ももったいないのでサクっと教えてくれませんか?
いちいちレスするの面倒だし、レス消費ももったいないのでサクっとPro以上を買ってください。
527 :
デフォルトの名無しさん :2005/07/29(金) 12:58:35
Q.standardでtoolkitを使うための設定の方法を教えて下さい。 ↓ A.pro以上を買って下さい。 じゃなくて、Qを教えて下さい。
>>527 A.自分で調べましょう。それができないなら>526で。
529 :
518 :2005/07/29(金) 13:08:00
答えるのが面倒。自分で調べろって おまえさぁ・・・このスレにいる意味ないだろ
530 :
518 :2005/07/29(金) 13:16:25
>>529 はニセモノです。
が、代弁してくれてありがとうw。
以降、ニセモノ出るかもしれないけど、答えられない人は無駄なレスはしてないでおとなしくしていましょうよ。
自分で調べましょうとか、〜のあとに考えろとか、お前じゃ無理だから心配するなとか、
無意味なアドバイスはいらないです。
というかtoolkitはインストールしたのか? それできないと質問自体無意味だぞ
VC++2003 standard + toolkitの話題が出てたから調べてみたら良さそうだね。 いいかげん6.0だと無理が出てきたんで乗り換えようと思ったけど 2005はstandardでも最適化できるっぽい・・・悩む
537 :
518 :2005/07/29(金) 15:50:25
538 :
初心 :2005/07/29(金) 16:34:40
: fatal error C1083: インクルード ファイルがオープンできません。'sys\socket.h': No such file or directory どうすれば実行できますか?
>>538 Windows には UNIX のソケットはありません。
WinSock について調べてみてください。
540 :
初心 :2005/07/29(金) 17:03:08
はい、調べてみます。
いつも思うけどPro以上、Pro以上って誰それかまわず薦めてる奴は アホだと思う。
542 :
デフォルトの名無しさん :2005/07/29(金) 20:07:39
>>505 です
>>506 さん
>>517 さん
いろいろアドバイスいただきまして、ありがとうございました、
ハンドルいろいろ変えて試してみました。
理解が深まってきたと思います。
画面が、すべて閉じてしまったのは、
コマンドイベントの終わりに、break;を入れてないからでした。
みなさまありがとうございました。
いつも思うけどPro以上、Pro以上って誰それかまわず薦めてる奴は 素直だと思う。
最適化が必用なら素直にpro買っとけ 初心者スレで裏技質問するなアホ
最適化が不用なら素直にtoolkit落としとけ 初心者スレで表技質問しろアホ
VC toolkitは最適化有ります
すいません現在C言語とgcc ver3.4.4でpthread_create()を使っているのですが、 win環境で実行するにはどうしたらよいのでしょうか? pthread_create()をそのまま使いたいというわけではなく、 winでも同じ機能を持った関数があればそちらを教えていただきたいと思っています。 VC++.net2003をwin環境でのプログラム用として使っています。
>>547 _beginthreadex()かな。
549 :
デフォルトの名無しさん :2005/07/29(金) 22:19:24
550 :
デフォルトの名無しさん :2005/07/29(金) 22:53:55
toolkitは裏技じゃありません。 むしろStandardユーザーのためのものです。
>>550 MSのサポート受けられなくなる時点で裏技。
HWND CreateWindow( の 第10引数 HANDLE hInstance, // handle to application instance は hInstance なのに、ヘルプで HINSTANCE になっているのは どうしてですか? GetModuleHandle(0) でパラメータを与えてるソースを見たこと があるのですが、これは問題ないでしょうか?
学生:Spoke(4000円ぐらい、商用OK) ↓ 趣味:VC++2005expressβ(無料、配布OK) ↓ 商用:pro以上(10万円以上、商用OK)
554 :
552 :2005/07/29(金) 23:49:29
×ヘルプで HINSTANCE になっているのはどうしてですか? ○ヘルプで HINSTANCE になっていないのはどうしてですか? どっちでも同じなんでしょうけど、悪いのはヘルプという認識でよい??でしょか
>>552 HANDLEなのはたぶん修正漏れだと思われる。
Win32ではHMODULEとHINSTANCEは同一の扱いだから、GetModuleHandleの戻り値をHINSTANCEとして扱うのは全然問題ない。
そしてGetModuleHandleは引数0だとWinMainの最初の引数のHINSTANCEと同じ値を返す。
(というよりWinMainを呼ぶ側がWinMain(GetModuleHandle(0), ..);としている)
>WinMain(GetModuleHandle(0), ..); おぉ・・・こんなことを実際していたのですか。 ひとつ勉強になりました。ありがとうございます。
557 :
デフォルトの名無しさん :2005/07/30(土) 03:47:22
>>553 VC++2005expressβはMFC付いてないだろ。
製品版はいつ発売だ?
製品版にもつかない
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
561 :
デフォルトの名無しさん :2005/07/30(土) 09:40:26
おはようございます。 もし、クラスを多appにわたり活用したいとき、 同じプロジェクト内だけですが、 ヘッダーファイルに、class定義を書き込むという方法になるのでしょうか。 hファイルに class Mocc{ Mocc(); open(); } このように宣言して、使うのでしょうか。
>>560 あんな過去からある過疎スレに誘導しないでこっちで仕切りなそうよ。
で、情報量が少ないので追加希望。
・VCのバージョンは?
・DDXのm_ixに関わるコードはどうなっている?
要は、自分のプロジェクト内を問題のメンバ変数名で検索してみろと。
563 :
デフォルトの名無しさん :2005/07/30(土) 11:01:01
>561です。 すみませんでした。 classの追加でできそうです。
>>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はちゃんと表示されます)
>>567 >OnEraseBkgndをオーバーライドしてPatBltでクライアント領域全体を塗りつぶし、
必要な部分だけにして→クライアント領域全体
569 :
デフォルトの名無しさん :2005/07/30(土) 16:12:44
>>566 それは試していなかったです。
今、ソース環境がないので後でやってみます。
ありがとうござます。
>>565 社内(同一ワークスペース)の別プロジェクトに有用なスキル(関数)を持った人材(ソース)がいるのなら、
自分のプロジェクトに参加させればいいじゃない。
但し、人間関係(インクルードなどの依存)に注意で。
>>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
>延々ループにはまって固まっちゃうかも というのは、ちょっと言葉足らずだったかもしれないけど、 マウスが動くだけでも再描画でしょう その時、呼び出される最初のOnDrawはフラグが1でそのままOnDraw終了しないといけない。 だから、フラグを0に戻す場所は非常にシビア 以前、これ試してみて、マウスの動きがガックンガックン固まったことがある やっぱ禁じ手だろうね。駄レスすんまそん。
>>575 standardはMFC, ATLが付いて最適化ができるぞ。
いままでのproユーザーがstandardに移る感じ。
578 :
567 :2005/07/30(土) 18:02:59
色々試してみましたところ、 どうもOnDrawの実行後にOnEraseBkgndが上書きしているわけではなさそうでした。 現在OnDrawではbitmapの全体を描画しているわけではなく、 クリッピング領域のみを描画しているのですが、 OnEraseBkgndを書かなければOnDraw実行時にbitmap領域がクリッピングにある為正しく描画されるが、 OnEraseBkgndを書くとOnDraw実行時にはbitmapがクリッピングから消えてしまっており、 描画されなくなってしまうような気がしてきました。 (全然見当違いの可能性もありますが…) 引き続き悩み続けます…。
CListViewでCImageListを割り当てたのですが、このCListViewを再利用する時に DeleteAllItemsとしてもアイコン部分だけが残ってしまいます。このアイコン部分も 削除するにはどうしたら良いのでしょうか?。
581 :
567 :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
/ ,/ ヽ ヽ
>>581 >何かOnDrawの中のbitbltが失敗するんですよ…。(戻値が0)
NT系ならGetLastError()で原因調べれ。
584 :
567 :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
>>573 CDC::GetCharABCWidths()
うまく書けなくてスマソなんですけど ひとつのファイルを無事成功し、 違うファイルを作り、実行しようとすると コンパイルの時点で「_main はすでに 定義されています」 とでて、そこから先へ進めません。 成功したファイルには「プロジェクトファイル」なるものなどが勝手に作られています。 一つを実行させた後でも、何個も作業を実行するにはどうすればいいのでしょうか?
589 :
588 :2005/07/31(日) 03:28:26
あとすいません、すれ違いなのですが ついでにコンパイルとビルドの違いを教えていただけますか? よろしくお願いします
コンパイルはC/CPP等をコンパイルすることで、 ビルドはプロジェクトをビルドすることだな。 って全然説明になってないよ!
コンパイル:オブジェクトモジュールを作る ビルド:実行ファイルを作る(リンクまで行う)
WNDCLASSEX構造体の背景ブラシ(hbrBackground)を定義する時に、黒、白、灰色以外の色のブラシを指定することはできるのでしょうか?
594 :
592 :2005/07/31(日) 14:47:05
596 :
デフォルトの名無しさん :2005/07/31(日) 16:10:04
すいません、質問なんですが VBでかいた関数をVCから呼び出すことは不可能でしょうか?
>588 状況がいまいち理解できないんだけど、 1つのプロジェクトの中にmain関数が2個あるんじゃないの? コンソールアプリならmain関数は1個じゃないとダメだよ。 あと、その質問の内容だと状況がいまいちわからないので、 長文になっても構わないから、操作手順とかをもう少し詳しく教えてください。
>>596 不可能です。VC++で書いた関数をVBから呼ことは出来ます。
600 :
588 :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 はすでに定義されています」と出てしまい、実行できないのです。
これで困っているのです。なぜ実行できないのでしょうか?
602 :
588 :2005/07/31(日) 17:19:44
ついかすいません あと「1 つ以上の複数回定義されているシンボルが見つかりました」というのもでます
さすが、夏休みだな。
いくつか確認。
>>588 の理解度を知っておきたい
1) プログラミングについて、どれくらい理解している?
・C言語は知ってる(プログラムを作ったことがある)
・VCは初めて
・何もかも初めて などなど
2) エラーが出るまでの操作手順を最初から教えて
プログラムのソースじゃなくて、VC++の操作。
メニューで新規作成を何を選んでどうのこうの、って感じで
605 :
デフォルトの名無しさん :2005/07/31(日) 17:52:08
>>599 ありがとうございます。
それはどうやればできるんでしょうか?
または、推奨の書籍はありますか?
606 :
588 :2005/07/31(日) 18:03:37
>>604 1)学校でCを習い始めて四ヶ月です
2)ですが、学校ではC++を使ってはいないのです
なので、C++を使うのは実質初めてです
607 :
デフォルトの名無しさん :2005/07/31(日) 18:20:22
>>606 C++じゃなくて、VC++を使った経験はあるかって聞いてるんだと思うぞ。
まあその様子じゃ使ったこと無いようだが。
ぶっちゃけプロジェクトとかワークスペースとかソリューションとか、
そういうのが分からないんじゃないかな?
609 :
588 :2005/07/31(日) 18:39:05
>>608 そうですね、ないですし、わからないです。
なぜか知りませんが、学校ではコマンドプロンプトをつかって
コンパイルなどをさせられるのです。
それをそのまま家のPCでやろうとするとソフトが立ち上がってしまうので…
>>609 - C言語
- Cコンパイラ、リンカ
- 統合開発環境(IDE)
の違いが解ってないっぽいね
611 :
604 :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
長文が最初から悪いと思ってるならなんで書いた後に謝るんだろうな。 でも悪くないから、全然^^
無料コンパイラ使ってれば悩まなくてすむものを 必用もないのにVC買ってしまうやつが後をたたない
買ったかどうかはわからんがな
615 :
604 :2005/07/31(日) 19:18:54
もうちょっと基礎の基礎から説明。
プログラムを作るためには、
ソースコード(C言語)をコンパイラに通して
プログラムコード(実行ファイル)に変換してもらう。
ソースコード中で定義してないprintfとかの関数の
プログラムコードを他から持ってきてくっつけるのがリンクという作業。
これをするをリンカって言うんだけど、大抵はコンパイラが兼業してる。
で、学校ではコマンドプロンプトを使ってコンパイルしてるって言うけど
普通、コンパイラはコマンドラインで動くもの。
VC++のような総合開発環境は、コンパイラの上にGUIをかぶせて、
プログラムの開発を楽にした物とでも考えればわかりいいと思う。
言ってることに間違いがあったらツッコミよろしく。
>>612 ありがd
616 :
デフォルトの名無しさん :2005/07/31(日) 19:31:25
ベターCってなんですか?
617 :
588 :2005/07/31(日) 19:37:11
>>604 さん、とても優しく教えて頂きありがとうございます。
最近、ネットでは心を傷つけられてばかりいたので、余計にありがたい気持ちです
では本題に戻ると、
新しくまた違うファイルを実行させようとするなら、
新しいプロジェクトを作ればいいのですね。
んで、早速やってみたのですよ。
ですが、「この名前では出来ません」とかでちゃいますし、
名前を入れる欄の左でいくつかあるやつの中から選びますが、
それぞれが何なのか分かりませんし、且つどれを選んだらいいかわかりません。
今度はどなたか、プロジェクトの作り方を教えていただけますか?
聞いてばっかで本当に申し訳ありません。m(__)m
618 :
デフォルトの名無しさん :2005/07/31(日) 19:39:19
本ぐらい買えよ馬鹿
あてずっぽう、行き当たりばったり
620 :
604 :2005/07/31(日) 19:49:33
最初のプログラムは何のプロジェクトで作ったの? >600のようなソースなら普通はWin32 Consoleでいいと思うけど。 あと、既にある物と同じ名前のプロジェクトは作れないので注意。 VCでの開発の仕方は、「VisualC++」 「VC」 「VC++」 「入門」 「初心者」あたりの キーワードを組み合わせてググれば、いろいろ出てくるよ。
>>588 他人の心を慮ることもせずに他人に対して刃を振り翳す者に、
全ての人が慈悲の手を差し伸べるとお思いか?
あなたが傷つけられたと言うその刃は、あなた自身が振り翳したものではないのですか?
622 :
デフォルトの名無しさん :2005/07/31(日) 20:02:08
>>617 ネットで傷つくなよw
学校でVC++使ってないなら、まずは学校と同じ環境する事をオススメする。
それでもVC++使いたかったら、本とかネットで勉強しながら並行してやった方がいいよ。
VC++ってツールの使い方を覚えるのもC言語そのものを覚えるのも両方とも難しいものだよ。
一冊、初心者向けの本かっちゃえば幸せになれるぞ。
金が惜しいなら図書館から借りるという手もある。
>>594 GetSysColorの引数のCOLOR_なんたらを使ってreinterpret_cast<HBRUSH>(COLOR_なんたら + 1)としたり、
Create何とかBrushでブラシを作ってそれをhbrBackgroundに入れたりする。
後者のブラシを作る方法の場合は後でDeleteObject()が必要。
明智光秀は敵は本能寺にありとか言って、織田信長を攻撃しましたが、 光秀の部下は反対しなかったんですか?反対したら殺されるとかいう こともあったかもしれませんが、誰かがこっそりと信長の所へ光秀の 謀反を報告に行かせるとか、そういうことすら無かったのでしょうか? そんなに信長は嫌われていたんですかね?
627 :
588 :2005/07/31(日) 20:47:53
>>620 最初に作る場合は、こっちがプロジェクトを作らなくても
勝手にに作ってしまいますからね、わかりません。
ですが、604さんがWin32 Consoleと教えてくれたので
自分で作るときはそれでやってみたいと思います。
>>621 そうですね、もちろん自分にも責任はあります。
おっしゃるとおりです。人間って、難しいですね。
特に、ネットだと殆どの人が本性丸出しになってなってしまうから…
>>622 上でも書いたのですが、
学校と同じ様にVC++を使わずやろうとしても、ソフトが勝手に立ち上がって
しまうのですよ…
確かに
>>618 の言うとおり、本を買ったりするなどしてみたいと思います。
皆さんご迷惑を掛けました。そしてありがとうございました。
これを反省して、ネットで安易に人に聞くことをやめようとおもいます。
ご迷惑はかかるし、自分もやな思いするばっかりですしね。
すいませんでした。
628 :
626 :2005/07/31(日) 20:48:25
誤爆しました。 板間違えました。 スミマセング
629 :
604 :2005/07/31(日) 21:03:12
名無しで安易に聞くためにココがあるんだけどね・・・。
もういなくなっちゃったかもしれないけど、
人に教わるよりも、自分で調べて、自力でやったほうがいろいろ身に付くよ。
特にVC++なんてのはその辺にたくさん情報が転がってるしね。
とはいえ、どうしても自分だけではわからないこともあるだろうから、
その時はまた質問においでよ。
読み手にちゃんと内容が伝わるように、要点をまとめて質問すれば
ちゃんと回答してくれる人が出てくるよ。
あと、さっきも言ったけど、コマンドラインでも普通にビルドはできる。
どういう手順でビルドしようとしてるのか、どういうソフトが立ち上がるのか
その辺をちゃんとまとめて質問すれば、対処法が見つかるかもよ?
>>626 素敵な誤爆ですね。
今回、ツールの使い方くらい自分で読め、というだけなんだよなあ。 なによりも、質問がアホな以前にまともに内容を伝える日本語になっていない。 そんな事をうだうだとうらみがましく聞かされたほうがまず不愉快だからなあ。 本性丸出しじゃあんなもんじゃすまないだろう。 自分のことを棚に上げて傷ついたふりをするのも今時は子供の間でも通じないし。
633 :
デフォルトの名無しさん :2005/07/31(日) 21:49:25
てかよくあることだけど、本人がいなくなってからグチグチ言うな。 そんなことはいいから、ベターCって何さ?
C言語やVC++よりも、まずは質問の仕方を勉強しないとね〜 エラーの詳細とか操作手順とかわからないと答えようがないし。
635 :
デフォルトの名無しさん :2005/07/31(日) 22:31:23
>>627 >学校と同じ様にVC++を使わずやろうとしても、ソフトが勝手に立ち上がって
>しまうのですよ…
VC++の関連付けを外せばいいだけのような…。
勝手に立ち上がるからダメって事はない。
これ説明するのはWindowsの使い方を教える事になるからスレ違い。
VectorCの間違いではないか?
Better C = ちょっと良いC 例えば、C++でクラスを使わずに、 手続き型のCとして使うようなやり方。 拡張機能をいろいろ使えるから、ただのCより使い勝手が良い。 ・・で、あってるんだっけ?
たとえばより厳しい型チェックやboolやどこでも変数宣言とか関数定義時の仮引数名の省略とか。 俺の思いつくのはこんなもん。
あと俺が思うに参照とデフォルト引数くらいまで。 STLまでくると流石にC++そのものだな。
>>605 だから出来ないと言うのに。試しにGoogleかなんかで検索かけてみなよ。
同じような質問をしている人をあちこちでみかけるだろうけど、全部否定
されてるよ。第一、VBの関数作っても、引数の型をどうやって呼び出し時に
VC++のものに変換するんだ?VBの変数型でVC++がサポートしてないものは幾つもあるぞ。
呼び出し方はどうする?extern "VB"なんてのも無いぞ。いっそのことVBで
dllを作るか?でも、それをVC++でも呼び出せるか?逆は出来るぞ。
WinAPIをVBに取り込むのと同じようにすれば良いだけだからな。
結局、こういう制限があるということがVBの限界であるから仕方が無いんだが、
VC++で書き直すことをすすめる。
まあ、VBでActiveXコントロールあたりにすればVC++で 使えないことも無いけど、そういう使い方を望んでいるわけでも ないんでしょ? 悪いことはイワン。そのVBの関数をVC++で書き直した方が良い。
642 :
デフォルトの名無しさん :2005/07/31(日) 23:16:29
>>637-639 そういう意味か。
全然違う意味かと思ってた。
要するに、基本Cで、C++の使いやすい所を使うって事ね。
ニュアンスは分かった。ありがd。
>>640-641 >いっそのことVBで dllを作るか?でも、それをVC++でも呼び出せるか?逆は出来るぞ。
VBでDLL作ればVC++から呼び出せるけど?
>>643 俺もコレが気になる。
>第一、VBの関数作っても、引数の型をどうやって呼び出し時に
>VC++のものに変換するんだ?VBの変数型でVC++がサポートしてないものは幾つもあるぞ。
>>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の中でリークしてるのでしょうか?
メモリリークの意味わかっちょるのか?
つまり何が言いたいのですか? どの辺の記述がどう変なのか指摘していただかないと。 分っている、としか言いようが無い。
>>648 その疑わしいDLLを外してやってみればいいじゃん。
DLL関数のところは使わないようにするか、ダミーを作って差し替えればOK
それでメモリリークとやらが起きなければ、お前さんの考えが正しいってこと。
650 :
649 :2005/08/01(月) 08:23:47
651 :
592 :2005/08/01(月) 15:12:44
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
654 :
デフォルトの名無しさん :2005/08/01(月) 17:00:44
理由があって CDialog の DoModal() をやって そのダイアログを見えないようにしたいのですが そのようなことはできますか?
>>654 やったことないから推測で言うけど
ダイアログのWS_VISIBLEいじればいいんじゃないの?
しかし・・・DoModalやった後、どうやってそのダイアログを閉じるんだ?
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) すればいいのでしょうか?
>>658 そのDoModalするダイアログ内ですれば?
>658 OnInitDialog作ったらダメ?
661 :
デフォルトの名無しさん :2005/08/01(月) 17:58:07
>>659 一回表示して
なにかボタンとか押して,という意味でしょうか?
いっさいダイアログを出したくないんです
663 :
デフォルトの名無しさん :2005/08/01(月) 18:04:51
>>660 OnInitDialog 内で
ShowWindow(SW_HIDE)
したんですが,
あれ〜普通に表示されますね
なんでだろう…
>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して
すいません.これがわかりません
どう書けばいいのでしょうか?
見えないんだったらDoDialog()する必要ないような…… OnInitDialog()でEndDialog()すれば表示されないけどね(勿論すぐ処理は戻る)。
>>665 PostMessage関数を使って、自身にメッセージを送る
ダイアログプロシージャの中に、そのメッセージのハンドラを作って
その中でShowDialogをする。
PostMessageだと、今のメッセージの処理が終わった後に
メッセージが送られてくる。
・・・と、ここまで描いてて思ったが、OnDrawじゃダメかな?
669 :
668 :2005/08/01(月) 18:33:40
×ShowDialog ○ShowWindow 疲れてるかもしんない・・・
670 :
デフォルトの名無しさん :2005/08/01(月) 18:53:47
OnInitDialog の中で SetWindowPos( &wndTop, 0, 0, 0, 0, SWP_HIDEWINDOW ); してやると表示されなくなりましたが タスクバーにはこのダイアログの項目が残っています これをうまく消せないでしょうか?
>>670 ShowWindow(FindWindow("Shell_TrayWnd", NULL), SW_HIDE);
タスクバーにはダイアログの項目がって、親ウィンドウ無いんか?
トロイでも作ってるんだろう
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
デバイスコンテキストについての質問ってここでよし?
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部分で怒られます。 何がいけないのでしょうか?見た目、同じように思えるのですが
678 :
677 :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は定義しています。
>>678 OpenGLスレのほうがいいような気もするが
そもそもm_pDC取得すればm_hDCは取得する必要ないんじゃないか?
>m_pDC->m_hDC = m_pDC->GetSafeHdc();
は
m_pDC->m_hDC = m_pDC->m_hDC;
と大して変わらないような気がする。意味ないような・・・
682 :
679 :2005/08/02(火) 00:11:18
エントリポイントもwWinMainCRTStartup に変更したのですが。
>>682 小出しで書くな。やったこと全部書けよ。
いちいち確認させる気か?
ちなみに漏れは
>>679 のソースそのままでちゃんと出たんで、あんたのやり方が何かおかしいんだろ。
684 :
デフォルトの名無しさん :2005/08/02(火) 01:07:38
メインスレッドはメッセージハンドラを同時にひとつしか処理しないはずだけど例外はありますか? いまCOMを使うアプリでこのCOMをReleaseしているメソッドがあるんですが、こいつを処理中に メインスレッドが他のイベントを受けて、動いてしまいます。 COMをReleaseするメソッドを処理してから他のイベントを処理してほしい。。 メインスレッドが同時に複数(あるいは同じハンドラ)を処理してしまうことはあるのですか?
685 :
684 :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 MessageBoxWは9xでも問題なく使える数少ない関数の1つ。
>>685 Release内にメッセージループ回す処理があるとか
689 :
デフォルトの名無しさん :2005/08/02(火) 10:46:47
CDialog は CWnd から派生してますよね? で,CDialog が CWnd を どのように変更(もしくは追加)しているのを 知る手だてはありますか? 特にどのような引数をあたえて Create しているのか 知る必要があるのです
691 :
デフォルトの名無しさん :2005/08/02(火) 11:20:10
>>690 それができればいいんですが,
MFCのソースは開発環境についているのでしょうか?
CDialog の部分をどのように
探りあてればいいのでしょうか?
すみません、質問です。
先日VCを再インストールしたんですが、
前は関数名の上にカーソルを乗せたら出た
関数の説明(ポップアップ?)が出なくなってしまいました orz
http://49uper.com:8080/html/img-s/69227.jpg 上の絵だと、dwFileSizeの説明は出るのですが、
::GetFileSize() の引数の説明なんかが、一切出なくなってしまったんです。
どなたかご存知の方いらっしゃいましたら、
どうかお願いいたします m(__)m
使ってるのは VisuaC++ 6.0 Standard です。
>>691 付いてるからインストールしとけ。
CDialog::Createを追っかけてけばわかるんじゃない?
つーか、IDEを使っているならCDialogと書いて定義へ移動で事足りそうだ。
>>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
質問です。 ボタンの文字サイズを変えるにはどうしたらいいでしょうか。 ダイアログではなくてウィンドウに貼り付けたボタンですが。
ウィンドウに貼り付けたボタン?
699 :
697 :2005/08/02(火) 15:43:10
すんません、表現の仕方が・・・ 子ウィンドウと言うんでしょか。 CreateWindowで作ったボタンに表示される文字のサイズです。
CPropertyPageに配置したコントロールを初期化しようと思い、 CPropertySheetのOnInitDialogをオーバーライドしたのですが、 DoModal()を呼び出してもOnInitDialogが実行されません。 CPropertySheetがCWndから継承してるのも不可解なのですが、 DDXを使うしかないのでしょうか?
CPropertyPageの基本クラスが何か見てみよう
702 :
700 :2005/08/02(火) 19:44:16
>>701 ありがとうございます。
CPropertyPageのOnInitDialogでコントロールを初期化してこれを
CPropertySheetにAddPageしたところ
CPropertySheetのOnInitDialogが呼び出されました。
コントロールの初期化はサブクラスでやらなきゃいけないのね...
703 :
デフォルトの名無しさん :2005/08/02(火) 19:46:05
MSDNオンラインのページに行って色々調べようと思ったのですが使い方が分かりません。 例えばCreateProcess()関数を調べたい時、トップページ右上にある検索欄に『CreateProcess』と書いても何も見つかりません。 どうやって調べたらいいのでしょうか?
704 :
592 :2005/08/02(火) 20:07:11
名前みすったorz
706 :
700 :2005/08/02(火) 20:56:18
>>701 702の補足:
AddPageした場合は、
CPropertySheet::OnInitDialogから
各 CPropertyPage::OnInitDialogが呼び出されるという仕組みのようでした。
初期化を遅延しないといけないからこうなってるのかも...
707 :
679 :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); // こっちは化ける。 こんなことってあるんでしょうか
L"サ"のバイナリはどうなってる?
>>707 そこはこうだろ。とのんきに言ってみるテス
wchar_t buf[2];
buf[0] = 0x30b5; //L'\u30b5';
buf[0] = 0x0; // L'\0';
679ではないけど、 ソースファイルはShift-JISで保存されているから、 その文字コードがそのままバイナリになるってこと?
なんらかの原因でL"サ"が0x30b5 0x0000になってないんだろうな。
712 :
679 :2005/08/03(水) 16:00:27
遅くなりました。 ヒントありがとうございます。 L"サ" がなぜか 0x0192 0x0054 0x0000 になっていました。0x0192 はラテン拡張文字で そういう意味では文字化けではなく、ちゃんと表示している だけみたいです。 どうやら私の環境が変で、Lマクロが異常な変換 をしているようです。 お騒がせしました。 でもBCC5.5 だとちゃんと 0x30b5 0x0000 になるのにな。
>>712 ところでLはマクロではないのだが……。
714 :
679 :2005/08/03(水) 20:56:38
私もマクロではないな、と思いながらつい使ってしまいました。 L はプリプロセッサで処理されるわけでは ないですものね。 かといって、実行時関数でもなく、あくまでコンパイル時に 処理されるのですよね。正確にはなんというのでしょう? ちなみに、L"サ" をアセンブルしたら、 $SG41923 DB092H, 01H, 'T', 00H, (つまり0x192 0x54) この段階ですでに変になっていることを確認しました。
715 :
679 :2005/08/03(水) 21:08:10
またまた変な言い方をしてしまいました。 > ちなみに、L"サ" をアセンブルしたら L"サ" を含むc++ソースをコンパイルしてアセンブリリストファイル を出力したら、という意味です。
ワイド文字のLは単にワイド文字(列)の接頭辞とでも言えばいい。 尤もX3010/X3014にこう書いているわけではないが。
717 :
デフォルトの名無しさん :2005/08/04(木) 09:33:56
2つの似て非なるソースがあるとき これらをマージするのに便利なソフトウェアとか 「俺はこうやってるよ」みたいな方法論があったら おしえてください
テストで一次元配列および二次元配列のポインタ表記について簡潔に説明せよって問題が出そうなんだがなんて答えればイイと思う??
>>717 diff, patch, cvs使用。
或いはエディタで。
>>718 C/C++には二次元配列はありません。
それは配列の配列か、ポインタの配列か、或いはポインタのポインタに過ぎません。
え? じゃあ int i[10][20];ってやったらこれ二次元配列じゃないの?
それは配列の配列
だからそれを2次元配列って言うんだろ
配列の配列は二次元配列ではない。 現に、二次元配列を扱える言語では厳密に区別されている。
VC以外も厳密に区別してほしいな 甘すぎ
int i[10][20]は二次元配列でないのか。知らんかった。
それと同じC言語でも、仮引数がこの形だと
VCやBCCではOKだが、gccではNG聞いた事があるけど、
>>723 の原因と同じ所なのかな。
>>725 仮引き数は配列ではなくポインタでしかないから、配列を渡すことはできない。
つまり、配列へのポインタを渡すことになる。
#或いは配列へのポインタへのポインタか。
727 :
678 :2005/08/04(木) 16:05:15
解決しました。 プログラムでも、ましてやコンパイラの問題でもありません でした。 OSの設定で、地域オプションの数値や通貨の設定がなぜか 英語(米国)になっていて、それを日本語に戻してコンパイルし直す とすべてうまくいきました。 お騒がせしてすみませんでした。
728 :
679 :2005/08/04(木) 16:08:28
自己をいつわり、かつあげてしまいました。 申し訳ありません。
729 :
デフォルトの名無しさん :2005/08/04(木) 16:21:28
VCの開発環境で作られる中間ファイルなんですが どうしてこんなにサイズが大きくなければいけないのでしょうか? 最終的に作られる exe や dll の 数十倍から100倍あったりするんですが… もう馬鹿じゃないかと いつも思います なんとか,小さくして なおかつかわりなく部分コムパイルできないもんでしょうか?
とりあえず自分でコンパイラ作ってMSよりいいものができたら馬鹿にしてくれ
>>728 言葉が足りないから、>727で間違えたということが判りにくい。
#かつ上げしたのかと思ったよw
>>729 何故中間ファイルを小さくしたいと思うのかね?
734 :
729 :2005/08/04(木) 17:11:48
>>733 モードっていうんですかね?
Debug とか Release とか
それだけならまだいいんですけど
どうしてもヴァリエイションをいつくも作る
必要が出てくるわけです
そうすると中間ファイルがとんでもないことになっている
中間ファイルごときで尻の穴小さいこと言うなよ。 ていうかなんで何が不便なの?
736 :
729 :2005/08/04(木) 18:36:35
どんどんハードディスクの空き容量を食い潰していくので。
>>736 どうせnyかしゃれのせいでHDDがいっぱいって言うんだろ?
いくつ「か」は必要だろうけど、いくつ「も」必要かどうか、 つうか整理すれ。 君だって、馬鹿だから机小さくていいだろ、と言われたら困るだろ? 必要な作業域ぐらいおごっといてやれよ、そのほうが無難だ。
>>729 フォルダ管理ができているなら
*.ilk;*.obj;*.pch;*.pdb;*.idb;*.pdb;*.opt
などで検索してゴミ箱に捨てればいいじゃん
そう言う香具師に限って古いプロジェクトのDebugディレクトリまでそのままの罠。 つーか、プロジェクトのクリアくらいしとけって。
>>729 ↑をビルド後の処理にいれとけばビルドする度に勝手にやってくれるぞ。
>>717 WinMerge日本語版お勧め。
742 :
デフォルトの名無しさん :2005/08/05(金) 09:15:25
>>739 それらの拡張子のファイルは消してしまっても
部分コムパイルできるんですか?
もしそうだとすれば,なんのためにあるんでしょう?
いい加減コムパイルって言うのやめようよ。
馬鹿って口にする奴が馬鹿な質問をしてくるのはなんだかウザイ
コンパイラの批判する前にコンパイラを知れやホケェ
CreateCompatibleBitmapでビットマップ作成して、メモリデバイスコンテキストに それを選択させて描画行った後そのビットマップを白黒に変換したいのですが、どのようにすればいいですか? 今まではGetDIBitでDIB形式に変換してピクセルデータをいじっていたんですが、処理スピードの関係でそのやり方は没に・・・ 他に方法等ありましたらご教授お願いします
>>747 1ビットビットマップを作り、それを元画像で白にしたい部分を(他は黒になる)
その色でSetBkColorし、そのビットマップに元画像を描画すればいい。
ほほぉ、なるほど。
>>747 じゃないけど、覚えておこっと。
白黒とは、マスクのことだと勘違いしているらしい>748がいるのはこのスレですか?
751 :
749 :2005/08/06(土) 00:19:49
そうかしまった関心してしまった。でもマスク作成技術として覚えておこう…
752 :
748 :2005/08/06(土) 00:33:11
>>750 そうか。これはまさに、ビットマップを透過する時に
マスク画像の生成に使っていた方法。
だと、その白黒にするというのはどういう事?
例えば、色が指定より明るいか暗いかで変化させるとかかな。
>色が指定より明るいか暗いかで変化させる まぁそれだろうな。 パレットがあればそれを入れ替えるだけで済むんだが…
白黒二値と書かれていない以上、グレイ諧調の可能性も…… というのはおいといて。 単純に明るさが閾値より高いか低いかだけでもいいが、 その場合でもRGBを等価に扱うのか真面目に3:6:1にするかが問題になる。 また、ディザ処理をするか、ディザ処理のパターンはどうするかなど、 考えるべき点は山ほどある。
755 :
748 :2005/08/06(土) 08:38:27
>>753 >>754 なるほど。サンクス。
マスク製作さえも覚えたてなので難しい。
方法としては、
>>748 の方法を使い、複数色を白する感じで、
>>753 >>754 の条件を満たした色でのマスク画像を複数作り、
それらを白の部分のみ何回も描画する感じかな。
756 :
747 :2005/08/06(土) 10:53:29
みなさん、ありがとうございます。レス遅くてすいません。 白黒にするのは2値化でマスク画像作りたかったのでSetBKColorでやってみま。 (=゜ω゜)ノそれでは、ありがとですた
>>755 > 条件を満たした色でのマスク画像を複数作り、
> それらを白の部分のみ何回も描画する感じかな。
>>747 > 今まではGetDIBitでDIB形式に変換してピクセルデータをいじっていたんですが、
> 処理スピードの関係でそのやり方は没に・・・
755>> のほうが遅い予感
初心者スレでヲタ話は遠慮してほしいものだ
759 :
デフォルトの名無しさん :2005/08/07(日) 17:17:29
質問です。環境は WindowsXP です。 Visual C++ .NET Version 2003 を購入しました。 メッセージハンドラの追加が分からず・・・。 コードを書くのは可能なのですが、簡易な方法はないでしょうか。 例えば MFC を用いているのですが、 クラスビューの CChildView (クラス名)を右クリックすると、 6.0 のときは「メッセージハンドラの追加」という項目があったのですが、 .NET だと「関数の追加」「変数の追加」しか見当たりませんでした。 よろしくお願いします。
クラスビューの下にプロパティのペインが無いかな? 無かったらクラスを右クリックでプロパティを選べば出る。 そこのタブ(?)の右から2番目がメッセージ一覧になってるから、 追加したいメッセージを探して、その項目の横のリストから <追加> OnActive みたいなのを選べば追加できる。
761 :
759 :2005/08/07(日) 17:38:24
>>760 こんなところに・・・ありがとうございました!
6.0の時はスプラッシュスクリーンとか追加出来たのに .NETではそういうコンポーネントを追加出来無くなったんですか? 自分で全部実装しろと?
763 :
759 :2005/08/07(日) 18:55:35
もう1つ質問です。 .NET において、MFC のアプリケーションを、ドキュメント・ビューアーキテクチャをはずして構築しました。 クラスビューに C○○○App がなく、手動で C○○○App の InitInstance() を探すと、 6.0 のころにあった 「ここに重要な初期化処理を書きます」 といったコメントがありませんでした。 srand(time(NULL)); や、ImmDisableIME(-1); などはどこで書くのが普通なのでしょうか。
少々質問させてください。 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をそのまま使える構造にしたいです。 どなたかご教授お願いします・・・
>>765 OpenURLを、明示的にcastすればいい。
関数型は複雑だから、typedefすれば簡単だろう。
typedef void (__cdecl * ThreadFunc_t)(void *);
_beginthread((ThreadFunc_t) OpenURL, ...
767 :
765 :2005/08/08(月) 08:22:00
>>766 通過できました、ありがとうございます!!
768 :
765 :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
ソースを解読してクラス間の関係を図示してくれる フリーソフトを知りませんか?
doxygen
771 :
デフォルトの名無しさん :2005/08/08(月) 13:34:55
メモリリークをデバッグするときに 効果的な方法はありますか?
タスクマネージャ
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++ でした。ごめんなさい・
>>771 _CrtSetAllocHookでMSDN見てみ
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 正規版だよ。アカデミックだけど。
なんでもウィルスにすんなよ。素人臭い。
そう思うんならいちいち反応すんなよ
アカデミックも高かった労に the spokeで具具ってみなはれ
783 :
デフォルトの名無しさん :2005/08/09(火) 09:26:32
Visual C++ .NET 2003 を使っています。
エディタ上で
http:// から始まる文字列を入力すると
勝手に下線が付いてしまうんですが、これを付けないようにするには
どうすればいいですか?
785 :
デフォルトの名無しさん :2005/08/09(火) 11:33:08
>>782 すみません。。アカデミックではなくて、the spoke の方でした。。
で、
>>778 に答えられる人いますか?
ファイアウォール入れてみればわるだろうに
787 :
783 :2005/08/09(火) 12:13:39
>>784 見つかりました!同じとこ何度も探したつもりだったんですが見落としてました。orz
789 :
デフォルトの名無しさん :2005/08/09(火) 20:09:33
どなたか、教えてください 自分で作ったアプリケーションをノンアクティブ状態でジョイパッドを使用できる状態にしたいのですが、どうすれば よろしいでしょうか?ダイレクトインプットを使えば簡単なのですが、どうも難しすぎて私の手には負えません。 それ以外で方法はないでしょうか? もう一つ質問があるのですが、自分で作ったアプリケーション以外で新規に起動したアプリのウィンドウハンドルを 取得したいのですが、どうすればいいのですか? 一度に二つも質問してすみません
APIスレの法外隠者ね?
すみませんでした。APIスレに書き込みます
法外隠者?
794 :
デフォルトの名無しさん :2005/08/09(火) 23:01:53
>>789 ビルド中に何気なくハブみたら、通信ランプが点滅してて「あれ?」と思ったのがきっかけ。
で、ビルドするたびにルータとハブみてたら、通信してるから、どこの通信してるのかなーって。
気になって・・。
漏れと同じでvisual studio.net the spoke版なら、みんなもそういう風になってるのか気になったものだから。
>>794 たぶん、おまえが裏で動かしているnyのせい。
被害妄想
Visual Studio .NET The Spok版なら論理的に構成されてない ソースは全部コンパイルエラーにしてくれるぞ
788のパケットキャプチャ使ってみたか?
>>794 ビルド中以外、ってか、VS使ってる時以外にも通信ランプ見てみたか?
>>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バイト文字が弾かれているみたいなのですが。。。 原因、回避方法があればご教授ください。
細かいことだがUnicodeは2バイトじゃねぇぞ
803 :
801 :2005/08/10(水) 19:32:00
>>802 2バイトっていうか、16bitフルに使い表現している文字で
弾かれるみたいなのです。
言い方悪かったですねすいません。
それと訂正です。
_TCHAR strText[256]; −> _TCHAR strRow[256];
でした。
setlocale が必要なんじゃね?
CStdioFileでUnicode出力する場合はtypeTextではなくtypeBinaryを指定。
VisualC++.net the spokeを使っているのですが作業用ディレクトリの指定はどこでやればいいのでしょうか?
すいません質問なのですが。 新しいPCを買って開発環境を移したいのですが、 そちらにVisualC++.netをまたインストールすると違法になったりするのでしょうか? 前に家族での間でも共有はいけないとどこかで聞いた事がありひっかかってしかたありません・・・
前のPCからアンインストールすれば問題ない
>>808 即レスありがとうございます。
これで心置きなく新しいPCが買えます^^
>>810 もう一度、アクティベーションをするだけだよ。
ライセンスどおりに使っているのだから恥じる必要は無い。
警告が表示されても、どうどうとMicrosoftにTELで「もっかいアクティベーションしたいんだけど」と言えばよい。
一回アクティベーションしたらもうだめなんてありえんしな 再インストールもできんのですかと
何度もアクティベーション出来るって事は、 複数のマシンにインスコされているかのチェックもされているのだろうか。
814 :
801 :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()を使って無効領域を再描画すればいいんじゃね?
>>816 無効領域を再描画というのは消えた部分だけ再描画ということでしょうか?
具体的にどうすればよいのでしょう?
ちなみに現在の線描画処理(MoveToやらLineTo)はOKボタン押下時にしているので、
WM_PAINT(::OnPaint() )の中のコードはプロジェクト生成時のままです。
>>817 悪いことは言わん、初心者向けの本かサイトを捜して読んでこい。
#勿論、Windowsプログラミングの本ね。できればMFCで。
819 :
816 :2005/08/11(木) 16:43:00
>>817 さっきも言ったけど俺のレスは信用するな。
ちょうど俺もそこらへんをMFC使わずにAPIの勉強をしている。
てかVC++持ってないからMFCの事はわからん。
で、どうやらそこそこ的を射てるようなので答えるが、プロジェクト生成時のままだったら何も書かれていないんじゃ?
線描画って事はGetDC()でWinMainの中に書いていないかい?
(MFCはWinMainすら隠蔽されてるんだっけ??)
素人考えだけど、オススメはMFCを扱わないWinプログラミングの本を読んだ方がいいと思う。
きっとメッセージループとかを理解していないっぽいから。
まあ、面倒なのでOnPaint中に全体を再描画でいいんじゃない。
>>819 まあ、Windowsプログラムの入り口としてMFCからアプローチするのが近道なんじゃないか?
いきなり自力でWindowを作成するのは初心者にはやっぱり難しいよ。
>>817 WM_PAINTが来たときに線を描画するようにすればいいだけ。
WM_PAINT内でBeginPaint()〜EndPaint()を使えば、それが無効領域の再描画になる。
>>820 MFCはその後がもっと難しいではないかと思う。
822 :
815 :2005/08/11(木) 17:51:03
>>821 別にいいじゃん。そこまで>817がやるかどうかも判らんのだし。
824 :
デフォルトの名無しさん :2005/08/12(金) 16:32:28
質問です。 exeプログラムの一部の関数をEXPORTする方法を教えてください。 別のプログラムから利用したいという要望が来まして…… それともdllを生成する別プロジェクトを作るしかないのでしょうか。 よろしくお願いします。
素直に必要な分だけ別のプログラムのプロジェクトに参加させるのではダメ?
exeプログラムでエクスポートしたい関数をdllからの エクスポートと同じようにすればOKですよ。例えば、 __declspec(dllexport) void Func();として、exeのソースに書けば void Func()がエクスポート出来ます。グローバル変数も同様です。
もしかしたら静的リンクさせたかったり?
828 :
824 :2005/08/12(金) 17:41:27
ありがとうございました。 何とか解決しました
829 :
デフォルトの名無しさん :2005/08/12(金) 18:46:01
VC++でダイアログを幾つか使うようなアプリを作っています 作っていて気付いたのですがタブオーダーがどのダイアログでも効かないのですが ダイアログはリソースエディタで作ったものでタブストップのプロパティを変えても tabキーでコントロールの移動が出来ません なんか変なとこ弄っちゃったのでしょうか?
タブオーダーが効かないコントロールは何? ボタン?
831 :
829 :2005/08/12(金) 19:00:19
キャプションの文字列に何か入れなさい。 空はよくない。
833 :
829 :2005/08/12(金) 19:02:39
お?出来ました!まさか、キャプションとはorz ありがとうございました。
834 :
デフォルトの名無しさん :2005/08/12(金) 21:18:20
.net 2003ってc99に対応しているのでしょうか? 可変長引数マクロでエラーになるのですが、 何か設定がいるのでしょうか?
MSDN見たらVisual Studio.NETのVC++にはCランタイムライブラリの所に >C99 のリリース時期により、このバージョンの Visual C++ はこの規格に準拠していません。 の記述あり。
836 :
829 :2005/08/12(金) 21:46:36
>>831 ,833
困ったな、別な人が勝手に私の悩み解決してもらっても
私は解決して無いからな^-^;
>>830 ちなみにタブオーダーが効かないのは総てのコントロールです
ダイアログのテストとかではちゃんとタブオーダー効いているのですが
何故か普通に動かすと効かなくて困ってます
キー入力がどっかに取られているとか。
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)で大丈夫な気がするのですが、 何が起きているのでしょうか?
>>838 そのコードの文字が何か分からんけど、Unicodeに対応する文字が無いんじゃないの?
SJISにあるかどうかなんてのは、関係ないだろ。
840 :
838 :2005/08/13(土) 21:34:35
>>839 どうも、その通りでした。
(CP932の変換テーブルみてみたらなかった)
・mbstowcsは変換エラーを検出するので
MB_ERR_INVALID_CHARSがEnableですね。
・CStringWはMB_ERR_INVALID_CHARSはDisableでした。
標準関数は文字列の一部で変換エラーがあった場合、
どうするんだろう...
ウィンドウ作成の初歩で躓いてます。 作成された実行ファイルのアイコンは変わってるんですが ウィンドウ左上のアイコンが表示されず 黄色い三角形の!アイコンになってしまいます…。 派生した(?)ダイアログではアイコン表示されてるんです。 なんでかわかりませんか?
エスパーさん出番ですよ。
>>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版もチェックしてみたいと思います。
質問です 「猫でも〜」のSDK編の46章で、 case WM_DRAWITEM: lpDI = (LPDRAWITEMSTRUCT)lParam; if(lpDI->itemState == ODS_SELECTED) で場合分けする、という部分があったのですがうまく働きません プログラムは右クリックでメニュー(オーナードロー)を呼び出して 「選択状態になったら」(ここが効かない)その部分の色を変えて ボタンを押されたら作業を実行、というものでした if文が真になるタイミングでWM_DRAWITEMが出ていないようですが、 どうすればいいでしょうか?VC++6.0です
質問です 自作プログラム中からTerminateThreadを使って他プロセスを終了 させるものをかいていたのですが上の関数を使うとexplorerの場合 勝手に再起動されてしまうのです。タスクマネージャのようにexplorer を終了させたいのですがどうすればよろしいでしょうか? 環境:BC++
ソース(またはプロジェクト)がCかC++かって設定必要ですか? 関数プロトタイプとかC++だと必要ないと思ってたのに、 書かなきゃ動かなかったりするんですけど…。 クラスとか作ったら勝手にC++のソースになるもんだと思ってるんだけど。。。
>>847 lpDI->itemState & ODS_SELECTEDぽい。
>>848 TerminateProcess()とかExitWindowsEx()とかじゃ?
>>849 hoge.cpp C++
hoge.c C
じゃない。
>>847 if(lpDI->itemAction & ODA_SELECT)
か
if(lpDI->itemState & ODS_SELECTED)
どっちかでいければいいな
852 :
デフォルトの名無しさん :2005/08/14(日) 16:31:35
すみません、TerminateThreadではなくTerminateProcess()でした。 あと、ExitWindowsEx()はWindowsの終了などを操作するものですよね。 私はexplorerのプロセスを操作したいのです。
854 :
847 :2005/08/14(日) 18:44:39
>850,851 &に変えたらいけました どうもサンクス
855 :
デフォルトの名無しさん :2005/08/15(月) 13:10:41
エラーが出た時にすぐにコンパイルを終了する方法を教えて下さい。
エラーが出たときにすぐにコンパイルが停止するように設定する。
857 :
デフォルトの名無しさん :2005/08/15(月) 21:46:10
out lookの予定表の様な物を作ることになったのですが、助けてください。
858 :
デフォルトの名無しさん :2005/08/15(月) 22:07:58
WndProcを扱っています。 文字が入力されはじめたことを監視して、適宜の処理をしたいと思っています。 その際に、WndProcとWM_IME_STARTCOMPOSITIONを利用しようと考えています。
859 :
858 :2005/08/15(月) 22:11:49
860 :
858 :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); }
Winsockで通信するプログラム作ろうと思ってるんですが、 Winsock2で最初やろうと思ってて #include <winsock2.h> をしたら再定義等のエラーが沢山出てきました。 winsock.hが先にインクルードされているからなんだな。 と、なんとなくわかり、 検索もしてwindows.hに含まれている事がわかりました。 自分はwinsock2の機能を使うわけじゃない(というかどう違うのかさえ知らない)ので、 winsock2のインクルードやめたらコンパイル-実行できて。ホッとしたんですが、 この先winsock2の機能を勉強して、使いたくなった時どうすれば良いですか? windows.hで #include <winsock.h>→#include <winsock2.h> にするくらいしか対策は無いんでしょうか?
VCとWindowsってUNICODE完全対応ですか? もしそうでないとした場合に自分でUNICODE完全対応にしてソフトを配布するってこと可能ですか?
>>861 #include <winsock2.h>
#include <windows.h>
とMSDNのサンプルに書いてあったような希ガス。
864 :
デフォルトの名無しさん :2005/08/16(火) 10:42:11
すいません、教えて下さい。 iostreamをincludeしても、 cout が「定義されていない識別子です。」になってしまうのですが どうしたら直せますでしょうか? include自体は成功していますし、 cout自体のヘルプに乗っているコードをそのまま使っても 駄目なので、手の打ちようがなく困っています。
std::cout
Windows 9xはUNICODE非対応だったかな。NT系はUNICODE対応。 というか、内部ではアスキー文字もUNICODEに変換しているので UNICODEとしてプログラムを作る方が効率がいい、というような ことがAdvanced Windowsに書いてあった。 VC++のUNICODE対応というのが、UNICODEを扱えるバイナリを 作れるかということなら、作れる。MSDNでUNICODEを検索汁。 もちろん、自分で全部コーディングするならUNICODE対応でも何でも お好きなやうに。
>>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です。
ありがとうございます WM_TIMER(というかWM_PAINT以外)では描画されないのですね。
描画されないというか、WM_PAINT以外でBeginPaint, EndPaintを呼んでは駄目だ。 WM_PAINT以外で描画するんならGetDC使え。
873 :
デフォルトの名無しさん :2005/08/16(火) 14:26:28
コンパイルされたアセンブリファイル(*.s)を見るにはどうしたらいいんでしょうか?
バイナリエディタで開いてください
875 :
864 :2005/08/16(火) 15:56:21
すいません。自己解決しました。
876 :
デフォルトの名無しさん :2005/08/16(火) 15:58:17
>>865 >>867 さん
ありがとうございます。
Cと違って標準ライブラリのスコープがはっきり存在するのを
初めて知りました。
877 :
873 :2005/08/16(火) 16:10:13
ニモニックで見たいのですが・・・。
CListCtrlについて質問です。 スクロールバーを使わずに、別にボタンを用意して、 ボタンを押すごとに下に1行ずつスクロールさせるようにしたいのですが、 可能でしょうか? もし可能であれば方法など教えてください。 いろいろサイト検索したのですが、なかなかみつかりませんでした…orz
879 :
デフォルトの名無しさん :2005/08/16(火) 16:28:06
また質問です。 VC++.NETで作っていますがMicrosoft .NET Frameworkを使用しないexeファイルを作ることは可能なのでしょうか?
Unmanagedで作りゃいいんじゃなかったっけ?
レスありがとうございます。 >アプリケーションの開発に Visual C++ を使用している場合は、 >Visual StudioR .NET の下でも Visual C++ でアンマネージド アプリケーションを生成することができます と言うところまでたどり着いているのですが、そこから先がどう調べても出てきませんでした。 現在の.NET Frameworkが必要な(マネージド)環境からアンマネージドに変えるにはどういう設定をすればいいのでしょうか。
>> 873 コマンドラインでよければ。 hoge.cpp のアセンブル結果を見るには cl /c /Fahoge.s hoge.cpp とすれば、hoge.s が作れますよ。
883 :
882 :2005/08/16(火) 17:44:22
アセンブル結果 ではなくて、アセンブリリストファイルです。 アセンブル結果じゃバイナリだ…
884 :
879 :2005/08/16(火) 18:18:18
やはり.NET Frameworkを使わないexeファイルの作り方がわかりません。 881にも書きましたがUnmanagedでの作り方が調べても分からず、 そもそも何をしたら.NET Frameworkが使用される(使用しなくなる)のかも不明・・・。 何方か詳しい方はいませんでしょうか。
.NETプロジェクトを選べばmanaged
ありがとうございます。多分できました。 もう1つ追加質問、.NET Frameworkを使っているかどうかを既にインストールしている人が調べるには、 一度アンインストールし、exeを開くときにエラー等が出るかで無いかで判断するしかないのでしょうか。
内部構造が違うはずだが
ん?.NETは中間コードしか吐けないんじゃなかったか? コンソールアプリで.NETを使わないでプログラムした場合は直接実行できると認識していたんだが 違ってたらスマソ
>886 あるEXEが.Netを使っているか、Nativeなのか、については、 dependsに食わせてみれば判る。
>>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を 使っている方がいましたらお知恵をお貸しください。
質問、横入りスミマセン。 入力の際、スペースの変換の確定の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
画面(そのプログラムが実行しているウインドウ)を一番手前に呼び出す関数はあるのでしょうか?
>>869 タイマイベント処理でデータ更新して、終わったら再描画イベント発生させせばいいんでない?
再描画はInvalidRect とかつかって。
896 :
893 :2005/08/18(木) 02:35:31
897 :
895 :2005/08/18(木) 02:36:11
う、更新し忘れて、えらい古いレスしちまった。
質問があります。 メタセコイアで使用している色設定のコントロールのようなものを 自前で作成したいのですが、カーソル位置からRGBにどのようにして 変換しているのかわかりません。 あのような色空間はどのような基準で描画すればいいのでしょうか? カーソル位置からRGBにどのようにして変換すればいいのでしょうか?
質問させてくださいな。 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)を 指定しないといけないと言うことでしょうか?
>>899 MSDNを見よ。
>また、引数 stack_size に 0 を指定すると、オペレーティング システムはメイン スレッドに対して指定したスタックと同じ値を使用します。
こう書かれている。
>>898 寡聞にしてメタセコイアが何かは知らぬが、
色相環からrgb値を得たいと言うことかな?
それなら戦略は二つ。
・クリックした座標の画素を拾ってrgb値を得る。
・クリックした座標値からrgb値を算出する。
#これ以上の情報が必要なら画像処理スレ向きかな。
>>899 関数呼び出しでもスタックを消費するから、そのサイズだと足りない。
まあ0でも指定しとけ。
こんにちは _T(" ")とはどういう機能なのでしょうか。 よろしく願います。
HINSTANCE hInstanceというのがありますが、 具体的にどのようなものなのでしょうか。
>>904 HINSTANCEと言う型のhInstanceと言う変数の宣言。
詳細はF1を押してMSDNを見るか「宣言へ移動」を使ってインクルードファイルを見よ。
>>905 ググルで探してみます。
意味を知りたかっただけです。
>>903 Unicodeビルドか否かで L" " か " " になるマクロ。
GetWindowRectだと、スクリーン座標でのウィンドウ位置が得られます、 GetClientRectだと、クライアント座標でのウィンドウ位置が得られますが、left,topは常に0です。 では、子ウィンドウを作成したとして、子ウィンドウが属する親ウィンドウを基準としたleft,topを得たいのですが、どのAPIを使えばいいのでしょうか。
>>908 GetWindowRectしてScreenToClient
910 :
デフォルトの名無しさん :2005/08/19(金) 14:38:44
指定日から、○日後や○ヶ月後の日付を知りたいのですが、 何かいい方法はありますか?
>>910 CTimeクラス、tm構造体、mktime関数あたりを使えばいいと思う。
912 :
910 :2005/08/19(金) 16:10:19
>>911 ありがとうございました
それで挑戦してみます
>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が難しくなってくる
ファイルを選択するにはCFileDialogを使いますが、 フォルダを選択したい場合にはどうしたらよいのでしょうか?
ハンドルとステアリングの区別がつかない香具師発見。
>>913 インスタンスハンドルはアプリケーションの、
ウィンドウハンドルはウィンドウの、
独特の数値?(IDみたいなもん?)って事かな?
>918 まぁそんなもんだが、>913はほぼ間違ってるので注意。
921 :
デフォルトの名無しさん :2005/08/20(土) 22:50:54
基本的なことですいません。 VS.NET2003でMFCを使ったりしてウィザードから作成する際、インクルードの書式が'/'でなくて'\'になってしまいます。 '/'にする方法はありますか?
ひょっとしてインスタンスハンドルってアプリの先頭アドレス?
>>922 今はモジュールハンドルと同じ扱いだからそうだよ。
コンソールアプリケーションのmainの引数には インスタンスハンドルの項がないんだけど、 この実行プロセスがインスタンスハンドルを持ってないってことはないの?
ない
持ってる、という解釈でよろしいのか。
>>924 欲しければGetModuleHandle(0)で手に入る。
DOSプロンプトでUNICODEで表示ってできるんですか?
>>930 表示にUNICODEもなにもないだろう。
MFCでキー入力判断って出来ますか? あとファイルから読み込んだ文字列を多次元(forで繰り返せる形)にするやり方教えてください
>MFCで(略 できる >あとファイル(略 元からChar配列だろ
>>981 たぶんのUNICODE文字列をcoutとかprintfとかで表示できるか?
という質問じゃないか?
まあ、答えは無理なので、
UnicodeToAnsiとか使ってコンバートした文字列を表示させましょう。
>>934 printfは%lc, %lsで表示できる。
>>933 ダイアログベースでした説明不足すまそ
多次元はstrcpy使って出来ました。ありがとうございました。
#pragma comment( lib, "test/hoge.lib" ) というように、 自作の static library 専用のフォルダを作って、相対パスで pragma しても、うまく結合(?)されませんでした。仕方ないので、 絶対パスで指定していますが、そうする他どうしようもないのでしょうか?
"../"は使えない理由があるの?
>>937 VCのディレクトリ設定に親ディレクトリを追加しろ