くだすれVisual C++(超初心者用)その4at TECH
くだすれVisual C++(超初心者用)その4 - 暇つぶし2ch1:デフォルトの名無しさん
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エクスプレス エディションをインストールしたのだが どうやって作ればいいのかわからない(手順のサイトあればよろ)
② ボーランドのC++ でも作り方をしりたい(手順のサイトあればよろ)
③ もしあれば他の良いC++の無料をダウンードしたいのですが・・・(VC++の無料版って他にあるのか・・・)
↑C++にはこだわらない(HSP、VB以外で・・・っていうか ないですよね^^) 一応JavaScript で簡単なやつを作った。

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

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
★プログラムの変更

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

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

②猫でもわかるのサンプル
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でもできるの?


170:デフォルトの名無しさん
07/01/30 12:31:16
超初心者とかいう以前の問題かもしれないけど、教えてください。
URLリンク(www.imgup.org)
このOrchisのブラウザ→firefox.exeの部分はなんていう名称でしょうか?
Orchisではサブメニューとなってますが、VC++でいうには?
マウスポインタが来ると展開されるもの…というか…メニューバーとも違いますし…

171:デフォルトの名無しさん
07/01/30 16:04:29
フラッシュ板かこっちか迷いましたがプログラム側で起動すると思ったのでこちらに書きます

インターフェイスをswfにしたいんですがプログラム側ではどういう処理が必要ですか?
.exe起動→swf起動→swfをウィンドウに貼り付け
今ここで行き詰ってます

よろしくお願いします

172:デフォルトの名無しさん
07/01/30 16:37:24
さあ?

173:デフォルトの名無しさん
07/01/30 17:38:54
スレリンク(tech板:785-786番)

このような状態なんですがどうすればいいんですか?

174:デフォルトの名無しさん
07/01/30 17:45:41
>>173
プロジェクト作った?

175:173
07/01/30 18:32:03
今プロジェクト作成に気をつけながらやってみたらうまく行きました
朝のやつは何かおかしかったみたいです。ありがとうございました

176:デフォルトの名無しさん
07/01/30 23:23:54
openfiles.exeのように、
ロックを取得しているプロセス名を取得する方法ってどんなやり方がありますかね?


177:デフォルトの名無しさん
07/01/31 01:16:18
includeファイルの中身を見ても仕組みがよくわからないんですが
インクルードファイルの機能を見るにはどうすればいいですか?
ヘルプを見ましたがいまいちよくわかりませんでした・・・
何かよい検索方法があれば教えてください
よろしくお願いします

178:デフォルトの名無しさん
07/01/31 19:38:21
もう少し具体的に書いてくれ

普通は、この機能を使うには
どのヘッダファイルをインクルードすればいいのかを
調べるから順番が違って参考になる答えがだせるかわからんけど

179:デフォルトの名無しさん
07/01/31 23:01:33
タブ(CTabCtrl)を使ったプログラムを作ったのですが、タブ内の処理(他クラス・チャイルド)と親クラス(?)で変数を共有する方法を教えてください。
親クラスの変数をタブのクラスで参照できれば良いです。
また、親クラスからあるトリガで子クラスの表示処理を走らせたいのですが、子クラスを起こすor親クラスから直接描画できますか?
よろしくお願いいたします。

180:デフォルトの名無しさん
07/01/31 23:06:16
スルー

181:デフォルトの名無しさん
07/02/01 00:12:34
>>179
正直言っている意味がわからんのだが、
参照できる親クラスメンバは、子クラスからならばprotectedかpublic、
継承関係にないならばpublicのみだぞ。


182:デフォルトの名無しさん
07/02/01 04:52:51
親ってことは、CWnd::GetParent()か?

183:デフォルトの名無しさん
07/02/01 04:55:17
みんな意地悪しないで(知ってて知らん振り、わからない振り?)、
自分が初心者だった頃を思い出して質問を酌んでやれよ。

184:デフォルトの名無しさん
07/02/01 04:57:24
>>181
>正直言っている意味がわからんのだが、

そりゃ、>>179以上にあんたが初心者ってことだお。

185:デフォルトの名無しさん
07/02/01 04:59:25
言いたい事は何となくわからんでもないけど
クラスをどう作ってるか分からんとねぇ

186:デフォルトの名無しさん
07/02/01 06:13:21
>183-184にまかせた

187:デフォルトの名無しさん
07/02/01 08:29:22
そりゃクラスじゃなくてウィンドウの親子だな

188:デフォルトの名無しさん
07/02/01 18:09:45
つまりそうだろ!?

189:デフォルトの名無しさん
07/02/01 22:29:51
すいません、自分はクズたれ初心者です。
そこで質問です、何か作ってみようと思って、SDKみたりするんですが
C言語だと、長ったらしいソースをメッセージ毎に書いて、他にも知識が必要だと思い
ところが、MFCだと、それら(win32api達)を一通り用意用意されすぎて、でも結局win32apiをラップ
したものですし、なんかMFCを使うのは、パソコン初心者に「さぁ、使い方は教えないが便利だよ。使ってみなさい」
と言って標準アプリが付いたパソコンをわたしてるような感じで、使い勝手が分からない感があります。
どこかサイトで、MFCをつかわずwin32apiを使ったC++プログラムサンプルソースを公開してるところは
ありませんでしょうか、CodeGuru,TheCodeProject,Programmer'sHeaven,SourceForge等を見ても
MFCか、いわゆるコンソールアプリ(boost等)のどちらかしか見つけられません。
自分の探し方が悪いのでしょうが、どなたか教えてください。
(ちなみに、FastCopyのソースを見ましたが、敷居が高すぎました)

190:デフォルトの名無しさん
07/02/01 22:43:19
MSDNにSDKのサンプルがいっぱいついてる

191:デフォルトの名無しさん
07/02/01 23:13:59
>>189
そもそもWin32APIが関数と構造体の塊のようなものだから、
直にWin32APIを使うプログラムなんてCでもC++でも大して変わらない。
(COMが絡む分野を除く)

Win32APIを使ったプログラムで、C++らしく書くとすると、
結局MFCがそうであるように多かれ少なかれWin32APIを何らかの形でラップしたような感じになるのがオチ。
だからといってMFCを使えというわけではないし、MFC以外にも色々とあるわけだが。

192:デフォルトの名無しさん
07/02/01 23:35:56
VC++を評価版でやってみたいのですが、何をダウンロードしてインストールすればよいのでしょうか?
初歩的な質問で恐縮ですがよろしくお願いします。

193:デフォルトの名無しさん
07/02/01 23:39:37
>189
おいらは、猫->ATL/WTL

194:デフォルトの名無しさん
07/02/01 23:43:25
>>192 これのどっちか
Visual Studio 2005 Team Suite 180日間限定評価版
Visual Studio 2005 Professional Edition 90日間限定評価版
URLリンク(www.microsoft.com)

195:デフォルトの名無しさん
07/02/01 23:45:32
>>194
どうもありがとうございました。

196:デフォルトの名無しさん
07/02/02 14:43:14
リソース*.rcファイルの中で#ifdef,#else,#endifの処理があるのですが、
プロジェクトの設定の、プリプロセッサの定義に書いても、*.rcの中だけ無視されます。
(他の*.cppとかはちゃんと#ifdefで条件分岐してます)
どうすれば*.rcの中でもプリプロセッサの定義が有効になりますか?

197:デフォルトの名無しさん
07/02/02 14:45:36
解決しました。
プロジェクトのリソースタブにもプリプロセッサの定義がありました。

198:デフォルトの名無しさん
07/02/04 13:32:57
>>192
どうしても有料のエディションの評価版がいいの?
無料のExpress版は嫌?

199:デフォルトの名無しさん
07/02/07 03:18:09
評価期間過ぎたら製品版買ってMSに貢献するんだろ
無料勧めちゃイカン

200:デフォルトの名無しさん
07/02/08 17:12:26
多分すごい有名な
「新VisualC++6.0入門ビギナー編 林春比古署 ソフトバンク社」
を使って今勉強中なんですが、
241ページのサンプルプログラムで、
CPenクラスのオブジェクトのポインタ、’oldPen’ってゆうのを、
’旧ペン’と銘打って保存って書いてありますが、
これをする意味がわかりません。
わざわざポインタでなぜ確保しているのでしょうか?
pDC->SelectObject(&CPen型Object)で選択して書くだけなのに、
別に’旧ペン’を保存しておく必要があるのでしょうか?
私が簡単に確認した程度では、
oldPen 自体設定しなくても実行可能でしたし、
最後に’旧ブラシに戻す’ってゆう作業もなくても問題ありませんでした。
他にもいろいろ記述してoldPenの有用な使い方を検証しましたが、
やればやるほど意味がないのではという考えに傾きます。
大変限定的な質問ですが、
よければ本を持ってる方、もしくはよく知ってらっしゃる方でわかる方がいれば
教えていただけないでしょうか?

201:デフォルトの名無しさん
07/02/08 17:13:22
多分すごい有名な
「新VisualC++6.0入門ビギナー編 林春比古署 ソフトバンク社」
を使って今勉強中なんですが、
241ページのサンプルプログラムで、
CPenクラスのオブジェクトのポインタ、’oldPen’ってゆうのを、
’旧ペン’と銘打って保存って書いてありますが、
これをする意味がわかりません。
わざわざポインタでなぜ確保しているのでしょうか?
pDC->SelectObject(&CPen型Object)で選択して書くだけなのに、
別に’旧ペン’を保存しておく必要があるのでしょうか?
私が簡単に確認した程度では、
oldPen 自体設定しなくても実行可能でしたし、
最後に’旧ブラシに戻す’ってゆう作業もなくても問題ありませんでした。
他にもいろいろ記述してoldPenの有用な使い方を検証しましたが、
やればやるほど意味がないのではという考えに傾きます。
大変限定的な質問ですが、
よければ本を持ってる方、もしくはよく知ってらっしゃる方でわかる方がいれば
教えていただけないでしょうか?

202:デフォルトの名無しさん
07/02/08 18:00:52
DCに選択中のGDIオブジェクトは破棄できないから。

203:デフォルトの名無しさん
07/02/08 18:29:47
>200-201
★初心者にVisual C++を教えるスレ★ Part25
スレリンク(tech板:380番)

マルチ

204:デフォルトの名無しさん
07/02/08 18:31:55
ほんとだあ

205:デフォルトの名無しさん
07/02/08 18:56:07
あちこち書き込むと早く回答がもらえるよ~俺って頭いい~とか思ってるのかね。

206:デフォルトの名無しさん
07/02/08 22:37:31
URLリンク(aoiruka.blog8.fc2.com)
ここに載っている方法で加算合成を行っても問題はありませんか?
自分の環境では特に支障なく動作するのですが。

207:デフォルトの名無しさん
07/02/08 22:50:54
>>206
そのリンク踏んでも問題はありませんか?
自分の環境で支障がでると困るので

208:デフォルトの名無しさん
07/02/09 10:29:48
あっちこっちかいたらあかんのか、ぼけ。
二箇所しか書いてへんし、掲示板のタイトル選んで書いてるし、
回答は少しでも速いほうがいいし、
もしかしたらいろんな答えがあるかもわからんし、
それを知りたいのは普通やんけ。
誰も頭がいいなんか思うか。
そういう発想にいたるお前は自分が悲しくないんか。
まあ、ここでそんなやつにかまってる自分が悲しいけど。
気分が悪いんでもうこんなところに質問書いたりしません。
どうも何らかの答えになるようなことを書いてくださった方はありがとうございました。

209:デフォルトの名無しさん
07/02/09 14:04:46
もうくるなよ

210:デフォルトの名無しさん
07/02/09 14:41:44
質問です。VC++6.0でMFCを利用しています。

3つのダイアログをモーダレスで表示します。
仮に、A,B,Cとします。

この3つのダイアログのZオーダーを常にA→B→Cに固定するにはどうすれば
よいでしょうか。

私自身、Zオーダーという言葉の使い方が間違っているかもしれませんので補足します。

AとBが重なっていれば必ずAが前面に表示され、BとCならB,AとCならAという
動作です。

ダイアログが2個なら、TOPMOSTが利用できるのですが、3つの場合はどのようにしたら
よいでしょうか。

可能であれば、BダイアログをドラッグしながらAダイアログ上を横切ると、スムースにAの下
を潜り抜けるようなのがよいです。

よろしくお願いします。

211:デフォルトの名無しさん
07/02/09 17:04:21
こういう向いてないやつはどうしたらいんだろうね
本人が悟ってくれるといいけど

212:デフォルトの名無しさん
07/02/09 17:40:22
>>210
ダイアログの作成順をC B Aの順にし、Create時Aの親をBに、Bの親をCにする。

213:デフォルトの名無しさん
07/02/09 22:52:26
ど素人です。
labelに文字を続けて表示させたいのですが、
label->Text = S"hello wo";
label->Text = S"rld";
としてもrldとなってしまいます。
これをfor文等で何回も実行させたいのですが、どうすればよいのでしょうか。


214:デフォルトの名無しさん
07/02/09 23:00:29
これなら低級エスパーでも答えられるな。

215:デフォルトの名無しさん
07/02/09 23:09:15
>>213
普通のCのプログラムならそんな感じだろうけど
Windowsだからね
最低限の基礎知識がないとこれから大変だと思うよ
手取り足取り面倒みてくれる人がいるといいね

216:デフォルトの名無しさん
07/02/09 23:15:26
S""って、マネージリテラル文字列?C++/CLIか?

217:デフォルトの名無しさん
07/02/09 23:15:29
初心者です。
超アホな質問で申し訳ないんですがよろしくです。
VistaにてVS2005Expressを使おうと思ってます。
一応本体+SP1(MSUpdateにて)とSP1Update4Vista(β版)とやらをインスコしてみました。
・・がこれでSP1は適用できてるんでしょうか?
確認方法がわからないんですorz|||
バージョン情報にはSPの文字は見えませんでしたが・・

また、Vista上の2005でビルドすると文字コードエラーが連発しますが、
なんとなくSP1では対策済みとの情報があったような気がしてて、
SP1が適用できてないのでエラーが残ってるのかなぁとか思ってるわけですが、
実際のところどうなんでしょうか?
SP1にしたからって文字コードエラーが消えるわけではないのか、
それともSP1自体適用されてないのか・・

どうかよろしくお願いします!!m(_ _;;)m

218:デフォルトの名無しさん
07/02/09 23:20:57
>>213
label->Text += S"rld";

219:213
07/02/09 23:40:38
>>216
よくわかりませんがVC++.NETでwinフォームアプリケーションを作っています。

>>218
ビルドすると
'+':__gcポインタ 'System::String __gc *'に対してポインタ演算ができません。
とエラーがでてしまいます。

220:デフォルトの名無しさん
07/02/09 23:54:54
一つの入れ物に二つ入れようとしたら
前に入れたのがでて、後から入れたのが残るよ

221:213
07/02/10 00:13:25
String* ss;
ss = System::String::Concat(S"hello wa", S"rld");
label->Text = ss;
とすれば表示させることができました。
一応問題は解決したのですが、もしこれより効率的な書き方があれば
今後のために教えてください。

222:デフォルトの名無しさん
07/02/10 00:33:15
>>221
MASM6.3?
だったら
MOV ES・SI、ソース
MOV DS/SI、ですちねーしょn
MOV ECX、カウント
REP MOV

223:デフォルトの名無しさん
07/02/10 00:39:01
コンパイラ様より効率的なんだろうか

224:デフォルトの名無しさん
07/02/10 00:42:14
>>223
昔DECのフォートランでDOループで定数を埋めるプログラムを作ったら
逆アセンブルしたら全部クリア命令だった

225:デフォルトの名無しさん
07/02/10 00:53:38
>>222
rep movsb だろ。
ていうか、そもそもCLIか。

226:デフォルトの名無しさん
07/02/10 01:43:22
>>221
大量の文字列連結用にSystem.Text.StringBuilderってのがあるけど、
二つ三つ繋ぐのには大げさすぎだな。

227:デフォルトの名無しさん
07/02/11 17:15:26
乱数を取りたいんですが
Random random = new System::Random();
int ran = random.Next(100);
ではコンパイルできないんですがどうしたらいいですか?

228:デフォルトの名無しさん
07/02/11 21:48:08
C++/CLIならたぶんこう。
System::Random random;
random.Next(100);

マネージドC++ならたぶんこう。
System::Random* random = new System::Random;
random->Next(100);

.NETを使わないC++ならboost::randomを使っておけ。
嫌なら<cstdlib>のstd::rand (& std::srand)。

229:デフォルトの名無しさん
07/02/11 22:13:12
>>228
ありがとうございます。

230:デフォルトの名無しさん
07/02/12 00:14:24
猫でもわかる…の他にWin32SDKでダイアログベースアプリケーション
の作り方を解説しているところを教えてください。

231:デフォルトの名無しさん
07/02/12 00:27:54
WisdomSoft

232:デフォルトの名無しさん
07/02/12 00:51:17
>>231
ありがとうございます。
ハード + たまにファーム屋なので、すぐ壁にぶち当たると思うけど
頑張ります。

233:デフォルトの名無しさん
07/02/12 22:40:46
C++とは直に関係なくリソースエディタのことなのですが
メニューをリソースエディタで作る時に
最初にメニュー項目に割り振られたIDをメニューエディタで変えても
resource.hに繁栄されないのですけど そういう仕様なんですか?リンクしてない?
リソースシンボルを見ると書き換えたはずの前のIDも使用中になって消すことも
できませんし……
自分でresouce.hを書き換えるものなんでしょうか?
グラフィカルなメニューエディタとresouce.hの関係がよくわかりません
環境はVS2005stdです

234:デフォルトの名無しさん
07/02/13 00:47:08
それあるね。素直に変わる時もあるけど、バグのような気がする。

235:233
07/02/13 01:55:09
>>234
ということは 本来はメニューエディタで変えたIDはリソースシンボルや
resource.hに反映されるものなのですね
勝手にresource.h書き換えるとVSに怒られるし……
何度か再起動してれば連動することもあるということですね
sp1も充ててるんですけどね

明日 試してみます

236:デフォルトの名無しさん
07/02/14 17:38:06
自分が作ってるのと関係ない窓(例えばIE)を移動させることって可能でしょうか?

237:デフォルトの名無しさん
07/02/15 01:22:31
可能です。

238:デフォルトの名無しさん
07/02/18 22:31:02
VS2005STD-VCの
アイコンエディタの色の並びは
どういう根拠で決定されたものなのでしょうか?

正直、あの並びをデータとして持っているのが無駄に思えます。


239:デフォルトの名無しさん
07/02/18 22:35:23
VGA(640x480,16色)の初期パレットじゃね?

240:デフォルトの名無しさん
07/02/18 22:43:10
って、256モードか

241:デフォルトの名無しさん
07/02/18 22:45:29
あれはわかんね

242:デフォルトの名無しさん
07/02/18 23:20:16
WebSafeColorの216色+WindowsSystemColorの32色+αじゃないのかな。
要は、255を5等分した6濃度をRGB3プレーン分展開したのがWebSafeColorの216色で、
ウィンドウ枠なんかに使っているのがWindowsSystemColorの32色。

243:デフォルトの名無しさん
07/02/19 20:28:58
MFCのOnTimerイベントの処置中は他のボタンなどのイベントを受け付けない
(OnTimer内の処理が終了後に他のイベント処理)動作は可能でしょうか?

244:デフォルトの名無しさん
07/02/19 20:40:19
OnTimer内でメッセージループ回さなきゃ、そういう動作になると思うが。

245:243
07/02/19 20:50:43
>>244
イマイチOnTimerの処理について把握してないのですが、OnTimer内の
処理が終わるまではボタンイベントの処理等には行かないって事でいいのでしょうか?

246:243
07/02/19 20:52:58
あ~すいません。
行かないってか、貯まったメッセージキューの処理とかしなきゃ行けないですね。

247:デフォルトの名無しさん
07/02/20 11:37:39
これからどうやって勉強すればいいですか
Cに関する知識0です。

248:デフォルトの名無しさん
07/02/20 11:49:53
今まではどうやって勉強して、どこまでいったのだ

249:デフォルトの名無しさん
07/02/20 13:12:56
諦めて樹海にでも行けばいいんじゃね?

250:デフォルトの名無しさん
07/02/20 23:48:17
関数が多くなって非常に醜いソースファイルがあるのですが、
ほかのファイルにいくつかの関数をもっていき、それをメインのソースファイルから利用したりはできませんか?

251:デフォルトの名無しさん
07/02/20 23:50:42
つ ヘッダ

252:デフォルトの名無しさん
07/02/20 23:52:12
>>250
ほかのファイルにいくつかの関数をもっていき、それをメインのソースファイルから利用
すれば出来る。

253:デフォルトの名無しさん
07/02/22 10:07:30
case 1:
if(GetOpenFileName(&ofn)){
GetFileTitle(GotFileName,GotFileShortName,256); strcpy(musictitle,"open ");
strcat(musictitle,GotFileShortName);strcat(musictitle," alias oto");mciSendString(musictitle,NULL,0,NULL);
}
break;

case 2:
mciSendString("stop oto",NULL,0,NULL);
mciSendString("play oto from 0", NULL, 0, NULL );
break;

こんな感じでボタン1が押されたらコモンダイアログ出してファイルを選択させ、
ボタン2が押されたら、選んだファイルを再生する、というようにしてるんですけど
動作が変なんです。

例えば、最初に「oo.mp3」を選択した後、ボタン2を押して再生します。
そして、もう一度ボタン1を押して、「xx.mp3」を選択します。
その後、ボタン2を押すと、「oo.mp3」が最初から再生されてしまいます。
本当は、「xx.mp3」を再生したいのですが・・・

254:デフォルトの名無しさん
07/02/22 10:41:32
>>253
mci使ったことないし、曲再生もやったことないけど、気づいた点を一つ。
closeしないうちに再openできるの?
単純に、oo.mp3がopenされたままだからxx.mp3でopenできてないんじゃない?

255:253
07/02/22 14:35:39
>>254
すんません、書いてなかったです。
WM_DESTROYの中でcloseはしてあります。

256:254
07/02/22 14:51:50
んにゃ、closeしないままopenしてないかって話だけど。
2度目のxx.mp3のときのcase 1で、ちゃんとopenできてるかどうか確認してみたら?
#つーか、mciSendString()はエラーを返さないのか? 返さないとしたら確認手段くらいないのか?


いっそ、試しにこんなロジックでも書いてみたら?
mciSendString("open oo.mp3 alias oto", NULL, 0, NULL);
mciSendString("stop oto", NULL, 0, NULL);
mciSendString("play oto from 0", NULL, 0, NULL);
Sleep(10000);
mciSendString("close oto", NULL, 0, NULL);
mciSendString("open xx.mp3 alias oto", NULL, 0, NULL);
mciSendString("stop oto", NULL, 0, NULL);
mciSendString("play oto from 0", NULL, 0, NULL);
Sleep(10000);
mciSendString("close oto", NULL, 0, NULL);
んで、巧く行ったらcloseをコメントにしてやってみると。

257:253
07/02/22 15:05:31
>>256
出来ました、サンクスです。
てっきり、closeは最後にアプリ閉じるときだけすればいいと思ってました。
そっかー、一旦、close 要るんだったのか。
どうもです。

258:デフォルトの名無しさん
07/02/22 15:32:52
VC++の古いやつ(5.0 Ent)使ってるんだけど
SDKで 

case WM_PAINT:
return 0;

この2行が入っていると、
何故か(左上のアイコンをクリックして出す)システムメニューの
表示が遅くなったり、配置したコントロールの反応が遅れたりする
(例えばチェックボックスをクリックしてもチェックマークが入るのが遅い)。

この2行をコメントにすると直る。

これって、普通なのかな?
今更なんで5.0かって言われそうだけど

259:デフォルトの名無しさん
07/02/22 15:42:35
WindowsのWM_PAINTで再描画が行われない
(正確には更新リージョンが空にならない)と、再びWM_PAINTが投げられる。

だから例えばDefWindowProcの中ではWM_PAINTに対し
ただBeginPaintとEndPaintだけを呼んで更新リージョンを空にしていると、
Programming WindowsかAdvanced Windowsのどっちかに書いてあった。

260:デフォルトの名無しさん
07/02/24 04:13:55
windowsアプリケーションでアイコン作ったものの
コンパイルしても表示されないんですが
設定の仕方があるのですか?

261:デフォルトの名無しさん
07/02/24 07:18:30
俺様のエスパー能力を駆使した感じでは、
元々リソースを含まなかったプロジェクトに対して、アイコンファイルだけを直接追加した予感。
リソースファイル(*.rc)とresource.hがプロジェクトに含まれているか?

通常は、リソースファイルを追加した後、
そのリソースファイルに対してアイコン等を追加する。

262:デフォルトの名無しさん
07/02/24 08:00:40
残念ながら含まれてます
ただ今気付いたんですがフォルダの表示をアイコン表示にすると
ちゃんと表示されます
一覧表示や詳細表示などでは表示されないんですがこれもしかして仕様ですか?

263:デフォルトの名無しさん
07/02/24 08:42:31
諦めずに再エスパー。
アイコンの内32x32の方だけ書き換えていて、16x16は空のまま、とか。
イメージ - 現在のアイコンイメージタイプ をチェックしてみ。

264:デフォルトの名無しさん
07/02/25 23:38:32
>>263
あるある

265:デフォルトの名無しさん
07/02/26 00:33:49
>>263
遅くなってすいません
見事にそれでした
エスパーさんありがとう!

266:デフォルトの名無しさん
07/02/26 03:30:05
エスパーされるってことは、質問の情報が不足してるってことだぞ

267:デフォルトの名無しさん
07/02/26 05:04:43
つまり、馬鹿にされているってこった。

268:デフォルトの名無しさん
07/02/26 06:17:41
関係ないけどFLVPというフリーソフトも小さいアイコンの表示が変だ
大きいやつは赤いアイコン、小さい方はMFCの青いアイコン

269:デフォルトの名無しさん
07/02/26 07:39:04
昔からそうだけど、MFCの吐き出す既定コードが手抜きだから。
LoadIconしたアイコンを大小両方に割り当てる所為で、
タイトルバーには16x16では無く、32x32のアイコンが縮小されて使われている。
両方描くのが面倒な時は、どちらか一方を削除しておくのが無難だな。

270:デフォルトの名無しさん
07/02/27 18:10:22
>>269
最初から16x16も作ってくれちゃうしなあ
アイコン作ったときは、小さいほうはとりあえず消して
小さいアイコンの見栄えが気になってから追加するようにしてる。

271:デフォルトの名無しさん
07/02/27 19:27:48
ソースが同封されてるツールがあって、自分でVisual Studioで
ビルドしてみたのですが、同封されているexeと比べると何故か
サイズが大きいのはどう言ったことが原因と思われるのでしょうか?

あと何個か警告が出たのですが、一応exeが出来ています。
どんな警告も出ないように作ると勝手に想像していたのですが
ある程度の許容範囲内の警告が出るくらいは無視されるものなのでしょうか?
よろしくお願いします。

272:デフォルトの名無しさん
07/02/27 19:51:26
さあ

273:デフォルトの名無しさん
07/02/27 21:57:38
作成者とまったく同じコンパイラと
作成者とまったく同じコンパイルオプションと
作成者とまったく同じライブラリをリンクすれば

たぶん同じサイズの実行ファイルになるんじゃないかな

274:デフォルトの名無しさん
07/02/27 22:07:01
覆水盆に帰らず

275:デフォルトの名無しさん
07/02/27 23:45:12
同じCPUで、同じOSな必要もあるんじゃね?

276:デフォルトの名無しさん
07/02/28 14:56:54
size = GetFileSize( hFile, NULL );
SetWindowText(label,(char)size);

こんな風に書いて、sizeにhFileのファイルサイズを
スタティックコントロールのlabelに表示したいんですが、
labelの表示が変わらないんです。
(char)を取ると、めちゃくちゃな文字列が出ちゃう。
これ、このスレでいいんかな?

277:デフォルトの名無しさん
07/02/28 15:05:06
SetWindowTextなんだからテキストを渡さないと

278:デフォルトの名無しさん
07/02/28 16:32:12
VisualC++2005ExpressEditionを久々に起動しようとおもったんですが
”一つ以上のコンポーネントがみつかりません。再インストールしてください”
とでて、
アンインストールしようとしてもなにかのファイルがみつからないとかいうエラーがでてアンインストールできず
それでも再度インストールしようと試みたらエラーとおもわれるものがでました。
以前にはしっかりと登録もしたはずなんですが
どうすればいいでしょうか。

279:デフォルトの名無しさん
07/02/28 16:45:11
パソコン買い換え

280:デフォルトの名無しさん
07/03/01 08:29:53
最後の手段っぽいけど、Windows Installer CleanUp ユーティリティを使う、とか。
サポート技術情報を文章番号290301で。

281:デフォルトの名無しさん
07/03/01 13:38:53
SetFilePointer(hFile,1,NULL,FILE_BEGIN);
ReadFile(hFile,buf,3,&readsize,NULL);
buf[3] = ('\0');

教えてください。
上のように書いて、hFileのファイルの先頭3バイトを読み
そこにヌル文字を加える、これで先頭3バイトを受け取りたいんです。
でも、これだと2バイト目+3バイト目+ヌル文字になってしまいます。
相当馬鹿なことしてるかもしれませんが・・・

282:デフォルトの名無しさん
07/03/01 14:07:26
>>281
>SetFilePointer(hFile,1,NULL,FILE_BEGIN); 
先頭から読みたいなら0じゃない?
SetFilePointer(hFile,0,NULL,FILE_BEGIN); 

283:デフォルトの名無しさん
07/03/01 14:23:25
この世はすべて1から始まっている

という世界ですな

284:281
07/03/01 14:36:34
>>282
どうもです。できました。
かなり馬鹿なことしてたんかな?
また、質問するかもしれないんでよろしくお願いします。

285:デフォルトの名無しさん
07/03/01 20:15:19
ここでいいかどうかよく判らないですが、質問です。

Web ブラウザから起動される Java アプレットがあり、そこに表示されている情報を
現在作成しているツール(Visual C++ .NET, ダイアログ)から読み取ろうとしています。
・アプレットのクラス名を指定して FindWindow()
・EnumChildWindows() で子ウィンドウを列挙
・子ウィンドウに対して GetWindowRect() や GetWindowText()
という感じで、ラベル(SunAwtLabel)のキャプションは GetWindowText() で取得できるんですが
エディットボックス(Edit)の現在の値が取れません(""となります)。
また、コンボボックス(ComboBox)もあるんですが、これは値の取り方すら分かりません。

エディットボックスとコンボボックスの現在の値を取得するには、どうしたらいいでしょうか?

286:デフォルトの名無しさん
07/03/01 21:13:20
みためがエディットボックスとコンボボックス

287:デフォルトの名無しさん
07/03/01 23:40:19
VC2005ってPDBの埋め込みできないの?

288:デフォルトの名無しさん
07/03/02 09:45:51
SetFilePointer(hFile,1,NULL,FILE_BEGIN); //(1)先頭3バイト読む
ReadFile(hFile,buf,3,&readsize,NULL); // bufはchar
buf[3] = ('\0');

SetFilePointer(hFile,0,NULL,FILE_CURRENT); //(2)先頭から4バイト目を読む(1)の続きを読みたい
ReadFile(hFile,buf,1,&readsize,NULL);
buf[1] = ('\0');

if (buf==0x01)
{
MessageBox(hWnd,"aaa","bbb",MB_OK); //(3)4バイト目は01だからメッセージが出るんじゃ?
}

度々質問ですが、
こんな感じで、まず(1)で先頭から3バイトバイナリを読みます。
次に(2)で(1)の続き(先頭から4バイト目)を読みます。
例えば、バイナリで「41 42 43 01」なら(1)はABCになると思います。
でも、(3)のメッセージが出ません。
if の所の比較が変なんでしょうか?

289:デフォルトの名無しさん
07/03/02 09:46:54
C++とDelphiどっちが簡単なわけ

290:デフォルトの名無しさん
07/03/02 09:54:02
>>288
> SetFilePointer(hFile,1,NULL,FILE_BEGIN);
0から数え始めるからこれでは最初の1バイトを飛ばすことになる

> SetFilePointer(hFile,0,NULL,FILE_CURRENT);
無意味

> if (buf==0x01)
上を治したとして、buf[0]に書き込まれているはずだからif (buf[0] == 0x01)では?

291:デフォルトの名無しさん
07/03/02 10:00:12
実験ならいいけど
こまぎれで読んだらパフォーマンス悪そうだな

292:デフォルトの名無しさん
07/03/02 10:04:37
実験する場合はデバッガ使った方がいい

293:288
07/03/02 10:07:08
>>290
thanxです、buf[0]だったんですね。
それにしてもこのスレで教えてもらうたびに
自分の実力の無さを感じてしまう。

294:デフォルトの名無しさん
07/03/02 11:05:57
実力以前の話だから気にするな

295:デフォルトの名無しさん
07/03/02 11:20:40
イイハナシダナー( ;∀;)

296:デフォルトの名無しさん
07/03/02 18:14:24
イイハナシダナー( ;∀;)

297:デフォルトの名無しさん
07/03/02 18:30:16
イナバウアー( ;∀;)

298:デフォルトの名無しさん
07/03/02 21:30:16
>>289

GUIアプリを作るなら

Delphi>>>(超えられない壁>>>VC++(MFC)


299:デフォルトの名無しさん
07/03/02 23:32:56
やりたいことができなくなったらVC++へ。

300:デフォルトの名無しさん
07/03/04 21:23:56
URLリンク(www.kumei.ne.jp)
初心者でここを見ながらVisual C++2005の勉強してるのですが、
現在時刻を表示するのに

case WM_TIMER :

GetLocalTime(&st);
wsprintf(str,"%02d:%02d:%02d",st.wHour,st.wMinute,st.wSecond);

でstatic char str[256]に格納して
WM_PAINTでTextOutでこの文字列を出力しようとするとVisual C++では文字化けしてしまいます。
borland c/c++コンパイラでコンパイル実行させるとちゃんと時間が表示されます。
これを直すにはVCの何処を弄ったら良いのでしょうか?

301:デフォルトの名無しさん
07/03/04 21:35:44
ひろってきたソース弄ってるのは勉強とは言わない

302:デフォルトの名無しさん
07/03/04 21:38:25
>>300
プロジェクトのプロパティ → 全般 → 文字セット → マルチバイト文字セットを使用する
にしてみる。
または、
wsprintf(str, TEXT("%02d:%02d:%02d"), st.wHour, st.wMinute, st.wSecond);
にしてみる。

303:デフォルトの名無しさん
07/03/04 21:38:50
第一引数にはLPTSTRを渡さないと

304:デフォルトの名無しさん
07/03/04 21:38:58
>>301
十分勉強だろ

305:デフォルトの名無しさん
07/03/04 21:47:06
>>302
「strの宣言をstatic TCHAR str[256];に直す」が抜けている。

これくらい警告やエラーになりそうな気がするんだがな。
常に/W4 /Wp64付けておけ。

306:デフォルトの名無しさん
07/03/04 22:05:01
糞サイトの無料サポートをほいほい引き受けるお人良しがいたとは

307:300
07/03/04 22:14:39
>>302-303,>>305
ありがとうございます、出来ました!
今までbccだと通っていたので気にしていませんでしたが、
VCだと型に対してキビしいのですね。
仮引数の型を教えてくれる機能があるようなのでこれからは気をつけます><
またプロパティで警告のレベル等を変えられるのも初めて知りました。
親切に教えてくださり本当にありがとうございました。

308:デフォルトの名無しさん
07/03/04 22:42:49
>>307

単に VC8(VS2005)は、デフォがUNICODEになってて、BCCは MBCSに
なっているってだけだよ。
BCCでも UNICODEにすると同じようになるはず。


309:デフォルトの名無しさん
07/03/06 11:59:45
Visual c++
で、ソフト作成にチャレンジしようと思うのですが、
Visual C++ 2005 Express Edition ってのが
マイクロソフトからダウンロードできるんだけど、
それでいいのですか。

ここの皆さんが使っているのはこれですよね。
違ったら教えてください。
似たような名前のソフトがたくさんあって
どれがどれなのかさっぱり分かりません。
どうかお願いします。


310:デフォルトの名無しさん
07/03/06 12:04:59
>>309
EEじゃないけど、まあそれだ。
PlatformSDKとかMSDNライブラリとかも一緒にな

311:デフォルトの名無しさん
07/03/06 17:15:26
ツールボックスのList Controlについて質問です。

List Controlに対する処理(後で記述)を関数化しています。
「変数の追加」でList Controlをm_listctrlとしました。
プロパティは、Viewをレポートにしてるだけです。

関数の処理を行うと「説明」のColumn部分が二つになってしまいます。
m_listctrl.DeleteColumn(1);
で消しているのですが、どうしてでしょうか?
Columnをうまく初期化する方法をおしえて下さい。

312:311
07/03/06 17:18:23
m_listctrl.DeleteColumn(0);
m_listctrl.DeleteColumn(1);
m_listctrl.DeleteAllItems();

// 詳細表示のときのコラムのヘッダーの設定
LVCOLUMN myColumn; // 列情報を保持するオブジェクト
myColumn.mask = LVCF_TEXT|LVCF_WIDTH; // pszText,cxを有効にする

RECT myRect;
m_listctrl.GetClientRect(&myRect); // リストビューサイズを得る
myColumn.cx = (myRect.right - myRect.left) / 3; // 横幅の1/3を表題にする
myColumn.pszText = "項目"; // 列タイトル文字列
m_listctrl.InsertColumn(0, &myColumn); // 0列目を確保する

myColumn.cx = (myRect.right - myRect.left)*2 / 3; // 横幅の2/3を説明にする
myColumn.pszText = "説明"; // 列タイトル文字列
m_listctrl.InsertColumn(1, &myColumn); // 1列目を確保する

// リストビューにアイテムを設定する
static LVITEM myITEM; // 初期値をクリアするためにstaticを使用
myITEM.mask = LVIF_TEXT; // pszTextを有効にする
myITEM.iItem = 0; // 項目0
myITEM.iSubItem = 0; // 列0
myITEM.pszText = "リスト1"; // タイトル文字列
m_listctrl.InsertItem(&myITEM); // 設定する
myITEM.mask = LVIF_TEXT; // pszTextを有効にする
myITEM.iSubItem = 1; // 列1
myITEM.pszText = "ああああああ"; // 説明文字列
m_listctrl.SetItem(&myITEM); // 設定する

313:デフォルトの名無しさん
07/03/06 17:32:44
何がどうなってるのかよくわからんが、
(0) で0個目を消したら1個目は前にずれるから
それも消すのはまた(0)じゃないか?

314:311
07/03/06 17:36:17
すみません、追加です。
プロジェクトの内容は
テンプレート:MFCアプリケーション
アプリケーションの種類:ダイアログベース
「ユニコードライブラリの使用する」のチェックを外す

315:311
07/03/06 17:44:06
>>313
レスどうもです。

m_listctrl.DeleteColumn(0);
m_listctrl.DeleteColumn(0);

で、できました!
しかし、なんかもっとスッキリしたやり方はないのかな・・・。
Columnの数を計算して、ループでDeleteColumn(0);とするんでしょうか・・・。

316:デフォルトの名無しさん
07/03/06 17:47:58
今見たけど、ヘルプのDeleteColumn の例はそうなってるな。

317:311
07/03/06 18:06:45
>>316
なるほど、そうなってますね。
勉強になりました。
ありがとうございます。

318:デフォルトの名無しさん
07/03/08 13:22:56
strcat(all,rectform.top);


all(char[]で宣言)にstrcatでフォームの高さ(位置)を入れたいんですが

'.top' : 左のオペランドが 'struct' へのポインタです。'->' を使用してください。

というようなエラーが出てしまいます。
. を -> に変えると強制終了しちゃうし。
何かキャストが要るんかな?

SDKです。

319:デフォルトの名無しさん
07/03/08 13:28:27
はい。

320:デフォルトの名無しさん
07/03/08 13:34:14
キャストが必要と言うより、プログラミングの基礎知識が必要かと思われます。

321:デフォルトの名無しさん
07/03/08 14:21:44
数値と文字列の相互変換からやっとけ

322:デフォルトの名無しさん
07/03/08 14:28:54
キャストもsdkも100年早い

323:デフォルトの名無しさん
07/03/08 16:05:22
char tmp[20];
sprintf(tmp,"%d",rectform->top);
strcat(all,tmp);

324:デフォルトの名無しさん
07/03/08 16:16:14
こう書くのは駄目か?
int len = strlen(all);
_snprintf(tmp + len, sizeof tmp - len, "%d", rectform->top);

325:デフォルトの名無しさん
07/03/08 17:38:26
>>324
ダメすぎ。

326:323
07/03/08 17:42:54
お、俺のはどう・・?

327:324
07/03/08 17:43:09
ほんとだ、323に影響されてallとtmpをごっちゃにしてる
すまん

328:デフォルトの名無しさん
07/03/08 18:00:32
>318が低レベル過ぎてそれに対するフォローしても妥当かどうかの判断しようがない件。

329:デフォルトの名無しさん
07/03/08 18:35:12
エラーが出たらまずキャストって誰に教わったんだか

330:デフォルトの名無しさん
07/03/08 18:38:25
strcat使うべきところかどうかもあやしい

331:デフォルトの名無しさん
07/03/08 19:56:32
どうみても厨房です。本当にありがとうございました。

332:デフォルトの名無しさん
07/03/08 19:59:12
strcatは安全じゃないってばぁちゃん言ってた

333:デフォルトの名無しさん
07/03/08 20:58:50
いっそ全部stringにしちゃえ

334:デフォルトの名無しさん
07/03/08 22:23:41
最適化なしだと意図通りに動いて、最適化ありだとバグが起こるって
よくあることですかね?

335:デフォルトの名無しさん
07/03/08 22:26:20
変数の未初期化

336:デフォルトの名無しさん
07/03/08 22:30:09
volatileが必要な変数とか?

337:デフォルトの名無しさん
07/03/08 23:15:54
マルチスレッドのプログラムで、外部でフラグを立ててスレッドを終了させ
ようとしています。フラグの変数はvolatileをつけてます。
いろいろ試してみましたが、プログラムサイズの最適化だと意図したとおりに
動くようです。でも実行速度の最適化のオプションではだめなようです。

338:デフォルトの名無しさん
07/03/08 23:29:51
>>337
そうならないためのvolatileなのに変だね。
別の原因なのかな。

339:デフォルトの名無しさん
07/03/08 23:57:27
Win32のイベントを使えばいいだろ。
C/C++のvolatileはそもそも対マルチスレッド専用に作られたわけではないから、
マルチスレッド時にvolatileを付けておけば絶対に大丈夫ということはない。

340:デフォルトの名無しさん
07/03/09 00:09:12
この使い方が駄目なら、volatileの存在意義が無いんじゃね?
とりあえず、プログラムをupしる。

341:デフォルトの名無しさん
07/03/09 00:23:26
じゃあ~volatileはなんなんだよ~


最適化による期待はずれの動作は奥が深そうだな。
volatileでは解決しないことの原因なら
勉強のためにも
というかマルチスレッドを使う俺としてはぜひ知りたいところだ。

342:デフォルトの名無しさん
07/03/09 01:10:07
とりあえず重要そうなとこだけ抜粋してみました。
ひょっとかしたら根本的な間違いがあるかもしれませんが。
// グローバル変数
volatile bool exitflag;

int WINAPI WinMain()
{
    (中略)
    hThread = reinterpret_cast<HANDLE>(_beginthread(childThread, 0, NULL));
    (中略)
    // 終了処理
    exitflag = true;
    WaitForSingleObject(hThread, INFINITE);
    return 0;
}

void childThread(void *arg)
{
    (省略)
    while(!exitflag){
        // いろいろな処理
    }
    if(exitflag)
        return;
    (省略)
    while(!exitflag){
        // いろいろな処理
    }
    return;
}
最適化なし、プログラムサイズ最適化はスレッドが終了しますが、
実行速度最適化にするとスレッドが終了しないようです。

343:デフォルトの名無しさん
07/03/09 09:33:46
とりあえず_beginthreadexに変えてみる、とか。
_beginthreadは、CloseHandleが生成されたスレッドで処理されるので、
スレッド終了時点で、返されたハンドルの保証ができなくなる。
運が悪いと、別のスレッドを指してしまう可能性もある。

344:デフォルトの名無しさん
07/03/09 18:31:44
main.cpp
main.h
func.cpp
func.h
・・・
という感じでソースを書いてるんですが、
main.cppの方でfunc.cppの関数を呼び出す際、引数に構造体のアドレスを渡して、関数内でその構造体の中身を変更、としたいんです。
この場合構造体の型と構造体の宣言はどこにどういう風にすればいいんでしょうか。
externを使ったりしてやってみてるんですがどうもエラーがでてしまいます・・・

345:デフォルトの名無しさん
07/03/09 18:42:04
手取り足取り教えてくれる親切な人がいるといいね

346:デフォルトの名無しさん
07/03/09 18:45:49
>>344
func.cpp の関数や構造体をfunc.hで宣言して両方でinclude
つーかcppなのにそれでいいのか、、って気はするが
もうちょっと他のソースやIDEの吐き出したソース参考にしてくれ。

あんまり初歩的だと>>345 みたいになる

347:デフォルトの名無しさん
07/03/09 19:02:01
すみません,伺わせてください.
Windowsフォームで何らかの処理をした際に出現する
フォームの多重起動を防ぐ方法についてなんですが.

グローバルな領域にフォームのオブジェクトを持たせて,
一度目にnew生成,終了時にnullを代入することで,
nullチェックを行えばできるのですが.
グローバル領域を使用せずにする方法があったら教えてください.
お願いします.

348:344
07/03/09 19:08:30
>>346
なんとかなりました。
まだCしか使えないのでこんな形になっています。
C言語質問の方で聞くべき事だったかもしれません。
回答ありがとうございました。

349:デフォルトの名無しさん
07/03/09 19:35:54
一応__beginthreadexに書き換えてみました。しかし駄目でした。
最適化段階で終了条件が消えてしまっているような。。

350:デフォルトの名無しさん
07/03/09 20:08:26
>>342
exitflagをlong型にしてtrueの代入の代わりにInterlockedIncrementを使ったらどう?

351:デフォルトの名無しさん
07/03/09 21:15:32
>>350
試してみました。でも駄目でした。やっぱり速度最適化が駄目です。

volatile修飾ちゃんと利いてるのかな。。それとも俺の書き方が悪いのかorz

352:デフォルトの名無しさん
07/03/09 21:23:19
回っているときにブレークしてみたらどうなる?

353:デフォルトの名無しさん
07/03/09 21:39:55
動作中にブレークポイントを設定してみたら、最適化なしのときには
|if(exitflag)
●| return;
こんな感じで設定できたのですが、
最適化コンパイル後の動作中だとreturnの横クリックしても数行後の
処理に移動してしまいます。

説明が悪くて、わかりにくかったらすいません。

354:デフォルトの名無しさん
07/03/09 21:41:10
>>353
最適化するとソースの行とプログラムコードが一致しないからな
ステップ実行がへんになることある。

355:デフォルトの名無しさん
07/03/09 22:04:57
ダイアログアプリケーションを作っていますが、エディットボックスなどの
コントロールの配置が終わるのはいつでしょうか?
最初の表示が終わった契機でコントロールの表示位置を取得しようと
OnInitDialog() でコントロールの座標を調べてみましたが
なぜか位置が(0,0)となってしまいます。
コントロールの表示位置を取得するのに最適な契機を教えてください。

356:デフォルトの名無しさん
07/03/09 22:06:54
OnInitDialogで設定した0秒のSetTimerが到着する頃には出来てるんじゃないの。

357:デフォルトの名無しさん
07/03/09 22:29:24
あとから動的にコントロール追加とか普通にやるから
そのタイミングでいいんじゃないかな

358:355
07/03/09 22:41:51
>>356
確かに OnInitDialog() 内でタイマをセットするやり方もありますね
もっとスマートな方法がなければこれしかないですね

>>357
「そのタイミング」とは OnInitDialog() で、ということですか?

やりたいのは、ダイアログエディタで配置したコントロールの座標を取得することです。
コントロールは動かさないので、一回だけ座標を取得できればいいのです。

359:デフォルトの名無しさん
07/03/09 22:46:30
>>355
OnInitDialog() でコントロールの座標を調べるなんておれやったことあるけどなあ。
おかしいなあ。

360:355
07/03/09 23:01:51
済みません。
私の初歩的なミスっぽいです。
コントロールの座標を GetClientRect() で取ってたんですが
左上が (0,0) になるので取れてないと思っていました。
OnInitDialog() で GetWindowRect() を発行してみたら
どうやらダイアログ上の座標が取れたようです。
もうちょっと調べてみます。

361:355
07/03/10 02:03:43
OnInitDialog() にて

CRect rect;
CEdit* pEdit=(CEdit*)GetDlgItem(IDC_EDIT_HOGEHOGE);
pEdit->GetWindowRect(&rect);
ScreenToClient(&rect);

でダイアログ相対の座標が取れました。
大変お騒がせ致しました。

362:デフォルトの名無しさん
07/03/10 05:18:31
>>351
駄目っていうのはスレッドが終了しないの? or デバッガ上でのトレースで
returnの行が飛ばされるの?後者ならあまり気にする必要が無い気がする。
前の方の書き込みを見る限り前者なのかな....
XP上のVC6 & VC2005で試してみたけどvolatile longとInterlockedIncrement
の組み合わせでスレッドは終了してたよ。試行回数各10回ほど。

_beginthreadでマルチスレッドやったのは今日がはじめてだけど、MFCでやる場合は
同期オブジェクトを使って終了を通知してる。APIでいうとCreateEventなど。

363:362
07/03/10 05:24:03
追記
最適化は実行速度

364:デフォルトの名無しさん
07/03/10 10:18:30
>>362
スレッドが終了しないってことです。
ってことは書き方が悪いのかなー。。

365:デフォルトの名無しさん
07/03/10 10:48:13
>>361
本当は、ScreenToClientよりMapWindowPointsがお勧め。
まあ、RTL(RightToLeft)環境で動かすようなことは、まずないだろうけど。
MFCのScreenToClient実装は、過去互換の関係で放置してる予感。
あと、GetDlgItemで取るより、メンバ変数に割り当てた方がいい。

>>364
アセンブリコード吐き出させて、頑張って読む。

366:デフォルトの名無しさん
07/03/10 23:02:34
visualC++でプログラム作れるように
なるには、C言語をまず勉強しないといけない
と聞いたのですが、本当ですか?
あとその次にポインタというのを勉強して
それからVisualC++の本買った方が良いというのも
本当でしょうか?

なんか知らないけどどうせならVisualC++でソフトを作ってみたいです。
憧れみたいのがあります。


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