くだすれVisual C++(超初心者用)その4 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
06/11/29 17:00:54
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
Visual C++使いが優しくコメントを返しますが、
お礼はVisual C++の布教と初心者の救済をお願いします。

■過去スレ
前スレ
スレリンク(tech板)
前々スレ
スレリンク(tech板)

■遠い親戚スレ
くだすれC++/CLI(初心者用)
スレリンク(tech板)l50

■関連ページ
Visual C++ Home Page
URLリンク(www.microsoft.com)



2:デフォルトの名無しさん
06/11/29 18:34:35
2

3:デフォルトの名無しさん
06/11/30 14:26:39
1乙

4:デフォルトの名無しさん
06/12/04 16:51:44
乙ついでに質問です。

ツールチップを表示するため、CToolTipCtrlのメンバ変数を定義し、
OnInitialUpdate()内でCreate()、Activate(TRUE)、AddTool()を実行しています。

ツールチップを貼り付けたコントロール内でカーソルを移動する際に、即ツールチップを
非表示にしたいのですが、表示されたツールチップ上を通過したときのみ即消えし、それ
以外ではしばらく時間がたたないと消えてくれません。
ツールチップ表示後、マウスカーソルが移動を開始したらすぐにツールチップを消すように
するにはどうしたらよいのでしょうか?

5:デフォルトの名無しさん
06/12/07 02:51:32
すいません。
>調べもの専用Googleブラウザを作ってみよう
>URLリンク(www.atmarkit.co.jp)
っていうのを僕もやってみたいのですが、
Microsoft Platform SDK のインストールは、
全部のコンポーネントをインストールしないといけないのでしょうか?
低速回線なので必要なコンポーネントだけダウンしたいんです。
最小構成でも数百MBになってしまうのでしょうか?


6:デフォルトの名無しさん
06/12/07 13:15:41
>>5
Webインストール版だと必要なものだけダウンロードできる。

それをやるにはたぶんCore SDKとIEのやつくらいがあれば十分だと思う。
足りなかったらその分だけをまたダウンロードしろ。

でも、Core SDKだけで100MiBは軽く越えると思う。
人の家かどこか高速回線でCDイメージを落として、CDに焼いてきたほうが早いと思う。

7:デフォルトの名無しさん
06/12/08 06:44:48
>>6 ありがとうございます。
サイズ的に厳しそうなので人に頼むことにしました。。




8:デフォルトの名無しさん
06/12/08 09:08:20
まずは簡単な数字あてゲームを作りたいので無料の開発環境の作り方を知りたい・・・
結論として2Dのゲームまで(ゼルダ・ドルアーガ・ワルキューレ)できるような言語はVC++が良いと聞きました。
初心者質問

@ VC++2005エクスプレス エディションをインストールしたのだが どうやって作ればいいのかわからない(手順のサイトあればよろ)
A ボーランドのC++ でも作り方をしりたい(手順のサイトあればよろ)
B もしあれば他の良いC++の無料をダウンードしたいのですが・・・(VC++の無料版って他にあるのか・・・)
↑C++にはこだわらない(HSP、VB以外で・・・っていうか ないですよね^^) 一応JavaScript で簡単なやつを作った。

1と2は自分PCにインストールプログラムはある。一度インストールはしたが、そこでどうしたらいいのか?
まとめとして Bだけ聞きたいです。

9:デフォルトの名無しさん
06/12/08 10:19:17
不特定のダイアログが、現在 DoModal で表示されているかどうかを
判定する方法はありますか?

やりたいことは、ダイアログが DoModal で表示されている最中に、
メインフレームに飛んでくるメッセージ(他プロセスから飛んでくる)に
対して、反応しないようにしたいのです。

ダイアログ表示前後にフラグ立てをしてやればいいんでしょうが、
今後、ダイアログ表示が増えたとき、そのルールを徹底するのが面倒なので、
不特定のダイアログが DoModal されているという状況が判定できないか
と考えています。

10:デフォルトの名無しさん
06/12/08 11:01:07
>>9 IsWindowEnabled

11:9
06/12/08 15:00:33
>>10
ありがとうございました。できました。

12:デフォルトの名無しさん
06/12/08 21:58:55
Visual C++を始めたばかりのものです。いきなり以下の課題を上司から指示
されました。”ダイアログボックスを表示し
て、リストボックスをその中に2つ作り、片方のリストボックスに複数の
文字列を初期状態で挿入されている状態にします。この文字列の1つを選択
してボタンを押すともう片方のリストボックスに移動するようなダイアログ
ボックスを作るようにしなさい。”というものです。当方Javaを3ヶ月ほど
やった経験があるのでオブジェクト指向は大体わかるのですがC++や
VisualC++はまったく初めてです。参考になるお薦めの本がありましたら
どうか教えてください。よろしくお願いします。

13:デフォルトの名無しさん
06/12/08 22:50:05
VCのバージョンは?
新規作成のプロジェクトからMFCのダイアログベースでアプリケーション
できた?
あとはダイアログにボタン1つリストボックス2つ貼り付け
変数を割り当ててふにふにする。

14:12
06/12/09 08:46:43
VCのバージョンは6.0です。MFCのダイアログベースでアプリケーション
できました。ボタン1つリストボックス2つの貼り付けもできました。
変数を割り当てるところがわかりません。良い本などあったらおしえて
ください。よろしくお願いします。

15:デフォルトの名無しさん
06/12/09 09:16:42
DDX/DDVでgrep

メンバ変数じゃなくて一時的にリストボックスの
インスタンスへのポインタが取れればいいのなら
CDialog::GetDlgItem() を使えばいい

凡例:
CXXDlg::OnInitDialog()
{
 ・・・
 CListBox* pListBox = (CListBox*)this->GetDlgItem(IDC_LISTBOX);
 ・・・
}

良い本は俺も知らん

16:デフォルトの名無しさん
06/12/09 13:17:00
>ボタンを押す
ボタンを右クリックしてイベントハンドラの追加
あとはMSDNかヘルプのCListBoxの項目。
VC6は操作がちがうかも。
>良い本
VCとかMFCの本買ったことない。MSDN使って覚えた。

17:デフォルトの名無しさん
06/12/13 23:16:03
VC++2005EEで、メニューを作ることはできないのでしょうか。
.netのフォームではありません。

18:デフォルトの名無しさん
06/12/14 00:56:15
できます。

19:デフォルトの名無しさん
06/12/14 03:33:29
では、その手順を簡単に教えてください。

20:デフォルトの名無しさん
06/12/14 09:39:07
CreateMenuして、
AppendMenuする。

21:デフォルトの名無しさん
06/12/14 10:23:11
>>20
それはできますけど
聞きたかったのはリソース作るやつです。

できないっていうことっすか。
フリーソフトとか使ってます^^;

22:デフォルトの名無しさん
06/12/14 12:59:42
自分でリソーススクリプト書けば良いやん。

23:ななし
06/12/14 13:13:21
あの〜質問なんですが・・・VC++でビットマップを表示させたいのですがインポートしても
ビットマップは256色以上含んでいるため表示できませんとでるのですがどうしたらいいのですか??

24:デフォルトの名無しさん
06/12/20 09:47:20
初めてソフトを作ってみたのですが、バージョン情報に入れるURLの一つが何故かハイパーリンクになりません
どなたかヒントを教えていただけませんか?
↓のURLリンク(hoghog.hog)がそうです。

//ここから
hoger のバージョン情報

hoger ver 0.1
Copyright (C) 名無しさん 2007 All Rights Reserved.

Web Site :URLリンク(nanashi.hog)
Web Site :URLリンク(hoghog.hog)
//ここまで

使用しているCONTROLは、STATIC, SS_LEFT SS_NOTIFY WS_CHILD WS_VISIBLE WS_GROUPです。
よろしくお願いします。

25:デフォルトの名無しさん
06/12/25 22:15:25
ほしゅあげ

26:デフォルトの名無しさん
06/12/26 01:34:59
一般的に関数の戻り値にローカル値を指定するのはダメですが、
以下のような定数文字列もダメなんでしょうか?
試しに実行したらうまくいったのですが…

std::string func()
{
return "hoge"
}



27:デフォルトの名無しさん
06/12/26 05:14:17
どうみても戻り値はstd::stringです。
本当にありがとうございました。

28:デフォルトの名無しさん
06/12/26 07:49:02
>>26
戻り値の型が一般型ならば何の問題もない。
問題は、ローカルなオブジェクトをポイントするポインタを返すことだ。
定数はローカルオブジェクトではないから、それを返すことは問題ないし、
まして別の型に変換してしまえば問題になるわけがない。

// 1行目の例
int func() {return 0;}
// 2行目の例
char * func() {char foo[] = "FOO"; return foo;}
// 3行目の例
const char * func() {return "BAR";}
// 4行目の例
std::string func() {return "hoge";}

29:デフォルトの名無しさん
06/12/26 09:53:47
別の型に変換するという場合をもっと一般的に言えば、
ローカルなオブジェクトそのものを返すのは問題ないという感じか。

30:デフォルトの名無しさん
06/12/27 11:32:52
呼び出した側が自分のローカルな変数にコピーしてるべ
int n;
n = f(x);
ってやったらf(x)の戻り値を自分のローカル変数に入れてるやん

31:デフォルトの名無しさん
06/12/28 01:11:48
>>30
それで?

32:デフォルトの名無しさん
06/12/28 09:51:41
つまりアクセスするのは自分のローカルだから何の心配も要らない

33:デフォルトの名無しさん
06/12/28 10:14:55
>>32
だから?

34:デフォルトの名無しさん
06/12/28 10:20:43
だから>>29のは間違い

35:デフォルトの名無しさん
06/12/28 10:21:34
>>31=>>33のような低脳はほっとけ

36:デフォルトの名無しさん
06/12/28 10:42:31
>29が何を言いたいのかもよく判らないが、>30に至っては一体全体何を言いたいのやら。
まして>29が間違いだという>34は何を考えているのかさえ判らない。
結局のところ、>26の疑問は>28で答えられているので>29以降の流れはノイズということで宜しいか。

37:デフォルトの名無しさん
06/12/28 10:48:08
リストボックスにセル範囲を調節できる、|が入ったタイトルバーを
付けたいのですがどうやったらよいかわかりません。どなたか
ご存知の方教えてください。よろしくお願いします。

38:デフォルトの名無しさん
06/12/28 15:06:15
つ[ListView(ListCtrl)]

39:デフォルトの名無しさん
06/12/30 21:13:44
混合モードって一体どうやったら表示出来るんですか。
プロパティで設定しても全く変化がないです。
そもそもドコに表示されるんですか?


40:デフォルトの名無しさん
06/12/30 22:36:20
デバッグ中

41:デフォルトの名無しさん
06/12/30 22:41:53
VC++6.0でプログラムを始めたものです

プログラムの設定をiniファイルで管理しようと思っているんですが
iniに0xを記述しなくても16進数のデータを読み込む方法は無いでしょうか?
現在は数値読み込みを使って
test=0xFFFFFF
のようにして読み込んでいるのですが、他のプログラムのiniで
test=FFFFFF
の形で読み込んでいるものがあり、方法を調べたんですが見つからなかったので質問しました

ご存知の方、是非教えてください。お願いします。

42:デフォルトの名無しさん
06/12/30 22:47:00
>>41
GetPrivateProfileString()して、strtol()かstrtoul()でもできる。

43:デフォルトの名無しさん
06/12/30 22:48:02
>>41
またお前か
おなじこと何回も聞くな

44:41
06/12/30 22:50:45
>>42
レス有難う御座います
その方法でやってみます


45:41
06/12/30 22:55:15
>>43
このスレで発言したのは初めてだったんですが、過去に同じ質問をした方がいたようで申し訳ないです。
最低限過去ログは読むべきでした。
今後は過去ログを読んだ上で質問させていただきたいと思います。
連レスすみませんでした


46:デフォルトの名無しさん
06/12/30 22:55:20
スレリンク(tech板:216番)

47:39
06/12/30 23:06:51
>>40
デバッグ中に、"逆アセンブル"ウインドウを表示する事は出来るのですが、
混合モードについてはは影も形もありません。
何か特別な設定が必要なのでしょうか


48:デフォルトの名無しさん
07/01/02 17:44:27
>>47
ブレーク中にも表示されないの?

49:デフォルトの名無しさん
07/01/03 13:13:10
debugモードでビルドしたか

50:デフォルトの名無しさん
07/01/05 14:54:42
VC++ 2005で以下のDLL作成を考えています。
1.C言語で作成されたDLL関数を読み込む
2.関数を別名称にしDLL化する。
3.vb.netで作成したDLLを使用する。

1、2を実現するため以下のソースを記載したのですが
構文的におかしくないでしょうか?



51:50
07/01/05 14:55:19
#include "stdafx.h"
#include <stdio.h>
#include "api.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
#pragma comment(lib,"api.lib")
extern "C" __declspec(dllimport)
BOOL __stdcall APIOPEN(LPTSTR lpHostName ,LPTSTR lpNetmserviceName);
__declspec(dllexport) BOOL CAPIOPEN(LPTSTR host,LPTSTR netmservice)
{
BOOL r = APIOPEN(host,netmservice);
return r;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif


52:デフォルトの名無しさん
07/01/05 15:11:50
構文チェックはコンパイラの仕事

53:50
07/01/05 16:03:49
>52 失礼しました。
ビルドを実行するとCVTRES の致命的なエラー CVT1100
が発生しました。
MSDNで検索すると/TLBID オプションを変更するとなっているのですが
変更しても同様のエラーが発生します。

54:デフォルトの名無しさん
07/01/06 02:19:52
プロパティにカテゴリをつけたい場合
IDLファイルにどう書けばいいの?

55:デフォルトの名無しさん
07/01/06 02:42:40
ICategorizePropertiesを自力実装

56:デフォルトの名無しさん
07/01/10 11:27:08
Win32APIをいぢってプログラムを作ってるんですが、
エディットボックスで日本語入力がうまく行えません。
ウィンドウプロシージャでWM_CREATEのメッセージ処理に、
//ctrls.chatBar⇒HWND
//cs⇒LPCREATESTRUCT
ctrls.chatBar = CreateWindow(TEXT("EDIT"),TEXT(""),
    WS_CHILD | WS_VISIBLE,
    0,425,531,20,
    hWnd,
    (HMENU)CHAT_BAR,
    cs->hInstance,
    NULL
    );
と書いてエディットボックスを貼り付けてます。
日本語を入力する際、何か他に書かないことはあるのでしょうか

57:デフォルトの名無しさん
07/01/10 11:34:53
フォント

58:デフォルトの名無しさん
07/01/10 12:02:26
HFONT hFont;
hFont = CreateFont(20, 0, 0, 0,
FW_NORMAL, FALSE, FALSE, 0,
SHIFTJIS_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH, "MS Pゴシック");
SendMessage(ctrls.chatBar, WM_SETFONT, (WPARAM)hFont1, MAKELPARAM(FALSE, 0));
で、フォントを変えてみましたが何もかわりませんでした

59:デフォルトの名無しさん
07/01/10 15:14:12
A,B,Cと3つのボタンを配置し、Aのclick処理を行っている最中にBとCのボタンを先行してclickすると、
Aの処理が終了後B->Cと処理が続きますが、
このBとCの先行入力分のclickイベントを破棄して、無かった事にする方法ってありますか?
B,Cがclickされていても、Aの処理終了後は何もしない仕組みが作りたいのですが...

VS.NET 2003

60:デフォルトの名無しさん
07/01/10 15:21:55 BE:15528724-2BP(202)
Aの処理のアタマでBとCをdisable。

61:名無しさん
07/01/11 18:56:37
終了した後にもう一度繰り返し動作させたいのですが、
exit(0);のように簡単に終了させつつ、
繰り返し最初からやり直すコマンドみたいなものはないんでしょうか?

初心者のまま卒業した先輩のプログラムをいじることになったのですが、
クラスやヘッダなど分からないままやらされてます。
どうもバグがあるらしく、先輩のプログラムは終了しないプログラムでした。
(本当は作業が終わったら終了しなくてはならないプログラムです)
return;を使ってもどこに返して居るか分かりません。

main文に無理やり戻して次の関数を続行などできたらベストなのですが・・・

62:デフォルトの名無しさん
07/01/11 19:39:16
無理やり戻したところで、続きを正常に実行できる保障がどこにある。

63:デフォルトの名無しさん
07/01/11 19:56:59 BE:19410825-2BP(202)
>>61
>main文に無理やり戻して次の関数を続行などできたらベストなのですが・・・

それは別のバグを仕込むだけの愚行。
まず規定の処理で正しく終了するようにしれ。

64:デフォルトの名無しさん
07/01/17 14:29:56
助けてください
Visual C++ 2005 Express Editionを昨日インストールした本当の超初心者なのですが
インストールはしっかりできたのですが、新しいプロジェクトを開いても、何の反応
もしない新しいプロジェクトとかかれたものしか出てきません。どうしたらよろしいですか?
教えてください、お願いします

65:デフォルトの名無しさん
07/01/17 16:20:02
MAME32をジョイスティックで動かすことをしたいのですが
keybd_eventをつかっても動きません
メモ帳で試してみたら、動きました

何か他の方法があるのでしょうか


66:名無しさん
07/01/17 16:24:50
>>62
続きはありません。
メインじゃないプログラムで「この文章を読み込んだら終了」
ってことになってるんですが、終了させる方法が分かりません。
プログラムが少しできる人に付き添って貰ってreturn;ってのを付けて行ったんですが
だめでした。
>>63
初期化の関数が別にあります。
return;を付けていってもダメなのでmain文に何とか戻す方法は無いか困ってます



67:デフォルトの名無しさん
07/01/17 18:07:07
>>66
Cを知らないのにソースをいじろうってのが根本的に間違ってます。

68:デフォルトの名無しさん
07/01/17 18:25:00
>>66
ソースうpすれば訂正してあげるよ

69:デフォルトの名無しさん
07/01/17 18:58:39
まあ試しにsetjmp/longjmpを試すのも面白いかもw

70:デフォルトの名無しさん
07/01/17 19:01:45
>>64
意味がわからん、新規作成じゃだめなのか

71:名無しさん
07/01/17 19:01:58
>>67
Cは約半年程授業で習ったのですが、C++は初めて触るような感じです
素人に毛が生えた程度なので超初心者用とタイトルのあるここに書き込みしました
>>68
このプログラム自体は卒業した先輩の卒論ですので、
アップロードのような行為はできないです
サイズとしても26.2Mあります。

このプログラムを使って工場のようなものを擬似的に再現して実験するのですが
実験後、待ち状態のまま終了しないことが分かり弄らされてます。

72:デフォルトの名無しさん
07/01/17 19:09:16
#include <iostream>
using namespace std;

int main(void)
{
unsigned char x,y;

cout << "2つの値を入力してください。\n";

cin >> x >> y;

x -= '0';
y -= '0';

int a = x + y;
int b = x * y;

printf("x = %d, y = %d, x + y = %d, x * y = %d",x,y,a,b);

return 0;
}

これで出力したら10以上の数値が出ないんですが、
どうしたら出るようになるか教えてください。

73:デフォルトの名無しさん
07/01/17 19:26:55
>>70様 新規作成したあと新しいプロジェクトとでて、どのボタン押してもフーリズ
したままです

74:デフォルトの名無しさん
07/01/17 20:11:04
Visual Studio 2005でC++のMFCでダイアログベースのアプリを作っているのですが、
C○○DlgクラスのメソッドでgetParent()を使うとNULLが返ってきます。
getWindow(GW_OWNER)も試しましたがNULLが返ってきました。
どんな原因が考えられますか?

やりたい事はCProgressCtrl::Create()なのですが、これの引数に親ウィンドウのポインタが必要になります。
アプリ内で子ウィンドウを立ち上げる事はしていないのですが、
この場合親ウィンドウが無いのでそのせいでしょうか?

75:デフォルトの名無しさん
07/01/17 21:03:36
>>74
そりゃCreateしないとウィンドウは存在しないべ

76:デフォルトの名無しさん
07/01/17 21:08:25
>>73
新しいプロジェクトってどこにでるの?
通常は、ファイル-新規作成-プロジェクトでWin32を選べば
Win32コンソールアプリケーションが出ると思うけど。

77:73
07/01/17 21:31:09
>>76様 ありがとうございます
Win32っていう選択肢もでてこないんです。ファイルに新規作成という言葉がなくて
類似する言葉は新しいプロジェクトぐらいしかありません。その新しいプロジェクト
のなかにはテンプレート、プロジェクトという項目があります。

お手数おかけしますが、どうぞおねがいします



78:デフォルトの名無しさん
07/01/17 21:31:22
>>74
親ってCProgressCtrlの親だから、DlgからCreateするならthisポインタでOK

79:74
07/01/17 21:32:29
>>78
thisポインタも試したのですが、
ビルドは通ってもランタイムに不正落ちします。

どんな原因が考えられるでしょうか?

80:デフォルトの名無しさん
07/01/17 21:33:47
コード見ないと分からない。

81:デフォルトの名無しさん
07/01/17 21:34:15
>>79
どこでCreateしてるのだ
ダイアログのOnCreate以降じゃないとだめだぜ?

82:デフォルトの名無しさん
07/01/17 21:36:51
>>77
デフォルトのテンプレートがインストールできてないのかな?
インストールしなおしてみては

83:デフォルトの名無しさん
07/01/17 21:41:53
Express EditionってなんかファイルをいじらないとWin32のプロジェクトが出てこないとか言うことはなかったっけ?

84:73
07/01/17 21:46:21
>>82様 ありがとうございます。やってみます。


85:デフォルトの名無しさん
07/01/17 22:51:09
久々にVC++インスコしてみたら書式が変わってるんですがこれはいったい何事ですか?
なんかすべての処理がヘッダファイルに書かれていてcppの方はヘッタファイルのインクルードしかないんですけど・・・
マネージコード、アンマネージコードとかいうヤツのせい?
それとも.NETとかいうヤツから変わったの?

86:デフォルトの名無しさん
07/01/17 23:01:09
>>83
MSのサイトにそういうのあったようなきがす。
PlatformSDKあたりに。

87:デフォルトの名無しさん
07/01/17 23:21:53
>>85
ウィザードの種類によっては、cppファイルの生成とかいうオプションがあったと思うよ。

88:デフォルトの名無しさん
07/01/18 02:54:45
>>87
だから、それで生成したcppファイルが・・

89:デフォルトの名無しさん
07/01/18 03:08:11
よーわからん、クラスのプロパティ出してメッセージ選ぶとハンドラが作成される。

ってそういう話でまくて?

90:デフォルトの名無しさん
07/01/18 06:36:05
どーせVC++がVC#っぽくなってるってことだろう

91:73
07/01/18 17:11:06
たびたびすいません、>>82様のいうとおりやったのですが、document and settingなどと書かれたものが 有効な
win32アプリケーションではありませんとでました。
どうしたらよろしいですか?市販のVisual C++ 2005 Express Editionを買えば
できるでしょうか?

92:デフォルトの名無しさん
07/01/18 19:39:13
>>91
ログ読まずにいきなり回答してみる
こういうことで合ってる?
URLリンク(www.microsoft.com)

93:73
07/01/19 12:57:22
>>92様どんレスですいません、ありがとうございます
やってみます

94:デフォルトの名無しさん
07/01/19 15:02:17
エディットボックスに入力した日本語を、ボタンを押すとtestという
関数に取り込みたいのですが下のようにしてみたんですがうまくいきません。
どのように変更すれば取り込めるのか教えていただけないでしょうか?
よろしくお願いします。

char ss;
m_edit.GetWindowText(ss);

void test(char *ss)
{
while(*ss != '\0'){
・・・・処理・・・
ss++;
}
}

95:デフォルトの名無しさん
07/01/19 15:21:15
何がどううまくいかないのか説明しろ。話はそれからだ。

96:デフォルトの名無しさん
07/01/19 15:45:46 BE:23292162-2BP(222)
>char ss;
>m_edit.GetWindowText(ss);

コンパイル通らん。

97:94
07/01/19 16:38:11
すいませんchar ss;じゃなくて、CString ss;でした。
エディットボックスにコントロール変数m_editをつくって、
ssに取り込んで、そのデータをtestにとりこんで処理をしたいと考えています。
*ssでよめるようにするには、エディットボックスからどのようにとればいいの
かわかりません。よろしくお願いします。

98:デフォルトの名無しさん
07/01/19 17:59:42
void test(LPCTSTR ss)で受け取る

99:デフォルトの名無しさん
07/01/20 16:26:02
MFCのダイアログベースのプログラムからスレッドを生成した場合、
生成した子スレッドに対してダイアログの方は親スレッドと考えて良いのでしょうか?
つまりスレッドの識別子などがあるのでしょうか?

100:デフォルトの名無しさん
07/01/20 19:58:56
スレッド間に親子関係は無い。
ライブラリの初期化・終了処理を考慮しなければ、全て同等。
スレッドの識別子は両方にある。

101:デフォルトの名無しさん
07/01/20 21:38:38
ifの条件が増えたとき、下のどちらの記載が望ましいのでしょうか?

if ( (条件1)&&(条件2)&&(条件3)&&(条件4)&&(条件5)&&(条件6) ){
 ;
}

if ( (条件1)&&(条件2) ){
 if ( (条件3)&&(条件4) ){
  if ( (条件5)&&(条件6) ){
   ;
  }
 }
}

102:デフォルトの名無しさん
07/01/20 21:45:22
>>101
スレ違い

103:デフォルトの名無しさん
07/01/20 21:51:11
>>101
関数化しろ

104:デフォルトの名無しさん
07/01/20 23:24:15
>>101
どっちでもいいけど自分なら前者で書くかな。
条件部分が長すぎて画面からはみ出るなら適度に改行したり。
if((条件1)&&(条件2)&&
(条件3)&&(条件4)&&
(条件5)&&(条件6)){
;
}

105:デフォルトの名無しさん
07/01/21 17:55:25
>>100
返信ありがとうございます。

では、生成されたスレッドからダイアログの方へメッセージを投げたい場合は
どうすればいいのでしょうか?
スレッドを生成する際に引数としてダイアログのスレッドIDを渡す、など必要になるのでしょうか?

106:デフォルトの名無しさん
07/01/21 19:48:13
ダイアログなんだからウィンドウハンドルでも渡しておけばいいのでは?

107:101
07/01/21 20:41:18
>>103-104
トンクス
ifを分割すれば余分な条件を弾けて得かなって思ったので質問しました。
クラス内で関数化するのが一般的かもしれませんが、
if() の括弧の中を全て#defineに入れてみようと思います。



108:デフォルトの名無しさん
07/01/21 21:25:49
スレ違い

109:デフォルトの名無しさん
07/01/21 23:24:17
実行ファイルにjpgなどを格納することはできますか?
使用しているのはVC++.net2003です。

110:デフォルトの名無しさん
07/01/21 23:34:54
>>107
>103

111:デフォルトの名無しさん
07/01/21 23:36:46
>>109
できます。この板のどこかのスレでそんな話題を見かけました。

112:デフォルトの名無しさん
07/01/22 17:36:56
fgets や std::getline を使わずにテキストファイルからデータを一行ずつ読み込みたいのですが、
ReadFile で改行文字か EOF が来るまで1バイトずつ読み込んでバッファに取り込むという方法しか
思いつきません。もっといい方法ってありますか?
ReadFile でファイルを全部読み込んでから、一行毎に分解するという方法は出来れば避けたいです。

扱いたいのは200万行以上あるファイルです。
いまだにVC6

113:デフォルトの名無しさん
07/01/22 17:54:39
>もっといい方法ってありますか?

あなたにとって、どういうものが良いものなのか説明してください。

114:デフォルトの名無しさん
07/01/22 18:11:46
>>112
素直にfgets()やstd::getline()を使うことにするのが、「もっといい方法」だと思います。

115:デフォルトの名無しさん
07/01/22 18:34:12
ならメモリマップトファイルはどうだ。

116:112
07/01/22 19:16:40
回答ありがとうございます。

>>113-114
std::getline() でやってたのですが、処理に時間が掛かるのでどうにかならないかなと思いました。
根拠はありませんが、 API で同様の機能が提供されていればもっと効率よく出来そうだとも思ったのですが
どうやら無さそうですね。
素直に std::getline() のままで処理内容を見直すことにします。

>>115
CreateFileMapping() とMapViewOfFile() でファイルをメモリ空間にマップできるんですね。
これはこれで面白そうなので別件で試してみようと思います。

117:デフォルトの名無しさん
07/01/22 19:41:58
全部読む必要があれば結局同じことだけどな

118:名無しさん(66)
07/01/22 21:27:44
待ち状態のまま終わらないプログラムの
int nRet = WaitForMultipleObjects(NUM_OF_THREADS, hThread, TRUE, INFINITE);

このWaitForMultipleObjectsを終了させるか、
INFINITEYのまま何かを読み込んだらタイムアウト、
のような動作はできるものなのでしょうか?

>>69さんのsetjmp/longjmpを使ってみたのですが、
WaitForMultipleObjectsの後ろにジャンプすると、何故か
ジャンプした後にプログラムが勝手に終了してしまいます。

119:デフォルトの名無しさん
07/01/22 21:38:05
WaitForMultipleObjectsExとQueueUserAPCという手がなくはないが、
なんかお前がいきあたりばったりで使いそうで嫌だ。

120:デフォルトの名無しさん
07/01/22 21:52:50
>>118
スレッドのいずれかが終了すればWaitFor....から制御が返る。
戻り値から終了したスレッドを特定できるので、それ以外のスレッドを終了させればOK。

66でreturnしても駄目だったと書いてるけど、何が駄目だったのか不明。

121:デフォルトの名無しさん
07/01/22 21:55:27
あ、第3パラメタTRUEか。120じゃだめです。


122:デフォルトの名無しさん
07/01/22 21:57:12
FALSEにして120すれば良い気もする

123:デフォルトの名無しさん
07/01/23 00:25:46
でも結局>>67なんだよな……。

124:デフォルトの名無しさん
07/01/23 01:05:12
Visual C++ 2005 Expressエディションでまずは Hello Worldからと思い
新規プロジェクトでCLRコンソールアプリケーションを選びました。
そうしたら、もうビルドするだけになってるんですね。
まぁこれはいいんですが、このときこんな感じで自動生成されたんですが、

--
#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)
{
  Console::WriteLine(L"Hello World");
  return 0;
}
--
ここで
int main(array<System::String ^> ^args)
の部分の意味がさっぱりわかりません。
多分引数を受け取る?配列?な気がしますが、良く分かりません。

C言語でやったように
int main( int argc , char *argv[] )
パラメタを処理できることが出来るのは判ったのですが、やっぱり
int main(array<System::String ^> ^args)
の意味と具体的なパラメタの処理方法が知りたいです。

よろしくお願いします。

125:デフォルトの名無しさん
07/01/23 01:28:37
>>124
くだすれC++/CLI(初心者用)
スレリンク(tech板)l50

普通のがよければWin32コンソールアプリを選べ

126:デフォルトの名無しさん
07/01/23 01:37:22
>>125
Visual Studio にインストールされたテンプレートってのが表示されて
その中に Win32コンソールアプリってのはありません
あるのは
クラスライブラリ    CLRコンソールアプリケーション
空のCLRプロジェクト Windowsフォームアプリケーション

の4つだけです。

それと知りたいのは、
int main(array<System::String ^> ^args)
の意味するところです。

できれば解説願えませんでしょうか?

あっ、くだすれC++/CLI(初心者用)で聞くべき質問ってことですか?
すみません、良く分かってなくて。

127:デフォルトの名無しさん
07/01/23 01:47:31
MSDN読めよ、糞が。

とか言いたくなっちゃうから、きちんとマニュアルは読もうな。
C++/CLIで探せばすぐ判るから。

128:デフォルトの名無しさん
07/01/23 09:13:59
MSは初心者にはC#やVBを推奨してるから
VCは使いにくい面があるかもしれない。
特に目的が決まってないならC#やVBをお勧めする。

129:デフォルトの名無しさん
07/01/23 09:33:31
PlatformSDK入れてMSDNの該当ページ(>>92)に従え

130:デフォルトの名無しさん
07/01/23 21:23:48
>>126
そりゃ左でCLRを選んでるからだろ
Win32選んでみな

131:デフォルトの名無しさん
07/01/24 15:29:36
Visual C++だとstring型のハンドルがありますが、
C++のstringは使えないでしょうか?
Visual C++はC++の拡張と聞きましたが、C++が分かっていても、
Visual C++はほとんど一から型とかライブラリの使い方を勉強する必要が
あるのでしょうか?


132:デフォルトの名無しさん
07/01/24 22:08:59
使いたければ使えばいい。

133:デフォルトの名無しさん
07/01/24 23:02:30
組み込み型じゃないからな

134:デフォルトの名無しさん
07/01/25 02:00:37
VC++.NET2002で質問です。
MFCアプリケーション上でダイアログボックスを作って、
DoModal()でモーダルダイアログボックスを表示してます。
ところが、そのダイアログボックスのOnInitDialog()内で
メッセージボックスAfxMessageBox( "HogeHoge");を表示すると
OKで閉じた後、なぜかモードレスダイアログになってしまいます。
(ダイアログ表示中でも親ウィンドウが操作できてしまう。)
これってこういう仕様なのでしょうか?


135:質問者A
07/01/25 09:21:22
Visual Studio C++ Express Edition使っています。
初めてwindowsプログラムします。
猫でもわかるプログラミングのWindowsSDK編第1部の
イントロダクションのsample01.cppをビルドしたんですが、
エラーが出てしまいます。

★プロジェクトの作成方法
[ファイル]-[新規作成]-[プロジェクト]
[新しいプロジェクト]ダイアログで
[プロジェクトの種類]→Win32
[テンプレート]→Win32コンソールアプリケーション
と選択して、
プロジェクト名(lesson)を入力して
[OK]をクリック。

[Win32アプリケーションウィザード]
で、
[アプリケーションの種類]→Windowsアプリケーションにチェック
[追加オプション]
で、
[空のプロジェクト]→チェックせず(デフォルト)
[プリコンパイル済みヘッダー]→チェック(デフォルト)
で、[完了]ボタンを押しました。

136:質問者A
07/01/25 09:21:54
あらかじめ用意された↓をビルドすると正常終了します。

//lesson.cpp
#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

137:質問者A
07/01/25 09:22:33
★プログラムの変更

これを猫でもわかるに変えたいんですけど、
関数名が@とAで違うので、
Aの関数名だけ@の名前(_tmain)に変えて
実行しました。

@↑
int _tmain(int argc, _TCHAR* argv[])

A猫でもわかるのサンプル
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst,
LPSTR lpszCmdLine, int nCmdShow)





138:質問者A
07/01/25 09:24:23
すると、↓のようなエラーが出てしまいました。

★エラー内容
lesson.cpp
d:\lesson\lesson\lesson.cpp(24) : error C2440: '=' : 'HGDIOBJ' から 'HBRUSH' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
d:\lesson\lesson\lesson.cpp(26) : error C2440: '=' : 'char [25]' から 'LPCWSTR' に変換できません。
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
d:\lesson\lesson\lesson.cpp(40) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [25]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
d:\lesson\lesson\lesson.cpp(47) : warning C4244: 'return' : 'WPARAM' から 'int' への変換です。データが失われる可能性があります。
ビルドログは "file://d:\lesson\lesson\Debug\BuildLog.htm" に保存されました。
lesson - エラー 3、警告 1
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========

プロジェクトの作成の仕方が悪いのでしょうか?
教えてください。

139:質問者A
07/01/25 09:27:11
変更後のプログラムです。(長いので分割して書きます。すみません)
#include "stdafx.h"
#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
char szClassNme[] = "ウィンドウクラス・ネーム";



140:デフォルトの名無しさん
07/01/25 09:51:35
URLリンク(www.kumei.ne.jp)

ここの2005と書いてある部分を参照

141:質問者A:
07/01/25 10:09:30
(「連続投稿です」と言われて書き込みが途中で止まっていました)

>>140
ありがとうございます。気付きませんでした。
[VS2005の設定方法]見ました。
>次に、Win32APIを利用したWindowsアプリケーションの設定です。
>「新しいプロジェクト」では、プロジェクトの種類を「Visual C++」、テンプレートを「Win32 プロジェクト」にします。
私の環境だと「Win32 プロジェクト」がありません。
「Win32コンソールアプリケーション 」のみです。
(これってVC++2005のExpressだと無理ということでしょうか?)
とりあえず「Win32コンソールアプリケーション 」として
残りはサイトに書かれている通り、
「アプリケーションウィザード」で、
アプリケーションの種類を「Windowsアプリケーション」
追加のオプションを「空のプロジェクト」
にしました。
しかし、>>138 と同じエラーがでてしまいました。


142:デフォルトの名無しさん
07/01/25 10:58:36
>>141
プロジェクトのプロパティの「全般」に文字コードの指定があるからMBCSに変更。
24行と47行のは明示的にキャストしとけ。

にしても、初心者が見る箇所に
Win16を引き摺ってるようなコードを放置してあるのは良くないな。

143:質問者A:
07/01/25 11:19:00
>>142
>プロジェクトのプロパティの「全般」に文字コードの指定があるからMBCSに変更。
できました!ありがとうございます。


144:デフォルトの名無しさん
07/01/25 13:28:52
OS:WindowsXP SP2
環境:VS2005 MFC使用
教えていただきたいことがあります
イミディエイトウィンドウにメモリリーク時の情報が表示されますが、発生したファイル名
を表示したいのですがどのようにしたらよいのでしょうか?
MFCでは標準でDEBUG_NEWが定義されており、これでファイル名も表示されるという情報を
ネットでよく見かけるのです。この情報に間違いがなければデフォルトで表示されるはずなのですが・・。

今のアウトプットウィンドウの表示
Detected memory leaks!
Dumping objects ->
{15027} normal block at 0x01322E30, 346 bytes long.
Data: <5 9 9 9 E Q> 35 00 39 00 39 00 39 00 00 00 45 00 00 00 E6 51
Object dump complete.

おそらくこうなるであろうファイル名付属のアウトプットウィンドウの表示
Dumping objects ->
C:\MyProjects\TestProt\Test.cpp(17) :
{16} normal block at 0x00780EC0, 4 bytes long.
Data: < > CD CD CD CD
Object dump complete.

よろしくお願いいたします。

145:デフォルトの名無しさん
07/01/25 13:49:44
その質問に答えようと思ったら
適当なプロジェクト作ってわざとメモリリークさせて結果を見てみるだけだから
自分でやってみればいい

146:144
07/01/25 14:04:43
>>145
ためしに新規のプロジェクトを作成し、ってわざとメモリリークさせてみたところ、
ファイル名が表示されていました。
DLL参照したり、ソースファイルとプロジェクトのディレクトリを別々にしたりしてるんで
それが原因なのでしょうか?

147:デフォルトの名無しさん
07/01/25 17:13:19
>>135
猫でもわかるなら、VS2005サンプルプログラムのところも見てみろよ。

148:デフォルトの名無しさん
07/01/26 21:16:50
>>147は死ね
このスレは「くだすれVisual C++(超初心者用)その4」だぞ
馬鹿か貴様

149:デフォルトの名無しさん
07/01/26 21:18:56
>>135
そのコードのURL書いてみて

150:デフォルトの名無しさん
07/01/26 21:32:31
超初心者には147程度の記述では不親切だったか?

151:デフォルトの名無しさん
07/01/27 02:40:35
135の件は142の答えで解決済み。

152:デフォルトの名無しさん
07/01/28 11:15:33
Visualstudio.NET2003使ってる者ですが
プロジェクトを作って 新しい項目の追加を選択して
a.cとか適当名前いれて
ソースファイルに何も書き込まずに
デバッグ無しで開始を選択すると
エラーが発生して デバッグを開始出来ません 
指定されたファイルが見つかりませんのウインドウと
error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 _WinMainCRTStartup で参照されました。
fatal error LNK1120: 外部参照 1 が未解決です。
とでます。
どうしたらよいのでしょうか・・
さっぱり見当が付かないんですが。



153:デフォルトの名無しさん
07/01/28 11:33:04
main(wmain/_tmain)関数から始まるプログラムを書きたければ、Win32コンソールプロジェクトを作れ。
そうでなければWinMain(wWinMain/_tWinMain)関数を書け。

154:デフォルトの名無しさん
07/01/28 11:55:53
プログラム以前のレベルですが2点教えてください。

10年近く前までC(++ではない)やってた者ですが、
突然ゲーム作りがしたくなりまして
一から勉強し直しのつもりでVisual C++を買おうと思ってるんです。
でも何を買ったらいいのかさっぱり判りません!

1.VC++.NET2003ってStandard版しかないのですか?
Professionalとか、上位版が出ていたりするのですか?

2.VC++.NET2003って今でも店頭で入手できるんでしょうか?
2005を買ってダウングレード、みたいな方法もできるのですか?
その場合には2005のどれを買えばいいのですか?

とりあえずDirectX関連の本を買って読んでるんですが
その本がC++.NET2003までしか対応していないのです。
↓漏れが買った本
URLリンク(www.kohgakusha.co.jp)

155:デフォルトの名無しさん
07/01/28 13:06:33
>>154
2003を買う必要は全くありません。
2055EEを入手するか、それで飽き足らなければ2005PRO辺りを買えば宜しいかと。

156:デフォルトの名無しさん
07/01/28 13:13:21
2005EEはフリーだよ

157:154
07/01/28 15:31:30
>>155-156
ありがとう

あえて2003を買おうとしているのには訳があって
この本にソースとかプロジェクトファイル?が収録した
CD-ROMが付属してあるわけですが、
2003用のファイルを2005の環境で開いたら、
何かと細かいエラーとか警告とか、いろいろ出てきそうな
気がするんです。(問題ない?)

いちばん恐れているのは、2005の環境で変なエラーがいっぱい出て、
それを直すためにコンパイラの設定とかソースの修正とか
いろいろ見直してるうちに結局ワケわかんなくなっちゃって、
しかもそれでもなお直らず、本当に勉強したい部分にまったく
触れられないまま、挫折してしまうことです。

・・・すいません、実はVC6の頃に一度これで挫折してるんですorz

とりあえず2003の環境なら、あまり深く考えずに
本に書いてある通り操作したら、一通りサンプルもうまく動いて
勉強に専念できそう、と考えたんです。
本読んでて、昔と今じゃあ技術が全然違う事だけはよくわかったので、
初心に帰ってがんばろうと思ってます
長文スマソ

158:デフォルトの名無しさん
07/01/28 16:35:56
10年近く前までCをやっていたと言い張る人間にしては、随分と情けない話だ。

159:デフォルトの名無しさん
07/01/28 16:55:02
古本屋で買って来たVC1の本でもほとんど同じだったよ
昔の方が機能が少なくてわかりやすいという点もあるけど

160:デフォルトの名無しさん
07/01/29 02:32:23
途中で挫折するのは基本ができてないくせに応用したがるからじゃまいか

161:デフォルトの名無しさん
07/01/29 11:13:42
そういうこと。
順調に進歩する人と
いつまでたっても進歩しない人と
途中で投げ出す人を見てきたが、
性格というか気分というか、
そういうが現れてるような気がした。

162:デフォルトの名無しさん
07/01/29 22:21:12
>>157
まあVC++ 2005はセキュリティ関連で色々と細かい警告を出すようになったが、それは有名だしググれば対処法はすぐ見つかる。
その程度のプログラムならそのほかには、特にVC++ 2005に持っていったからといってエラーになるということはないと思う。
せいぜいSDKを入れていない、入れたけどVC++で設定し忘れることに気を付けろというくらいかな。


163:デフォルトの名無しさん
07/01/30 00:06:14
もう一つ、文字コードの違いにも注意。

164:デフォルトの名無しさん
07/01/30 00:08:27
10年前ってオレ学生だな

DOSのBorlandCと窓のC++習ってたけど
似たような事やるにしても
DOSベースか窓ベースかで難易度に死ぬほど差を感じた

で、その頃C++Builderとか出てきたけど
あれはMSVCとは比べもんにならんぐらい簡単で驚いた

165:デフォルトの名無しさん
07/01/30 00:43:43
失礼します。
今日C++をはじめてみた者です。アホらしい質問かもしれませんがお願いします。
以下のプログラムについて質問です。
#include <iostream>
using namespace std;
class Glass
{int nakami; //水の量
public:
Glass(int x) : nakami(x){} //引数を取るコンストラクタ
//ユーザかプログラマに渡される値(xで表される)をnakamiに格納
void dasu(int); //水を出す関数 };
void Glass::dasu(int x){
if(nakami >= x){ nakami -= x;
cout<< "水を出しました。" << endl;
cout<< "現在のコップの中身は" << nakami << "です。" <<endl; }
else{cout<< "そんなに水がありません。" <<endl;
cout<< "現在コップの中には" << nakami << "入っているだけです。" <<endl; } }

int main()
{int x; //整数の「いれもの」xの定義。下のcinの前ならどこにあってもよいのです。
cout << "コップを生成します。どれだけ水をいれるか入力してください。" << endl;
cin >> x;
Glass glass(x); //引数を取るコンストラクタが呼び出され、
//水がxだけ入ったglassという名のコップが生成される
cout << "さあ、glassから水を出します。いくら出しますか。入力してください。" <<endl;
cin >> x; //上のxを使いまわしている
glass.dasu(x);
cout<<"終了"<<endl; }
これは、とある(おそらく有名な?)C++入門ページの所からの引用なんですが、
なぜ、変数のxを使いまわすことができるのかわかりません。
一回目に指定した物がnakamiに入って、二回目に指定した物がdasu量になるなんて、
そんな都合のいいようになるわけが・・・と思ったら普通になったわけですが、どうなってるんでしょうか?

166:デフォルトの名無しさん
07/01/30 01:02:34
>>165
何が聞きたいか分からん・・・
たとえば、

x=5;
cout << x;
x=10;
cout << x;

これでも x を2回使いまわしてることになるが(1回目は1"5"、2回目は "10" が出力される)
何か疑問があるか?

167:デフォルトの名無しさん
07/01/30 01:09:00
>>166
あーーーーーー、簡単な形で見ると、わかりました。
つまり、cinでユーザーがxに入力した値はそのすぐ下にあるxに
反映されると言うわけ・・・かな? いや、そうですね。
解決しました。ありがとうございます。

168:デフォルトの名無しさん
07/01/30 06:17:17
>>167
今更どうでもいいけど、ここはVCのスレだから、どうせならC++初心者のスレに逝けばよかったのに。

169:デフォルトの名無しさん
07/01/30 12:26:49
foobar2000のプラグインを作ってみたいんだけど、
当方、組込み系のプログラムが専門で、Windowsのプログラムは未経験です。
VisualC++を使ってみようかと思ってるんですが、Foobar2000のプラグイン開発って
ExpressEditionでもできるの?



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5287日前に更新/168 KB
担当:undef