08/11/18 07:46:21
>>158
coutはC++でしか使えない
printfはCでも使える
160:デフォルトの名無しさん
08/11/18 07:51:42
URLリンク(www.asahi-net.or.jp)
こちらのサイトを参考にしてVisual C++ 2005で練習をしているところなのですが
完成したプログラムを「デバッグ開始」で動かそうとすると、
一瞬だけコマンドプロンプトの黒画面が出て、すぐに消えてしまいます
最初のうちは普通に実行され、黒画面が残ったままになったので
設定を間違えて弄ってしまったのかもしれません
原因、元に戻す方法がわかる方はいらっしゃいませんか?
161:デフォルトの名無しさん
08/11/18 09:02:07
リソースエディタなんてフリーで問題ないよ
どの道付属のアイコンエディタは使い物にならんし
162:デフォルトの名無しさん
08/11/18 09:03:33
>>160
最後にgetch()を入れればキーを押すまで画面がとまるよ
163:デフォルトの名無しさん
08/11/18 10:05:38
>>159
了解です
Printfで書くようにします
Cout使わないといけない場合なんかはないですよね
ありがとうございます
164:141
08/11/18 10:18:26
>>157
解説ページなどでResEditやXN Resource Editorでそれほど問題なさそうだったので、
どのようなデメリットがあるのかよくわからないということでした。
わかりにくくてすみません。
とりあえずフリーのものでやってみようかなと思います。
165:デフォルトの名無しさん
08/11/18 16:42:30
>>162
ありがとうございます
でも最後にgetch();を付けるとエラーが…
「デバッグ無しでビルド」を選択したら
とりあえずは消えない様になりました
166:デフォルトの名無しさん
08/11/18 16:44:50
そもそもデバッグしないでいいならCtrl+F5で実行すりゃいい
167:デフォルトの名無しさん
08/11/18 17:21:41
あとは
1.system("pause");
2.getchar();
3.main関数の最後の行("}")にブレークポイントをいれる
から好きなのを選べばいいと思うよ
168:デフォルトの名無しさん
08/11/19 12:30:43
今まで少しの間でしたがVC#2005EEを使っていました。
今日からC++を学ぼうと思い、VC++2008EEを使ってみたのですが
コード補完機能がないのが気になりました。
VC#2005EEのときは、1文字目から予測リストが出てくるので非常に使いやすかったのですが
VC++2008EEにはそのような機能はないのでしょうか。
169:デフォルトの名無しさん
08/11/19 13:32:24
>>168
ないよ
せいぜい関数の引数リストやクラスのメンバリストが出る程度だがそれでもないよりましだ
170:デフォルトの名無しさん
08/11/19 13:33:56
あ、そういえばCtrl+スペースで出たな
171:デフォルトの名無しさん
08/11/19 13:51:54
質問です。Visual C++2005を使っています。
プロジェクトをつくるとそのフォルダにReadMe.txtが自動で作られますが
ここに各ソースファイルの簡単な説明を追記したいのですが、どのようにすればよいのでしょうか?
作成されたReadMe.txtの最後の方に、
「AppWizard では "TODO:" コメントを使用して、ユーザーが追加またはカスタマイズする
ソース部分を示します。」とか書いてあるのですが、
各ソースファイルのコメント部分にTODO:と入れればその行が自動的に
ReaMe.txtに出力されるのかと思ったのですが、なんともなりません。
何かやり方が違うのでしょうか?
そういったReadMe.txtへの説明の自動追記機能はありますか?
それともRedMe.txtを直接開いて手書きで説明を加えなくてはならないのでしょうか?
172:デフォルトの名無しさん
08/11/19 13:52:53
あ、>>171はVisual C++ 2005 Express Editionです。
ひょっとしてエディションの問題???
173:デフォルトの名無しさん
08/11/19 16:06:59
>>165
コンパイルエラーならconio.hがインクルードされてないとかじゃね
174:デフォルトの名無しさん
08/11/19 16:13:36
// TODO: ここにコマンド ハンドラ コードを追加します
175:デフォルトの名無しさん
08/11/19 16:19:32
TODOコメント使うのはAppWizardであって、ユーザー(あなた)ではない
AppWizardがあなたが追加、またはカスタマイズすべきソース部分を教えてくれているだけ
AppWizardが生成するReadMeはあなたに対する説明文であって、あなたのアプリケーションを使う人に対するものではない
176:デフォルトの名無しさん
08/11/19 16:43:17
>>169
レスありがとうございます。たしかに、ないよりはましですね。
もやもやがなくなったので勉強してきます。
177:デフォルトの名無しさん
08/11/19 16:45:48
>>174-175
レスありがとうございます。
えーと、つまりReadMe.txtもTODO:コメントも、後から
自分で追記したりするようなものではないということでいいんでしょうか?
ReadMe.Txtはプロジェクト作成時にVCが自動作成したファイルだけを示し、
その内どこをいじるのかがTODO:コメントで指示されるという解釈であってますか?
178:デフォルトの名無しさん
08/11/20 19:29:23
いやあれウィザードが吐くだけの固定コメだから
メッセージマップとかをクラスのプロパティからいっぱい作って見れ 全部同じコメだ
179:デフォルトの名無しさん
08/11/21 12:12:07
int型のポインタを宣言するときは
int* pA; とするのがいいのか
int *pA; とするのがいいのか教えていただけませんか。
テキストにはどちらでも良いと書いてありましたが、できれば多数派に合わせておきたいので・・・
180:デフォルトの名無しさん
08/11/21 12:36:44
>>179
ポインタをtypedefする
typedef int *LPINT
LPINT pA;
181:デフォルトの名無しさん
08/11/21 16:31:05
>>179
後者が一般的
182:デフォルトの名無しさん
08/11/21 16:32:25
int * p;
ではダメですか?
183:デフォルトの名無しさん
08/11/22 16:31:46
名前:
E-mail:
内容:
超初歩の質問ですいません。環境はXP,VC++2008(SP1)でインストール直後のまっさらな状態です。
String *name = textName->Text;
が
error C3699: '*' : この間接指定を型 'System::String' で使用できません
と、VisualStudio2008からダメ出しされまして、エラーメッセージどおりに、
String ^name・・・・
としたらうまく通りました。
エラーの原因はStringクラスが定数文字列前提だからかな?とも
思ってますが、それよりも^演算子(なんでしょうか?)の
意味がさっぱり調べられません。
ググってもこれといったものが出ませんでした^^;
^の意味をどなたか教えていただけませんでしょうか・・・。
184:デフォルトの名無しさん
08/11/22 16:51:51
>>183
URLリンク(msdn.microsoft.com)(VS.80).aspx
185:デフォルトの名無しさん
08/11/22 17:08:32
183です。
助かりましたー。新仕様だったんですね。
186:デフォルトの名無しさん
08/11/22 19:29:02
ちょw
187:デフォルトの名無しさん
08/11/22 20:37:46
名前:
E-mail:
内容:
なんぞこれ
188:デフォルトの名無しさん
08/11/22 21:32:16
デスマの合図に決まってるだろ
189:デフォルトの名無しさん
08/11/23 00:33:46
質問です。VisualC++2008をつかっています。
ソースを書き換える前に保存をしたいのですが、
全部丸ごと別名で保存する方法を教えてもらえませんか?
.cppや.hを個別に保存はできましたが、プロジェクトの中身を丸ごと別名で保存はできないのでしょうか?
190:デフォルトの名無しさん
08/11/23 01:26:10
逆に考えるんだ
元のプロジェクトの中身をコピーして別名にしたあと上書き保存すれば結果は同じだと
191:189
08/11/23 02:01:38
>>190
なるほど、ありがとうございました
192:デフォルトの名無しさん
08/11/23 03:58:12
Visual Source Safeを使えばいいと思うよ
193:デフォルトの名無しさん
08/11/23 11:48:07
次のVC++で改良される自動生成コメント ...
// TODO: ここに 派遣さんが コマンド ハンドラ コードを追加します
194:デフォルトの名無しさん
08/11/23 17:04:29
SDKのダイアログリソースを見ると全部英語表記で記述してありますが
VCでビルドするともちろん日本語で表示されますが
日本語用のストリングテーブルがどっかにあるんですか?
195:デフォルトの名無しさん
08/11/23 22:14:00
調べた事ないが、リソースDLLがどっかにあるんじゃまいか?
196:デフォルトの名無しさん
08/11/23 22:25:55
予約語にinterface ってのがあるんだがこれ何?
Javaのinterfaceと同じ感じなのか?
言語仕様にはこんなのなかったとおもうんだが
197:デフォルトの名無しさん
08/11/23 22:28:58
C++/CLIのinterfaceではないだろうか
198:デフォルトの名無しさん
08/11/23 22:39:06
>>197
調べてみたらそのようですね
ありがと
199:デフォルトの名無しさん
08/11/24 16:16:26
すみません、ゲームをリリース版でコンパイルして実行ファイルを作ってみたんですが
MSVCR80.DLLというランタイムに依存してしまうようなんですが
このDLLは再配布可能でしょうか?
200:デフォルトの名無しさん
08/11/24 19:20:22
っ「URLリンク(www.microsoft.com)」
201:デフォルトの名無しさん
08/11/26 07:43:24
プログラミング超初心者で>>23と全く同じ状況になってしまいました
デザイン画面は 「このファイルのデザイナに、デザインできるクラスがないため、デザイナを表示できませんでした。」というエラーが出てしまいます
↓ちなみにこのコードを追加したらなってしまいました
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
//オプションボタン (ラジオボタン) の状態を確認
if (this->radioButtonKisu->Checked == true){
System::Diagnostics::Debug::WriteLine("奇数が選択されました");
}else if(this->radioButtonGusu->Checked == true){
System::Diagnostics::Debug::WriteLine("偶数が選択されました");
}else{
MessageBox::Show("奇数か偶数かを選んでください","お願い");
return;
}
}
前に成功したビルドの状態に戻せないんでしょうか
最初からやり直せば次に進めるんでしょうか
202:201
08/11/26 11:04:56
あぁ、自己解決しました…
203:デフォルトの名無しさん
08/11/26 20:30:45
ゲームを配布しようと思ってるんですが
コード生成のMTとMTdって何が違うんですか?
Dllが付くものは駄目だということは知っているんですが…
204:デフォルトの名無しさん
08/11/26 22:16:31
ライブラリが最適化されてるか否か
205:デフォルトの名無しさん
08/11/26 23:16:52
もう少しわかりやすく説明して欲しいんですが…
206:デフォルトの名無しさん
08/11/26 23:26:24
デバッグ用じゃないかデバッグ用か
207:デフォルトの名無しさん
08/11/27 00:00:34
ggrks
208:デフォルトの名無しさん
08/11/27 00:45:38
じゃあ要するに配布の再はMTを使った方がいいってことですかね?
209:デフォルトの名無しさん
08/11/27 00:52:04
そういうことにしておけばいいんじゃないですかね
210:デフォルトの名無しさん
08/11/27 00:59:05
くたばれクソども
211:デフォルトの名無しさん
08/11/27 09:56:20
MTdはデバッグ用でこれでビルドしたやつ配布すると馬鹿にされる。
212:デフォルトの名無しさん
08/11/27 11:39:13
>>208
Releaseモードでビルドするんだよ
213:デフォルトの名無しさん
08/11/27 16:52:45
myfunc.h という名前のヘッダファイルに
int max(int x,int y);
という関数プロトタイプを宣言し
main()があるソースファイルとは別のmyfunc.cppという名前のソースファイルに
int max(int x,int y)
の定義文を記述しました。
そしてmain()があるソースファイルのはじめに
#include "myfunc.h"
と記述して動いたのですが、はじめの#include文を消去しても、ヘッダファイルに適当な関数プロトタイプの宣言を追加しても
動きました。(定義はしていません)はじめに#includeを記述する必要はあるのでしょうか。
そもそもヘッダファイルの必要性がよくわかっていないので、教えていただけないでしょうか。
214:デフォルトの名無しさん
08/11/27 17:21:44
よくわからんが、とりあえず何か消したら念のためビルドのクリーンとかで
クリアしてから試してみては。
215:デフォルトの名無しさん
08/11/27 18:07:33
普通はヘッダの方は必要に応じて外部参照関数呼び出しを記述
extern int max(int x,int y);
で、cまたはcppソースの方にプロトタイプ宣言を入れる
cpp内で関数を参照する時、呼び出し側の関数よりも上に本体のコードがあれば
プロトタイプ宣言は必要ない。
本体が下にある場合はプロトタイプ宣言が必要。
216:デフォルトの名無しさん
08/11/28 00:11:19
>>214,215
ありがとうございました。いろいろ試してみます。
217:デフォルトの名無しさん
08/11/28 12:14:13
すいません、はじめてフォームアプリケーションを作ってみようと思ったんですが、
テキストボックスに入力した値がどこに入るのかわかりません。
Messagebox::Showでそれっぽいものを表示してみようとも思ったんですが、
System:::string この型は演算子として使用できません(String[0]とかも)となります。
private: System::Void textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e) {}の中で自分で何かをやるんでようか?
助けてorz
218:217
08/11/28 12:16:01
MessageBox::Showを書いたのはbuton1_Clickの中です。
219:デフォルトの名無しさん
08/11/28 12:21:32
なんつーか、それ以前にやることやったほうがいい気がするが。
もしくは本でも読むか。
試しに、buton1_Clickの中に MessageBox::Show(textBox1->Text); とか書いてみ
220:デフォルトの名無しさん
08/11/28 12:28:35
>>219
ありがとうございました
おかげでスーパーハカーになることができました!
221:デフォルトの名無しさん
08/11/28 13:34:02
>>216
とりあえずmax()の本体を別のcppファイルに移してためしてみるといい
ヘッダーの使い方がわかるはずだ
222:デフォルトの名無しさん
08/11/28 21:13:21
>>221
ありがとうございます。max(int x,int y)が定義されているcppファイルを削除しても動いてしまったので
ためしに maxi(int x,int y)に名前を変えたところ、無事(? 動かなくなりました。
using namespace std; を main() があるcppファイルのはじめに記述していたのですが
stdの名前空間の中にmaxがあったのが原因だったみたいです。
その後、ヘッダーファイルをincludeしなかったりしてみたりと色々試してなんとなくですがヘッダの意味がわかった気がします。
223:デフォルトの名無しさん
08/11/28 21:56:04
日本語でおk
224:デフォルトの名無しさん
08/11/29 15:59:58
VC++2008無料版を使っています。
class の宣言文でpublic:を記述するとclassの位置までインデントが戻ってしまうのですが、
classの位置より1段階インデントした状態にオートインデントするにはどうすればいいのですか?
225:デフォルトの名無しさん
08/11/30 10:19:41
USBにエディタを入れて持ち歩きたいんですけど
Visual C++ライクなエディタってありませんか?
Notepad++Portableは知ってるんですけど、折り畳みがダサいので・・・
226:デフォルトの名無しさん
08/12/03 01:24:56
実行すると、Debugフォルダがかってに作成されちゃうんですが、仕様ですか?
227:デフォルトの名無しさん
08/12/03 05:33:26
>>226
仕様です。
どうしても作りたくなければReleaseビルド以外使うな
228:デフォルトの名無しさん
08/12/03 08:33:13
>>226
プロパティいじれば好きに出来るよ
$(OutDir)
とか
$(IntDir)
を好きな名前にしたらいい
229:デフォルトの名無しさん
08/12/03 18:13:00
ゲーム製作をしていてVC++2008 でコンパイルしています。
コード生成設定をMTdでやると通るのですが、MTでやると以下のエラーが出てしまいます。
LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __malloc_dbg が関数 "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。
libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __free_dbg が関数 "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。
C:\Documents and Settings\***\デスクトップ\**\Debug\***.exe : fatal error LNK1120: 外部参照 2 が未解決です。
LIBCMTを無視しても逆にエラーが増えてしまうんですが、どうすればいいでしょうか?
ゲーム配布時にはMTdでもMTでもdllが付かなければ問題ないですか?
230:デフォルトの名無しさん
08/12/03 18:41:50
>>229
libcpmtdはデバッグ用。内部でデバッグ用のmallocとfreeを呼んでるから/MTdじゃないとリンクできない。
リリースビルドならlibcpmtを使う。
ってか、プロジェクトの作成をウィザード任せにすればその辺を自分でいじることなんてないと思うんだけど。
231:デフォルトの名無しさん
08/12/03 18:50:34
なるほど、debugモードでコード生成する時はMTdで
リリースモードでやるときはMTでやるものなんですね
試しにリリースモードでMT生成してみたら通りました。
どうもありがとうございましたー。
232:デフォルトの名無しさん
08/12/03 20:24:26
すいません
windowsXP SP2で visual c++ 2005 Express Editionを使っているんですが
以前のエラーのため、Windows Forms Designer Package ({7494682B-37A0-11D2-A273-00C04F8EF4FF})
以前のエラーのため、Visual Studio Explorers and Designers Package ({8D8529D3-625D-4496-8354-3DAD630ECC1B})
以前のエラーのため、Visual Studio Explorers and Designers Package ({8D8529D3-625D-4496-8354-3DAD630ECC1B})
以前のエラーのため、Visual Studio Common IDE Package ({6E87CFAD-6C05-4ADF-9CD7-3B7943875B7C})
というようなエラーが出てしまいます
コマンド プロンプトで 'VCExpress /resetskippkgs' を入力しろと出るので試しましたが無理でした
調べたところbeta版がどうこうとあるのですが、自分はそのようなものは入れていません
beta版のアンインストーラーを使用しても、該当するものはありませんでした
何か解決策はないでしょうか?
233:デフォルトの名無しさん
08/12/04 10:44:16
そのエラーは何をする時に出るの?
234:デフォルトの名無しさん
08/12/06 01:18:55
お願いします。
WinXP SP2でVisual c++ 2005 Express Editionです。
UNICODEのIniファイルの情報をGetPrivateProfileStringで取得しようと
しているのですが、lpReturnedStringにはlpDefaultの値が入ってしまいます。
IniファイルがANSIのときはうまくいきます。
GetPrivateProfileStringの引数はワイド文字にしているつもりです。
意図的にGetPrivateProfileStringWにしてもダメでした。
UNICODEファイルの際の注意点などあるのでしょうか?
ご教授ねがいます。
235:デフォルトの名無しさん
08/12/06 01:29:29
>>234
INI系の関数はAでもWでもファイルの中身はマルチバイト文字として扱われる。
そのおかげで、Aで書き込んでWで読み取るなんてことができるんだけどね。
もちろん、文字コードの自動判別なんてやっていない。
236:デフォルトの名無しさん
08/12/06 10:27:18
>>234
> UNICODEのIniファイル
拡張子がINIってだけで中身がUnicodeじゃあ、INIファイルとは呼べ
ないシロモノだな。
自分で、CStdioFileクラスのCStdioFile::ReadString()/WriteString()
なりを使って、1行ずつ読み込んで文字列処理するコードを書くしか
ないな。(w
237:デフォルトの名無しさん
08/12/06 12:35:20
そうだったのか。
たしかにINIファイルって、ASCIIしか使わないけど……
238:デフォルトの名無しさん
08/12/06 13:08:53
> INIファイルって、ASCIIしか使わないけど……
んなこたぁない。シフトJISであれば漢字やカナ文字だって使える。
でなきゃ、漢字やカナ文字を含むパス名やファイル名の文字列保存に
使えない。
239:デフォルトの名無しさん
08/12/06 13:49:53
マジ?シフトJISなら良かったのか。
それは気がつかなかった。今度試してみよう。
ていうか、レジストリ弄りたくなくて、いまだにINIファイル使ってるんだよね。
240:デフォルトの名無しさん
08/12/06 14:34:14
Windowsフォルダに際限なくINIファイル作られるより、レジストリの方が
ずっとマシだと思えるんだが? ログインユーザー単位で設定が分けら
れるというメリットもあるし。
第一、レジストリなんて意識せずともWindowsのシステムでいじられ
まくりだぞ。
241:デフォルトの名無しさん
08/12/06 14:37:53
>>239
Shift_JISというか、そこで使っているコードページの文字コード。
欧米ならWindows-1252だし、繁体中国語圏ならBig5という具合。
>>240
ファイルでもApplication Dataあたりに置けば、ユーザ別設定はできる。
242:デフォルトの名無しさん
08/12/06 15:03:55
>>241
> ファイルでもApplication Dataあたりに置けば、ユーザ別設定はできる。
MFCフレームワークのデフォルト処理を前提に書いてしまった。言われ
れば、まぁ確かにそうだ。 ところで、複数インスタンス起動した
アプリからiniファイルへの同時アクセスとかって、今は問題ないん
だっけか?
243:デフォルトの名無しさん
08/12/06 16:50:51
たんなるアプリの設定データはWindowsフォルダなんかにつくらんだろ。
自フォルダにINIファイル作るなんて普通じゃないか?フリーソフトなんかは特に。
わざわざ選択肢減らす必要なんてないしケースバイケースでよかろう。
244:デフォルトの名無しさん
08/12/06 17:30:28
>自フォルダにINIファイル
Program Filesに置いたらVistaで問題が出る。
All UsersのAppDataとかでどうか。
245:デフォルトの名無しさん
08/12/06 17:41:50
>>244
>Program Filesに置いたらVistaで問題が出る。
はじめやりずれーって思ったら他のユーザーでログインしたときを考えたら納得した
246:デフォルトの名無しさん
08/12/06 19:27:48
>>243
> たんなるアプリの設定データはWindowsフォルダなんかにつくらんだろ。
昔は作りまくりだったんで、レジストリが搭乗したんだが?
今もMFCでCWinApp::SetRegistryKey()呼ばないとiniファイルを使うけど、
iniファイルが作られるデフォルトの場所はWindowsフォルダだよ。
>>244
> All UsersのAppDataとかでどうか。
自分(現在のログインユーザー)用の「マイドキュメント」フォルダの
パスはSHGetSpecialFolderLocation()で取得できるけど、これって取れる
んだっけ? もしかして決め打ち? それはそれで問題な気もするが?
なんて思ったら、
SHGetSpecialFolderLocation(hwndOwner,CSIDL_COMMON_APPDATA,...);
でいけるのか。 知らない間にCSIDLずいぶん増えているな。
URLリンク(msdn.microsoft.com)(VS.85).aspx
247:デフォルトの名無しさん
08/12/06 19:30:24
昔話がしたいだけか。
248:デフォルトの名無しさん
08/12/06 19:46:34
VistaでProgram Filesのデータを読み書きするのって各ユーザー毎に仮想フォルダ作って
勝手にやってくれんじゃなかったっけ?
具体的にはどういう風になんの?
正直Vistaなんて糞OS使った事もないから知らんが。
249:デフォルトの名無しさん
08/12/06 20:20:51
全ユーザー共通のINIファイルじゃないとダメってソフトでも
なければさほど問題はなさそうな気もする
つかこれってINIファイルに限らず他のセーブデータにも
言える事だろ
250:デフォルトの名無しさん
08/12/06 23:21:36
「Program Filesに置いたらVistaで問題が出る。」っていうのは、他の
スレでも見たような気がするが、実際何がどう問題なのかわからん。
すくなくとも、exe本体が存在するProgram Files下のアプリケーション
フォルダ内にiniファイルを作成して読み書きは問題なく動作している
けどな。
Administrator権限以外じゃダメとかなら、Vistaに限らず2000やXP等でも
問題になりそうな気がするし、セキュリティ上、別のログインユーザーに
iniファイル内容を見られると困るというなら、All Usersに置いても同じ
だと思う。
251:デフォルトの名無しさん
08/12/06 23:40:23
別のログインユーザに見られたら困る、じゃなくて
別のログインユーザから見られないから困るんでしょ。
Program FilesやHKLMに無駄に書き込むソフトなんざそもそもマルチユーザを前提としていないので
これらの挙動はソフトとしては想定外なわけで。
あと、管理者権限を持つプロセスから呼ばれると仮想ストアじゃないとこから設定ファイル読みに行ってNotFoundとか。
なんにせよUAC程度で不具合出るようなソフトは単純に行儀悪いだけだと思う。
252:デフォルトの名無しさん
08/12/07 00:27:46
>>251
そうそ
Program Filesにおいちゃうとアドミニ権限ないと
書き込めないし見れないんだよね
なんでアドミニ権限ないユーザが起動すると落ちるソフトとか結構あったりする
253:デフォルトの名無しさん
08/12/07 00:35:26
行儀が悪いのはむしろこういう勝手な事をOSにさせるMSだと思うが
別にユーザー毎の設定で問題ないアプリなら不具合にならないわけだし
結局の所はケースバイケースって事でしょ
ゲームアプリのセーブデータなんかはプログラムフォルダ内に入れとかないと
セーブデータ残したままアンインストールする場合、普段ユーザーが見ない所に
ファイルが残るしな
「行儀がいい」と「頭が固い」を履き違えてるんじゃね
254:デフォルトの名無しさん
08/12/07 00:43:20
>>253
いや、権限によってはProgram Filesを見れないから
アプリの起動自体できない
設定ファイルがないって感じで落ちる
ケースバイケースじゃなくてこう作らないと駄目ってところまできてる
255:デフォルトの名無しさん
08/12/07 00:48:55
さすがにそれは設定ファイルが存在することを前提にプログラムを組む方がおかしい
なかったらデフォルト値で動かすのが普通。
256:デフォルトの名無しさん
08/12/07 00:51:59
>>254
設定ファイルがないと動かないなんて作りになってるのは
ProgramFilesだろうがなんだろうが終わってるだろ
257:デフォルトの名無しさん
08/12/07 00:59:36
>>256
仮にProgramFilesが駄目だったら今度どこに保存すんの?
258:デフォルトの名無しさん
08/12/07 01:06:21
Vistaは持ってないけどこの認識であってる?
1.ファイルを読むだけだったらProgram Filesから行われる
2.書き込みが発生した場合、バーチャルストアで行われる
3.一度書き込みが発生したファイルは、バーチャルストアで読み書きが行われる
Program Filesから読めないとか、どこに保存するとか言ってる人がいるから混乱してきたが。
この認識が違うなら>>254に詳しい説明をしてほしい
259:デフォルトの名無しさん
08/12/07 01:11:29
>>258
そんなのセキュリティのポリシーの設定で変わるじゃん
駄目にしてある会社だったら読み取りも駄目だろ
260:デフォルトの名無しさん
08/12/07 01:15:46
その場合ってそのユーザにアプリって起動できんの?
インストールの設定も含めて
261:デフォルトの名無しさん
08/12/07 01:29:36
仮にそういうセキュリティ設定になってたとしたら
INIファイルどころかあらゆるセーブデータの読み書きができなくなるわけだから
INIファイルをどうしようが結局同じことだと思うけど
まあどうしても全てのユーザーで動作させたいんだったら全セーブデータを
>>244のようにするか、レジストリに全てぶっこむしかないだろうね
アホ臭いとしか言いようがないが
262:デフォルトの名無しさん
08/12/07 01:45:39
でもきちんと対応するってならそれっきゃないってことだろうな
まあ、業務でそういうところに当たらないとも限らないからちょっとメモっておこ
担当者がキチだと普通にこういうの要求されるよね
263:デフォルトの名無しさん
08/12/07 03:54:39
>>254
ファイルが読めないなら起動に必要なデータファイルはどこから読むんです?
264:234
08/12/07 04:26:59
豚切り失礼します。
>>236さん
遅くなりましたが、回答ありがとうございます。
そうですか。UNICODEはINIファイルとして使えないのですね。
勉強になりました。
265:デフォルトの名無しさん
08/12/07 12:46:44
>>258
3.が違う
266:デフォルトの名無しさん
08/12/07 16:07:48
>>265
どう違うの?
267:デフォルトの名無しさん
08/12/07 20:53:50
言ってみたかっただけじゃね。
268:デフォルトの名無しさん
08/12/08 01:31:32
CとC++の違いってヘッダがiostreamになって使う関数が違う以外にないの?
こんなんでオブジェクト施行とか騒いじゃってるの?拍子抜けなんだけど
269:デフォルトの名無しさん
08/12/08 01:38:10
クラス、テンプレート、多重定義、例外処理……、
オブジェクト指向に関係あるものないもの、CになくてC++にある機能なんていくらでもあるが。
270:デフォルトの名無しさん
08/12/08 01:49:56
クラスなんて構造体に毛がはえたようなものしょぼいんだよはっきりいって
271:デフォルトの名無しさん
08/12/08 02:18:40
馬鹿野郎!
それのおかげでインテリセンスの恩恵があるんだろうが!
272:デフォルトの名無しさん
08/12/09 00:47:26
C→C++の一番の利点は
コードが見やすいこと、これに尽きるだろ
C++に慣れるとCのでっかいコードは耐えられん
クラス化したくてウズウズしてくる
変数途中で宣言したくなる
273:デフォルトの名無しさん
08/12/09 00:51:53
C言語の勉強やってからC++に移行したほうが良いだろうか
それとも最初からC++から勉強しても問題ない?
274:デフォルトの名無しさん
08/12/09 00:57:11
>>258
バーチャルストアに書き込むのはマニフェストがない場合だけだよ。
マニフェストがあればあとは管理者権限への移行が成功すれば直接書くことになる。
275:デフォルトの名無しさん
08/12/09 01:19:02
>>273
いきなりC++でいいと思う。
共通する事柄はいずれにせよ学ぶことになるし、
Cで良く使うテクだけどC++ではあまり使わないのとか意外とあるし。
276:デフォルトの名無しさん
08/12/09 01:24:14
>>275
把握したありがっとう
277:デフォルトの名無しさん
08/12/09 03:21:41
>>274
つかそれって結局管理者権限で実行するってことじゃねーの?
他のシステムファイルからみとかで管理者権限が必要でマニフェストに組み込まれた
アプリじゃなければ>>258のようになるってことっしょ?
278:デフォルトの名無しさん
08/12/09 10:30:08
>>277
マニフェストがない場合、管理者権限でもバーチャルストア行き。
279:デフォルトの名無しさん
08/12/09 10:52:59
マニフェストがないという言い方は正しくない
280:デフォルトの名無しさん
08/12/09 12:44:06
一連の流れをみててもどうもわかりにくいです。
人によって言ってる事が違うというか。
管理者、制限ユーザー、マニフェスト関連で正確な挙動に
ついての詳細情報が掲載されてるサイトないですか?
VistaだけでなくXPや2000での情報も欲しいです。
281:デフォルトの名無しさん
08/12/09 14:48:03
>>280
一次情報源としてMSDNライブラリなど
例えばここらへん。
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)
URLリンク(technet.microsoft.com)
282:デフォルトの名無しさん
08/12/09 15:11:06
日本語でおk
283:デフォルトの名無しさん
08/12/09 15:16:27
初心者スレで英文持ち出してくるヤツは死んでいいと思うよ
日本と米で仕様が違うのもよくある事だしな
284:デフォルトの名無しさん
08/12/09 15:26:18
英文にしか情報がないようなことを初心者スレで質問するヤツは死んでいいと思うよ
285:デフォルトの名無しさん
08/12/09 21:38:14
>>284
初心者なんだから分からんだろ。
286:デフォルトの名無しさん
08/12/09 21:50:21
非標準言語のしか資料が無いと言うことが判っただけでも大きな進歩であり、
革新的な質問であったことは確定的に明らか。
287:デフォルトの名無しさん
08/12/09 22:55:05
誰か日本語でわかりやすくまとめてくだちぃ
288:デフォルトの名無しさん
08/12/09 23:24:08
ホームエディションだと管理者か制限ユーザーのカテゴリわけだけで
細かい設定はないんだよな
プロフェッショナルの管理者による厳しいセキュリティ設定まで考慮してもきりがないと思う
どうやっても管理者次第で動かない設定にできるんだし
XPホームエディションでProgramFilesに入れたアプリを制限ユーザーで動かしてみたけど
普通にINIファイルを含むセーブデータを読み書きできた
Vistaでマニュフェストの指定なしだとこの読み書きがバーチャルストアになるってことか
それを想定して動くつくりであればセーブデータもプログラムと同じフォルダでいいんじゃね
289:デフォルトの名無しさん
08/12/10 01:08:56
まぁ仮想ストアは救済策ってーか、MSお得意の泥臭い互換性の維持だからな。
多分将来的にはユーザーのデフォの権限を制限ユーザーにしたいんだろうが、
それVistaでやっちゃうとProgram Filesに書き込むアプリなだけで動かなくなるわけだし。
マニフェスト無しでほっとくのも止めやしないが、管理者権限のコマンドプロンプトやファイラから
起動したら別々の設定ファイルをうっかり作っちまうとかも起こりうるので、
requireAdministratorで起動毎にUACダイアログを出した方がいい。
そしてアプリのユーザーにダイアログをうざがられてAppDataに
書き込まざるを得なくなるというプレッシャーこそがUACの真意だとかなんとか。
290:デフォルトの名無しさん
08/12/10 02:03:25
かなりどうでもいい条件付けだな
291:デフォルトの名無しさん
08/12/10 11:56:44
VS 2003からVS 2008にしてみました
C++のソースファイルはUTF-8で書かれていて、VS 2003では概ね問題なくコンパイルできていました。
ところがVS 2008のcl.exeは、このソース内に定数として書かれた文字列を勝手にSJISに変換して内部処理するようです。これでは正常動作できません。
この余計な機能を、何とか避ける方法はないのでしょうか?
膨大な量があるので、今さらファイルをSJISに戻すとかすることは不可能なんです。
292:デフォルトの名無しさん
08/12/10 12:03:53
コードページは?
293:デフォルトの名無しさん
08/12/10 12:10:24
普通にコマンドプロンプトを開いて作業しているので、932のシフトJISです。
294:デフォルトの名無しさん
08/12/10 12:15:05
すいません、本当に簡単なことなのですが
if(argc == 3){
if(argv[1] == L"-o"){
if((fp = fopen("argv[2]", "w")) == NULL){
printf("出力ファイルをオープンできません.\n");
exit(1);
}
fclose(fp);
}
この
if(argv[1] == L"-o") の条件が通りません。
コマンドで test -o test1 のように打っても違うものとして認識しているようで・・・
画面にプリントしてみると同じなのですが、Lをつけるとデータが違うものになってしまうのでしょうか?
295:デフォルトの名無しさん
08/12/10 12:16:52
chcpで変えてみては?
つーか、UTF-8でダメな例が思いつかないな、再現可能なソース無いですか?
296:デフォルトの名無しさん
08/12/10 12:18:44
>>294
文字列の比較に直接 == は使えません。
297:デフォルトの名無しさん
08/12/10 12:29:10
>>291
コンパイルエラーなのか動作が変なのか
エラーメッセージがあればそれを書いてもらうと何かわかるかもしれません
>>294
argvの型はTCHARですか
298:デフォルトの名無しさん
08/12/10 12:39:28
またどこの言語からの転向者だろ
VSつながりでVBかC#あたりか
299:デフォルトの名無しさん
08/12/10 12:40:19
template <typename Foo, typename Bar> class Baz : public Bar { なんたら
void Qux( const Quux<Foo,Bar> & foobar ) {...};
};
class Bar { なんたら }; // (1)
VC2008で上のをもう少し複雑に書くと Baz::Qux での引数の型 Quux<Foo,Bar> が
(1) の Bar と解釈されてコンパイルエラーになってしまう
GCCだと通るんだけどなあ
300:デフォルトの名無しさん
08/12/10 12:40:36
>"argv[2]"
この書き方はPerlかPHPだろう
301:デフォルトの名無しさん
08/12/10 12:52:34
もともとCとVBAをやってました
>>296
やっぱりstrcmpを使わないとだめですか?
>>297
int _tmain(int argc, _TCHAR* argv[])
こう宣言してます
302:デフォルトの名無しさん
08/12/10 12:53:27
もともとCとVBAをやってました
>>296
やっぱりstrcmpを使わないとだめですか?
>>297
int _tmain(int argc, _TCHAR* argv[])
こう宣言してます
303:デフォルトの名無しさん
08/12/10 12:57:44
>>302
はい。
304:デフォルトの名無しさん
08/12/10 12:59:15
if( _tcscmp(argv[1],"-o") == 0 ) {
では
305:デフォルトの名無しさん
08/12/10 13:00:32
if( _tcscmp(argv[1],_T("-o")) == 0 ) {
では
306:デフォルトの名無しさん
08/12/10 13:01:43
if (_tcsicmp(argv[1],_T("-o")) == 0) {
では
307:デフォルトの名無しさん
08/12/10 13:03:35
>>304さんの方法でやってみたところ
エラー 1 error C2664: 'wcscmp' : 2 番目の引数を 'const char [3]' から 'const wchar_t *' に変換できません。(新しい機能 ; ヘルプを参照)
というようなことを言われました。
どうもこの変換できないというところが理解できないです。代入しているわけでもないのに何故?って感じです。
308:デフォルトの名無しさん
08/12/10 13:04:55
#include "stdafx.h"
#include "string.h"
#include "stdlib.h"
int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp;
if(argc == 3){
if( _tcscmp(argv[1],"-o") == 0 ){
if((fp = fopen("argv[2]", "w")) == NULL){
printf("出力ファイルをオープンできません.\n");
exit(1);
}
fclose(fp);
}
else{
printf("USage :\n");
printf("-o : **********\n");
}
}
else{
printf("引数の数が違います");
}
return 0;
}
これが全文です。
309:デフォルトの名無しさん
08/12/10 13:14:00
通常 "-o" の文字リテラルは char で構成される
文字セットがユニコードの場合 _tsccmp は _wcscmp にマップされる
_wcscmp が要求する型は const wchar_t * だからエラーになる
_T マクロは文字セットにあわせてユニコードの場合には "-o" を L"-o" と変える
L"-o" はワイド文字 wchar_t で構成されるリテラルだから通る
すまん思いきり間違えた 304は俺
310:デフォルトの名無しさん
08/12/10 13:18:33
UNICODEに拘らなければANSI Cで十分なんだよな
311:デフォルトの名無しさん
08/12/10 13:21:00
>>309
解決しました!ありがとうございます
312:デフォルトの名無しさん
08/12/10 13:47:31
>>291で質問した者です
再現可能なソースを作っていて気がつきました。
chcp 65001やchcp 437としても動作が同じで、文字列リテラルが強制的にSJISに内部変換されていることが分かりました。
UTF-8のソースファイルなのですが、「BOM」を付けると、このような動作になるようです。
BOMを付けないUTF-8だと、warning C4819 が山ほど出て、化ける文字までありますが、何とかなりそうです。
今回作った下の再現プログラムも、BOMありのUTF-8と、BOM無しのUTF-8では、動作が違ってきます。
#include <iostream>
int main()
{
std::cout << "項目" << std::endl;
return 0;
}
一応解決したことにします。ありがとうございました。
313:デフォルトの名無しさん
08/12/10 15:35:09
すみません>>294で質問したものですが、
同じソースで _tcscat(argv[2],L".txt"); という処理を入れ、作成ファイルをテキスト形式にしようと思ったのですが
出力されたファイルが、テキストではなくファイルで出力されてしまいます。
画面表示させるとちゃんと****.txt となっているのですが・・・
314:デフォルトの名無しさん
08/12/10 15:49:13
>>313はスルーしてください
アホくさい間違いでしたので(汗
315:デフォルトの名無しさん
08/12/10 22:29:54
Visual C++を使用していて、ちょっと困ってしまったので助けてください。
下記画像のようにスペース部分に色つき矢印やらドットやらが表示されて消えなくなってしまいました。
どこかでキーボード押し違えたみたいで・・
この設定の解除の仕方を分かる方いたら教えてください><
↓
URLリンク(imepita.jp)
316:デフォルトの名無しさん
08/12/10 22:38:27
メニュー > ヘルプのキーボード何とかに一覧がある
317:552
08/12/10 23:45:14
ヘルプで見ても、そもそもコレが何なのか解らないので検索できないので
教えていただけませんか?
318:552
08/12/11 00:19:36
質問に答えてくれなかったからってこんなこと言うのもなんだけど
なんか、プログラマーって陰湿な性格の人が多いよね。
解るんなら教えてくれればいいじゃん。初心者用のスレだった気がするけど。
ついでに、編集→詳細→スペースの表示で自己解決しました。
だれも教えてくれんかった。
319:デフォルトの名無しさん
08/12/11 00:47:38
今MIDIファイルを開くっていうプログラムを作りたいのですが、
よろしければ教えてください。
バージョンはVC++2005 AEです。
320:319
08/12/11 00:53:28
319ですがGETFILE関数を使いたいです。
よろしくお願いします。
321:デフォルトの名無しさん
08/12/11 02:15:04
>>318
君が質問したのは3、4時間前だろ?
誰もが同じスレをずっと監視してサポートセンターのように対応してくれるとでも思ってんのか?
自分で解決したならそれでいいし、自分で色々やってもできなかったらまた質問すりゃいいだろ
陰湿なのはちょっとレスがない程度でふてくされる君の思考回路だよ
322:デフォルトの名無しさん
08/12/11 02:29:37
>>318
オマエみたいなパーデンネンを弾くために、みな時間置いてから答えるようにしてるからね。
ゴクローサン。
323:デフォルトの名無しさん
08/12/11 07:33:14
>>315
[編集]→[詳細]→[スペースの表示]
324:デフォルトの名無しさん
08/12/11 09:53:49
>>318
つーかその質問、定期的に出るんでうんざりなんだけど。
過去レス調べることもできないのかよ。
あと質問なんか1日くらい待てや、答える人が24時間張り付いてるわけじゃないぞ。
325:デフォルトの名無しさん
08/12/11 10:10:52
こんにちわ。Visual C++でOPENGLを用いてゲームを作ろうと思うのですが、
ウィンドウを振動させるやり方がわかりません。。
何かコマンドややり方があるのならアドバイスください。よろしくお願いします。
※JAVASCRIPTでウィンドウを振動させるみたいな感じです。
326:デフォルトの名無しさん
08/12/11 10:18:59
>>325
SetWindowPos APIとrand関数を使え
327:デフォルトの名無しさん
08/12/11 10:28:02
もの凄く気軽に「こんなソフトありませんか?」
スレリンク(software板:331番)
331 名前:名無しさん@お腹いっぱい。[] 投稿日:2008/12/11(木) 09:50:07 ID:mvBU1EDM0
こんにちわ。
アクティブウィンドウを振動させるようなフリーソフトってありますか?
OPENGLで実験中にウィンドウを揺らしたいのですが・・・コマンドも分からないし、出来ないので外部のツールで強引にしようかと。。
よろしくお願いします。
328:デフォルトの名無しさん
08/12/11 10:45:36
>>315
Ctrl+R、 Ctrl+Wを続けて入力
329:デフォルトの名無しさん
08/12/11 10:58:16
>318
試験勉強みたいに頭の中に全部記憶する必要ない。
というか情報量多すぎるからその都度自分で調べて解決していかないとだめ。
初心者の場合はどうやって調べたらいいかわからないから
調べ方を教えてあげるのが重要。
答えだけ教えたんじゃ、いつまでたっても自分で調べられようにならない。
330:M
08/12/11 11:35:21
今、VC++でMFCを用いたプログラムを作成中で、そのプログラムでRS232C通信を行いたいのですが、RS232c通信のプログラムの部分だけAPIを用いて記述したいのですがどのようにすればいいのでしょうか?
方法があれば教えてください。お願いします。
331:デフォルトの名無しさん
08/12/11 11:42:17
>>330
ここなんかどうだろ?
URLリンク(www.ee.fukui-nct.ac.jp)
332:デフォルトの名無しさん
08/12/11 11:43:59
>>326
2つともよく分からないまま検索したらMOVEWinfowというのもあるみたいで、if関数を用いて頻繁に座標をずらし振動させることにしました。
こんなんでいいのかな??
マルチすいません。ありがとうございます。
333:M
08/12/11 11:48:46
>>331
ありがとうございます。
このプログラムをMFCのプログラムにどのように組み込めばいいのでしょうか?
あほな質問ですみません。。
334:デフォルトの名無しさん
08/12/11 12:55:47
>>333
WM_COMMANDメッセージでコマンドを受け取ったら、main関数の中身を実行すれば?
335:デフォルトの名無しさん
08/12/11 14:11:02
ファイルの読み書きとほとんど同じだな
やってる内容が理解できれば使えるだろ
336:M
08/12/11 14:27:45
>>334
それでやってみようと思います。ありがとうございました。
337:デフォルトの名無しさん
08/12/11 16:38:53
VC++2008使ってます
LogItemという独自クラスを作り、
LogItem item;
ListBox.add(item);
といったことしてます(単なるリストボックスへの追記)。
表示を変更する際に、
ListBox.add(~.format("{1}・・・",item.name,・・・))
等とすると、今度は削除時にいろいろ面倒です。
表示を適切に変更できるものの、削除時は、
ListBox.remove(item)でいけるような
(追記時の表示に依存しないような)
簡単な方法はご存じありませんか?
参考になりそうなサイトやキーワードを
教えていただければ幸いです。
338:デフォルトの名無しさん
08/12/11 16:41:26
16ピンのPIC16F819のPICを利用してサーボモータや光電センサー、ディスプレイを制御したいのですがBASICのプログラムが分かりません
サーボモータは Futaba S3002 を使用
・計7個のサーボモータ使用
・ボタンを押して入力したものをサーボモータに出力〔右に90度⇒左に90度〕
光電センサーは鏡とセンサーの間を通過するのを検出するもので omron E3R-R2E4 を使用
・コインを検出してカウントする
・6個使用
ディスプレイは数字と文字の両方を表示したいです
まとめると、コインを光電センサで検出してその検出したコインをディスプレイに表示する。たまボタンを押すとサーボモータが回転
するものを作りたいです。
この動作をBASICのブログラムで制御させるには、どのようなプログラムにすればいいですか
339:デフォルトの名無しさん
08/12/11 16:43:58
>>338
ここはBASICのスレでもPICのスレでもない。
340:デフォルトの名無しさん
08/12/11 19:13:55
337です。
自己解決しました。単なる調査不足&ありがちな混乱、でした
※ToStringをオーバーライドすればいいんですね・・・。
ってか。
質問の大半も意味不明でした。正確には「リストボックスにオブジェクトを
そのまま追加した時に、表示のみを変更できるようにしたい。」とすれば
よかったんでしょうね・・。
お騒がせいたしました。ほかに困っている人の助けになれば幸いです^^;
341:デフォルトの名無しさん
08/12/11 21:14:25
Visual C++ 2008 Express Editionについての質問です。
Windowsフォームアプリケーションプロジェクトを作成し、
フォームにボタンとpictureBoxを配置しました。
ボタンを押すと、pictureBoxのプロパティで設定した画像の画素値を取得したり
描きこんだりしたいと思い、画像にアクセスする手段を模索することにしました。
どうもpictureBoxクラスから直接画像にアクセスすることはできず、
いったんBitmapクラスに移さないといけないことが分かりました。
これでSetPixel関数を使って、画素値を書き換えることができるようになったのですが、
これをまたpictureBoxに戻して表示することができません。
コードは以下の通りです。(ボタンを押したときの処理関数)
Bitmap bmp = pictureBox1->Image;
bmp.SetPixel( 10, 10, Color::Red );
pictureBox1->Image = bmp; ← これで型が合わないというようなエラーが出る
どのようにすればpictureBoxの画像を加工し、それを表示することができるのでしょうか?
342:デフォルトの名無しさん
08/12/12 16:23:46
pictureBox1->Image = Image::FromHbitmap(bmp.GetHbitmap());とかでどう?
343:デフォルトの名無しさん
08/12/12 17:44:23
すいません。C++でint型の変数ををchar型の配列にキャストして入れる方法ってどうやるのですか?
int iAnswer = 0;
int i = 0;
char ChAnswer[256];
ChAnswer = (char)i;
とやっているのですが、変換できないといわれます。
344:デフォルトの名無しさん
08/12/12 17:46:28
ChAnswer[0] = (char)i; じゃないの?
345:デフォルトの名無しさん
08/12/12 17:51:27
>>344
それだと、例えば123を変換した場合、1だけ変換ということになりそうな気がするのですが・・・違いますか?
346:デフォルトの名無しさん
08/12/12 18:00:16
>>345
何でそう思うのか、、もっと基礎からやり直すか
具体的にやりたいこと書いて手取り足取り教わるしかないと思うよ。
347:デフォルトの名無しさん
08/12/12 18:02:26
>>346
すいません。よく考えてたら頭の中にあったものが2次元配列でした・・・それにしても変な考えですけど。
逝ってきます。
348:デフォルトの名無しさん
08/12/13 00:30:18
エスパー回答で言わせてもらえばsprintf()使えばいいと思うよ
349:341
08/12/13 07:31:03
>>342
それでできました!
ありがとうございました!!
しかし、.NET環境でもWin32apiレベルのビットマップハンドルを意識した記述をしないと
いけないのはどうなのかと思いました・・・
C++ Builderはもっとシンプルになりますし・・・
350:デフォルトの名無しさん
08/12/13 09:01:26
>>341
たぶんこうすればいける。
Bitmap^ bmp = gcnew Bitmap(pictureBox1->Image);
bmp->SetPixel(10, 10, Color::Red);
pictureBox1->Image = bmp;
Imageプロパティの型はImageへのハンドル。
にもかかわらず、341ではコード上Bitmapそのものを渡すようになっている。
本来、BitmapはImageの派生なので、Bitmapのハンドルなら渡せるというわけ。
351:341
08/12/14 00:49:49
>>350
.NETでのハンドルという概念があるんですね。
勉強になりました。
ありがとうございました。
352:デフォルトの名無しさん
08/12/14 03:25:51
VC2008EEで↓がコンパイルできるようにする
やり方を教えてください。
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd)
{
return 0;
}
353:デフォルトの名無しさん
08/12/14 03:28:02
エラーは↓です
1>.\a4.cpp(4) : error C2146: 構文エラー : ';' が、識別子 'WinMain' の前に必要です。
1>.\a4.cpp(4) : error C2065: 'HINSTANCE' : 定義されていない識別子です。
1>.\a4.cpp(4) : error C2146: 構文エラー : ')' が、識別子 'hInst' の前に必要です。
1>.\a4.cpp(4) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>.\a4.cpp(4) : error C2059: 構文エラー : ')'
1>.\a4.cpp(5) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>.\a4.cpp(5) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
354:デフォルトの名無しさん
08/12/14 03:36:58
>>353
WINAPIが定義されてないっぽい感じのエラーメッセージだけど、
windows.hはインクルードされてるしなぁ。
355:デフォルトの名無しさん
08/12/14 03:49:57
>>352
普通にコンパイル通ったよ
プロジェクトの作成の仕方じゃないの?
ファイル→新規作成→プロジェクトの種類→Win32→Win32プロジェクト
356:デフォルトの名無しさん
08/12/14 12:25:43
Vc++2008でプロジェクトを開いた時に、
▲ InteliSenseデータベースファイル C\......\Visual Studio\Projects|\ソリューションフォルダ\ソリューション.ncb を書き込み用に開けなかったため、
InteliSense 情報は VC++プロジェクトにりようできません。
ソリューションディレクトリが読み取り専用である場合、他の機能にも影響を及ぼします。
ってダイアログ出て、関数の引数とかが表示されなくなってしまいました。
フォルダの属性変えてみようとしたんだけど読み取り属性外せなくなったんですが、対処方ありますか?
他のソリューションでは問題ありません。ファイル壊れた?
357:デフォルトの名無しさん
08/12/14 17:24:46
メッセージの通りだろ
358:デフォルトの名無しさん
08/12/14 18:02:51
ncb ファイル消せばいい。
359:デフォルトの名無しさん
08/12/15 09:28:10
ボタンを二つ作ってサブクラス化しています。
DefStaticProcA = (WNDPROC)GetWindowLong(hBTNa, GWL_WNDPROC);
SetWindowLong(hBTNa, GWL_WNDPROC, (LONG)TestProc);
DefStaticProcB = (WNDPROC)GetWindowLong(hBTNb, GWL_WNDPROC);
SetWindowLong(hBTNb, GWL_WNDPROC, (LONG)TestProc);
if(DefStaticProcA == DefStaticProcB)
MessageBox(NULL, _T("同じ"), _T("button"), MB_OK);
ボタンのプロシージャはみんな同じアドレスに成るのでしょうか?
プロシージャを一つにまとめたいです。
360:デフォルトの名無しさん
08/12/15 10:48:05
HWND HBTNv6[1000];
WNDPROC DefStaticProcBTN[1000];
void MakeButtonV6(HWND hWnd){
int i;
for(i = 0; i < 1000; i++){
HBTNv6[i] = CreateWindow(_T("BUTTON"), _T("A"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 30, 30, 20, 20, hWnd, NULL, hInst, NULL);
if(HBTNv6[i] == INVALID_HANDLE_VALUE){
MessageBox(NULL, _T("Error"), _T("CreateWindow"), MB_OK);
break;
}
DefStaticProcBTN[i] = (WNDPROC)GetWindowLong(HBTNv6[i], GWL_WNDPROC);
if(DefStaticProcBTN[i] == 0){
MessageBox(NULL, _T("Error"), _T("GetWindowLong"), MB_OK);
break;
}
if(i > 0){
if(DefStaticProcBTN[i] != DefStaticProcBTN[i -1]){
MessageBox(NULL, _T("違う"), _T("ぼ"), MB_OK);
break;
}
}
}
MessageBox(NULL, _T("終了"), _T("m"), MB_OK);
}
保障されているのかな~。誰か教えて。
361:デフォルトの名無しさん
08/12/15 10:52:55
何がしりたいのかわからん。
登録したウィンドウクラスにプロシージャも入ってるだろう。
でも同じプロセス内で差し替えできるから作った時期で違うようにはできる。
362:360
08/12/15 11:38:13
ごめん、無かったことにして。
363:デフォルトの名無しさん
08/12/15 17:35:59
>>359
さらに別のだれかがサブクラス化しているなどといったこともあるから、
一般に同じと仮定することは危険。
ウィンドウハンドルと元のウィンドウプロシージャのどれとどれが対応するのか
分かるように保存しておけば、それぞれのアドレスが異なっていても
同じウィンドウプロシージャでサブクラス化できるはずだ。
364:デフォルトの名無しさん
08/12/15 22:35:59
3×n行のCSVファイルを読み込んで内部テーブル(?)にして、
後からそれを1行ずつ抽出してその項目を使って別の処理をするように今あるプログラムを書き換えたい。
VC++2005、WindowsXPで作業してます。
かなりの初心者ですがどうぞよろしくお願いします。
365:デフォルトの名無しさん
08/12/15 22:41:01
宿題なら宿題スレで一発ですよ。
そうでないなら、どこは分かるけどどこが分からないというのをもっとはっきりさせてください。
366:デフォルトの名無しさん
08/12/15 22:53:16
宿題じゃないんす・・・仕事なんですw
CArrayとか使ってみたんだけど、なかなかうまくいかず・・・
あと、内部テーブルを1行ずつ読み込んでループさせる方法がよくわからん。
レベル低い質問で申し訳ないです
367:デフォルトの名無しさん
08/12/16 00:18:30
誰か来てくれると信じて書いてみるw
INT CLogFileConditions::LoadAllSearchInfo()
{
CCSVFile file;
CFileException fError;
CString sSearchListFile;
m_iResID = 0;
m_iConditionStatus = 0;
sSearchListFile = g_CurrentDir;
sSearchListFile += LOG_SEARCH_LIST_FILE;
if( file.Open( sSearchListFile, CFile::modeRead, &fError) )
{
CString strLogKind, strServerName, intSearchLength, sVal ;
m_LogKindToPath.RemoveAll();
while( file.ReadString() )
{
if( file.GetFieldCount()>=3 )
{
strLogKind = file.GetField(0);
strServerName = file.GetField(1);
intSearchLength = file.GetField(2);
}
368:つづき
08/12/16 00:20:27
}
file.Close();
if( !m_LogSearchCondition.GetCount() )
{
m_iResID = IDS_ERR401;
m_iConditionStatus = 401;//ErrorIDNumber
}
}
else {
m_iConditionStatus = -1;
MsgBoxBySystemErrID( m_hwndParent,
fError.m_lOsError,fError.m_strFileName );
}
return m_iConditionStatus;
}
みたいな感じで処理条件を読み込む処理をまず作りたい。
ひとつめのレスの最後の方の処理をCSVを読み込む二次元配列にしたいんだ。
どうぞお力をお貸しください。。
369:デフォルトの名無しさん
08/12/16 00:38:08
普通に配列をnewして入れてけばいいじゃんか
370:デフォルトの名無しさん
08/12/16 00:46:41
ありがとう。
でもほんと全然わかんないんだw
もうちょっと詳しく書いてくれると助かります。
ごめんな
371:デフォルトの名無しさん
08/12/16 00:53:34
コレクションクラスが使えるようになったほうがいいと思うけどねぇ・・
まずどこに入れたいのか、入れ物を定義しなさいよ。
372:デフォルトの名無しさん
08/12/16 01:04:47
すまんコレクションクラスがわからん・・・
まあ定義もよくわかんないんだけどw
ネットで見ようみまねで
public:
CArray<double, double> GetLogSearchCondition(){ return &m_LogSearchCondition; }
CDoubleArray& operator=( CDoubleArray& src )
{
for( int n = 0; n < src.GetSize(); n++ ) {
this->Add( src[n] );
}
return *this;
}
};
こんなん書いたらエラーが270個くらい出ました。。
373:デフォルトの名無しさん
08/12/16 01:14:20
二次元配列にしたいって書いてるけど3つのフィールドは文字列文字列整数なんだよね?
とりあえずその3つが入るクラスを定義して、それの配列なりArrayなりつくって入れてけばいい。
長さわからんなら、数える手段を考えるか随時伸びるようにすればいい。
374:デフォルトの名無しさん
08/12/16 01:19:27
そう、そうなんだけどそのやり方がわかんないんです。
ほんとすいません。。
375:デフォルトの名無しさん
08/12/16 01:30:52
クラスの定義ってこういう感じ?
public:
void SetLogKindForSearch( CString sLogKindForSearch );
void SetServerNamesForSearch( CString sServerNamesForSearch );
int SetSerachLength( INT sSearchLength );
だが、配列にしていく方法はさっぱりだぜ・・・
376:デフォルトの名無しさん
08/12/16 02:56:10
CArrayを先頭につければいいのかな?
だかフィールド3つで下に続いていくようにする方法がわからぬ・・・
377:デフォルトの名無しさん
08/12/16 04:03:43
CMapStringObからCArrayに引数を変換できないっていうエラーが出るんだが、
意味が全くわからん・・・
誰も起きてないかこんな時間・・・
378:デフォルトの名無しさん
08/12/16 05:59:41
言語の文法をろくに知らずにプログラムを書こうなんて、普通に不可能。
まず入門書を一通り読め。
379:デフォルトの名無しさん
08/12/16 07:01:34
そんな時間がないのでご助力をお願いしているのです。。
380:デフォルトの名無しさん
08/12/16 08:54:27
>>363
㌧。
ボタンのプロシージャはどれでも良いからボタンに返せばいいんですね。
381:デフォルトの名無しさん
08/12/16 11:50:08
>>379
みんな冷たいよな。
まずはここを見て書き方を勉強する。
URLリンク(2hyo.com)
382:デフォルトの名無しさん
08/12/16 14:18:46
仕事の話を2chで聞くとか信じられんわ……。
383:デフォルトの名無しさん
08/12/16 15:04:12
文字をドラッグで選択するとその部分が反転するプログラムを作りたいのですが、
マウスのクリックで範囲のポジションを取得して選択範囲は取得できたのですが、
反転をどうやればいいのかがわかりません。アドバイスお願いします。
384:デフォルトの名無しさん
08/12/16 15:05:18
まあ自分でコード書いて出してくれてるから対応はしやすいんだが、
出してくるコードが頓珍漢すぎてどこから説明したもんかわからんのだよ。
自分で理解してる範囲で書いてくれればいいんだが、適当にあちこちから断片集めてみました
というコードじゃ直しようもない・・・
仕様書いて0から起こしたほうがまだましだな・・
385:デフォルトの名無しさん
08/12/16 15:08:07
>>383
反転する前の表示はどうやってんのさ。
TextColorとBackColor入れ替えて書いてみるとか、
システムの標準の色から持ってきてそれで書いてみるとか。
386:デフォルトの名無しさん
08/12/16 15:16:20
>>385
元描画がいじれないとして、上から被せるような、CWndまでおおげさじゃなくてもいいんですが、
レイヤー的なもので半透明領域をかぶせられる関数は用意されていないでしょうか?
387:デフォルトの名無しさん
08/12/16 15:27:11
>>386
そんなのないと思うけど、、、再描画とかどうすんのさ。
いんちきだが、PatBlt()でDSTINVERTで反転とかどうよ。
388:デフォルトの名無しさん
08/12/16 16:48:52
なるどほ、元が動くと四角が付いてこないので被せるのは厳しいですね。
元をハッキングする方向にきりかえようとおもいます。ありがとうございました。
389:デフォルトの名無しさん
08/12/16 17:51:24
C++でint型変数の値をchar型に変換したいのですが、普通にキャストしてもエラーが出ます
どうしたらいいのでしょう?
390:デフォルトの名無しさん
08/12/16 17:55:03
char配列の文字列にしたいと言っているのであれば、
ostringstreamか何かでstringにしてc_str()で取り出すとか、
あるいはsprintfなど。
391:デフォルトの名無しさん
08/12/16 18:03:23
ありがとうございます。試してみます
392:デフォルトの名無しさん
08/12/16 20:00:10
林晴比古氏のVisualC++のビギナー編を買ったのですが、自分の開発環境がexpress editionなのでMFCがありません。
サンプルがほぼMFCなので無駄な買い物をしてしまった…と見ていいのでしょうか?
他に手があるのでしょうか?
393:デフォルトの名無しさん
08/12/16 20:43:46
かわいそう・・・
仲間だからわかる・・・
394:デフォルトの名無しさん
08/12/16 20:47:06
やはり無理でしたか…
VisualStudioの基本的な操作を覚えるには役に立ちますよね?
お互いがんばりましょう。
395:デフォルトの名無しさん
08/12/16 21:29:59
まったく役に立たないと思います。
MFCが使えるようになってからも役に立たない本でした。
林晴比古のC++シニア上下は、ぼろぼろになった今でも時々読みます。
URLリンク(www.kumei.ne.jp)
自分はMFCからなのですが、ここのWinAPIの最初の方だけ読んで一日でMFC使わないソフトも作れました。
396:デフォルトの名無しさん
08/12/16 21:45:26
最近の林本は.netのサンプルものってたような気がしたけど
397:デフォルトの名無しさん
08/12/16 21:56:27
>>395
そちらを買うか林氏の本を買うかで悩んでたんです。そちらのほうがよかったのですね!
>>396
.netのサンプルとは例えばどのようなものでしょう?
398:デフォルトの名無しさん
08/12/16 22:22:29
ソフトの操作だけなら林本でいいと思う
399:デフォルトの名無しさん
08/12/16 22:31:09
>>398
そう言ってもらえると助かります!
みっちり操作を体に叩き込みたいと思います!
400:デフォルトの名無しさん
08/12/16 23:27:36
MFCを使えるバージョンってどれですか
無償版では使えないらしいので購入しようと思います
MFCを使えるバージョンと購入方法と価格を教えてください
401:M
08/12/16 23:30:14
C++でのラベリングで下のような場合で、簡単なプログラムのやり方を教えてくれませんか?
11111111
11111
1111111111
1111111
11111111
1 1 2222
2222
222222
402:デフォルトの名無しさん
08/12/16 23:33:06
MFCは全てのバージョンで使える
403:デフォルトの名無しさん
08/12/16 23:46:58
>>400
URLリンク(kakaku.com)
404:デフォルトの名無しさん
08/12/17 09:30:25
2003以前のバージョンなら確実に使える
405:デフォルトの名無しさん
08/12/17 19:36:51
上級者向けの本ってあるんですか?
406:デフォルトの名無しさん
08/12/17 20:03:15
>>400です
>>403さん
スタンダードバージョンでMFC使えるんですね
アマゾンで28000円かぁ
少々きつい出費になりますが
どうしても作ってみたいものがあるので思い切って購入しようと思います
詳しくありがとうございました
ヤマダ電機では売っていないのかなあ?
ヤマダポイント約6000円持ってるんだよね^^;
教えてくれてありがとうでした
407:デフォルトの名無しさん
08/12/17 20:09:15
VC++2008 Express使ってます。
Windows SDKを最新のものにしようと思い、2005使っているとき以来のPSDKを削除、
ついでにVC++2008も一旦削除して、さてインストールし直すぞ、と意気込んでいるのですが、
VC++2008をインストールすると、Microsoft Windows SDK for Visual Studio 2008とやらが自動でインストールされるそうで。
この場合、一旦これをアンインストールしてからMicrosoft Windows SDK for Windows Server 2008をインストール、でOK?
408:デフォルトの名無しさん
08/12/17 21:01:49
Microsoft Visual C++ 2008 Version 9.0.21022.8 RTM
Win32コンソールアプリケーション
ビルドの失敗
ソース↓
// test_1.cpp
#include "stdafx.h"
#include "test_2.cpp"
class test_A{
static const int INT_A;
static const char *TEXT_A;
};
const int test_A::INT_A=1234;
const char *test_A::TEXT_A="abcd";
int _tmain(int argc, _TCHAR* argv[]){
return 0;
}
// test_2.cpp
#include "stdafx.h"
class test_B{
static const int INT_B;
static const char *TEXT_B;
};
const int test_B::INT_B=1234;
const char *test_B::TEXT_B="abcd";
409:デフォルトの名無しさん
08/12/17 21:03:02
>>408のつづき。
ビルトをするとtest_Aは成功、test_Bは失敗します。ただし、一回目のビルドで
両方とも成功しているのに、その後同じ内容で二回目のビルドを行うと
やはりtest_Bだけ失敗するようになる、という場合もあります。
↓ ↓ ↓
fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
どこが原因なのか分かりません。
410:デフォルトの名無しさん
08/12/17 21:12:24
>>406
こうして2005Express Editionからアップグレードできることを知らない情弱が
今日も通常版を買っていくのであった・・・
URLリンク(www.microsoft.com)
411:デフォルトの名無しさん
08/12/17 21:35:52
げっ・・・・・・プロジェクト→クラスの追加、でやってみたら、なんとなく
やらなければいけないことが分かりました・・・・・・・・orz
412:デフォルトの名無しさん
08/12/17 21:42:50
>>408,409
// test_1.cpp
#include "test_2.cpp" // ←LINK1169
"test_2.cpp"をプロジェクトから除外するか、上記をコメントアウトすれば解決する。
413:デフォルトの名無しさん
08/12/17 22:53:48
>>412
_tmainでtest_Bが使えませんが・・・。
414:デフォルトの名無しさん
08/12/17 23:12:06
>>413
test_2.cppをプロジェクトから除外すれば使える。
415:デフォルトの名無しさん
08/12/17 23:22:12
>>414
「プロジェクトの外部」って扱いにしてから、呼び出すんですね?
416:デフォルトの名無しさん
08/12/17 23:33:59
>>415
そうだよ。どのみち #include "test_2.cpp" してんだから。
もっとも、#include "test_2.cpp"などというよーな書き方のほうを改めるべきだと思うがな。
// test.h
class test_A{
static const int INT_A;
static const char *TEXT_A;
};
class test_B{
static const int INT_B;
static const char *TEXT_B;
};
// test.cpp
#include "stdafx.h"
#include "test.h"
const int test_A::INT_A=1234;
const char *test_A::TEXT_A="abcd";
const int test_B::INT_B=1234;
const char *test_B::TEXT_B="abcd";
int _tmain( ・・・・) {
// To Do
}
417:デフォルトの名無しさん
08/12/17 23:51:08
ありがとうございました。
初歩の初歩でした。
418:デフォルトの名無しさん
08/12/18 04:18:43
cppをインクルードする奴ってキモチワルイ
あとヘッダに関数の中身定義する奴も同様にキモイ
419:デフォルトの名無しさん
08/12/18 05:05:35
>>418
template関数全否定ですね、わかります
420:デフォルトの名無しさん
08/12/18 09:59:14
>>410
というわりにはExpression Blend 2のアップグレードが割引率高くて安いうえに
VS2008Stdが入ってるのは教えてあげないのね。
421:デフォルトの名無しさん
08/12/18 11:45:07
Visual Studio 2005 でC++をやっているのですが
i = 0;
for(i = 5; i < 0; i--){
printf("%d",i);
fflush(stdout);
Sleep(1000);
}
この処理を通ってくれません。forの頭までは来ているのですが次の処理でforを抜けてしまっています
422:デフォルトの名無しさん
08/12/18 11:49:24
C++なのにprintfなんだ・・・
423:デフォルトの名無しさん
08/12/18 11:52:05
>>421
i > 0
にしろ
それとi = 0は必要なのかね
424:デフォルトの名無しさん
08/12/18 11:52:40
すみません。書き間違いです
コンパイラがC++で、書いてるのはCです
425:デフォルトの名無しさん
08/12/18 11:55:33
おお、いつのまに符号逆に・・・・最初は使えていたのにおかしいと思いました。すみませんありがとうございます
i = 0 はなんとなく癖です
426:デフォルトの名無しさん
08/12/18 12:00:53
下らないかもしれないけど、助けて下さい・・・。
VS2008でC++作ってます。
Irvineとかそういうダウンローダーでよくあるグリッドの入ったリストを作りたいんだけど、そのパーツ?コンポーネント?の名前さえも全くわからず・・・。
ToolBoxでコレだよ、的なもので良いので教えて下さい。
427:デフォルトの名無しさん
08/12/18 12:28:37
>>426
Microsoft DataGrid コントロール
ActiveXのやつ
428:デフォルトの名無しさん
08/12/18 12:31:39
ってIrvineとかそういうダウンローダーを知らないんだけど
LisiViewコントロールじゃだめなんかな?
429:デフォルトの名無しさん
08/12/18 12:35:23
ListViewってアイテムごとに枠がつかなくないか?エクセルみたいに
430:デフォルトの名無しさん
08/12/18 12:45:03
>>427
ありです。ちょっと試してみますー。
431:426
08/12/18 12:55:29
出来たけどRowの部分に出てるのが気になる・・・orz
>>429
Excelみたいに各セルが選択できるタイプじゃなくて、選択の対象が行単位で出来るものが良いんですよね。
今ちょうど見たら良い例があったので出してみると、ギコナビの板の中身の表示部分(スレッド一覧)とか。
それにグリッドがついたようなものが欲しいです。
色々と足りてなくて申し訳ない・・・orz
432:デフォルトの名無しさん
08/12/18 13:01:10
リソースのストリングテーブルって1つ以上作れないんですが、
文字列をまとめて入れ替えたい場合はどうすればいいんですか?
もしかして全てのloadstringの行でIDSを分岐させてるんですか?
433:あ
08/12/18 13:12:37
>>432
IDをずらす
LoadString(hInstance, IDS_MYSTRING + (f ? 10000 : 0), sz, 256);
434:デフォルトの名無しさん
08/12/18 14:04:50
えーまじですか・・・
めちゃくちゃloadStringあるんですけど・・・テーブル切り替えでがいいです!!!
435:デフォルトの名無しさん
08/12/18 14:10:49
DLL単位で作って切り替えるとか
436:デフォルトの名無しさん
08/12/18 14:15:33
おーーーthx!DLLで検索したら出てきましたよ!
437:デフォルトの名無しさん
08/12/18 14:26:36
Irvineはソース公開されてる
438:デフォルトの名無しさん
08/12/18 14:59:50
カスタムコントロールを派生させたいんですが、これ基本クラスなんですか?
CCustamCtrlとかないんですが
439:デフォルトの名無しさん
08/12/18 15:04:26
MFCの話?
コントロールはCWndから派生
440:デフォルトの名無しさん
08/12/18 15:19:02
カスタムコントロール自体のクラス名は何ですか?
441:デフォルトの名無しさん
08/12/18 15:23:54
>>440
Static
442:デフォルトの名無しさん
08/12/18 16:11:22
そういうことかありがと
443:デフォルトの名無しさん
08/12/18 16:57:44
マクロで選択範囲の前と後に文字列を入れるにはどう書けばいいですか?
"test"
を選択してマクロ実行すると
_T("test")
になるようにしたいんです。
一度左に行って _T( を挿入するまでは出来るんですが、選択範囲が消えて ) を入れる位置がわからなくなります
444:デフォルトの名無しさん
08/12/18 17:04:48
馬鹿でした。コピーしたらできました
DTE.ActiveDocument.Selection.Copy()
DTE.ActiveDocument.Selection.Text = "_T()"
DTE.ActiveDocument.Selection.CharLeft()
DTE.ActiveDocument.Selection.Paste()
445:デフォルトの名無しさん
08/12/18 18:56:57
スタティックコントロールの背景を変えたいのですが、
CStaticの派生クラスのOnPaintの中で
void CStaticEX::OnPaint()
{
CPaintDC dc(this); // device context for painting
dc.SetBkColor(RGB(20,30,100));
}
と書いたのですが、背景色が変わりません。これどこがいけないんでしょうか?
446:デフォルトの名無しさん
08/12/18 19:05:11
CPaintDC dc(this);
447:デフォルトの名無しさん
08/12/18 19:54:47
>>431
やっぱListViewじゃない?
ListView_SetExtendedListViewStyle(hListView, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
みたいな。
「リストビュー 拡張スタイル」でぐぐってみたら?
448:デフォルトの名無しさん
08/12/18 20:56:50
他のダイアログボックスのオーバーライドOnOK関数呼び出しを、インテリセンスでは通っているのに
コンパイルエラーでメンバでは無いといわれるのはなぜですか?
449:デフォルトの名無しさん
08/12/18 21:04:15
メンバでは無いから
450:デフォルトの名無しさん
08/12/18 21:22:04
もちろんメンバ関数として作成してインテリセンスでも通ってるんです。
451:デフォルトの名無しさん
08/12/18 22:03:52
インテリセンスがそんなに賢かったらコンパイルする必要ない
452:デフォルトの名無しさん
08/12/19 00:26:34
>>445
PAINTSTRUCT ps;
CDC* pDC = BeginPaint(&ps); にする。
もっとも、そんなことしなくても、スタティックコントロールの背景色の変更は、
親ウィンドウの CWnd::OnCtlColor() で簡単にできるんだが・・・。
453:デフォルトの名無しさん
08/12/19 00:35:14
すみません、このスレでいいのか分からないんですが、質問させてください。
全くのプログラム初心者に近い人間で、HSPをちょっと触ったことがある程度なんですが
C++を使ってみたいと思いました。
色々なサイトを回ってみたりしたのですが
開発環境の作り方がさっぱりわかりませんでした・・・orz
URLリンク(codezine.jp)
このページを参考に物を作りつつ勉強していこうと思ったのですが
最初の一歩目で躓きましたorz
どこか環境の作り方などが載っているサイトなどがあれば教えて頂けないでしょうか。
もし書き込むスレッドが間違っていたら教えて頂きたいです。
宜しくお願いします。
454:デフォルトの名無しさん
08/12/19 01:30:29
まずは窓のそばに観葉植物を置いて・・・。
という話じゃないとは思うんだが、開発環境って具体的には何を指してるんだ?
455:デフォルトの名無しさん
08/12/19 02:52:51
>>452
ありがとうございました。Ctlも調べてみますどうもです
456:デフォルトの名無しさん
08/12/19 23:29:36
>>453
エスパー的に答えれば
フリーのVisual C++ 2008 Expressをダウンロードしてインスコ(環境出来上がり)
でもそのレベルじゃ記事読んでも理解できないから
Cはある程度わかっているとして
猫でも読んでWin32APIの基本は少なくとも勉強する
メッセージループ プロシージャなど
ってことでOK?
457:デフォルトの名無しさん
08/12/19 23:39:56
今、猫でもわかるのCのところを見てみたら、スクリーンショットがVCの1.5とかそのあたりのやつじゃないか。
書かれたの、10年以上前だし。
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)
↑このあたりの本でも買って勉強したほうがいいんじゃね?
458:デフォルトの名無しさん
08/12/19 23:47:01
その辺のってCLI系のヤツだろ
それやるならC#でよいと思うがな
個人的には色々本買うより
初心者であってもCがある程度分かってるなら
Petzold本読むのを進める
459:デフォルトの名無しさん
08/12/19 23:52:53
>>458
ああ、本当だ。.NET Frameworkって内容紹介に書いてあるな。
でもHSPをちょっとかじった程度だと、プログラミングWindowsとかムリだろ。
460:デフォルトの名無しさん
08/12/20 00:39:07
Express Edition
c++ です。
フォームアプリケーションでファイルを開いて、フルパスからファイル名を抽出しようとしていて、
ググったところ、char ポインタ型で抽出していたので、System::Stringをcharポインタ型に変換してから抽出したのですが、実際に何度か連続で実行したところ
エラーが発生しました。恐らくポインタの開放か初期化でミスってると思うんですが…
ケータイからなのでソースは勘弁していただきたいので、System::String で直接ファイル名を抽出できないでしょうか?
スレ汚しすいません。
461:デフォルトの名無しさん
08/12/20 00:41:58
>>460 です。
VisualStudio2008と書くのを忘れていました
462:デフォルトの名無しさん
08/12/20 01:19:27
>>460
System::String は使ったことがないので考え方だけ。以下のコードでできるかどうかは不明。
文字列の最後に出てくる \ の位置を求めて、先頭からその位置までの文字列をばっさり捨ててる・・・つもり。
検証は、まかせる。(笑)
String filename = pathname.Remove( 0, pathname.LastIndexOf('\\')); // pathname は フルパスが入っている String
463:デフォルトの名無しさん
08/12/20 01:37:27
>>462
最後の¥が残ってしまったものの抽出自体は成功しています!
後は自力でできそうです!
わずか一行で実装できるとは思いませんでした。
ありがとうございます。
464:デフォルトの名無しさん
08/12/20 01:39:31
System::IO::Path::GetFileName使えばいいだけの話じゃないの?
465:デフォルトの名無しさん
08/12/20 01:47:13
>>464
そんな便利な関数あったんですね…
すいません調べ不足でした。
>>463
ちなみに先ほどのは、ラストの¥の位置を表しているのでインクリメントしてあげれば解決しましたね。
お二方ありがとうございました。
466:デフォルトの名無しさん
08/12/20 02:52:40
>>463
>後は自力でできそうです!
そりゃできるだろ。^^;
String filename = pathname.Remove( 0, pathname.LastIndexOf('\\') + 1); // + 1 を追加
たったこれだけの修正ができなかったら、C++を勉強する前に
まずはCの基本から身につけたほうがいいと思うぞ。
467:デフォルトの名無しさん
08/12/20 19:56:30
VisualStudio2008
express、Windowsフォームです。
一つのイベントに対して複数のイベントを組むのは、どうすればいいのでしょうか。
具体的にはtoolStripのButtonをクリックした時に、名前をつけて保存と上書き保存と切り替えたいのですが…
468:デフォルトの名無しさん
08/12/20 23:43:49
Visual C++2008 ExpressEditionで、実行したときに全角文字が〓に文字化けしてしまうんですがどうすれば正しく表示されるんでしょうか?
プログラムはこれです。
#include <iostream>
using namespace std;
int p,t,a,d,c,v,i,m[90]={0},s,r[]={-10,-9,-8,-1,1,8,9,10};
void k(){
if(m[p]==0)for(i=0;i<8;i++){
for(c=0,v=p+r[i];m[v]==3-t;v+=r[i])c++;
if(c&&m[v]==t){
a+=c;v=p;
if(d)do m[v]=t,v+=r[i];while(m[v]!=t);
}}}
char*h="・○●\n" ;
int main(){
for(i=1,m[41]=m[49]=2;i<10;m[i++*9]=3)m[40]=m[50]=t=s=1;
for(;;a=d=0){
for(p=9;p<82;++p)k(),cout<<h[m[p]*2];
if(a)for(d=a=s=p=8;a==8;k())t-2?(cin>>p>>i),(p+=i*9):++p;
else if(s)s=0,cout<<"pass"; else break;t=3-t;
}
return 0;
}
469:デフォルトの名無しさん
08/12/21 00:40:30
>>468
[構成プロパティ]-[全般]-[文字セット]がUnicodeがどうのこうのってなってね?
マルチバイトがどうのこうのってのに設定すれば多分動くんじゃね?
470:デフォルトの名無しさん
08/12/21 14:06:11
VC++2008EE SDK です。
hToolBar = CreateWindowEx(WS_EX_TOOLWINDOW, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | CCS_ADJUSTABLE | CCS_NORESIZE, 50,200,200,20, hWnd, NULL, hInst, NULL);
ツールバーに背景色を設定したいのですがやり方がわかりません。
教えてください。
471:デフォルトの名無しさん
08/12/21 19:25:33
>>470
SetWindowLongPtr
GCLP_ HBRBACKGROUND
472:デフォルトの名無しさん
08/12/21 19:33:26
void型の構造体からデータを取得したいのですがやり方がわかりません教えて
473:デフォルトの名無しさん
08/12/21 21:07:43
VS2005もしくはVC++6.0でリソース(ダイアログ、アイコンなど)を編集する実行ファイルの名前はなんなんですか?
474:デフォルトの名無しさん
08/12/21 21:23:56
msdev.exe
475:デフォルトの名無しさん
08/12/21 21:27:06
VS2008です。
右にTextBox(MainText)、左にパネル、パネルの上にTextBox(LineText)
LineTextにはMainTextの行数を表示してあります。
こんな風↓
パネル|MainText
1 |文字
2 |文字
3 |文字
でMainTextがスクロールするときには、同時にパネルをスクロールしたほうが、いいでしょうか?
LineTextをスクロールしたほうがいいでしょうか?
また、どうスクロールしたらいいでしょうか?
476:デフォルトの名無しさん
08/12/21 22:49:13
>>474
VS2003も?
477:470
08/12/21 23:15:22
>>471
サンクス。
478:デフォルトの名無しさん
08/12/22 03:52:50
453です。暫く忙しくてPC触れず、返信が遅れました、すみません。
>>454
すみません、言葉が足らなかったようで。
開発支援ソフトというか、ソースを書いて、実行して・・・という動作を行うソフトを探していました。
こういったソフトを何というか、用語等が分からなくて・・・すみません。
>>456
直感で欲しかった返答を頂き、有難うございます。
少しずつ調べていく感じで、時間がかかっても一歩ずつ進んでいこうと思います。
>>457,458,459
参考書を探してみたのですが、書店で見てもイマイチどれがいいのか分からなくて・・・
購入して意味が分からない、というのも問題だと思ったのでいろいろネットを見回っていました。
Petzoldという本がどれかは分からないのですが、また今度探してみようと思います。
皆様、返信ありがとうございました。
試行錯誤で少しずつ勉強してみようと思います。
479:デフォルトの名無しさん
08/12/22 04:13:52
CListCtrlでレポートスタイルにアイコンを表示するにはどうすればいいんでしょうか
DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | LVS_REPORT;
m_ListCtrl.Create(dwViewStyle, rectDummy, this, ID_FileListCtrl)
m_ListCtrl.InsertColumn(0, _T("NAME"), LVCFMT_LEFT, 100);
m_Images.Create(IDB_NAME, 16, 0, RGB(255, 0, 255));
m_ListCtrl.GetHeaderCtrl()->SetImageList(&m_Images);
ここまで来たんですが、どうしても表示されません、教えてください。
480:デフォルトの名無しさん
08/12/22 09:51:36
InsertItemの引数
481:デフォルトの名無しさん
08/12/22 10:41:23
すいません忘れてました。
m_ListCtrl.InsertItem(0, _T("TEST"), 2); // BMPの3つ目のイメージを期待
Insertはこうかいてます
482:デフォルトの名無しさん
08/12/22 10:57:31
SetImageList()呼んでないんじゃない?
483:デフォルトの名無しさん
08/12/22 10:58:50
つーか、ヘッダに載せたいの?
484:デフォルトの名無しさん
08/12/22 11:20:43
確認しましたが、SetImageListは呼んでません
リストコントロールの0列目の頭にアイコンを付けたいんです。
BMPは16で区切って8インデックスあるので
2番目は空では無いとおもうんです
485:デフォルトの名無しさん
08/12/22 11:30:14
いや、ちょっと使い方に問題があると思うけどアイコンなくっても
アイコンのある筈の場所が空白になるだけだから、それは確認できるはず。
で、
m_ListCtrl.GetHeaderCtrl()->SetImageList(&m_Images);
これは
m_ListCtrl.SetImageList(&m_Images);
じゃないのか?
486:デフォルトの名無しさん
08/12/22 11:31:41
m_ListCtrl.SetImageList(&m_Images, LVSIL_SMALL);
こうか
487:デフォルトの名無しさん
08/12/22 11:39:19
うおーーーできたーー
GetHeaderってなんだったんだーーーー
ありがとう。まじありがとう。
無駄に難しくはまり込んでいた・・・
488:デフォルトの名無しさん
08/12/22 20:19:26
VCで作ったwindowsのプログラムを全く別のパソコンで動かすにはどうしたらいいのでしょう?
ソリューション構成のとこをreleaseにして、できたexeファイルと画像と音声リソースを
同じディレクトリに入れて、USBメモリで他のパソコンに移して実行しても、
アプリケーションの構成が正しくないとかいうエラーが出てしまいます。
どなたかアドバイスお願いします
489:デフォルトの名無しさん
08/12/22 20:22:15
まずは、正確なメッセージを貼るところから始めよう。
490:デフォルトの名無しさん
08/12/22 20:23:37
次に、そのメッセージでググってみよう。
491:デフォルトの名無しさん
08/12/22 20:26:05
アプリケーションをスタティックリンクするか、「他のパソコン」にランタイムをインストールするといいかも。
492:デフォルトの名無しさん
08/12/22 21:11:11
ググッてみたら解決方法がいっぱい出てきました。
出てきたページを参考にランタイムを入れてみようと思います。
ありがとうございましまろ
493:デフォルトの名無しさん
08/12/22 22:48:23
>>478
プログラミングWindows 第5版 (Charles Petzold著)
Win32APIを勉強する上ではバイブル的本だと思うが
君が理解できるかどうかは俺にはわからん
ただ訳もよくできてるから 初心者が読んでても結構楽しいぜ
それなりの値段だから 大きめの本屋で目を通してみると良い
とりあえず上巻だけでOK
494:デフォルトの名無しさん
08/12/22 23:55:22
VC++2003を使用しています
テキストファイルやmp3等のリソースエディタでは埋め込みが不可能なものを
リソースとして埋め込み、使用するにはどのようにしたらいいのでしょうか
ググった所ビルドアクションを埋め込まれたリソースにするという事はわかったのですが、
追加したファイルのプロパティを確認しても項目がその他しか出ていませんでした
どうかよろしくお願いします
495:デフォルトの名無しさん
08/12/23 00:01:29
VisualStudio2008 c++ です。
Regex::Matchesでパターンマッチした文字の位置を取得して、その列をSelectにすることできる?
ABC
ABC
ABC
↑これでAをMatchesで取得したとして、3つ目のAを指定したら3列目が選択される。みたいに
わかりにくくてごめん。
496:デフォルトの名無しさん
08/12/23 00:20:34
>>494
「カスタムリソース」でググってみ。
497:デフォルトの名無しさん
08/12/23 01:22:00
>>496
カスタムリソースで調べてやってみたら埋め込みリソースが成功しました
本当にありがとうございます
498:デフォルトの名無しさん
08/12/23 22:33:03
VC++上でコンソールアプリケーションを実行したときに
printf()の出力先(標準出力)を、VC++の出力窓にすることはできます?
(OutputDebugString()を使わずに・・・)
499:デフォルトの名無しさん
08/12/23 23:10:04
printfってオーバーライドできたっけ?
500:デフォルトの名無しさん
08/12/23 23:12:56
>>498
標準出力の出力先はSetStdHandle()で切り替えられるけど、VCの出力窓のハンドルって取得できるのかな?
調べたらできるかもしれない。
501:デフォルトの名無しさん
08/12/23 23:18:42
なんでんなこと死体んだ
502:デフォルトの名無しさん
08/12/23 23:19:09
>>498
printfをオーバーライドして中身にOutputDebugString書いちゃ駄目なの?
あくまでOutputDebugStringは使っちゃ駄目?
503:デフォルトの名無しさん
08/12/23 23:26:20
Regex::Matchesで検索した文字列の位置って、Forで地道に文字数カウントしかないの?
MatchCollectionのメンバで位置取得とかできないの?
504:デフォルトの名無しさん
08/12/24 03:17:52
#define printf (vsprintfしてOutputDebugStringする自作関数)
505:デフォルトの名無しさん
08/12/24 04:24:18
自己解決した。スマソ
506:デフォルトの名無しさん
08/12/25 13:21:28
質問です。
Visual C++ 2005 Expressを使っているのですが、
EXEファイルのプロパティから見られる「バージョン情報」を追加するには
どうすればいいんでしょうか?
507:デフォルトの名無しさん
08/12/25 14:14:08
>>506
リソースファイルを作ればいい
URLリンク(marigold.sakura.ne.jp)
508:デフォルトの名無しさん
08/12/25 19:49:37
>>507
ありがとうございます。そちらを参考にして一応設定し、「バージョン情報」タブが
表示されるようになりました。
ですが、何も設定していないのに「言語」という項目が「英語(米国)」という値で
自動的に設定されてしまうのですが、この「言語」の項目を「日本語」にするには
どうすればいいのでしょうか?
ためしに
VALUE "言語", "日本語\0"
と記述すると項目は追加されるのですが、「言語」「英語(米国)」は残ってしまいます…
509:508
08/12/25 20:01:21
自己解決できました。TranslationとStringFileInfoのBLOCKの値に
関係してたんですね
510:デフォルトの名無しさん
08/12/26 02:41:53
VC++2008で、エディットボックスに入力された値を%と仮定して、
演算を行いたいと思っています。
15 と入力されていれば、1.15で演算
現在、取得した値に100加算し、100除算するようにしているのですが、
桁落ちが発生してしまい、変数に格納される値が1.1499…となってしまいます。
桁落ちを発生させず、正しく1.15として変数を格納するためにはどのようにすればよろしいでしょうか。
CString strBuf;
double d;
((CEdit*)GetDlgItem(iID))->GetWindowText(strBuf); // strBuf="15"
d = atoi(strBuf); // d=15.00000000
d = 100 + d/100; // d=1.149999999
511:デフォルトの名無しさん
08/12/26 02:56:37
整数で計算して下さい
512:デフォルトの名無しさん
08/12/26 03:14:09
結果出力、つまり文字列に変換するときに丸めればいい。
偶数丸めとか四捨五入とか。
513:デフォルトの名無しさん
08/12/26 06:37:33
1ドル15セントみたいな概念は理解できないんだな
514:デフォルトの名無しさん
08/12/26 07:10:36
100 + d/100
515:デフォルトの名無しさん
08/12/26 07:19:30
たぶん、( 100 + d ) / 100 と書きたかったんじゃないか?
516:510
08/12/26 09:32:30
(100+d)/100の間違いでした。
四捨五入で試して見たいと思いますが、
少数で演算はやめておいた方がよさそうですかね。
計算式が少し複雑なものだったので、楽できればと思ったのですが。
ありがとうございました。
517:デフォルトの名無しさん
08/12/26 11:57:21
CString型の文字列に格納されている文字を1文字ずつ取り出したいです。
ただし半角なら1バイト単位で、全角なら2バイト単位で、という風に分離したいです。
半角だけなら、Strcpyでcharの配列にコピーした上で、
str[0] str[1]...という風に取り出せますが、
全角が混じっていると、1バイト目、2バイト目と分離されてしまいます。
その文字が半角か全角かを判断して、半角なら1バイト、全角なら2バイト同時に取り出すロジックを作りたいです。
こんな感じの関数として。
CString ripString(CString src,int index){ //ソースとなる文字列、n文字目
/*~処理~*/
return 文字列;
}
たとえば"あaいbうcえdおe"という文字列を入れると、
CString str="あaいbうcえdおe";
ripString(str,0) →結果 "あ"
ripString(str,1) →結果 "a"
ripString(str,2) →結果 "い"
ripString(str,3) →結果 "b"
・
・
・
こういうことをするのに良い方法はありますか?
518:デフォルトの名無しさん
08/12/26 12:05:49
CharNext, IsDBCSLeadByte
519:デフォルトの名無しさん
08/12/26 12:09:47
>>517
CString::GetAt( int iChar)
520:デフォルトの名無しさん
08/12/26 12:18:56
>>517
#define _UNICODE
521:デフォルトの名無しさん
08/12/26 19:48:42
初めてDLL作ろうとしたのですが、依存関係を設定してビルドするとなぜか~~.libが見つかりませんとでて失敗します。
~~.dllってどのようにすれば使えるのか教えてください。
dllファイルの作成自体は成功しています。
522:デフォルトの名無しさん
08/12/26 20:37:37
>>521
google dll 作成方法
523:デフォルトの名無しさん
08/12/26 21:03:56
散々調べてから2ちゃんで質問したんですが・・・
とりあえず自己解決しました。
Project Test ←dllを使うプロジェクト
Project Test_dll ←dllのプロジェクト
という感じで、Test_dll.libができるのかと思ってたら、Test_dll.dllとTest.libの名前でファイルが作成されてました。
はじめにTestのソース内で#pragma comment(lib, "Test.lib")を試したところ
出力ファイル名が入力ファイル名が一致しています。というエラーが出たので、(名前も対応していないので)
Test.libがTest_dll.dllのアタッチとは関係ないものだと早とちりしていました。
結局Test.libをTest_dll.libにリネームして、リンクすることでビルドに成功できました。
524:デフォルトの名無しさん
08/12/26 21:11:02
ただ出力ファイルのdllの名前はプロパティから変更できたのですが、出力されるlibファイルの名前が変更できません。
みなさんは毎回手動でリネームしているのでしょうか。
525:デフォルトの名無しさん
08/12/26 21:52:49
libが必要になる方法なんかで作らないもん
面倒だし
526:デフォルトの名無しさん
08/12/26 23:24:50
ビルド後のイベント
527:デフォルトの名無しさん
08/12/28 10:28:01
リンカの詳細にインポートライブラリってのがあるべや
528:デフォルトの名無しさん
08/12/28 20:13:39
モードレスダイアログのコンボに対して、親ウィンドウから値をセットするにはどうしたらいいんでしょうか。
Win32 VC++です。
モードレスダイアログに
setData(char* text)
{
ComboBox_AddString(hwndDialog, text);
}
親から
dialog.setData(text);
UpdateWindow(hWndDialog);
529:デフォルトの名無しさん
08/12/28 21:01:37
うまくいかないのなら、その経過も書いてよ
530:デフォルトの名無しさん
08/12/28 22:13:09
親から送る
ComboBox_AddString( GetDlgItem( hWndDialog, IDC_COMBOBOX), text);
531:デフォルトの名無しさん
08/12/28 23:12:16
>>530
おっしゃるとおりにやってみたのですが、現象は変わりませんでした。
現象は、モードレスダイアログにあるコンボの中身が空のままです。
ただ、 num = (int)SendMessage(GetDlgItem( hWndDialog, IDC_COMBOBOX), CB_GETCOUNT, 0, 0);
でみると要素数numはちゃんと増えています。
WM_PAINTを拾ってInvalidateRectで再描画する必要があるのでしょうか。
532:デフォルトの名無しさん
08/12/28 23:29:03
>モードレスダイアログにあるコンボの中身が空のままです。
ポインタ操作間違えて文字化けしているだけじゃないのか?
533:デフォルトの名無しさん
08/12/28 23:50:08
そもそもどこの時点でしけてんだよ
まず、モードレスダイアログ自身に同じ処理を書くと成功すんのか?それ
534:デフォルトの名無しさん
08/12/29 02:31:03
コンボボックスのリストの部分のサイズどうなってる?
コンボにフォーカスして↑↓キー入れてみたらちゃんと追加されてるとか
535:デフォルトの名無しさん
08/12/30 17:54:28
ボタンが無効かどうかを調べるにはどうすればいいんですか?