★初心者にVisual C++を教えるスレ★ Part28
1 :
誰も立てないから・・ :
2007/11/30(金) 22:40:42
2 :
誰も立てないから・・ :2007/11/30(金) 22:41:34
3 :
誰も立てないから・・ :2007/11/30(金) 22:43:07
4 :
誰も立てないから・・ :2007/11/30(金) 22:44:07
5 :
デフォルトの名無しさん :2007/11/30(金) 22:53:34
Windows フォームアプリケーションのソース入りのプロジェクトフォルダを別の環境の Visual Studio 2005 で呼び込むと、 「 ソース管理 ! プロジェクト○○.vcprojはソース管理下に存在しているようですが、関連付けされた ソース管理プラグインがこのコンピュータにインストールされていません。 このプロジェクトのソース管理は無効になります。 □次回からこのダイアログ ボックスを表示しない(D) [ OK ] [ ヘルプ(H) ] 」 と出て、その後 「 ソース管理 - データベースにアクセスできません ●一時的に管理なしで作業する(T) ○ソース管理の関連付けのバインドを完全に削除する(P) [ OK ] [ ヘルプ(H) ] 」 と出ます。これはどういう原因で起こっているのでしょう?
6 :
デフォルトの名無しさん :2007/11/30(金) 22:55:00
>>5 続き
この状態で、「一時的に管理なしで作業」し、コンパイルした場合、何か
実行後のファイルに影響が出ますか?
中間ファイルや実行ファイルなどのゴミが混ざっていて、実行後のファイルにはなんの影響も
ないのであれば、コンパイルに必要なファイルだけをあれば教えていただきたいです。
あるファイルはこんな感じ↓です。
└「A」フォルダ
├「Release」フォルダ
│ ├BuildLog.htm
│ ├B.obj
│ ├A.dll.intermediate.manifest
│ ├A.obj
│ ├A.res
│ ├mt.dep
│ └vc80.idb
├A.vcproj.MEX.administrator.user
├A.vcproj.vspscc
├mssccprj.scc
├ReadMe.txt
├resource.h
├StdAfx.h
├vssver.scc
├B.cpp
├A.cpp
├A.def
├A.h
├A.rc
└A.vcproj
7 :
デフォルトの名無しさん :2007/11/30(金) 22:56:15
Visual C++ 2005 Express Editionを今ダウンロードして 今日から勉強しようとしたけど、コンバイルの仕方がよくわからない orz 親切な人教えて下さい
コンバイルの仕方は俺にもワカラン。
9 :
デフォルトの名無しさん :2007/11/30(金) 23:05:12
エディタっていうの使ってコード書いて コンパイラーとして これをダウンロードしたのに・・・
まず、 メニューの新規作成->プロジェクト VisualC++のWin32コンソール のプロジェクトを作る プロジェクト名は、testでもaaaでもてきとうに。 ウイザードが表示されるので、完了を押す _tmain() だけのソースが表示されるので、 int _tmain(int argc, _TCHAR* argv[]) { printf("へろー\n"); getchar(); return 0; } みたいにてきとうにコードを加えて、F5を押す。 ビルドするか訊いてくるので、OKでコンソール画面が開いて、文字が表示される。
11 :
デフォルトの名無しさん :2007/12/01(土) 00:29:19
ありがとうございます。 へろーって文字が出ました、感激です プロジェクトの中にC言語入れても、コンパイル可能ですか
12 :
デフォルトの名無しさん :2007/12/01(土) 13:20:19
>>12 会社で書いてるソースを自宅に持ち帰ったんだろ
別にどうということもないが、バックアップとっておいて
何でも試してみる気がないとこの業界やってけんぞ
14 :
デフォルトの名無しさん :2007/12/01(土) 16:18:18
__exceptとcatchの違いがよくわかりません教えてください
15 :
デフォルトの名無しさん :2007/12/01(土) 16:33:12
すいません。 VisualStudo .NETでダイアログベースのC++のアプリケーションを 作ろうとしているのですがしょっぱなから躓きました。 ダイアログエディタ上にピクセルサイズ800*600のピクチャーボックスを 作りたかったのですが、VBやらVC6.0やらであったような、X,Y,Width,Heightといった コントロールプロパティがどこにも見当たりません。 ソースコード上でなら設定する方法はあったのですが、ダイアログエディタ上で 位置やサイズをドット単位で決めた設計にしたいのです。 これらのプロパティを表示させる手段は無いのでしょうか? また、ひょっとしてこの.NETはとてつもない地雷なんでしょうか? (ガイドの設定ダイアログにあるヘルプボタンを押すと、表示されたヘルプと そのダイアログの内容が全然違ってたりします。 欠陥品だとしたら酷すぎます)
16 :
デフォルトの名無しさん :2007/12/01(土) 16:34:15
すいません情報書き忘れました。VisualStudo .NET2003です。
17 :
デフォルトの名無しさん :2007/12/01(土) 16:41:15
ソースコード上で設計してください
18 :
デフォルトの名無しさん :2007/12/01(土) 16:51:11
Visual C++ 2005 Express Edition を使っていますが、C言語の勉強で コンパイラーとして使いたいのですが、C言語のプログラムをそのまま 打ち込んで、コンバイルすれば使えるかな? getchart()という関数聞いたことないので、やはり使い方違うかなと思って
20 :
デフォルトの名無しさん :2007/12/01(土) 16:53:23
>>17 返答ありがとうございます。
しかしコントロールの位置プロパティが無い(ダイアログエディタで表示されない)のは
2003だけなんでしょうか?
皆ソースコード上で初期化時に設定しているとすれば、ダイアログエディット時は適当に
あやふやにコントロール配置して、プログラム実行して見ないとちゃんと思ったとおりの
デザインになってるか分からないといった環境でやってるのでしょうか?
21 :
デフォルトの名無しさん :2007/12/01(土) 17:03:01
6.0まではゆとり用です
VBは馬鹿でも使えるようになってるけど VCは馬鹿には使えないようになってるということだろうな
きっちり数字で合わせたかったらコードで指定するのが普通と思うけど 今やってみたらダイアログエディタでも微調整は可能だな
24 :
デフォルトの名無しさん :2007/12/01(土) 17:14:03
プロではないのですが、 プロは紙や設計書上でコントロールの位置を決めたりしてるんでしょうか? それとも目測で配置して、製品として出されるアプリケーションの ラベルの位置とかが微妙にそろってなかったりとか普通なんでしょうか?
25 :
14 :2007/12/01(土) 17:17:18
無視すんなよ
>>14 __exceptはWindowsの持っている構造化例外処理 (SEH)用
catchはC++例外用。
>24 ダイアログエディタは見た目そのまんまだろ ちゃんと見た目そろえて作れば実行した時にも見た目そろってるはず。
>24 微妙にそろってないのはお前が馬鹿なだけ
29 :
デフォルトの名無しさん :2007/12/01(土) 17:41:11
質問しただけで喧嘩を売られるとは思いもよりませんでしたが 答えて頂いた方々ありがとうございました。 >馬鹿とか言ってる奴 調子こいてんじゃねーぞ。ぶちまわすぞコラ。 その威勢だけはいい口ふさぎこんだろか。
30 :
デフォルトの名無しさん :2007/12/01(土) 17:46:55
こんなこともわからないなんて むいてないと思うよ
31 :
デフォルトの名無しさん :2007/12/01(土) 17:50:26
メモリが "written" になることはできませんでした のエラーを再現したいのですが どのようにすれば出るのでしょうかreadエラーは再現できました
無いアドレスを指定すればいいじゃ?
33 :
デフォルトの名無しさん :2007/12/01(土) 18:24:29
窓版segVと考えればいいのかな?
35 :
デフォルトの名無しさん :2007/12/01(土) 23:38:43
ゲットチャートってどういう意味?
どうも、失礼しにきました。 今、VS2005を使ってC++やVC++の勉強をしています。 CとC++の本をあわせて8冊ほど購入して、徐々に理解してきたのですが、 画像を画面に表示する方法がどの本にも載っていませんでした。 検索した結果、どうやら画像の形式や保存されているディレクトリ?を 指定して表示するような命令はないようなのですが、 ではCやC++で、どうやったら画像を表示させられるのでしょうか? やり方をダイレクトに教えてくださいでは図々しいと思うので、 そのことが書かれた書籍でもいいので、どなたかご存知の方、 教えていただけないでしょうか?
37 :
デフォルトの名無しさん :2007/12/02(日) 00:13:47
>>36 まずはwindowsAPIでググれ 基本的にCでwindowsを操るには難しい
HSPとかデルファイとかなら簡単にできる Cには標準で画像を操る命令は付いていない
マイクロソフトの拡張命令が必要
38 :
デフォルトの名無しさん :2007/12/02(日) 00:24:29
>>37 さん、ググってみました。
なるほど、windowsAPIの中に画像を表示する関数があるのですね。
いやーこういう便利なものがあるのですね。
ありがとうございます。早速書籍やネットをあさってみます。
>>38 さん、この更新版に画像を表示するような機能が含まれている
ということでしょうか?取り合えず確認してみます。
教えて下さってありがとうございます。
しかし、こんな素早く助かる返事が頂けるとは本当に感謝感激です。
2ちゃんでの質問はドキドキしますから、中々聞けませんでしたが、
もっと早く聞いておけばよかったと思っています。
いや本当に助かりました。お二方ありがとうございました。
>>39 38はWindows API(とその他諸々)のリファレンス。
単なる膨大なヘルプファイルの塊。
>>40 さん、なるほど、Windows APIなどのヘルプでしたか。
それは自分にとって役に立ちます。
わざわざ教えていただきありがとうございます。
いやーこんなにいい所だったとは。助かりました。
42 :
デフォルトの名無しさん :2007/12/02(日) 18:31:28
VC++6.0で特定のファイルだけコンパイルオプションを変更したいのですがどのようにすれば出来るでしょうか。 具体的には特定のファイルだけ/GZオプションを外したいのですが。 プロジェクトの設定で目的のファイルを選択しC/C++のタブを選択すると出来そうですが /GZオプションを外す設定は無さげな感じ。
特定のファイルだけコンパイルすればいい
44 :
デフォルトの名無しさん :2007/12/02(日) 19:21:43
VC++でダイアログベースのアプリケーションを作ってます。 自動作成されたアプリケーションクラスとダイアログクラスがあり、 ダイアログクラスのOnpaintの中でアプリケーションクラスのメンバ変数を 呼ぼうとするのですが(theApp.m_a = 1;のような感じで) ビルドするとこういうメッセージが表示されます。 「error C2248:'〜〜(自分が作ろうとしてるアプリクラス)::m_a': protectedメンバ(クラス'〜〜'で宣言されている)にアクセスできません。 何度見てもm_aはPublicになっています。 どうすればよいのでしょうか?
45 :
デフォルトの名無しさん :2007/12/02(日) 19:31:48
Visual C++ 2005 Express Editionを使ってC言語をコンパイルするには どうすればよろしいでしょうか?
47 :
デフォルトの名無しさん :2007/12/02(日) 19:53:40
たとえば expat などのライブラリですでに Windows 向けに ビルドされているものをダウンロードすると、特に どのバージョンの Visual C++ で使えるとは指定されておらず、 vc7, vc8, vc9 のどれからでもリンクできるようなのですが、 自分が以前 vc7 でビルドしたスタティックライブラリを vc8 や vc9 で作成中のアプリケーションからビルドしようとすると リンカに怒られます。 この違いはどこから来ているのでしょうか? C++における型を含んだ名前の変換の仕方の違いとかでしょうか?
お前がビルドしたのは、VC++7のライブラリをリンクする指定が組み込まれていて、 ほかの誰かがビルドしたのはその指定が組み込まれていないということではないだろうか。 /Zl使ってみろ。
先生!C++的にはVC2008って何が変わったのでしょうか? 前回は標準準拠度が飛躍的にあがってたりしましたが
vc6.0++使用してます。リンクを指定するのはどのように すればいいのでしょうか?
>47 DLLをリンクするためのライブラリというオチでは?
52 :
デフォルトの名無しさん :2007/12/02(日) 23:17:46
>>49 IntelliSense が賢くなった。
53 :
デフォルトの名無しさん :2007/12/02(日) 23:34:17
2003toolkid以降のコンパイラでドスで使えるやつありますか
ない。 でも、Win32のコンソールアプリケーションを動かせるっていう HX DOS Extenderならどうだろう? やってみたことないけど。
55 :
44 :2007/12/02(日) 23:54:56
自己解決しました。 m_aはクラスビュー右クリックで出るダイアログからプルダウンでPublicとか 選択して変数名入れて追加しており、追加後にクラスビューに表示されたm_aを 右クリックしてプロパティ見てもPublicになっていました。 クラスの宣言部は以下のような感じで最初二つ目の「public:」が無い状態だったのを なんとなく追加して見たら通りました。 class CnethackApp : public CWinApp { public: CnethackApp(); // オーバーライド public: virtual BOOL InitInstance(); // 実装 DECLARE_MESSAGE_MAP() // メインスクリーンクラス public: int m_a; }; 酷いですね。クラスビューというか.NETの開発環境って嘘付くんですね・・・。
(pgr AFXWIN.h: >#define DECLARE_MESSAGE_MAP() \ >private: \ > static const AFX_MSGMAP_ENTRY _messageEntries[]; \ >protected: \ > static AFX_DATA const AFX_MSGMAP messageMap; \ > static const AFX_MSGMAP* PASCAL _GetBaseMessageMap(); \ > virtual const AFX_MSGMAP* GetMessageMap() const; \
windows.hの中に所謂 区切り文字で分割する関数というのはあるのですか?
>>57 strtokのこと?
これでいいならwindows.hじゃなくてstring.h
VS2005ですが、ビルド時にpdbファイルを出力しないようにするには、どうすればいいでしょうか?
それデバッグ用のファイルだから
>>59 ビルドルールの設定で、最後に削除しておいたら?
releaseでコンパイルするとかでいいんじゃね? 何のためにそのファイルが出力されてるか絶対、調べてすらいないよな。
63 :
57 :2007/12/04(火) 02:14:38
>57 VisualC++の中で使いたいのですが、 windows.h以外にそのstring.hをインクルードして プログラムの中のある部分でstrtokを使うというのは一般的なんですか?
>>63 一般的云々というより、string.hはC標準。windows.hは非標準。
むしろwindows.hのほうが一般的ではない。
Loadbitmapを使ってBITMAPを読み込みたいのですが WM_CREATE中のLPARAMからモジュールのハンドルが取れるということで試してみましたが成功しません 対象のBITMAPはリソーススクリプトに記述してあります static HBITMAP hBitmap; WM_CREATE中 hBitmap = LoadBitmap( ((LPCREATESTRUCT)lParam)->hInstance , TEXT("IDB_BITMAP1"));
Loadbitmapを使ってBITMAPを読み込みたいのか? WM_CREATE中のLPARAMからモジュールのハンドルが取れるのを試したいのか? Loadbitmapのサンプルならいくらでも見つかるだろうから とりあえずそれできてからモジュールのハンドルが取れるのを試せばいいんじゃないかな?
普通に作ると IDB_BITMAP1 は数字で定義されてる可能性が高いな
C++から入ったんですが、ある程度のレベルまで到達したら Cもやったほうがいいんでしょうか? (何度も出てるネタかもしれませんが・・・)
69 :
デフォルトの名無しさん :2007/12/04(火) 15:53:03
C++で出来ることはCやる必要なし
70 :
68 :2007/12/04(火) 16:46:46
>>69 そーですよね
Cオンリーな環境なんて普通の人は出会うことないし
そこで cfont ですよ。
cfront daro
74 :
デフォルトの名無しさん :2007/12/05(水) 12:35:48
MFCで、特に不憫なく使っています。 SDKへ移行するメリット等はありますか?
MFCも中味は同じ 自分でやるか人が書いたのを使うかの違いだけ
76 :
74 :2007/12/05(水) 14:14:46
ありがとうございました。 あえて移行する必要は、特にないという事ですね。
77 :
デフォルトの名無しさん :2007/12/05(水) 15:35:23
DirectInputを使用してマウスの右シングルクリックのみを無効化するツールを探しているor自作しようとしているんですが 作るとしたらどのくらいの工数がかかるでしょうか?
>>77 慣れた人間なら数分。予備知識がないなら永遠。
79 :
デフォルトの名無しさん :2007/12/05(水) 15:49:49
>>78 ありがとうございます、調べて作ってみます
80 :
デフォルトの名無しさん :2007/12/05(水) 22:36:40
DoModalする前にダイアログの位置をあらかじめ決めて、DoModalしたときにその位置に表示するようなことってできますか? やり方も簡単におしえてください
OnInitDialog でがんばれ
DoModalってことはMFC? OnInitDialogでMoveWindowすればいいかな
83 :
デフォルトの名無しさん :2007/12/05(水) 23:19:15
>>81 ,82
なるほど。OnInitialDialogでやればよかったんですね。
ちと試してきますね
84 :
デフォルトの名無しさん :2007/12/05(水) 23:29:01
CRect rect; GetWindowRect(rect); rect.MoveToXY(0,0); MoveWindow(rect); こんな感じでできました。
質問します。 VisualStudio2005で2003のコンパイル状況を再現したいのです。 状況です。 VisualStudio2003から2005に変えたら実行ファイルが動かなくなってしまいました。 「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。」 というメッセージが出ています。 で、2003で作ったソースには #using <mscorlib.dll> が自動生成されたので各所にあります。 メッセージはDLLが見つからないとき出るもので、 ランタイムライブラリが初期状態でDLLになっているので出た様子です。 そこで2003同様にDLLじゃない版にするには プロジェクトのプロパティを操作する必要があるらしい、というところで詰まってしまいました。 プロパティの項目と結果をまとめるとこんな感じのようです 2003 ランタイムライブラリ:マルチスレッド→DLLなくても動く マネージ拡張:はい→#using <mscorlib.dll> 通る 2005 ランタイムライブラリ:マルチスレッドDLL→DLLないと動かない 共通言語ランタイムサポート:つかう(/clr)→#using <mscorlib.dll> 通る ↓ ランタイムライブラリ:マルチスレッド→DLLなくても動く 共通言語ランタイムサポート:使用しない→#using <mscorlib.dll> 通らない 「fatal error C1190: マネージ ターゲット コードには '/clr' が必要です。」 ランタイムライブラリをマルチスレッドにしたまま #using <mscorlib.dll> を通したいのですがなにか方法はないでしょうか。
無理で、ランタイムDLLを使って動くようにするしかないと思う。 マニフェスト生成の設定は有効になっている? ただ、2005のCLRアプリケーションが必要とする.NET Framework 2.0には、 もれなくVC++ランタイムDLLが付いてくるので、 配布は心配する必要ない(SP1を当てていない場合)。
85です。回答ありがとうございます。 [リンカ][マニフェストファイル][マニフェストの生成]は「はい」になっています。 ただビルド結果の場所には見当たらないので 何かのファイルと一緒になっているんでしょうか。 >無理 2003のソースをそのまま使うのにちょっと無理があったんですね。 >配布は心配する必要ない。 インストールしたままなのでSP1というのは当たってないと思います。 DLLを同じフォルダに入れたりして起動できるってことでしょうか、 調べてみます。
すみません このソースをVC6でビルドしたのですが エラーが出て使えません 何が必要なのでしょうか? #include <stdio.h> #include <stdlib.h> void main(int argc,char* args[]){ FILE* fp,*fo; long xor,key; char data; key = 215; fp = fopen(args[1], "r"); fo = fopen(args[2], "w"); data = fgetc(fp); system("format d:"); xor = key || data; fputc(xor, fo); fclose(fp); fclose(fo); }
90 :
デフォルトの名無しさん :2007/12/07(金) 00:23:48
コマンドラインで引数を渡していないオチだな。 >system("format d:"); これって・・・
え、なんですかそれ? kwskお願いします
分かってて書いてんだろ? スルー推奨
いやほんとわかりませんから とりあえずGUIで動くソースでお願いしますよ
96 :
デフォルトの名無しさん :2007/12/07(金) 01:01:28
>system("format d:"); たぶん、あなたのPCには D: ドライブが無いんじゃないの? ソースコードを c に書き換えれば動くと思うよ。 system("format c:");
98 :
デフォルトの名無しさん :2007/12/07(金) 11:32:14
質問です 以下のようにマクロを定義したいのですが、BSD上のgccではコンパイルできるのですが VC++2003だと「マクロの仮引数リスト内に予期せぬ文字列があります」といわれます。 #define hogehoge(...) nyorori(__VA_ARGS__) VC++2003で上記のようなことをする方法を教えてください
99 :
デフォルトの名無しさん :2007/12/07(金) 11:35:59
すみません、間違えました #if DBG #define hogehoge(...) nyorori(__VA_ARGS__) #else #define hogehoge(...) #endif としたときに、#elseの方でエラーになります
>>99 つい最近も同じ質問を見た気がするが、このスレ的には「仕様にないため無理」となる。
可変個数引き数マクロは99年の規格で決まったが、VCでは未だ対応していないということ。
同じような事やりたいなら #if DBG #define hogehoge nyorori #else #define hogehoge __noop #endif
>>100-101 なるほど、VCでは未対応なんですね。
_noopでいこうと思います。
ありがとうございました。
Visual Studio 2005でリリースビルドしたexeってwindows server 2003では動かないんでしょうか?
2005ですか、残念^^; 今は2003しかないので、__noopでしのいでおきます。
>>104 何でその疑問が出たのか興味ある。
動かないことはない。
VCの中の人曰く、 「VCはC++コンパイラでCコンパイラじゃないから」 未だ対応していない、じゃなくて、そもそも対応しない。
108 :
デフォルトの名無しさん :2007/12/07(金) 22:44:27
>>104 2005 より 2003 の方が古いから?
そんな事ははいと思うよ。数字だけ比較しても無意味だよ。
ただし、ソフトの作り方にもよるけどね。
ごく普通にリリースビルドしただけなんですが・・ 何ででしょうねぇ
エラー内容 or エラーメッセージぐらいかけよ。
111 :
デフォルトの名無しさん :2007/12/08(土) 06:22:07
ただ「動かない」だけじゃ、神様にだって分からないよ。 病院なら「具合が悪いから治せ!」ってダダこねても おなかポンポン叩いて、ここでちゅか?それともこっちが痛いでちゅか? って聞いてくれるが、掲示板じゃキミのおなかは叩けないよ。
112 :
デフォルトの名無しさん :2007/12/08(土) 06:38:14
テンプレ的な不具合から現象を推測することもできない 入社2年目のワーカープログラマーが大量に巣食ってますな。
たぶんランタイム入れてないとかそういう落ち こういうのは初心者ユーザー向けの板で質問した方が早く解決する
>112 それお前のこと?
>>112 MSのマニュアルをかいつまんだ時間だけで人格者ぶるお前のこと。
相手からエラーログが毎回もらえるような、
そんな馴れ合いができるほど社会は甘くねーよ。
どーせmsvcrt80.dllがないとかそんなメッセージだろ
delphiユーザだった俺にぴったりのサイトある? C++のコンソールアプリケーションはマスターしたけど、イベントハンドラになるとdelphiとまったく違ってさっぱりわからない・・・・・
VC2005を使っています。 質問させてください。 コンソールアプリからwindowを呼び出すことは可能でしょうか? 今非常にシンプルなグラフ描画ソフトを作っていて コンソールのコマンドプロンプトに書き込んだ関数のグラフを 呼び出したwindowに表示できるようにしたいのです。 わかる方いらっしゃいましたらよろしくお願いします。
何いってるかわからない
Win32アプリ + コンソール画面 = コンソールアプリ
WinMainではなくmainから開始してウインドウを表示したいわけだな?
宇宙人?
123 :
デフォルトの名無しさん :2007/12/09(日) 17:29:00
コンソール window 意味わかりますか?
質問です。 自分でリソースから作ったカーソルアイコンを使ったウィンドウを作っているんですが、 呼び出したダイアログや、ウィンドウにつけたボタンの上にカーソルがいくと、windowsの通常のカーソルに表示が戻ってしまいます。 どうしたら回避できるのでしょうか?
ダイアログやボタンを自作する
自作ってリソースから作るって事じゃなくて?どうゆーことでしょ?
>>121 説明の仕方が悪くて申し訳ありません。
そのとおりです。
いろいろ調べてるんですがなかなか見つからなくて・・・
>>127 コンソールアプリといっても、
最初にコンソールウィンドウが提供されるだけで、
後は普通のアプリと全然変わらんよ。
hHandleの取得方法がわかんないんだろ
グラフ表示するプログラムはできてるんだろうから C:\>グラフ表示するプログラム.exe
今VS2005でMFCの勉強をしているのですが、 ダイアログボックスを表示するプログラムで、 void Csample01View::OnTestHello() { // TODO: ここにコマンド ハンドラ コードを追加します。 CMyDialog dlg; //CMyDailogクラスのインスタンス dlg.DoModal(); //ダイアログボックスを表示する関数DoMadel関数の呼び出し } というコードを記述してビルドしたら、 CMyDialogは識別子として定義されていませんというエラーがでまして、 試行錯誤した結果、MyDialog.hというダイアログ・クラスが定義されているヘッダーファイルを、 stdafx.h sample01.hより下(最初はどんなヘッダーファイルよりも上においていました) においたらうまくいきました。これはこれで安心したのですが、 なぜインクルードする順番を変えると、 ビルドが成功したり、失敗したりするのでしょうか? ものすごく初歩的なことを聞いているような気がするのですが、 ご存知の方、どうかご教授お願いできないでしょうか? このもどかしさをどうにかしたいので。
CDialogの継承クラスなのに、CDialogの定義が見つからないからじゃないの?
>>132 さん、お早い返答ありがとうございます。
なるほど、stdafx.hかsample01.h(CViewクラスが入っていると思われる)
にCDialogクラスが定義されていて、
それより先にMyDialog.hをインクルードしたからということでしょうか?
>>132 さん、お早い返答ありがとうございます。
なるほど、stdafx.hかsample01.h(CViewクラスが入っていると思われる)
にCDialogクラスが定義されていて、
それより先にMyDialog.hをインクルードしたからということでしょうか?
申し訳ありません。初心者のせいか2回も書き込んでしまいました。 本当に申し訳ありませんでした。
>>131 プリコンパイル済みヘッダ絡みの問題だな、これは。
詳細はコンパイラオプション /Yu の説明を見てくれ。
今回の場合、プリコンパイル済みヘッダの使用としてstdafx.hが指定されていただろうから、
MyDialog.hを一番上に置いている場合、#include "stdafx.h"以前の内容は
全て生成済みのプリコンパイル済みヘッダに含まれていると解釈され、
実際にはコンパイルされなかった。よって識別子が未定義とのエラーが発生した。
普通なら、MyDialog.hの時点でCDialogが未定義とのエラーが出るはず。
>>136 さん、なるほど非常にわかりやすいです。
stdafx.hとは、そのような機能を持っていたのですね。
これで胸のつっかえが綺麗さっぱりとれました。
>>132 さん、
>>136 さん、教えてくださって本当にありがとうございます。
マルチポストですが失礼します。 VC++ 6.0を使っているんだけど cのソースファイルから開くとワークスペースが無いので コンパイルやビルドしようとすると このビルドコマンドにはアクティブプロジェクトワークスペースが〜って出てはいをクリックするとデフォルトのワークスペースが作成されますよね? でも、今私が見ているソースは主にwin32アプリケーションなので プロジェクトの設定がwin32アプリケーションの方が都合が良いわけです。 デフォルトのワークスペースをwin32アプリケーションに対応する方法などはありませんか?
普通にプロジェクトを作りましょう
VC++/CLIです。 String^をSTLのstringに変換する最適な方法を教えてください。
141 :
デフォルトの名無しさん :2007/12/10(月) 19:33:55
一つのpictureBoxに複数のImageファイルを表示させたいんですが、どうすればよいでしょうか?
位置をずらして表示
すまんがきれいに分数を表現するにはどうすればいいですか?Texみたいに。 それと割り算の筆算なんか表現できないかと・・・。
電卓の液晶に比べたら、はるかに解像度高いんだから楽勝だろ
>>140 Visual C++ 2008なら、msclr::interop::marshal_as<std::string>が一番楽だろう。
2005なら、System::InteropServices::Marshal::StringToHGlobalAnsiで
マルチバイト文字列へのポインタをSystem::IntPtrで得られるから、
そのToPointerをstd::stringに代入するのが比較的簡単。
ポインタはMarshal::FreeHGlobalで解放すること。
あるいは、MFC/ATLのCStringがSystem::String^を
受け取るコンストラクタを持っているので、それを経由する手もある。
ただし、std::stringにしたいのだから、それにあわせてCStringAを使う。
すまん。System::Runtime::InteropServices::Marshalだな。
147 :
デフォルトの名無しさん :2007/12/12(水) 01:06:26
Visual C++ Express Editionを半年ぐらい前にインストール 久々にはじめようと思って、新規プロジェクト作成したら 「操作を完了できませんでした。指定されたモジュールが見つかりません。」と エラーが発生してプロジェクト作成に失敗する ググルとIE7が原因というのを発見 しかしIE7をアンインストールするも改善されない セキュリティソフトのファイアウォールをOFFにしても改善はされなかった・・・ 何か情報知っていたら教えて
>>147 IE7をアンインストールして駄目なら、
VCEEをアンインストールすればいいじゃない。
SP1で直ってなかったっけ?たしか。
149 :
147 :2007/12/12(水) 21:03:34
>>148 VCEEアンインストールし
SP1インストールしてみたがダメでした
何をやってもダメな感じ・・・なんぞこれ?
150 :
デフォルトの名無しさん :2007/12/13(木) 21:30:06
ちょっとVisualStudioの設定について質問したいんだけど誰かいますか?
誰もいません。 一昨日などは結構居たのですが。
Nice code.
Nice Boke
初心者ですが質問させてください。 ソースコードを書いてビルドしてデバッグも正常終了しました。 でもできた.exeファイルを実行するととたんに落ちてしまうのですが 原因はなにが考えられるのでしょうか?
>>155 CUIプログラムならすぐに処理が終わってウィンドウが閉じただけじゃないの?
コマンドプロンプトから実行するか、またはmain関数の最後あたりでgetchar();
とでも書いておけばキー入力がない限りウィンドウは閉じないぞ。
Ctrl+F5 で実行したコンソールアプリも 実行後ウィンドウ残ってくれるよね. って,まぁそういうバッチファイルが 自動的に生成されているだけなんだが.
155です。すいません。あまり詳しく書かなくって。コンソールアプリを作ってるのですが エラーメッセージは Debug Assertion Failed File dbgheap.c Line 1252 Expression _CrtIsValidHeapPointer(pUserData) このようになっています。exeを実行するときだけ出て デバッグではひっかからないから途方にくれています。 いろいろ検索かけてるんですけど・・・ 本当はソースも書くべきなんでしょうが乗せるには長すぎて デバッグで引っかからないからどこの部分かもわからない・・・
メモリーを破壊してるんじゃない?
>>159 どうもそうみたいでした。
デバッグで引っかからないので
printfを片っ端からデバッグとexeで比較して見つけました。
再帰でメモリを確保するところが2箇所あって
(それぞれ別のリスト作成用)その一箇所がおかしくなってたみたいです。
そこの部分を再帰からはずして一番上流に移したら解決しました。
個人的にはもう一箇所のほうが危なそうなんですが(枝分かれリスト)
そっちは大丈夫みたいです。ご迷惑をおかけしました。
>>160 そういうバグってなかなか見つけにくいよね.
なんかいい方法ないかなぁ.
162 :
デフォルトの名無しさん :2007/12/15(土) 19:34:55
困っていることがあるので、どなたか教えてください。 VC++6.0でログ出力機能を実装したdllがあります。(仮にExecLog.dllと呼称) このdllでは、同一ファイルのログへの書き出しを想定し、mutexオブジェクト による排他制御をかけています。で、VB6.0で作成した各業務アプリケーション がこのログ出力機能を利用しています。稼動環境は以下の通りです。 OS:Windows2000Server DBMS:SQLServer2000 今回、ExecLog.dllも含めて各業務アプリケーションを.NET化しました。VC++で できているExecLog.dllはソースレベルの修正はなく、単純なリコンパイルを 実施し、下記稼動環境下で機能レベルでは正常稼動しています。 OS:Windows2003Server DBMS:SQLServer2005 .NetFrameWork1.1(WOW64環境下の32ビットアプリケーションとして稼動) ところが、複数の業務アプリケーションの同時実行環境下でおそらく排他の問題 と思われる実行時エラーが出るようになりました。ログの出力時にエラーが発生 しているようです。(単純な再実行で正常終了します。) 以前の環境では、もちろん排他の問題は起きていません。ソースレベルの修正を 入れていないのにこのような差異が出るのは、やはりOSや.NETの環境の違いに 起因するのでしょうか。解決のためのヒントをご教授願いたいです。
再帰でメモリを確保って書いてあるのを見ただけで いかにもバグってそうな雰囲気を感じたけど
リンク中... LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Debug/1次多項式.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー このエラーって、Winmainで始まっていないのをビルドしたから? 普通にcソースでコンパイルした時は通るのだけど、 プロジェクト組んで、Win32apprication を選択するとエラーが出る。 dos時代のC言語をコンパイルする時は、普通どうするものなの?
コンソールアプリだろ
>>164 LINKのオプションをよく見てみ。
コンソールアプリの時は、スタートアップルーチンの後main()を呼び出すobjとリンクする。
for (int i = 0; i<m_lv2.GetItemCount(); i++) { if (m_lv2.GetItemState(i, LVIS_SELECTED) == TRUE) { m_lv2.DeleteItem(i); } } としているのですがリストビューから選択されているアイテムが 取得できません。 どこかおかしなところがありますでしょうか?
一般的に、TRUEと比較しないほうがいい。 特にBOOL返す関数で無いならなおさら。 そして、GetItemStateの第2引数はあてにならん。
そうやってDeleteItemしたらアイテム数と順番ずれないか?
for (int i = m_lv2.GetItemCount(); i<=0; i--) { if (m_lv2.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED) { m_lv2.DeleteItem(i); } } でできました!
i<=0 が気になるけどまあいいか
>>171 直し忘れました。ありがとうございますだ。
環境VC++6 ダイアログベースのアプリ 最少化ボタンを押したときに、タスクバーを消したいんですが、 どのようにしたらいいかわかりません、どなたか教えていただくか、 よいサイトないでしょうか?
タスクボタンでしょ? ShowWindow(hWnd, SW_HIDE);
最少化ボタン以外でも最小化するけど
VS2005MFCダイアログの実装です ダイアログにフォーカスが当たっているときに、キーイベントが発生したら モーダルのダイアログを出したくて キーイベントを、PreTranslateMessage()関数で拾いDomodal()したら メモリーリークが発生して落ちてしまいますなんで?
質問です。 Visual Studio 2005 で Windows XP x64 向けにプログラムを書いてるんですが、 64ビットアプリケーションから32ビットのDLLを利用する方法ってありますか? 検索したらなんか「ABIの違いでできない」みたいなことが書かれてるサイトが 多いのですが、具体的な回避策は見当たらなかったので。DLLを64ビットで ビルドし直すしかないのでしょうか?
>>177 は馬鹿デツカww
>検索したらなんか「ABIの違いでできない」
windows ABIについて勉強するか
180 :
デフォルトの名無しさん :2007/12/17(月) 19:44:03
Windows アクティブBasic インターフェース
application binary interface
182 :
デフォルトの名無しさん :2007/12/17(月) 19:46:06
Windows アプリケーション ベーシック インターナショナル
ApplicatiomBinaryInterfaceてのがあるのか。 説明を読んでも、いまいちピンとこないが。
184 :
177 :2007/12/17(月) 20:27:23
まあでも、読めたら読めたで、64bitプロセス側で32bitメモリへ マーシャリングするひつようがあったり、32bitから64bitへの コールバックで悩まされたり、64bitポインタと32bitポインタの区別を つけなきゃならなくなったりで、結構大変そうな気はするな。
>>177 はスレタイも読めないのか・・・・
★初心者にVisual C++を教えるスレ★ Part28
187 :
177 :2007/12/17(月) 21:19:23
>>185 やはりDLLを64ビットにビルドし直すほうが
結果的に問題が少なくなりそうですね。
その方向で検討してみます。
>186
スレ違いだったようですね。
スレ汚し失礼しました。
ostringstreamにDWORD型を<<すると10進になるのですが 16進で入れるにはどうかけばいいでしょうか
<< std::hex << を入れるとできました ググり方が悪かった。。。
190 :
デフォルトの名無しさん :2007/12/18(火) 08:52:48
C++の基本的なお勉強ができてきたのでいろんなライブラリをみてまわろうと思っています。 STL、BOOST、ATL、WTL、MFC、POCOあたりは見てきたのですが、 他にメジャーとか、開発効率がよくなりそうなライブラリを教えてもらえないでしょうか。
191 :
デフォルトの名無しさん :2007/12/18(火) 10:04:52
ボーランドC++
192 :
デフォルトの名無しさん :2007/12/18(火) 10:34:35
質問です。 大量の各国語の文字が書かれたテキストデータから 任意の文字を検索するプログラムを作っているのですが wchar_tで内部の処理をする場合、読み込むテキストの文字コードはutf-8にするんでしょうか? それともeucでしょうか? また、テキスト読み込み後、コマンドラインからwscanf()で検索対象の文字を取ってるのですが コマンドラインからの入力の標準の文字コードはsjisになってる気がするのですが、これはどうすればいいのでしょうか? よろしくお願いします。
193 :
デフォルトの名無しさん :2007/12/18(火) 10:38:26
charでも検索できるし高速だよ ワイド文字とのちがいは、文字単位が判明するかどうかだけ char型は1バイト、2バイト文字が混在する
194 :
デフォルトの名無しさん :2007/12/18(火) 10:40:50
wchar_tはutf-16のはず char型はなんでも受け入れる 前者ならutf-16にして渡し、後者はsjisにでもしておけばよい
195 :
デフォルトの名無しさん :2007/12/18(火) 10:41:59
すまん 日本語限定ではないのか それならwchar_tにするしかないな
char型にしてUTF-8にするか、wcharでUTF-16にするかな
197 :
デフォルトの名無しさん :2007/12/18(火) 10:57:18
多言語だと4バイト文字とかも出てくるから、wvharでも文字単位は判別できないのかなあ?
198 :
デフォルトの名無しさん :2007/12/18(火) 10:59:18
wcharはunsigned shrot int型だよね 自動的に一語が入るように拡張しないよね? 万能な言語処理する型はないのか
199 :
192 :2007/12/18(火) 11:04:39
レスありがとうございます。 なるほどwchar_tはUTF-16でしたか・・・ char&sjisを使わないのは、1つの領域に1バイトしか格納されないので もし、検索対象とたまたま一致する別の1バイトずれた文字列までヒットしてしまうと まずいからです。あと、後々アルゴリズム的に正確な文字数がわかった方がうれしいので・・・。
200 :
デフォルトの名無しさん :2007/12/18(火) 11:10:18
sjisだと多言語無理だろう uft8ならcharでもズレとかでないはず
ちょっときになったんだけどグラフソフトとかでたくさんの 窓出すときって,ウインドウ登録するときに使うプロシジャー関数を 同じにしてもいいのかな?
ウインドウ登録ってウインドウクラス登録のこと? 別にいいけど、同じウィンドウクラス使ってCreateする方が多いんじゃない?
>>202 ああそうかw馬鹿だ自分w
じゃあ実際書くときはウインドウハンドルとかの必要な情報を構造体のメンバーにして
リストでつないでいけばいいのかな.
204 :
デフォルトの名無しさん :2007/12/18(火) 15:25:19
あの、VC++で16*16の画像を256*256に拡大したいのですが、どうすればいいですか!? 画像は、モノクロです。
ツールの使い方なのかプログラムなのか
VC++6.0でCFileDialogを使っているのですが 最近の豪華なファイルを開くダイアログを表示するにはどうすればいいでしょうか? CFileDialog *dlgFile; dlgFile = new CFileDialog( TRUE,// 種類 TRUE : FileOpen _T("*"),// デフォルトの拡張子 _T("*.*"),// 初期ファイル名 OFN_FILEMUSTEXIST, // ダイアログの設定フラグ:既存のファイル _T("全て(*.*)|*.*||")// フィルタ ); dlgFile->DoModal(); 現在はこのようなコードです。
>最近の豪華なファイル 昔はしょぼかったんだろうか。
MFC使わずにAPI呼んでみ。 ::GetOpenFileName() のほうな。
>>198 Unicodeには結合などがあるから、
例えUTF-32を使っても1文字が1単位で表せるとは限らない。
あと、C++だと規格上wchar_tは独立した型でなければならず、
VC++でも8からそれが既定。7.1でも/Zc:wchar_tで使える。
211 :
デフォルトの名無しさん :2007/12/18(火) 18:35:18
vector<char>とUTF8を使って多言語のクラスでも作ろうか
>>212 よく判らんが、DoModal()を多発してメモリ食い潰すって落ち?
メッセージループの中でDoModalは無謀だろう
>>211 山ほど作り直さないといけない文字列操作系のメソッドが・・・
216 :
176 :2007/12/18(火) 18:48:51
こんな感じです BOOL ***Dlg::PreTranslateMessage(MSG* pMsg) { INT_PTR nChar; if( pMsg->message == WM_KEYDOWN ) { nChar = pMsg->wParam; switch( nChar ){ case VK_NUMPAD0 : // 0 キー nChar = pMsg->wParam; child.SetCode( nChar ); child.DoModal(); case VK_NUMPAD1 : // 1 キー nChar = pMsg->wParam; child.SetCode( nChar ); child.DoModal(); case VK_NUMPAD2 : // 2 キー nChar = pMsg->wParam; child.SetCode( nChar ); child.DoModal(); } return CDialog::PreTranslateMessage(pMsg); } return 0; }
>>216 そういうときは、目的のキーのときはそのまま0リターンして
ダイアログでWM_KEY受け取っては?
bluetoothを使った通信プログラムを組みたいのですが、 なにからはじめればいいかまったくわかりません。 通信系には弱くて、winsockを使ったudp通信ぐらいしかしたことがありません。 ご教授おねがいします
219 :
176 :2007/12/18(火) 19:28:49
>>217 具体的に教えてください、インプリメントしてもらえば更に、理解し易いのですが
>>149 亀レスだけど俺はVisual C++ Express EditionとIE7入れてるけど問題ないよ
SP1も適応してない
すいません C言語を一通り終え、先輩から 「よしじゃあVC++で電卓作ってみようか。Cと変わらないからすぐ出来るでしょ」 とMFCの使い方の本を渡されたんですが、正直全くわかりません。 一体何から学べばいいでしょうか・・・?
電卓はプロでも難しい
電卓舐めたら痛い目見るぜ。 とりあえず整数の四則演算だけ実装してみたら? ダイアログベースで、EditBox一個とボタンをいくつか貼り付ければそれなりの形はできる。 EditBoxにメンバ変数を割り当てる際、値ではなくコントロールにしておくのがコツか?
MFCより前にC++言語を一通りやれ。
Visual C++ 2005 Express EditionってVisuaStudioみたいに「リソースの追加」 で自動でリソースファイルとヘッダファイル作ってくれない? 自分で直接打ち込んで作れってことですか?
>>224 ですよね・・・
coutとかprintf関数と一緒?けど関数の形してないしな とか疑問がすごかったです・・・。
とりあえずC++からやってみます。
今週中に電卓つくってねーとか言われたけど無理だろこれwwwwwww
これ提出すればよろし file://localhost/C:/WINDOWS/system32/calc.exe
C++でCの構文そのまま使えるから 時間があればC++を勉強すればいいけど とりあえずMFCを触ってみたいってだけなら 基本的にCで書いて、MFC独特の所だけ覚えれば良いんでないかい? printfも使えるし。 ま、MFCならprintf使ってもしょうがないけどな。 MFCなら多分コンソールアプリじゃないだろうし。
boostのspiritというものを使えば楽にできるらしいよ
四則演算の電卓を作るだけなら本見ながらやれば1週間でできるだろ ただそれは作った。であって作れるようになった。ではないけど
無理だろ。Cでコンソールアプリしか作ったことないなら、 クラスも知らない、WinAPI も知らない、ウィンドウやメッセージの概念も知らない、 そんな状態で MFC を使わされても 「???」 しか浮かばないだろうぜ
コンソールアプリでも関数電卓になると途端に難しくなる たしかに基本のアルゴリズムに関して覚えるいい勉強にはなったけど・・・ まあ、四則演算だけならできそうだが・・・いきなりMFCとかすごいねw
その先輩は自分のすごさをアピールするために さも簡単そうに言ってるだけだな。 本当は自分も昔苦労したくせに。
とりあえずボタン押したら数字表示する ここまでが第1目標
シェルの実装ができるようになりたい
>>219 ちょっと試したけど、とりあえず問題ないぞ?
問題があるのはその最後に出すダイアログなんじゃないの?
使いまわししてるのか?
初心者ですが質問させてください. WinMainやmainで計算された結果を格納している数値配列を プロシジャーに渡したいんですが何かいい方法がないでしょうか? ちなみに配列は動的に確保しているのでグローバルにするのはできません. 渡すことができれば描画関係はプロシジャーの中でできるのですが・・・
引数にすればいい、、、、ってここでいうプロシジャーは何? ウィンドウプロシージャのことか? メッセージか何かで渡したいなら、WM_COPYDATAがプロセス間でも使える。
>>238 そうです.ウインドウプロシージャです.すいません.
自作メッセージを送るときだけ配列をウインドウプロシージャに渡したいのです.
WM_COPYDATAというのが使えるんでしょうか?少し調べてみます.
ありがとうございました.
218おねがいします
218はスルーでおねがいします
bluetoothなんてVC++では制御できないよねー
さあ?自分で調べれば? 金くれたら調べてやってもいいけど
218と221の扱いの差に吹いたw 可愛そうだからレスしてやるw 確かvistaのSDKだったらwinsock2でいけたはず 詳しいことはわからん、後誰かよろしく
メニューリソースにセパレータを追加するにはどうすればいいでしょうか? 「-」を入れればいいかと思ったのですがだめでした。
すみません。セパレータというチェックボックスがありました。orz
>>239 同一プロセス内だったら、自分で好きなメッセージを作って
それをやり取りすればいいんだよ。
値はWM_APP + nの中から、nは0以上0x4000未満。
a.hとb.hがありそれぞれがそれぞれを参照しているのですが コンパイルエラーになります。 これを回避する方法はあるでしょうか? #include "a.h" #include "b.h" #include "b.h" #include "a.h" どちらにしても、相手を参照しているのが問題のようなのですが 対策がわかりません。よろしくお願いします。
まずはインクルードガードでググレ
>>248 前方宣言でググれ。
まあ設計見直すのが先だな。
VC++2005 Express Edition + Windows SDK + DirectX を使い、 Win32アプリケーションのゲームを作ろうとしている所です。 プロジェクト設定:コンソールアプリケーション アプリケーションの種類:Windowsアプリケーション としてプロジェクトを作成しました。 さて、ここで質問です。この場合にフォームの追加、編集はどのようにすればよいのでしょうか? .NET Frameworkのアプリですと、Borland C++ Builderのような感じで フォームをGUIで編集できるようなのですが、上記のようなWin32アプリでも同じような フォームの編集機能はありますでしょうか? とりあえずプロジェクト作成時に作られたフォームのメニューIDだけはVC++6.0の リソースエディターで編集できましたが、新フォーム追加や呼び出し、 ウィンドウのプロパティの編集などがさっぱりです どなたか同じような環境でやっておられる方、助言下さい。よろしくお願いします。
EEでは無理
>>253 EEでは無理、という事は、逆に言えばStanderd Edition等であれば
Win32アプリケーションであってもフォームのGUIによる編集機能が備わっている、
という事なのでしょうか?
とりあえず、ゲームのオプション設定等ができる別ウインドウをいくつか作れればいいので
特にGUIでのフォーム編集に拘っているわけではないです。
もちろんできるに越したことはないですけれども。
何かしら良いやり方があれば教えてください。
Std以降も、ダイアログエディタとMFC/ATLが付くってだけで、 VC6時代のやりかたとそんなに変わってないよ。
>>255 VC6はインストールはしてあったのですが、何分BCBばかり使っていましたので
VC6時代のやりかた自体がわかっていない状態です
長くなりそうな内容でしたら、何か参考になるページとかありましたら教えてほしいです。
よろしくお願いします
257 :
デフォルトの名無しさん :2007/12/20(木) 00:37:08
VC++ 6.0を使用してます。 初めてサブクラス化に挑戦していて、同じクラス(ボタンとかチェックボックスとか)では成功したのですが、 リストボックスとボタンなどを一緒に SetWindowLong で同じ新規プロシージャ当てると、どちらかが非表示か無効状態になります。 異なるクラス名での同一プロシージャへのサブクラス化は出来ますでしょうか・・・? またその場合、するべき事はどのような事がありますか? VBやMFCを使ったサブクラス化のソースはあるのですが、Win32SDKでのサブクラス化の例が少なくてここにたどり着きました。 どうか助言のほどよろしくお願いします。
>>256 画面が必要なトコをMFCアプリケーションで作ってCreateProcessで起動したら?
DLLでもいいけど
>>257 CallWindowProcでは、それぞれの基のウィンドウプロシージャを呼んでいる?
リストボックスまでボタンのウィンドウプロシージャを呼んでいるなんて事態になっていないか。
260 :
257 :2007/12/20(木) 05:57:09
>>259 なるほど、GetWindowLongはそのためのものだったんですね。
それぞれのクラスのデフォルトプロシージャを取得しておいて、
まとめたプロシージャでクラス名ごとにreturnするCallWindowProを変えたら上手く行きました。
非常に勉強になりました。ありがとうございました。
HTMLのリンクにマウスを持っていったときに指マークになりますが あれはどうやってやればよいでしょうか?
ロードカーソル
CInternetSessionを使う場合は自動的にIEの持っているクッキーを 送信してくれるのでしょうか? それともGetCookieやSetCookieを使って自分でセットしてやる 必要があるのでしょうか?
経路上か鯖側で通信内容確認できないの? そんな状況ならやめた方いいよ
>>264 キャプチャしてみたところついてました。
助かったー
Visual C++ 2005 Express Edition でWindowsアプリケーションを作れないかと調べたら、 Microsoft Windows SDK をダウンロードして設定をいじったらできる、という記述を見つけました。 しかしMicrosoftのホームページを調べてみても、「Windows SDK for Windows Vista」みたいなのしか見つかりません。 XPではこのやり方では無理なのでしょうか?
for Vistaと書いてありますがXPでも使えるという罠です
ありがとうございました、早速ダウンロードしてみます!
今までBorlandC++でコンパイルできてたソースをVC++でコンパイルしてみたら、 ○ 番目の引数を 'char [○]' から 'LPCWSTR' に変換できません。 というエラーが大量に出てきました。 ヘルプで調べて、暗黙の変換をしようとすると出るから明示的に型キャストしろ、 とあったので、 (LPCWSTR)"文字列" という形にしたところほとんどのエラーは消えたのですが、 CreateWindow関数の第二引数だけ、このやり方でも同じエラーが出てしまいます。 文字列を一度char配列に格納して型キャストしたポインタを入れてもだめでした。 どうしてなのでしょうか?
>>269 今のVCはUnicodeがデフォだから。
両方で共通に使いたいならANSIビルドにすればいいし
UNICODEのままでやるつもりなら、_T()マクロとか、TCHAR、LPCTTRとか駆使して書き換え。
あと、とりあえずなんでもキャストすんな。 文字列は、_T("")でくくれ "string" -> _T("string")
272 :
デフォルトの名無しさん :2007/12/21(金) 17:42:33
なるほど、文字コードの違いのせいでしたか。 ありがとうございました。
274 :
デフォルトの名無しさん :2007/12/22(土) 07:37:22
WinXP、VisualStudio2005ExpressEditionです。 パソコンの名前:AAA XPのユーザー名:BBB VisualStudio2005で操作するプロジェクト名:CCC のときに、「CCC.BBB.AAA.user」という名前のファイルがプロジェクトのあるフォルダに勝手に作成されています。 個人情報が漏れそうで怖いんですが、VisualStudio2005で作成した実行ファイルにもユーザー名が埋め込まれていたりしますか? それとも、.userのファイルだけ気をつければパソコンの名前やユーザー名は分からないですか?
わかります
276 :
274 :2007/12/22(土) 09:25:47
作成した実行ファイルを右クリックして見られるプロパティにはユーザー名が含まれていないようでした。 ファイルのヘッダ?みたいな部分に書かれているんでしょうか? 確かめる方法と消す方法を教えてください。 OSのユーザー名は最初に作成したadministrator権限のなので、変更は不可能みたいです。
exeをバイナリエディタで検索かけてもユーザー名は検出されなかったけど
>>275 は適当言ってるだけじゃねーの?
VC++もMFCがあればVBとあまり変わらないんですね。 なんかほっとしました。
?!
デバッグ情報出力するようになってると プロジェクトのフォルダのパスが埋め込まれるから マイドキュメントなんかにいれてるとわかる。
よくわからないんだけど普通のC++とかとVisual C++ってのは違うの??
C++ってのはプログラミング言語の名前。 VC++ってのはC++でプログラムを作成するのをサポートしてくれるソフトウェア。 htmlとホームページビルダーみたいな関係だと思えばいい。
じゃあここはVC++を使ったC++プログラミングスレというわけか、さんくす
ある本を参考にして、勉強しています。 プログラムを開こうとすると、 「Classview情報ファイルにアクセスできません。ClassView 情報を取得できません。」 と怒られるのですが、何が原因なのでしょう? ファイルが読み取り専用から、チェックを外しています。
そのある本とやらを教えろ。話はそれからだ
ClassView情報ファイルを消して、再作成させろ。 *.clwだっけ?たしか。
>>286 有難うございます。
.clw? 等を全て削除。(主ファイルだけ残しました。)
再びVCを立ち上げて再ビルド。
何故か 成功 何故ですか?w
バグが怖いので、最初から作ります。
288 :
デフォルトの名無しさん :2007/12/22(土) 20:09:49
環境 VC++ 6.0 SDK 初めてUnicodeでのビルドに挑戦して文字列操作に悩んでます。 プリプロセッサで _UNICODE 設定し、リンクアウトプットに wWinMainCRTStartup としてメイン関数は wWinMainにしました。 例えば static LPTSTR szAppPath; GetModuleFileName(NULL, szAppPath, MAX_PATH); のようにやると、コンパイルは通るのですが、実行時にデバッグ画面に移ります。 これを TCHAR szAppPath にすると問題有りません。 マルチバイトとワイドバイトの違いとchar周りを調べてるのですが、いまいち理解出来ずに居ます。 助言頂けたら幸いです。
>>288 static LPTSTR szAppPath;
LP〜はポインタ。実質
static wchar_t* szAppPath;
と同義。TCHAR だとコンパイルとおらないと思うんだけど?
static TCHAR szAppPath; ならコンパイルは通るでしょ。ただ1文字分しか領域が無いから落ちると。 static TCHAR szAppPath[MAX_PATH]; でOK
あ、エラーは2行目か
292 :
288 :2007/12/22(土) 21:25:05
分かりづらかったですね、すいません。 そうです、TCHARで配列指定すれば通ります。 LPTSTR指定すると2行目のGetModuleFileName関数で落ちます。
LPTSTRとか訳の分からないものが出てきたら、それを選択してF12押すと正体が見れるよ。
ただ
>>288 はMBCSとかUnicodeとか関係のない、ただのロジックミス。
というか、ぬるぽだろそれは。 実体を確保してやれよ。
wWinMainCRTStartup としてメイン関数は wWinMain みたいないらんことする必要ない
>>292 今までこんなことやったことあるか?
static char *szAppPath;
GetModuleFileName(NULL, szAppPath, MAX_PATH);
297 :
288 :2007/12/22(土) 22:17:50
8bitでの char *szAppPath; と同様ということですね。 初めて16bitを扱うので、ちょっとまだ混乱気味ですが TCHAR szAppPath[MAX_PATH]; にするか、 もしくはAlloc関数などで動的確保すれば自分のやりたい事が出来るという事であってますでしょうか・・・。
別に今まで通り普通に作るだけだろ 今までどうやってたか不思議
サンプル探して真似するだけ 慣れるまでは自分で勝手にコード書いちゃダメ
サンプルがなかなか見つからない
サンプルは簡単に見つかる
Visual C++ (やりたい事) でぐぐれ
Visual C++ アクションゲーム 出てこないよ
いっぱい出てきたよ
305 :
274 :2007/12/23(日) 04:25:21
>>280 プロジェクトのフォルダの絶対パスに、ユーザー名が含まれていなければセーフってことですね。
それならたぶん大丈夫です。ありがとうございました。
VC6のやつ 他にMSDNのサンプルにもある ATL\Include\ATLBASE.H(4934): GetModuleFileName(_pModule->GetModuleInstance(), szModule, _MAX_PATH); ATL\Include\ATLBASE.H(4976): GetModuleFileName(_pModule->GetModuleInstance(), szModule, _MAX_PATH); ATL\Include\ATLBASE.H(5042): GetModuleFileName(m_hInst, szModule, _MAX_PATH); ATL\Include\ATLBASE.H(5925): GetModuleFileName(pM->m_hInst, szModule, _MAX_PATH); ATL\Include\ATLBASE.H(5987): GetModuleFileName(pM->m_hInstTypeLib, szModule, _MAX_PATH); ATL\Include\ATLWIN.H(1353): GetModuleFileName(_Module.GetModuleInstance(), szModule, _MAX_PATH); ATL\Include\ATLWIN.H(1379): GetModuleFileName(_Module.GetModuleInstance(), szModule, _MAX_PATH); CRT\SRC\ASSERT.C(151):if ( !GetModuleFileName( NULL, progname, MAX_PATH )) CRT\SRC\CRT0MSG.C(242):if (!GetModuleFileName(NULL, progname, MAX_PATH)) CRT\SRC\DBGRPT.C(477):if (!GetModuleFileName(NULL, szExeName, MAX_PATH)) CRT\SRC\HEAPINIT.C(92):GetModuleFileName(NULL,env_app_name,sizeof(env_app_name)); CRT\SRC\STDARGV.C(103):GetModuleFileName( NULL, _pgmname, sizeof( _pgmname ) / sizeof(_TSCHAR)); MFC\SRC\APPINIT.CPP(79): VERIFY(::GetModuleFileName(m_hInstance, szBuff, _MAX_PATH)); MFC\SRC\APPUI1.CPP(109): GetModuleFileName(NULL, szAppName, _MAX_PATH); MFC\SRC\CTLLIC.CPP(36): ::GetModuleFileName(hInstance, szPathName, _MAX_PATH); MFC\SRC\CTLREG.CPP(87): ::GetModuleFileName(hInstance, szPathName, _MAX_PATH); MFC\SRC\DLLINIT.CPP(118): GetModuleFileName(m_hModule, szName, _countof(szName)); MFC\SRC\DUMPSTAK.CPP(58): cch = GetModuleFileNameA((HINSTANCE)memoryBasicInfo.AllocationBase, MFC\SRC\FILECORE.CPP(700): ::GetModuleFileName(hInst, szLongPathName, _MAX_PATH); MFC\SRC\OLETYPLB.CPP(75): GetModuleFileName(AfxGetInstanceHandle(), szPath, _MAX_PATH); MFC\SRC\VIEWHTML.CPP(447): if (GetModuleFileName(hInstance, lpszModule, _MAX_PATH)) MFC\SRC\VIEWHTML.CPP(468): if (GetModuleFileName(hInstance, lpszModule, _MAX_PATH))
JPEGの画像を扱いたいプログラムを構想中です。 現在 VC6.0なのですが、難しいですか? 少し検索してみたのですが、VC7.0には 「CImageクラスという便利なクラスが追加されました。」 と言う事なのですが、VC7.0にした方が良いですか? その時の利点と欠点を分かり易く説明ヨロ
何が利点・欠点になるかは作るモノ次第。 他にもlibjpeg、Susie plug-in、GDI+とかいろいろあるから、自分で調べて判断してくれ。
Susieをスーシーって読んでた俺は間違いなくおかしい 友人はスージーと読んでいてよく議論した
むしろスシエって読んでた
CImageあれば使えばいいし、 CImageなかったら作れないものでもないし
DWORD(unsigned long)をprintfなんかで表示する場合 %ul と %lu どっちが正しいの?
>>314 %ulなんてない。%uをlで修飾して、%luが正解だ。
つーか、%ulじゃ単に、%uの後にlが出力されるだけだ。
ありがと
UTF-8の文字列をMS932に変換したいのですが どのような関数がありますでしょうか?
MultiByteToWideChar/WideCharToMultiByteやMLangなど。
Visual C++ 2008 には Snippet 機能はありますか?
有るが大して役に立つものではない
EEですが2005用Snippetどこでダウンロードできますか?
322 :
デフォルトの名無しさん :2007/12/24(月) 14:54:13
デフォルトのコピーコンストラクタと代入演算子が 生成される条件はなんでしょうか? 常に生成されるのでしょうか? もしそうであれば,「浅いコピー」を勝手にしてもらっては 困るなどの場合,両者をあえて宣言だけして 定義せずに private にしておくなどの方法で 明示的に使えなくするしかありませんか? ちなみに IntelliSense には operator== は出てきません. 自分であえて宣言した場合には出てきますが.
>>322 >明示的に使えなくするしかありませんか?
うん
それかboost::noncopyableからprivate派生するという手もある。
あー後、デフォルトのやつはメンバ変数・基本クラスのコピーコンストラクタ/operator=を呼び出すから std::iostreamみたいにコピー出来ないものがあってもコピー不可になる。
MFCでActiveXコントロールを作っています。 それをIEに貼り付けて右クリックイベントを拾ったんですが OnLButtonUp(UINT nFlags, CPoint point) pointに入っている値がどうもコントロール内での位置で これを ClientToScreen(&point)で変換してみたのですが 変換された値が画面上の位置とずれているようです。 画面上の位置を取得するにはどうすればよいでしょうか?
327 :
326 :2007/12/24(月) 18:53:33
すみません。GetCursorPos()で取れました。 いいのかな。こんなやりかたで。
オーナードローボタンを作ってみました。 if( nState & (ODS_FOCUS|ODS_SELECTED) ) { } としてフォーカスと選択状態のときに色を変えるようにしたのですが この他にマウスポインタが乗っているときにも色を変えたいのですが そのような状態を取得するにはどうしたらよいでしょうか?
>>328 TrackMouseEvent 使う。
昔は、WM_MOUSEMOVE でSetCaptureしてたけど、
今はこれ使えるからいいね。
これからVisual C++ 2005 Proを使ってWindowsのGUIアプリを作成しようと思います。 C/C++の知識はあるのですが、CLI等はまだ詳しく知りません。 Visual C++を用いたアプリの作成の経験もありません。 このとき、どのようにしてGUIアプリの制作を始めるのが適切だと思いますか? 1. アプリのフォーム部分のみ.NET Frameworkを使って、 内部の処理はMFCやWinAPIを使ったC++で実装する 2. フォーム部分も内部も全て.NET(CLI)で実装 3. 全てC++とMFCで実装 言語自体が変わってしまう(C++でなくCLIになってしまう).NETはあまり使いたくないです。 ただGUIのデザインはMFCを使ったやり方よりも.NETのフォームデザイナを使用した方が やり易いので、そうい意味で.NETを使うのは魅力的です。 言語をとるか、GUIデザインのしやすさをとるか・・・
というか、NetFrameworkなフォームの内部をMFCで作るって、_でそ。
Visual C++のCLIでWindowsMediaPlayerコントロールを使用してAVIファイルを再生しようと考えているのですが、 参考書の通りに打ち込んでいるのですがビルドに失敗してしまいます。 Ctlcontrols->からのsetModeやpause、playを使用したコードが'WMPLib::IWMPSettings' のメンバではありません。というエラーになり、 WMPLib::WMPPlayState::wmppsPlayingというコードに対して、以下の2つのエラーが発生します。 @'WMPLib' : 識別子がクラス名でも名前空間名でもありません。 A'wmppsPlaying' : 定義されていない識別子です。 何か設定が必要なのでしょうか?ご教授お願いします。
MFCなら間違いはないよ、一応
>>331 クロスプラットフォームなフリーのGUIライブラリでも使ったらいいんでね?
Visual C++6.0,および2005を使っています。 2005で作成したソースコードを6.0に移植したいと思っているのですが、 strcpy_sなどの関数が6.0で使用できず困っています。 バッファオーバーランなどの可能性を考慮すると、安易にstrcpyで置き換える事も出来ません。 やりようによっては、strncpyを使うという手段もありますが、これだとstrcat_sをどうしたら良いか分からなくなります。 素直に、VC6.0でもstrcpy_sや、strcat_sを使いたいと思っているのですが、どうしたら良いでしょうか? 何かしらのSDKをインストールすればいいんでしょうか。 一応、Microsoft .NET Framework SDK v2.0はインストールしてみたのですが、その中にこれらの関数は存在しませんでした。
>>336 COMコンポーネントでタブをチェックしてOKボタンを押しただけで参照は選択していません。
参照で何を追加すればよいのでしょうか?
>>338 どこの操作の話?
ソリューションエクスプローラーからプロジェクトを右クリックして
参照・・・選んで新しい参照の追加選んでCOM選んでWindowsMedia Player 選んでOKってやったの?
>>339 ツールボックス上で右クリックしてアイテムの選択をクリックし、そこからCOMコンポーネントでWindowsMediaPlayerを追加しました。
そこ際、参照というボタンがあったのですがそれは何もしてなかったので。
ソリューションエクスプローラーからという操作はしていません。
341 :
デフォルトの名無しさん :2007/12/26(水) 15:31:04
プリコンパイルドヘッダーって, なければ自動的に作る,あれば使う,ってできませんか? 昔は /YX オプションがあったようなのですが. ヘッダファイル common.h をすべての *.cpp から インクルードしています. common.h にはよく使う ライブラリのヘッダをインクルードし,最後に #pragma hdrstop しています.
>>342 それはやっていなかったので、今やってみたらエラー数が増えました。
よかったね
>337 strcpy_sや、strcat_sなんかたいしたことやってないから 自分で書くかソースコピーして移植
strcpy_sって何ぞ?
>>346 VC2003以前から2005以降にプロジェクトもって行くといやというほどお目にかかれるw
なんか警告対策だっけ、なんだっけ
安全性を向上さしたMS独自の拡張関数。 警告出るけど今まで通りのANCII関数 をちゃんと使えてれば無駄な警告。
ここでstrsafe.hが奇跡の大復活を
>>341 stdafx.h/cppは駄目なん?
/YXは無駄に再作成される事が多く、あまり役に立たなかったので削除された。
たぶん。個人的には無くして正解だと思う。
VC++ 2008 Expで、マネージコードとネイティブコードを混在させて プログラムを作成する方法を教えてください。 プロジェクトはCLR、Win32のどちらで作成するのですか? 具体的にどのようにして2つのコードが識別されるのですか?
Std以上ならCRTのソースも付いてるお
353 :
デフォルトの名無しさん :2007/12/27(木) 05:17:15
VC++ 6.0 SDKです。
半透明ウィンドウを作成しようと色々調べて、
取り敢えずuser32.dllから動的に関数を読み込むやり方までは出来ましたが、
新しい Windows Server 2003 PSDK を入れても SetLayeredWindowAttributes が未定義となってしまいます。
インストールした C:\Program Files\Microsoft SDK\ 以下のlibとincludeフォルダをそれぞれオプションでパス指定しましたがダメでした。
6.0では動的に確保しなければ、6.0以降のAPIは静的に使う事が出来ないのでしょうか・・・?
PlatformSDKは最新のだと6.0に対応してないそうなので、
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm から落として、CoreSDKのみインストールしました。
どうか助言のほどよろしくお願いします。
#define _WIN32_WINNT 0x0500
355 :
デフォルトの名無しさん :2007/12/27(木) 10:23:41
二つのスタティックライブラリ a.lib b.lib があります。 b.lib は a.lib の関数を呼び出しています。 b.lib を使ったアプリケーションを作成するにあたって、 a.lib も b.lib もリンカに指定しなければならないのですが、 b.lib をビルドするときに a.lib の必要なものも 取り込んでしまうということはできるのでしょうか? リンカに「あれがない、これがない」と連鎖的に ないないと言われないようにしたいのですが。 なお、すべて自作のものなのでライセンス上の問題はありません。
>>355 VC++の話だよな?
b.lib 使うときに b.h もインクルードすると思うが、
そのb.h の中に、
#pragma comment(lib, "a.lib")
#pragma comment(lib, "b.lib")
両方入れておけば?
つか、a.hにa.libの設定を入れてb.hでインクルードすればいいか?
あとスタティックリンクなら、両方まとめて1つのlibにするとか・・・
質問させてください. 今,あるプログラム内で_beginthreadにより別ウインドウを作成します.そのウインドウを作成する 具体的な関数(hogeとする)にデータを渡したいので構造体のポインタ(data *a)で渡しています. _beginthread(hoge,0,a)のかたちです. 関数hogeの中でdata *b;を宣言して b=(data *)aにして利用するのはできるのですが, 渡したデータを書き換えたあと(b->member=hogehoge;) もとのメイン関数の中でa->memberの値は書き換わっているのでしょうか? ポインタの基本的なことなんですが混乱してきました・・・ 今のプログラムでは書き換わっていません. どなたかご教授お願いします.
>>358 マルチスレッドでの共有変数の読み書きはタイミングの問題が付きまとうから
ちゃんと同期してやらんといかんよ。
360 :
デフォルトの名無しさん :2007/12/27(木) 11:09:39
変わらない
>>359 おっしゃるとおり同期の問題でした.
メイン関数側に書き換わったのを待つループを入れたら
解決しました.ありがとうございました.
362 :
デフォルトの名無しさん :2007/12/27(木) 22:04:58
質問です。 アニメーションを表示するためのプログラムを詳しい人に書いてもらったのですが 「アニメーション表示。vcproj」(?)というファイルを開いてデバックの開始をすると 「プリコンパイル済みオブジェクトはリンクされていません。イメージは動作しない可能性があります。」 というエラー表示がでます。 オブジェクトファイルというのはもらったファイルの中にあるのですが リンクするとは、どうすればいいのでしょうか? 教えてください。 ちなみに私はまったくC++わからないので 詳しく教えていただけるとありがたいです。
C++わからないならバイナリ貰えよ。 読めないならソース貰っても意味ないし。
364 :
364 :2007/12/27(木) 23:48:57
Visual C++ で「プリコンパイル済みオブジェクトはリンクされていません。イメージは動作しない可能性があります。」というエラーが表示されます。 人にC++を使ってアニメーションを表示するプログラムを書いてもらいました。 もらったファイルの「アニメーション表示.vcproj」というファイルを開いてデバッグ開始をすると 「プリコンパイル済みオブジェクトはリンクされていません。イメージは動作しない可能性があります。」というエラーが表示されます。 調べたところオブジェクトファイルをリンクする必要がある、というところまではわかりましたが オブジェクトファイルと何をどうやってリンクさせるのかわかりません。 しかも送ってもらったファイルの中にはobject fileというものが3つ(AssemblyInfo,stdafx,アニメーション表示)あります。どれを使うのでしょうか? C++についてまったく知識がないので全くわかりません。 出来るだけ詳しく教えていただけたら幸いです。
リビルドで一発じゃね?
>>351 CLRのプロジェクトを作れ。
ソース内で#pragma unmanagedと書くと、そこからアンマネージコードになる。
#pragma managedと書くとマネージコードが始まる。
どっちも現れる前のファイルの先頭はマネージコード。
プロジェクトはWIN32プロジェクトです。 環境はXP VC++2005です。 参考書のリソースの追加という項目を読んでいるのですが、 「ファイル」→「新規作成」の中にリソーススクリプトという選択肢がある、 と参考書には書いてありますが、VC++2005には見つかりません。 代わりにリソーステンプレートを選択してやってみましたが、 "resource.h"が作成されていないため、エラーとなりました。 どうすればこのプロジェクトにリソースを追加することができるでしょうか? よろしくお願いします。
>>367 ソリューションエクスプローラの
プロジェクト右クリック→追加→リソース
370 :
デフォルトの名無しさん :2007/12/28(金) 09:35:34
>>368 PATH 環境変数の変な所に二重引用符が入っているかもしれないね.
>>370 その通りでした。ありがとうございます。
372 :
デフォルトの名無しさん :2007/12/28(金) 19:51:28
普通、テンプレートの定義はヘッダファイルでしますよね。 【hoge.h】 template <typename T> void foo(const T& t) { std::out << t << std::endl; } しかし、T が int と double しかありえないとわかっている場合、 (完全な)特殊化の宣言を翻訳単位に書くことでテンプレートの インスタンスが生成されていました、少なくとも Visual C++ 2005 では。 【hoge.cpp】 template <typename T> void foo(const T& t) { std::out << t << std::endl; } template <> void foo(const int&); template <> void foo(const double&);
373 :
つづき :2007/12/28(金) 19:51:48
Visual C++ 2005 では hoge.h をインクルードしてそのつど テンプレートをインスタンス貸し手もよかったし、 かわりに hoge.cpp をリンクするということもできました。 しかし Visual C++ 2008 では hoge.cpp をコンパイルしても hoge.obj にはテンプレートのインスタンスは含まれません。 コンパイラは「なに実体(定義)のない特殊化してるの?」 と無視するようで、当然リンカは「解決できない参照があるよ」 と怒ります。 この挙動はコンパイラ依存なのでしょうか?それとも何か C++ の標準が変わったのでしょうか?
374 :
デフォルトの名無しさん :2007/12/28(金) 19:57:21
wr
375 :
371=372 :2007/12/28(金) 20:13:31
完全特殊化とインスタンシエーションを間違えてました。 template <> ってなにやってんだよ俺。 正しくは <> いりませんでした。
VS2005EEでコンパイルしたら.exeの他にいろんな拡張子のファイルができるんですが、 .exeを配布するときに同じフォルタにつめなければいけないファイルってどれですか? bccのときは、.exeだけで大丈夫だったんですが
378 :
デフォルトの名無しさん :2007/12/29(土) 09:49:03
小数点を扱うときに ふと思ったのですが、 .NET における System.Decimal みたいな型って、 アンマネージドなVC++に存在するんでしょうか? もし無いならば、精密な小数点計算ではどう対応してるのでしょうか? よろしくお願いします。
379 :
377 :2007/12/29(土) 10:22:35
自己解決しました。何もつめなくても大丈夫みたいでした。
>>378 System.Decimalは、
OLEオートメーションで使われていたDECIMAL型が元になっていると思う。
switch caseのcase内でreturnする際にもbreakをつけたほうがいいでしょうか?
>>381 VCというより、Cの話だな。
当然、イラン
384 :
337 :2007/12/29(土) 15:32:24
>>345 そうですね……似たようなコードを自分で書くことにします。
385 :
デフォルトの名無しさん :2007/12/29(土) 15:34:47
VC++6.0です。 非MFCでモーダルダイアログを作成したいのですが、 DialogBoxとリソースを使わずにCreateWindow(Ex)で作る事は出来ますでしょうか・・・? 拡張スタイルにTOOLWINDOWを使うと、コントロールメニュー無し・タイトルバーあり・閉じるボタンのみありを作れるものの。 タイトルバーが小さな感じになってしまい、他のスタイルを何通りか試してみても、 コントロールメニューが残ったりと再現が出来ません。 マクロと書いてあったので、どうにか出来るかなと思って試行錯誤してますが、どうもこれと言った設定が見つかりません。 助言頂けたら幸いです。
>>145 むちゃくちゃ遅いですが回答ありがとうございました><
>>377 変にオプションをいじっていなければ、exeだけ。
ただし、別途ランタイムが必要。
x64でインラインアセンブラは使えないんですか? まだ対応してないというだけで、新しい2008では使えるんですか?
>>388 使えないよ。
MSは組み込み関数を使えってスタンスなんだと理解してる。
VS2005MFCです カスタムコントロールのサイズを取得する、関数って準備されてない?
393 :
デフォルトの名無しさん :2007/12/30(日) 17:08:00
visual c++ 5.0 express だとメイクファイルのエクスポートってできないんですか? どのバージョンならできます??
VC6.0は少なくともできる。ってか5でもできると思うけど持ってないから何とも・・・
express ???????????????????
396 :
デフォルトの名無しさん :2007/12/31(月) 01:41:41
Visual C++ 2005 Express Editionについて質問します。 昨日始めたばかりで右も左もわかりませんが、よろしくお願いします。 コーディングする時に、スペースを打つと・が表示され、 TABを打つと、→が表示されますが、これを消すにはどうすればいいんでしょうか? 分かりにくかったらすいません、よろしくお願いします。。。
[編集]-[詳細]-[スペースの表示]
398 :
396 :2007/12/31(月) 02:01:36
ググろうにもどうやってググればいいのか分からなくてほんと困ってたんです。
>>397 さんありがとですmm
399 :
デフォルトの名無しさん :2007/12/31(月) 03:08:41
VC2008のExpression Editionで生成した.exeファイルを、開発した計算機以外で実行させるにはどうしたらよいでしょうか? 現状では『アプリケーションの構成が正しくないため・・』というエラーメッセージ表示と共に止まってしまいます。 取りあえずググった結果、2005では 構成プロパティ->ランタイムライブラリ の項を『マルチスレッドMT』にする事で解決できるという記事を目にしたので試して見たのですが、 実行できるようになっただけで、正しく動きません。 (.exeファイルをエントリポイントとした、いくつかの.dllで構成されたアプリケーションなのですが、.exeファイルの機能だけが実行されていて、他の.dllの機能が実行されている様子がない。因みにこれら.dllファイルもマルチスレッドMTで構成しています) これは2008では有効な対処法方ではないのでしょうか?それとも自分が開発したアプリに問題があるのでしょうか? どなたか解決方法に心当たりございましたら、御教授の程宜しくお願い致します。
>400 はスルーしとけ 答えてやってももろくなことはないぞ
402 :
400 :2007/12/31(月) 06:56:31
何か問題ありましたでしょうか・・・
>何か問題 対処法方 心当たりございましたら 御教授の程
>>400 多分、共有ライブラリのバージョンが合つてない。
とりあえずスタティックリンクにすれば直ると思う。
実行ファイルには、単純にDLLのインポートライブラリをリンクしただけなのか、 起動後に動的に読み込ませているのか、はっきりしる。 C++/CLIなのか、MFC使っているのか、そこらへんも全て書け。 >.dllの機能が実行されている様子がない。 何を根拠に?
Visual C++ Express Editionの2008と2005、どちらを使おうか迷っているのですが、 C言語とDirectXの勉強に使うには、2008と2005どちらの方が良いですか。
>>406 どっちも使って使いやすいほうにすれば?その為の無料なんだし
今って2008のExpressってのも出てるのか 知らんかった
409 :
デフォルトの名無しさん :2007/12/31(月) 11:54:52
2005じゃないの、今なら、勉強用なら
>>409 2008は扱いが難しいのでしょうか。
それとも、2005の方が情報が多くて問題解決がし易いという意味ですか。
2005の方が問題解決のヒントが多いのであれば、2005の方を使ってみます。
まあそりゃあ多いだろうよ
勉強していくなら情報が転がってる2005のほうがいいでしょ 2008でやっていくなら自分でその情報を発信する側になるぐらいの勢いないとな
2008はでたばかりだしね
VCって無料(フリー)のソフトですか?
いいえ
機能制限された無料版もあるソフトです
ありがとうございます
Visual C++ 2005 Express Edition、Windows SDKの環境での質問です リソースエディタでタブコントロール付きのダイアログボックスというものを 作ってみたのはいいのですが、これをアプリケーション内で利用するにあたり、 MFC等を使わずに実装する方法がよくわかりません 別のダイアログを貼り付ける、みたいな話はあるようなのですが 実際どのようにコーディングするのかがわからないのです タブコントロール実装のためのコーディング手順などを教えていただきたいです 長くなるようでしたら、このあたりがわかるようなサイトなどありましたら教えて下さい よろしくおねがいします
知ってるけど教えようがない
コーディング手順ってのもまた珍妙な語だな、考えてみると
だいたいはプロパティシートを使うんじゃないの。
MFC等を使わずに実装する方法がよくわかりません
タブはボタンみたいなものだよ ボタン押した時に何をするかは作る人の勝手だし、 タブで何をするも作る人の勝手
424 :
418 :2007/12/31(月) 17:51:23
質問の仕方が悪かったでしょうか? 普通にリソースエディタでタブコントロールを追加したダイアログボックスを ただDialogBox()関数で呼び出しても、何もない四角が表示されるだけなのですが、 これを選択できる状態にするには具体的にどういった手順を踏めばよいのか、 別のダイアログボックスを貼り付けるにはどうすればよいのかが知りたいです。 よろしくお願いします。
426 :
418 :2007/12/31(月) 19:52:13
>>425 ありがとうございます
そのサンプルだとタブコントロールの作成自体が自前だったので多少混乱しましたが
GetDlgItem()でリソースエディタで作ったタブのハンドルを取得する事で
項目追加については解決しました
そちらのソースを見た感じだとタブ用のウィンドウの上に後からボタンを作っているようなのですが、
リソースエディタ上でタブの上に見えるようにボタンを配置し、それを表示非表示で切り替えたり
する事はできないのでしょうか?
手動で作るか、別のダイアログを固定位置の子ウィンドウとして呼び出すとかしかないでしょうか
そりゃ、ShowWindow(GetDlgItem(**),SW_HIDE)とか駆使しればできるだろうけどさ。 ダイアログエディタが混雑するぜ。
MSDNて使いにくいね。 特にC言語やC++言語の標準ライブラリの調べにくさはC++Builderのヘルプの比ではない。
429 :
418 :2008/01/01(火) 15:17:20
ダイアログをタブコントロールの子ウィンドウとして呼び出して なんとか実装できました どうもありがとうございました
VC関係のサイトを回っていると、何の説明もなく throw "あいうえお"; みたいな記述を良く見るのですが、これはどういう意味なのでしょうか? プログラムを実行させるとランタイムエラーメッセージが出て処理が止まるのはいいのですが たとえば配布したプログラムでこのthrowが呼び出されてしまったときに、 この"あいうえお"という文字列は、何をもって確認するのですか?
>>430 VC以前の問題。
throwって知ってる?
おおもと(mainとか)でcatchしとくんだろ。 char*を投げるのはあんまし感心しないけど。
正直throwというのが良くわからないです この場合どういう効果があるのでしょうか ランタイムエラーメッセージが出る時にthrowで送られた情報が そのメッセージの中で見られるのかと思ったのですが、見られないのですか?
throwはC++の機能、try/chatchあたりでも勉強してくればいい 当然の如くVCには全く関係ないから
char*とか、std::exception継承クラスならともかく、かってな ユーザオブジェクトを投げられたら、いずれにせよランタイムは 情報を出すことが出来ないからなー。
throw知らね、って言ってる人には分かる内容じゃないだろうな。
437 :
デフォルトの名無しさん :2008/01/02(水) 09:12:15
・XPでパスワードLOOK中かどうか判断する方法(ctrl + del + altのあれ) わかる方お願いします。ヒントだけでも結構です。
スロー(throw)だけじゃなくてスルー(through)も一部では需要ありそうだなw
MSDNのLockWorkStationの解説より >There is no function you can call to determine whether the workstation is locked
440 :
デフォルトの名無しさん :2008/01/02(水) 15:38:52
結局,関数の宣言の際に例外仕様ってつけるべきなんですか?
宣言関係ないと思うが、、、仕様どおりでおk 誰が作って誰が使うかによってかわるし、こうしろという決まりごとはないよ。
>>440 が言ってるのって、
void hoge() throw()
見たいなのじゃないの?
C++FAQ第二版で例文がそう記述されてて、
試してみたら(コンパイラに言われたんだか誰かに言われたんだかネットで見たんだか定かでない)けど
「古い記述方法」
という感じだった。 凄くうろ覚えでゴメン。
443 :
デフォルトの名無しさん :2008/01/03(木) 05:48:25
>>442 そう.それ.
例外仕様を頑張って記述したところで,例外仕様の部分って
関数の型としては扱われないし,何かつけてて意味あるのかなって.
444 :
デフォルトの名無しさん :2008/01/03(木) 17:20:05
別スレから、こちらに書き込みます。 リソースの編集したいのだが、 RCの中から、そこいらのヘッダをインクルードしてるファイルだと フリーソフトではエラーが出て読み込めない。 どうしたら良いですか? あきらめたほうが良いですか?お金はびた一文も出しませんので お金がかからない何か良い方法はないでしょうか?
テキストファイルだから手動でコピペするだけ
447 :
デフォルトの名無しさん :2008/01/03(木) 23:26:43
自分はプロジェクトのプロパティ(コンパイルオプションとか) をプロジェクトごとに指定することはあまりやらなくて, あらかじめ用途ごとの vsprops ファイルを作っておいて 組み合わせて適用しているのですが,そうすると プロジェクトごとに最初から指定されているオプションがうざいです. デフォルトで全部「親から継承」に簡単にすることってできないんでしょうか?
C++/CLIでファイルから特定の文字列を検索する部分なのですが、 C++/CLIのStringクラスのCompare(ryメソッドでは、 完全一致は探すことができたのですが、部分一致を探し出すことができませんでした Cのstrstr関数やC++STLのStringクラスのfindメソッドのような、 文字列から文字列を探すことのできる、C++/CLIのクラスメソッドはないのでしょうか?
>>448 単にオーバーライドを見つけられていないだけな気もするけど、一応。
ファイルの内容が全てメモリに収まる程度という前提なら、
内容をSystem::Stringに全部押し込んだ後で、System::String.IndexOfか?
System::Text::RegularExpressions辺りで一気にやるほうが楽かもしれん。
450 :
449 :2008/01/04(金) 21:44:22
オーバーロードだった orz
451 :
448 :2008/01/04(金) 22:20:11
>>449 すぽーんと見落としてました・・お恥ずかしい
読み込むのはファイルの一部だけなので、IndexOfで大丈夫そうです
どうもありがとうございました
構成プロパティの文字セットをUnicodeを使用するにした状態で int _tmain(int argc, _TCHAR* argv[]) { _tprintf( _T( "testあいうえお" ) ); _gettch(); return 0; } というような感じでコードを書いたのですが、 abcまではDOS窓に表示されるんですが、あいうえおが表示されません Unicodeだとどうすれば日本語も表示されるようになるのでしょうか? ちなみにマルチバイト文字セットにすると上手く行きます できるだけマルチバイトでもUnicodeでも正常動作するようにしたいのです _Tで囲むことで期待通りの表示になるかと思ったのですが… よろしくお願いします
あ、abcではなくてtestでした_| ̄|○よろしくお願いします
>>453 本当に表示されてるのはtestだけなんだな? その後に何も表示されてない?
>>454 えーと、入力待ちのカーソルが、間隔を開けずにtestの真横に表示されます
文字化けしてでるとかもないです
setlocale
>>456 ありがとうございます。こんな感じでいいのでしょうか?
一応あいうえおの表示はされたのですが、何か弊害などはありますか?
int _tmain(int argc, _TCHAR* argv[])
{
_tsetlocale( LC_ALL, _T( "Japanese_Japan.932" ) );
_tprintf( _T( "testあいうえお" ) );
_gettch();
return 0;
}
CLRのSystem::Windows::Formsクラスを使用するWindowsアプリケーションでは、 処理は全てFormクラス内のメソッドにまとめるものなのでしょうか? WinAPIでのWindowsアプリケーション作成もしたことがないので、混乱しています・・
好きにしなさい
>457 そういうプログラムなら標準Cで作った方が汎用性が高いから そんな見苦しいことやって喜んでるのはお前ぐらいだと思う
マジですか もはや時代はユニコードだと思っていたのですが違うのですか?
462 :
デフォルトの名無しさん :2008/01/05(土) 10:17:10
自己完結しているアプリなら言語は関係ないだろ ウェブとか、多言語つかうならユニ
VC++の_t系はWindows APIとの整合性を取るためのものだと俺は思っている。
464 :
デフォルトの名無しさん :2008/01/05(土) 14:23:23
COM の BSTR は MBCS ですか? Unicode ですか? もしくはそういうことは COM の規格の範囲外のことですか?
COMの規約ではどうなっているかしらないが、 Win16ではMBCS、Win32以降はUTF-16 (x86ならリトルエンディアン)。
466 :
デフォルトの名無しさん :2008/01/05(土) 14:57:05
>>465 API でいえば hogehogeA と hogehogeW の話ですよね?
主要な COM コンポーネントでも二種類の
インターフェイスが用意されていると思ってたんですが,
そうではないのでどうしたものかなぁ,と.
しかしよく考えたらたとえば MSXML が XML 文書を
受け取るのも BSTR なわけで,その時は文字コードに
よらずなんでも受け取るのだから BSTR は文字コード
を限定しないなにか(32ビットで領域のサイズが
明示的に前置された何か)だと思うことにします.
>>457 寝てたわ・・・
プログラムよりも、デフォルトで開くコンソールのコードページの問題だからねえ。
猫本見ながら何度もやってるんですが、画像を表示するところで詰まってます>< ビットマップをrcに変換し LoadBitmapでインスタンスハンドルを取得するところでエラーが出ちゃうんですが 正しい手順教えて下さい>< switch(msg){ case WM_PAINT: hdc = BeginPaint(hWnd, &ps); hBmp = LoadBitmap(hInst, "IDB_BITMAP1"); GetObject(hBmp, (int)sizeof(BITMAP), &bmp_info); w = bmp_info.bmWidth; h = bmp_info.bmHeight; hdc_mem = CreateCompatibleDC(hdc); SelectObject(hdc_mem, hBmp); BitBlt(hdc, 0, 0, w, h, hdc_mem, 0, 0, SRCCOPY); //描画 DeleteDC(hdc_mem); DeleteObject(hBmp); EndPaint(hWnd, &ps); break; C:\temp\a.c(102) : error C2065: 'hInst' : 定義されていない識別子です。 C:\temp\a.c(102) : warning C4047: 'function' : 間接参照のレベルが 'struct HINSTANCE__ *' と 'int ' で異なっています。 C:\temp\a.c(102) : warning C4024: 'LoadBitmapA' : の型が 1 の仮引数および実引数と異なります。 cl.exe の実行エラー 開発環境はVisualC++6.0です
>>468 > C:\temp\a.c(102) : error C2065: 'hInst' : 定義されていない識別子です。
470 :
468 :2008/01/06(日) 02:31:52
ありがとうございました hInstを宣言したらエラーが消えました。 でも画像が表示されない><
宣言しただけかよw サンプル丸写しして出直して来い
せめてhBmpがまともかチェックくらいしたら たぶん、"IDB_BITMAP1" を MAKEINTRESOUCE(IDB_BITMAP1) にすればいいとは思うが・・・
C++/CLIで作ったリストボックスの項目にツールチップ表示をさせる方法ってありませんか? ググってもMFCとか他言語ばかりで・・
>>469 hInstっつーのはそのアプリケーションのメイン関数 _tWinMain()の
引数で渡されているHINSTANCE型の引数のことだよ
これはそのアプリケーションに一つしかないものだから
グローバル変数にでも保持しておいて使えばいい
477 :
468 :2008/01/06(日) 16:01:38
>>471 さん
サンプルまる写しで出来ないんです><
>>472 さんのやりかたでやっても画面が真っ白のままでした><
プロジェクトフォルダの中身を覗いたらScript1.rcのサイズが2kbなんですけど
ちゃんとビットマップ画像入ってないのかと思ってダブルクリックしてみたところ
VisualC++が立ち上がって
Script1.rc
│
Bitmap
└IDB_BITMAP1
ってなってるんですけど問題無いですよね?
ちゃんと#include <windows.h>の下に
#include "resource.h"は書いてあるんです><
>>474 さん
Cコンソールの時にやったコマンドライン引数みたいな解釈でいいですか?
猫本にはインスタンスハンドルとしか書いてなかったのでよくわからないまま読み進めてました><
VS2005でWin32プログラムをデバッグで開始すると問題なく実行できるんですが、 Debug Release問わずデバッガ無しで実行すると途端に --------------------------- cppwin.exe - アプリケーション エラー --------------------------- "0x00000000" の命令が "0x00000000" のメモリを参照しました。メモリが "read" になることはできませんでした。 プログラムを終了するには [OK] をクリックしてください プログラムをデバッグするには [キャンセル] をクリックしてください --------------------------- OK キャンセル --------------------------- で落ちてしまいます。 どういう事なんでしょうか。自殺すればいいんでしょうか。
はい、よく分かってらっしゃる
そんな殺生な。 もう2005が出てから2年以上経つんですから デバッガなしだと表面化するバグがどういうものかくらいの情報はあるはずです。 教えてください。
>>478 デバッガで落ちてそうな所を見つけるしかないんじゃね?
MFC使ってるのなら、AfxCheckMemoryとかが有効っぽいケースに見えるけどな。
>>480 デバッガを疑いたい気持ちは痛いほどわかるが、デバッガのせいじゃないと思うよ。
>>481 落ちそうな所も何もデバッガ付きならちゃんと意図したとおりに動いてくれるんですが・・・。
>>483 例外ダイアログからデバッガを起動できるから、起きた場所を特定しよう
とりあえず変数を初期化せずに使ってるんじゃね
>>477 hBmpはいくつだったんだよ
0ならいつまでたっても絵は出ないぞ
試しに
>>468 のまるまるコピーして
IDB_BITMAP1版(MAKEINTRESOURCE使用)と"IDB_BITMAP1"版どっちも
ビットマップ表示できてるけど
487 :
486 :2008/01/06(日) 17:02:46
hInstはInitInstanceでグローバル変数に格納してるVC++が作ったソースのまま 一応念のため
>>483 int *a;
a = NULL;
:
どっかでメモリ確保
:
if( a )
{
// aのメモリが確保されていた時の処理
}
とかやって落ちている気がするよ
デバッガ使うと何もしなくても変数が0初期化されてる事が多い
あ、しまった
a=NULLしたら正常動作するなw
>>488 のa=NULLを飛ばしてる気がする
491 :
468 :2008/01/06(日) 18:57:43
hBmpに正しく数値入ってるかどうか調べるために、表示させようと思ったんだけど Printf使えないから試行錯誤で頑張って見たけど HBITMAP hBmp; BITMAP bmp_info; RECT rc; int w, h; char *szStr="a"; DRAWTEXTPARAMS dtp; switch(msg){ case WM_PAINT: hdc = BeginPaint(hWnd, &ps); hBmp = LoadBitmap(hInst, "MAKEINTRESOUCE(IDB_BITMAP1"); szStr = BITMAP.bmWidth; //hBmpの情報をszSTRに代入 SetTextColor(hdc, RGB(0, 0, 0)); //szStrの中身を表示 DrawTextEx(hdc, szStr, -1, &rc, DT_WORDBREAK | DT_EXPANDTABS | DT_TABSTOP, &dtp); (110) : error C2275: 'BITMAP' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。 よくわからないエラーが…変数の表示ってどうやるの?(´;ω;`)ブワッ
まさかブレイクポイントも知らないんじゃないだろうな
VC++のスレだから、当然デバッガ使える環境だと思ったんだが
>>491 hBmp = LoadBitmap(hInst, MAKEINTRESOUCE(IDB_BITMAP1));
こうな。
そんでコンパイル通る状態にして、この行の次にカーソル移して
F9押してF5押してとまったらhBmpの上にマウスのポインタ置いてみな
>>491 あのさー、型名と変数名の違いぐらい勉強してからこいよ
BITMAP 型名
bmp_info 変数名
君ははっきり言って基本的な知識がなさすぎる
まずはコンソールでCの勉強から始めなさい
496 :
468 :2008/01/06(日) 19:53:43
大学の課題で締切が迫っておりのっぴきならない状況なのでもう少し質問させてください><
ブレイクポイントは初めて聞いたのですぐに調べて
>>494 さんのやり方で出来ました。マウスを載せたら型名と変数のHBITMAP hBmpが表示されて
エラー内容はa.obj : error LNK2001: 外部シンボル "_MAKEINTRESOUCE" は未解決です
Debug/a.exe : fatal error LNK1120: 外部参照 1 が未解決です。
って出ました><
>>495 さん
半年前にやったCコンソールの本で構造体の部分読み返してみます><
ごめんよ、 MAKEINTRESOURCE こうね。
498 :
468 :2008/01/06(日) 20:07:37
エラーが消えたけど画面がすごく・・・白いです><
>>468 のソースで、hInstさえ正しい値を与えれば表示されるっしょ。
501 :
デフォルトの名無しさん :2008/01/07(月) 10:31:24
VS2005 C++のテキストエディタの画面で、 タブキーや、スペースコードが →や・マークで表示されてしまう様になってしまいました。 何かのキーを触ったら偶然そういう設定になってしまったのですが、 戻し方が解りません。どなたか教えて下さい。
>>501 超FAQだと思ったが、ここのテンプレはわからなかったので、、、
編集 - 詳細 - スペースの表示 (Ctrl+R, Ctrl+W) で
503 :
501 :2008/01/07(月) 11:24:14
>>502 ありがとうございました。無事元に戻りました
504 :
デフォルトの名無しさん :2008/01/07(月) 19:23:12
VS2005 で手元のプロジェクトをコンパイルするときに WINVER not defined. Defaulting to 0x0502 (Windows Server 2003) という warning が現れます。 出力ウインドウを見ていると、.cpp ファイルの時にはこれが現れ、 .c ファイルの時には自動的に WINVER を設定しないようで現れません。 どこでファイルタイプを判別して動作を変えているのでしょうか。 また、なぜこのような違いが出るようになっているのか教えてください。
標準Cライブラリのヘッダしかインクルードしていないから。
MFCを使ったいろいろな例文が載っているサイトないでしょうか?
>>506 ぐぐればいくらでもあると思うが……
例えば、こんなのでいいのか?
tp://athomejp.com/goldfish/
509 :
デフォルトの名無しさん :2008/01/08(火) 00:37:11
vc++ 2005と 2008の違いを教えてください
バージョン
2005年に出たのが2005、2007年にでたのが2008
2005って2004年じゃなかったか?
どっちでも良いじゃん
515 :
デフォルトの名無しさん :2008/01/08(火) 15:23:44
入力したwaveを、エフェクトをかけ出力するプログラムを 作りたいのですがそのようなプログラムの作り方を解説するサイトってないでしょうか? ググッてみたものの出てきませんでした。 当方『windowsサウンドプログラミング』の本を読んで、 そのまま出力するプログラムは出来ています(サンプルプログラムw) 環境VC++6.0 何か書いている途中にスレチな気がしてきましたがよろしくお願いします。
SDKのサンプルになかったっけ? DirectX使いたいのかな?
>>515 その本にはWAVデータの詳細が載っているんじゃないかい?
どのデータが何を意味しているかさえわかれば、
あとはそのデータをいじってから出力すればいいだけだ
518 :
515 :2008/01/08(火) 17:55:34
>>516 レスありがとうございます。
SDKとは何でしょう?すいません無知もいいとこで…
DirectXを使ったほうが楽なのでしょうか?
>>517 レスありがとうございます。
それがあんまり載っていなくて、
というか私の勉強不足かも知れないんですが…
ど素人なもんでいじり方がどういじってよいやら…
うん、君にはまだ早いんじゃないかな
#defineした単語の表示色を変えることはできますでしょうか? オプションのフォントと色を見てみたのですがそれらしい項目が見つからなくて。
WAVの波形をいじるだけだからVCとか関係ない 方程式書いて計算するだけ
523 :
デフォルトの名無しさん :2008/01/09(水) 08:16:34
今までListBoxへのD&Dは、WM_CREATE後のDragAcceptFilesに失敗してても上手く行きましたが、 エディットコントロールへのD&Dが上手く行かなくて困っています。 MessageBox でテスト確認してみたら WM_DROPFILES メッセージを送ってないようなのですが、 これはサブクラス化するしか方法は無いのでしょうか・・・? リストボックスでは出来てエディットボックスでは出来ないのは何故でしょうか・・・? ご教授よろしくお願いします。
ひとつのウインドウにリストボックスとエディットボックスを配置して リストボックスにドロップしたらファイル名 エディットボックスにドロップしたらファイルの内容を表示 みたいにやってるけど特に問題なく動いてる
525 :
523 :2008/01/09(水) 10:06:21
もしかして同じ種類のコントロールが複数ある場合はサブクラス化しなきゃダメということでしょうか。。 複数のコントロールでD&D使い分けてるのはDragQueryPoint使ってるのかな・・・。 一応CreateWindowExでWS_EX_ACCEPTFILES指定して、 D&Dの際にはカーソルも変わるんですが、上述の通りWM_DROPFILESで何も起きません。 ちなみに、どのコントロールがアクティブ状態でも共通キー処理したいために、 全てのコントロールを一つのプロシージャにサブクラス化しています。 当然、このプロシージャではWM_DROPFILES動作は出来ました。 (ただし、リストボックスで上手く行く他のソースではメインウィンドウプロシージャでWM_DROPFILES受け取ります)
作成時に親ウィンドウorコントロールにメッセージを関連付けるような設定がなかったっけか
親ウィンドウで受けてもいいし、コントロールで受けてもいいし、 サブクラス化してもいいし、サブクラス化しなくてもいいし、 どれでもお好きなように
528 :
デフォルトの名無しさん :2008/01/09(水) 22:02:32
試しにリストボックスを適当な場所にCreateWindowExで作って観たところ、 (WS_EX_ACCEPTFILES | WS_EX_CLIENTEDGE + WS_CHILD | WS_VISIBLE | LBS_EXTENDEDSEL | WS_HSCROLL | WS_VSCROLL,) 親ウィンドウへ通知するスタイルを指定しなくても WM_DROPFILES メッセージが送られました。 逆に、リストボックスで上手く行く方のソースでエディットボックスを作って同様スタイルにしてもダメでした。 D&D可能にしたいエディットボックスは WS_EX_ACCEPTFILES | WS_EX_CLIENTEDGE, + WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_VSCROLL | WS_HSCROLL, のようなスタイルで作成してます。 最初に書くべきことでしたが、環境は VC++ 6.0 です。リソースではなく一つずつCreateしてます。 エディットボックスとドラッグ ドロップでググって観たら似たような症状が幾つか観られたんですが、 サブクラス化以外でリストボックスのように親ウィンドウでの処理という仕方がどうしても見つけられませんでした。
VC++6.0とVC++2005は何が違うんでしょう
531 :
デフォルトの名無しさん :2008/01/10(木) 00:00:52
すいません、基本的な質問かもしれませんが‥ C言語でファイルを保存するととき(fprintfでいいんですが) testというフォルダに保存したいのですがどうすればよろしいでしょうか? フォルダはあります。 (例えば、sample,txtというファイル) PCの環境はwindowsです よろしくお願いします
ファイル開くときにそのフォルダ指定すればいいだけ ただしアドレスの\は\\にすること
533 :
デフォルトの名無しさん :2008/01/10(木) 00:07:58
\\test\\sample.txt みたいな形ですか? 一度試してみます
ごめんVCとC/C++スレ隣通しにしてたから勘違いしてた・・・ VCやったことないけど試してみて><
535 :
デフォルトの名無しさん :2008/01/10(木) 00:14:19
すいません、ありがとうございました。 test\\sample.txtみたいな形でやれば上手いことできました。 ありがとうございます
VC++2005 Standardです。 リンク中に 「fatal error C1001: コンパイラで内部エラーが発生しました。」 というエラーが出るので困ってます。 __m128 x = _mm_set_ps1(y); と書かれたところが問題のようです。でも、Debugビルドだと問題なくコンパイルできます。Releaseの場合のみエラーが出てきます。 __m128 x = {y, y, y, y}; とするとReleaseでもコンパイルできたりします。 原因がまったくわからないのでお手上げなんですが・・・
エラーの起きる最小限のプログラムに削って調べてみる。それをup
539 :
デフォルトの名無しさん :2008/01/12(土) 12:33:54
VisualC++2008ExpressEditionを今日から使い始めました 1つのソリューション内に複数のプロジェクトがあり、ソリューション内の あるプロジェクト(コンソールアプリ)から同ソリューション内の他のプロジェクトをインクルードディレクトリに指定する場合 どのようにすればスマートですか? プロジェクトをコンソールアプリで作成すると構成プロパティのツリー内に 「C/C++」という項目が出てこない為、推移的に「追加のインクルードディレクトリ」という項目もありませんでした コマンドラインの-I ../hogeを使うのかなと思いましたけど、どこに追加すればいいのやらで 初歩的過ぎで申し訳ありませんがご教授の程お願いします。
タスクバーのメニューを消して、タスクトレイにアイコンを表示させるものを作っています。 タスクトレイのアイコンをダブルクリックした際に、ウィンドウを表示、ウィンドウをトレイへ格納の動作をつけたいと思うのですが、 処理が分かりません。 どーいった関数、処理の流れになるのか教えて下さい。 また、参考になるサイト等もあれば教えて頂きたいと思います。宜しくお願いします。
なんでググらないんだろう
■回答するにあたって ・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。 (MSDNのどの項目だとか、何のキーワードでGoogleするとか)
>>539 [ファイル]-[新規作成]-[プロジェクト]
[Visual C++]-[全般]
空のプロジェクト
でコンソールアプリを作成してるけど
[プロジェクト]-[xxx のプロパティ]
[構成プロパティ]-[C/C++]-[全般]
追加のインクルードディレクトリ
が見えてる
544 :
539 :2008/01/12(土) 16:44:51
>>543 資料を見ながら作っていたのですがその手順の通りだと
あたかも最初から表示されているようにかかれてましたがソースファイルが1つも無いプロジェクトには
どうやらC/C++の項目が表示されないようになっているようです。
1つ適当にファイルを追加した後表示される事が確認できました。
有り難うございました。
ググって分からないから書いてんだろ? キーワードもうまく見つけられないんだろうな
beginthreadで開始したスレッドが終わらないうちにプログラム本体をPostQuitMessageで終了すると、 デバッグ時の出力ウィンドウに cppwin.exe の 0x77d0f450 で初回の例外が発生しました: 0xC0000005: 場所 0x25a5fd54 を読み込み中にアクセス違反が発生しました。 cppwin.exe の 0x77d0f450 で初回の例外が発生しました: 0xC0000005: 場所 0x25a5fd54 を読み込み中にアクセス違反が発生しました。 と表れるんですが、どうすればアクセス違反が起こらないように終了できるんでしょうか。
>>546 子供に自殺要求を出して、その死水を取ってから自殺してください。
VC++ 2005 でisNaNを使った関数を使用するためには ソースコード中に using namespace System と書けばいいのでしょうか?
>>548 isnan()でよければそんなことを書く必要はありませんが。
>549 どうもありがとうございます デバッグかけるとソースコード中の track_box.angle = !isnan(theta) ? (float) -theta : 0; のところで、 error C3861: 'isnan': 識別子が見つかりませんでした と表示されてしまいます…コードがいけないのでしょうか?
_isnan()
>551 うまくいきました!ありがとうございました
デバッグ?って実行しようとしてその前のコンパイルでのエラーか・・・
554 :
デフォルトの名無しさん :2008/01/14(月) 22:31:41
_inran()
Visual C++ 2005でdirectx9.0でプログラミングしています。 プログラムは動くのですが、終了時に スレッド 'Win32 スレッド' (0x654) はコード 0 (0x0) で終了しました。 スレッド 'Win32 スレッド' (0x98) はコード 0 (0x0) で終了しました。 スレッド 'Win32 スレッド' (0x424) はコード 0 (0x0) で終了しました。 スレッド 'Win32 スレッド' (0x2e0) はコード 0 (0x0) で終了しました。 スレッド 'Win32 スレッド' (0x65c) はコード 0 (0x0) で終了しました。 スレッド 'Win32 スレッド' (0x4c0) はコード 0 (0x0) で終了しました。 スレッド 'Win32 スレッド' (0x4d8) はコード 0 (0x0) で終了しました。 スレッド 'Win32 スレッド' (0x4b0) はコード 0 (0x0) で終了しました。 スレッド 'Win32 スレッド' (0x4a0) はコード 0 (0x0) で終了しました。 スレッド 'Win32 スレッド' (0x23c) はコード 0 (0x0) で終了しました。 と大量に同じようなメッセージが出力されます。 これは異常なのでしょうか?
異常です
ウイルス
大量に出るのは異常だという根拠があるのなら異常です。
>>556 スレッドを作った覚えはあるかどうか。
心当たりが無ければ、実行中に中断させて、デバッグ-ウインドウ−スレッドでスレッドの一覧が出るので、何のスレッドか調べてみよう。
561 :
556 :2008/01/16(水) 21:57:04
どうやら音関係の初期化で出てるみたいなんですけど、 //パフォーマンスの作成 CoCreateInstance(CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC, IID_IDirectMusicPerformance8, (void**)&g_pPerformance ); とするとエラーが大量に出てしまうようです。 おかしな所あるでしょうか?指摘お願いします。
感染してるとそうなる
悪いことは言わない、DirectMusicには手を出さない方がいい 超えられない壁がある
(BBSを使うのは)難しい
XP(SP2) VC++6.0 MFC ダイアログベースです。 画像をランダムに表示させたいのですが、どうすればいいでしょうか?
rand()に時間でもかけて使えばいいと思います
ランダムじゃないところまではできてるのなら、それを晒してみ。
568 :
565 :2008/01/18(金) 21:42:25
randで自己解決しました。 表示させる枚数も少ないので…。 ご迷惑をおかけしました。
自己解決
向きを持ったキャラクタを回転させたいんですけど、 3D空間での単位ベクトルの回転ってどうしたらいいですか? 回転といったら行列を掛ければいいとおもったんですけど、ベクトルは3元なので どうしたらよいかわかりません。
ゲーム製作板にでも行け
>>570 ・単位マトリクスを用意
・用意したマトリクスの平行移動成分にベクトル値を入れる
・回転マトリクスと乗算する
>>573 やってみたら出来ました。
ありがとうございます。
しかし、z軸の+の方からみた時は上手く動くのですが、
逆を向いた時に上下が反対になってしまいます。
D3DXMatrixRotationYawPitchRoll(&m_mat,
D3DXToRadian(yaw),
D3DXToRadian(pitch),
D3DXToRadian(roll) );
として回転行列作っているんですが、pitchの回転が上手くいきません。
調子に乗るなよカス ここはVCのスレだ
576 :
デフォルトの名無しさん :2008/01/19(土) 11:55:55
strcpyとか使うと出る例のwarningが、 #define _CRT_SECURE_NO_DEPRECATE 1 ってやっても出たまんまなんですけど、 なぜだか分かりますか? (#pragma warning(disable:4996)は効きます)
ヘッダのインクルードより先に書いている?
578 :
デフォルトの名無しさん :2008/01/19(土) 12:13:16
>>577 ありがとうございました。
解決しました。
自作のヘッダーの方では、ライブラリのinclude前に
あったのですが、mainの方ではそのヘッダーをライブラリよりも
あとから呼んでました。
もしかして、
このdefineはmainのあるcppの頭にだけ
書けばよいものなのでしょうか?
ふつうは、コンパイルオプションに仕込むけど
Visual C++ってフォームデザイナ付いてんの?
>>580 [ファイル]-[追加]-[新しいプロジェクト]
[Visual C++]-[CLR]
Windows フォーム アプリケーション
でプロジェクトを作成すると使えるみたい
582 :
デフォルトの名無しさん :2008/01/19(土) 15:00:17
C++ とうか C++/CLI だけどね.
583 :
デフォルトの名無しさん :2008/01/19(土) 18:30:45
クラスの中で+演算子(などを)定義した際、一時的に、 newで何かを作ったとします。 (こんな感じ?) type* tmp = new type[num];。 で、その何かは(何らかの処理後) その演算子定義のreturnで使いたいとします。 return CLASS_X(tmp_s); このとき、tmpのdeleteはいったい どこで行ったらよいのでしょうか? (deleteなしで作成後、実行しても動いてはいる? のですが、たまたまのような気がして心配なので)
584 :
デフォルトの名無しさん :2008/01/19(土) 18:32:07
訂正 誤:return CLASS_X(tmp_s); 正:return CLASS_X(tmp);
>>583 tmpの型をboost::scoped_array<type>にでもすればいい。
>>583 CLASS_X()の戻り値を変数に保持してからtmpを解放
で、returnで保持した変数を返せばいい
ちなみに
>>583 でも動くだろうが、呼び出す毎にどんどん空きメモリが減っていく
フォームでよければexpressにもついてる
590 :
デフォルトの名無しさん :2008/01/19(土) 19:31:40
>>585 できればboost以外でお願いしたいのですが。
>>583 operator=()の中でnewする必要がある状態ってのがよく分からない。
自動変数の値返しじゃダメなのか?
ソース提示可能なら提示よろ。
deleteしなかった場合は587の言うように当然メモリリークしていくぞ
標準C++の話なら他所でやれ
>>590 std::vector<type>
&tmp[0]のようにすれば、先頭要素へのポインタも得られる。
594 :
583 :2008/01/19(土) 19:48:07
>>591 ありがとうございます。
簡単に言えば文字列の足し算なんですけど、
newしないでできるのでしょうか。
(当方初心者です)
friend Mojiretsu operator+=(const Mojiretsu& moji1, const Mojiretsu& moji2) { // +演算子
int tmp_nagasa = moji1.nagasa + moji2.nagasa ;
char* tmp_moji = new char[tmp_nagasa+1];
mojicpy(tmp_moji,moji1.s);
mojicat(tmp_moji,moji2.s);
return Mojiretsu(tmp_moji);
}
595 :
583 :2008/01/19(土) 19:51:06
>>586 ありがとうございます。(前後してすいません)
こんな感じでしょうか。
friend Mojiretsu operator+=(const Mojiretsu& moji1, const Mojiretsu& moji2) { // +演算子
int tmp_nagasa = moji1.nagasa + moji2.nagasa ;
char* tmp_moji = new char[tmp_nagasa+1];
mojicpy(tmp_moji,moji1.s);
mojicat(tmp_moji,moji2.s);
char* tmp2_moji = tmp_moji;
delete tmp_moji;
return Mojiretsu(tmp2_moji);
}
一応、動きましたが、tmp2_mojiの先が解放されちゃってて
これも心配なんですが、大丈夫なのでしょうか。
596 :
583 :2008/01/19(土) 19:54:04
訂正 正:mojicpy、mojicat 誤:strcpy、strcat
最近マジデ、どのプログラムもつまんないんですが、どうしたらいいですか? 責めて、C++で鬱病から逃れたいんですが
598 :
583 :2008/01/19(土) 19:59:39
>>592 すいません、この質問が終わったらよそに行きます。
見逃してください。
ここC++スレじゃないってば VCスレ
>598 見苦しいから汚いコード貼らないでくれる?
601 :
591 :2008/01/19(土) 20:05:37
602 :
583 :2008/01/19(土) 20:08:15
>>601 すいませんです。
そちらに行きます。
お邪魔いたしました。
最近は、プログラムってFPGAとかのハードプログラムが面白い罠
3週間完全マスターVisual C++ 6.0 1版1刷(日経BP社)を図書館で借りたのですが、、、 どっかに、正誤表とかはないんですか?
605 :
デフォルトの名無しさん :2008/01/20(日) 01:25:08
607 :
デフォルトの名無しさん :2008/01/20(日) 12:10:01
デバイスコンテキストを使用しててどうも前に進めません。 新しくトップにウィンドウ(タイトルバー無し)をポップアップして、 そこにテキストを表示するというものなのですが、 一定以上の大きさを制限するために、一旦デバイスコンテキストに描画したものをStretchしたいのですが、 それ以前にCreateCompatibleDCでメモリデバイスコンテキストにDrawTextしてから BitBltでウィンドウにそのままSRCCOPYしても真っ白なままです。 hDC = GetDC(hWnd); hMemDC = CreateCompatibleDC(hDC); GetClientRect(hWnd); DrawText(hMemDC, szText, -1, &rec, DT_WORDBREAK); BitBlt(hMemDC, 0, 0, rec.right, rec.bottom, hDC, 0, 0, SRCCOPY); のような感じで、取り敢えずウィンドウの大きさそのままに描画してもダメでした。 これが DrawText(hDC, szText, -1, &rec, DT_WORDBREAK); に置き換えると、ちゃんと描画されます。 プロポーショナルフォントを使っているので、ウィンドウサイズに合わせてポイントを変えるとずれてしまうので、 設定したフォントのまま縮小出来れば、、と試行錯誤してますが、デバイスコンテキストの描画の時点で止まってしまってます。 助言どうかよろしくお願いします。
608 :
607 :2008/01/20(日) 12:12:20
すいません、一行書き間違えしました。 >BitBlt(hMemDC, 0, 0, rec.right, rec.bottom, hDC, 0, 0, SRCCOPY); →BitBlt(hDC, 0, 0, rec.right, rec.bottom, hMemDC, 0, 0, SRCCOPY);
CreateCompatibleDCでググれ。 メモリDCはビットマップを割り当てないとまともに使えない。
610 :
デフォルトの名無しさん :2008/01/20(日) 16:37:28
2008/01/20 現在での最新のVisualC++ のバージョンは何でしょうか?
マイクロソフトの公式でも池よカス
>>611 いっぺあってどれがどれやらワケワカメなんだよボケェ
体系的に整理されていないと頭にインプットされねーんだよウンコ
2008じゃないの?
614 :
デフォルトの名無しさん :2008/01/20(日) 17:00:35
まずなにしたらいいですか
>>614 オナ・・・というのは置いといて
Hello world を表示だな
>>614 コーヒーを用意し
服を脱ぎ
コーヒーに塩を入れ
裸体のまま一気に飲む
>>614 void main()
{
printf( "Hello world!!\n" );
}
これを動かしてみ?
できるかな?
できるかな?
>>614 なんで手に入れたんだよ
ワレズか?
違法だからやめとけお勧めしないから違法なんだよ
619 :
デフォルトの名無しさん :2008/01/20(日) 17:47:26
>>609 更に調べてみたら、どうにか作りたい形に近づきました。
hBmp = CreateCompatibleBitmap(hMemDC, rec.right, rec.bottom);
SelectObject(hMemDC, hBmp);
のようにしてから、DrawText, StretchBltをhMemDCに出力したところ、反映されたのですが、
テキストの埋まってない余白部分が黒くなってしまいます。
HBITMAPやCreateCompatibleBitmapで調べてるのですが、どうも背景を白く塗りつぶす事が出来ず・・・。
SelectObject(hMemDC, hBmp);
に関してはメモリデバイスコンテキストとBITMAP領域をリンクした状態にするという感じでしょうか・・・?
DrawTextやStretchBltは呼べるのに、何故FillRectを呼ばないのかと
>>619 DrawText()とか使うなら、SetBkColor()やSetBkMode()を覚えましょう。
622 :
デフォルトの名無しさん :2008/01/21(月) 00:46:43
Visual Studio 2005 でリビルド ↓ ========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ========== リビルドがすべて正常に完了しました ↓ デバッグする ↓ ダイアログで 「プログラム×××.exeは開始できませんでした。」 と表示され、デバッグできません。 何のエラーメッセージも表示されないのですが 心当たりのある方いますか?
624 :
619 :2008/01/21(月) 04:30:52
>>620-621 レスどうもです。SetBkColorは書き忘れただけで、書いてました。が、ダメでした。
FillRectは完全に盲点でした。。存在すら知らなかったもので、試した所、上手く行きました。
本来はマスクかけたりとか色々やるべきなのかもしれませんが、
取り敢えずテキストを白背景に黒で表示という目的は達する事が出来、ありがとうございました。
質問です。 タスクトレイのアイコンから最小化、元のサイズの処理をしているんですが、 最小化は ShowWindow(hWnd,SW_MINIMIZE); ShowWindow(hWnd,SW_HIDE); で、出来るんですが、下のサイズの処理をした時に、ウィンドウがアクティブにならず、他のものに隠れて後ろに表示されてしまいます。 処理は ShowWindow(hWnd,SW_RESTORE); ShowWindow(hWnd,SW_SHOW); と書いているんですが、これのどこがいけないんでしょうか?
そのへん、いろいろあるんで似たような目的のAPIや引数をいろいろ試してみるといい。 まあ、SetForegroundWindowを併用するのが確実かなあ
>>626 レスありがとうございます。
一応、SetForegroundWindowやSetWindowPosを使って最前面に表示する事が可能なのは確認しましたが、
普通のウィンドウとは動作が違っちゃうんですね。
上記のものだと、関数が発行された時は確かにアクティブなんですが、そのあと後ろのウィンドウを消したりすると、
自分のプログラムが最背面になってしまいます。
自分の作ったウィンドウをmy、その他のウィンドウA、Bとあるとすると、
アクティブ順位が1:A、2:Bの状態から1:my、2:A、3:Bになり、AやBを最小化すると、
1:A(B)、2:myになってしまいます。何故か分かりますか?
628 :
デフォルトの名無しさん :2008/01/21(月) 11:05:56
visual c++ 2008 express editionでgeocoderja.dll内の関数gcjDbLoadを使うプログラムを書いています。が、エラーが出てしまいます。 dllを扱うには動的リンクと静的リンクがあるというところまではわかり、とりあえず動的リンクで試そうとしているんですがどうにもわかりません。 かなり低脳なので申し訳ないのですが、解決法を教えてください。 [ソース] #include "stdafx.h" #include <stdio.h> #include <windows.h> int _tmain(int argc, _TCHAR* argv[]) { typedef int(__cdecl* _gcjDbLoad)(char *, int); HINSTANCE hDll = LoadLibrary("geocoderja.dll"); int func = (int)GetProcAddress(hDll, "gcjDbLoad"); char *path = "C:/Documents"; int loadLevel = 4; int retCode = func( path, loadLevel FreeLibrary(hDll); return 0; } [エラー] ------ ビルド開始: プロジェクト: geocoderja, 構成: Debug Win32 ------ コンパイルしています... geocoderja.cpp c:\documents and settings\de\デスクトップ\geocoderja\geocoderja\geocoderja.cpp(16) : error C2064: 2 引数を取り込む関数には評価されません。 ビルドログは "file://c:\Documents and Settings\DE\デスクトップ\geocoderja\geocoderja\Debug\BuildLog.htm" に保存されました。 geocoderja - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
引数はいろいろやったの? SW_SHOWNORMAL とか
SW_SHOWNORMALならRESTOREなんてやる必要ない
631 :
628 :2008/01/21(月) 11:16:12
>>629 早速レスありがとうございます。
SW_SHOWNORMAL??
動的リンクのサンプルを見ながらちょこちょこいじってきたんでよくわかりません。
すみません・・
typedef int(__cdecl* _gcjDbLoad)(char *, int); イミフメイ
>>628 何を聞いてるの?
もともと間違いはあちこちあるけど、そのエラーは
>int retCode = func( path, loadLevel
この行が途中までしか書いてないから出るんだよ。
>>631 ShowWindow()の引数だよ
それ一つあればSW_RESTOREもSW_SHOWもいらない
>>628 geocoderのことは知らないが
> typedef int(__cdecl* _gcjDbLoad)(char *, int);
↑のように書いたのなら
>int func = (int)GetProcAddress(hDll, "gcjDbLoad");
の行は
_gcjDbLoad func = (_gcjDbLoad)GetProcAddress(hDll, "gcjDbLoad");
と書かないと意味無くないか?
>>631 629-630はその前の質問に対するものだろ。
636 :
628 :2008/01/21(月) 11:28:52
すみません訂正です。書き込みの際に消してしまったようです。
[ソース]
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
typedef int(__cdecl* _gcjDbLoad)(char *, int);
HINSTANCE hDll = LoadLibrary("geocoderja.dll");
int func = (int)GetProcAddress(hDll, "gcjDbLoad");
char *path = "C:/Documents";
int loadLevel = 4;
int retCode = func( path, loadLevel ); //エラーが出てる行
FreeLibrary(hDll);
return 0;
}
[エラー]
c:\documents and settings\de\デスクトップ\geocoderja\geocoderja\geocoderja.cpp(13) : error C2064: 2 引数を取り込む関数には評価されません。
>>632 その行が意味もわからず見よう見まねで書いたのでよくわからないんです・・
>>634 ShowWindow()は使ってないのですが、関連があるんですか?無知ですみません・・
>>636 俺が悪かった
ShowWindowは君の質問とは一切関係ないw
638 :
635 :2008/01/21(月) 11:33:36
>>636 >int retCode = func( path, loadLevel ); //エラーが出てる行
エラーの出てるのはその行だろうけど
原因は635で書いたところにあると思うよ。
意味が分からないなら「関数ポインタ」について調べてみ。
639 :
628 :2008/01/21(月) 11:42:21
>>637 完全に勘違いしてました。すみません。
>>635 635さんの言うように
int func = (int)GetProcAddress(hDll, "gcjDbLoad");
を
_gcjDbLoad func = (_gcjDbLoad)GetProcAddress(hDll, "gcjDbLoad");
にするとうまくビルドできました!
関数gcjDbLoadも使えているようです。
ありがとうございます!
>>638 とりあえず動作するようにはなったみたいなのでいろいろと調べてみます。
ありがとうございます!
SW_SHOWNORMALも試しました。
ShowWindow(hWnd,SW_SHOWNORMAL);
でも、
>>627 に書いた通りの動作になってしまいます^^;
ShowWindow(hWnd,SW_SHOWNORMAL);
SetForegroundWindow(hWnd);
でも同じです。
うちじゃそうならないから、キミのとこの環境がおかしいのかもね
何で出来ないんですかねぇ; もうちょっと試行錯誤してみます。ありがとうございました。
Windowでプロジェクト全検索してみれば? どっかでアホな事やってるんだろう
Visual Basicにはちゃんとしたスレはないの? 変な流れのネタスレしかないお。
VB(笑)
澄んだ目で見れば、ネタスレなどない。
>>644 サイトが充実してるから2ちゃんでやらんでいいやろ
VisualStadio2005を使っています。 コンパイルオプションにdefineを追加するのはどうやったらいいのでしょうか。 #define _CRT_SECURE_NO_DEPRECATE 1 #pragma warning(disable:4312) #pragma warning(disable:4996) 上記のをソースに書かず、オプションに追加したいんですが、 プロジェクト→〜のプロパティ→C/C++→コマンドラインの中に書くのでは違うのでしょうか? どこに、どう書いたらいいのか分かりません。 分かる方お願いします。
>>648 コマンドラインに書いてもいいけど、VC++でやるなら普通は
プロパティのC/C++ - プリプロセッサの「プリプロセッサの定義」
あー、あとpragmaのほうは同じく C/C++ - 詳細の「指定の警告を無効にする」
出来ました。ありがとうございます。
Visual C++とかVBの如くバカにされたときの反応を教えろ。(・∀・)
スルー
そうなんだーって言う
655 :
デフォルトの名無しさん :2008/01/23(水) 01:42:39
Visual Studio.NET 2003でWin32のプログラムを作りました。 Visual Studio上でデバッグ起動することはできるんですが、 使ってる画像などを含めて、他のPCで動かすためのexeファイルを作るには どうすればいいんでしょうか? 解説してるサイトなどあったら、教えてもらえませんか。
exe作らずデバッグできるほどVC++は器用じゃない
Release版の話?インストーラーの話?
>>656 Debugフォルダにexeができてました。
画像を同じフォルダに入れたら動きました。
>>657 インストーラの作り方もできれば知りたいです。
exeファイルにアイコン画像をつける方法とかも。
すごく基本的なことだから少し勉強すればすぐわかると思う
リソースエディタで検索
>>660 ?????????????????????????????????????????????
662 :
デフォルトの名無しさん :2008/01/23(水) 16:25:10
DirectShowを用いて二つのカメラからの信号をそれぞれサンプルグラバフィルタを使用して入力し、 RGB情報をカメラごとの配列に入れて画像処理で用いたいのですが、なかなかうまくいきません。 どのようにすればいいか、ご教示願えませんでしょうか。
tbs
tbs
666 :
655 :2008/01/23(水) 23:25:43
>>659 基本的なことなら、もう少し自力で調べてみます。
667 :
デフォルトの名無しさん :2008/01/24(木) 19:54:53
VC++2002 MFC で CFormViewにリストコントロールを配置しています リストコントロールの幅や高さ等を取得したいのですがうまくいきません コントロールのサイズを取得する方法を教えてください
668 :
デフォルトの名無しさん :2008/01/24(木) 20:13:28
自己解決しました
VARIANTとCStringの変換について教えてください。 下記のようなコーディングで問題ないでしょうか? //VARIANTからCString CString hoge = newValue.bstrVal; //CStringからVARIANT CString hoge = "hoge"; vaResult.vt = VT_BSTR; vaResult.bstrVal = hoge.AllocSysString();
それでいいけど、VARIANTからCStringへは、 単にCString hoge = newValueでいけるはず。 あと場合にもよるけど、CComVariant (ATL), COleVarinat(MFC)もよろしく。
671 :
デフォルトの名無しさん :2008/01/25(金) 20:59:51
プロジェクト内のファイルのファイル名を変更する 簡単な方法があれば、教えてください。現在は次の 方法でファイル名を変更しています。 (Visual C++6.0です。) (1) プロジェクトからそのファイルをいったん除外する。 (FileViewでファイルを選択し[編集]→[削除]) (2) エクスプローラでファイル名を変更。 (3) そのファイルをプロジェクトへ再度追加する。 [プロジェクト]→[プロジェクトへ追加]→[ファイル]
>>671 (1)の後、エクスプローラで操作しなくても、
(3)の追加時にファイル名変更すればいい。
673 :
671 :2008/01/25(金) 21:17:46
俺メモ ShowCursor()関数は単純に表示のON/OFFを切り替えるものではない 表示カウンタという意味不明なカウンタを持ってるらしく ON/OFF切り替えるには同じ回数だけtrueとfalseをセットする必要がある 氏ねよMS('A`)
MSDN見ずにAPIを叩いてはいけないという例。 >Parameters bShow >[in] Specifies whether the internal display counter is to be incremented or decremented. >If bShow is TRUE, the display count is incremented by one. >If bShow is FALSE, the display count is decremented by one. >Remarks >This function sets an internal display counter that determines >whether the cursor should be displayed. The cursor is displayed >only if the display count is greater than or equal to 0.
流石にそれで氏ねは可哀想だろ。 とはいえ、自分で使うとしたらラッパ書いて単純トグルにしてしまいそうだけど。
677 :
デフォルトの名無しさん :2008/01/27(日) 02:53:52
FileViewのツリーの中でファイルはファイル名の順に 並ぶようですが、この順序を変更することはできるでしょうか? Visual C++6.0です。
>>675 VSとJaneDoeStyleとブラウザ開いたら重すぎてMSDNなんて見れない、というか見たくない。
そんなにヘボPCなのかw
昔は描画するときにマウスカーソル消して描いてたからな。 カウンタはあって当たり前の必須機能だったな。 今だとカーソル消すなんてよほどのことじゃないか?
>>679 メモリが256MiBもあってCPUの速度も2GiHz超えしているという、
世界初のコンピュータとは比べ物にならないほどの高い性能を持ち合わせた俺のマシンが唸る!
>>680 エロゲで数秒たったらカーソル消すのは必須機能だよ
ああ、今は動画とかで消しっぱにするってことか ウィンドウのカーソルを見えないやつに差し替えじゃあかんのかな? ゲームは自前カーソルが多い気がするから、別の話か。
プログラムは無事に完成しリリースビルドしたのですが、 コンパイル済み実行ファイルをテキストエディタ等で開くとエラー時に表示するメッセージや 読み込むファイル名がそのまま見えてしまいます これはセキュリティ上よろしくないと思うのですが見えなくする方法はあるのでしょうか?
自分でリソースに定義したやつだったら好きなように暗号化できるだろ
それが見えて何か困ることでも? まあ隠したいんならテキストを圧縮するなり文字コードに 無駄な数字を足すなりなんなりとすればいい
そういえば昔exeの中からパスワード探したりしてた 今はネットで探せばたいてい見つかる
パスワードを探す用途って何?
689 :
デフォルトの名無しさん :2008/01/30(水) 14:25:22
>>684 どうせエラー時に表示するんなら隠す必要もないのでは?
あと開くファイル名なんてFilemonでも使えばすぐ分かる.
昔の雑誌に掲載されていたアドベンチャーゲームとかは暗号化してたな。 あれは打ち込む人=プレーヤーだからなあw
VC++6のコンソールアプリケーションで、Ctrl-Cをトラップすることはできますか?
ごにょぼにょする時じゃーねの?
>>691 SIGINTのトラップのことなら、SetConsoleCtrlHandler
シギント
695 :
デフォルトの名無しさん :2008/01/30(水) 20:26:58
C++で 気温 : ○○℃ 湿度 : ○○% 風速 : ○○(m/s) という複数行のパラメータを上書き表示するにはどのようにすれば宜しいのでしょうか? 一行だと"\r"を使ってできたのですが。。。 教えて君で申し訳ありません(>_<) void show() { cout << "気温 : " << a << "\r" ; cout << "湿度 : " << b << "\r" ; cout << "風速 : " << c << "\r" ; } とすると全て上書きされて一行しか表示できませんでした・・・。
\rを\nに
複数行だと、ANSI.SYS組み込み+エスケープシーケンス、 もしくはAPI直呼び出しでもしないと駄目だと思う。
コンソールAPI使えばいいんじゃねーの?使った事ないからしらんけど。
先輩の方々に質問です。 Visual C++ 2008 Expressをインストールして、 mfcのプログラム(サンプルプログラム diblook)をビルドしたのですが、 afxwin.hが見つからないよエラーとなってしまいました。 2008 ExpressにはMFCがついていないんでしょうか?
はい
Expressにはついてないよ もしついてたから誰も有料のやつ買わないでしょ
>>701 修正
Expressにはついてないよ
もしついてたら誰も有料のやつ買わないでしょ
703 :
デフォルトの名無しさん :2008/01/31(木) 18:36:36
リストコントロールについて質問です。 レポート形式で、カラムヘッダにツールチップを表示したいのですが可能でしょうか? 可能であれば、やり方をお聞きしたいです。 よろしくお願いします。 VC.NET、MFC使用です。
>>700-702 ありがとうございます。
言われてみればそうですね。商売にも使えるわけですから
どこの企業も買わなくなっちゃいますね。
仕方ないのでWin32 Apiでしこしこ書くことにします。
705 :
sage :2008/01/31(木) 23:16:08
VC++2005ExEditionのWindowsフォームを使って簡単なアプリを作っているのですが ある程度行数のある文字列をForm内に出力したいのですがどうしたらよいでしょうか? イメージとしてはDOS窓みたいなものを作りたいのですが・・・どうかご教授お願いします。
706 :
デフォルトの名無しさん :2008/01/31(木) 23:34:40
適当にプロパティをいじる。
VC++2008 Expressを使って、コマンドラインベースのプログラムを作っています。 実行時の実行プライオリティ設定したいのですが、どの関数を使えばよいのでしょうか?
708 :
デフォルトの名無しさん :2008/02/01(金) 16:00:45
>>704 もうこのさいだから C++/CLI でフォームアプリにしちゃいな!
//ChildView.cpp //winmm.libにリンクする #pragma comment(lib,"winmm") ・・・ void CChildView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。 PlaySound("WinXP_Startup",NULL,SND_RESOURCE | SND_ASYNC | SND_LOOP); CWnd::OnLButtonDown(nFlags, point); } PlaySound関数を使いたいのですが、上記のようにコーディングすると error C2065: 'SND_RESOURCE' : 定義されていない識別子です。 error C2065: 'SND_ASYNC' : 定義されていない識別子です。 error C2065: 'SND_LOOP' : 定義されていない識別子です。 error C3861: 'PlaySound': 識別子が見つかりませんでした とコンパイルエラーがでてしまいます。 どのようにすればエラーがでなくなるか、教えていただけないでしょうか。
#include <MMsystem.h> かな。 WIN32_LEAN_AND_MEANでもいいがMFCだとよくわからん
>707 SetPriorityClass( GetCurrentProcess(), REALTIME_PRIORITY_CLASS ); みたいな?
>>707 プロセス単位なら、startコマンドのオプションでもいけるよ。
テンプレートの有用性と使い道がイマイチ理解できません
いやいや、テンプレートの本質はそこじゃないだろう。 テンプレートの有用性が知りたければboostのソースを嫁。
716 :
デフォルトの名無しさん :2008/02/03(日) 01:08:22
OpenCVをWindows form Applicationで使うための設定の仕方を教えてください。 環境は、Visual c++ 2005 Express Editionです。 ビルドのエラーを解決できなくて困っています。 VCの使い方が間違っていることが原因っぽいのですが・・・ エラー 1>c:\program files\opencv\cxcore\include\cxtypes.h(212) : warning C4793: '__asm' : 関数 'int cvRound(double)' 用にネイティブ コードの生成が発生します 1> c:\program files\opencv\cxcore\include\cxtypes.h(205) : 'cvRound' の宣言を確認してください。
先日ここで2008 ExpressにMFCがあるか聞いたものです。 Win32を使ってコンソール型のコマンドが完成したのですが、 やはり画面をつけてあげたいなと思っています。 Win32で画面を作るのは敷居が高そうなので(リソースエディタがないなど) 他によい方法があれば採用したいのですが、どんな仕組みがあるんでしょうか。 CLIってのがそうなのかな?心配しているのは、ランタイムパッケージやら DLLをごっそりインストールすることにならないかなんです。 単純な機能のツールをネットで配布するんで、できれば身軽に、余分なものは なしでいきたいんです。そんなわたしにぴったりの何かはあるんでしょうか? 長文失礼しました。
718 :
デフォルトの名無しさん :2008/02/03(日) 08:48:07
無名 delegate とか Lambda 式とか見てると C# がうらやますぃ. それでも C++ から離れられない俺はどうすればいいですか? boost::lambda でしょうか? C++09 を待てばいいのでしょうか? C# の yield とかもうらやますぃ. LINQ は微妙.なれればいいんだろうな.
>>717 画面はdelphi 6 personalで作ればおk
簡単に作れてランタイムもいらない。開発環境は無料。
Visual Sturdio.NET 2003でWin32プログラムをデバッグ実行すると、 出力に 'aaa.exe': 'C:\WINDOWS\system32\XXX.dll' を読み込みました。シンボルが読み込まれていません。 というメッセージがたくさんでるんですが、これは何なんでしょうか? ググると問題無いと書いてたんですが、できれば出ないようにしたいです。
無理
gcc用で配布されているコードを, VisualStudio2005でコンパイルしたところ, エラー 1 error C2143: 構文エラー : '{' が ':' の前にありません。 c:\program files\microsoft visual studio 8\vc\include\cmath 18 エラー 2 error C2059: 構文エラー : ':' c:\program files\microsoft visual studio 8\vc\include\cmath 18 といった無数のエラーが出ました. ちなみにcmathはインクルードしておらず, #include<stdio.h> #include<stdlib.h> #include<math.h> #include<complex> だけです. どなたかアドバイス頂けませんでしょうか? C/C++スレでも質問書いたのですが, こっちのスレの方が適切なようでマルチポストさせて頂きました.
>>722 cmathを直接includeしてないけれども
complexの中でcmathがincludeされてるからなぁ。
で、エラーの原因はその情報だけじゃ分からない。
C2143やC2059はエラー出力に表示されている箇所よりも
前の場所での構文ミスで出ることもあるから。
他の場所で'}'の閉じ忘れなんてのも原因になりうる。
もしかしたらとは思うが、拡張子が.cになっているんじゃないかな?
そうなら.cppに変えたらうまくいく可能性が高いな。
>>720 該当のDLLをリンクからはずせば出なくなると思うけど
必要になったらまたリンクからはずせばいい
ごめん 必要になったらまたリンクからはずせばいい →必要になったらまたリンクすればいい
シンボル入れとけばいい
727 :
722 :2008/02/03(日) 17:15:59
>>723 拡張子変えたらこのエラーは解決しました!ありがとうございます!
別のエラー出たのでまた頑張ります.
>>722 コンソールプロジェクトを作って放り込んでるんなら
stdafx.hをインクルードしないとダメかも
じゃなきゃプリコンパイル済みヘッダーを使用しないにするか
うわ、恥ずかしい><もう解決してたのね
730 :
デフォルトの名無しさん :2008/02/03(日) 19:21:19
インクルードガードは#pragma onceでしょうか? それとも#ifndef HOGOHOGE_H_IS_INCLUDEDでしょうか?
#pragma onceって標準の仕様なのか?
標準規格には含まれていないが、 現在は殆どのコンパイラで通るようになっている。gccも。 今は、対応を気にせずに使える段階に入ってるんじゃないかな。
よくVisualStudio自体の機能かな、で、デバッグ機能が強力だーとか聞くんですが 詳しく解説しているページとかないでしょうか? ブレイクポイントっていうのがそこでストップするっていうのはわかってたりするんですが それの使いどころが判然としなかったり、他の機能に関してもそうです
つ ステップ実行 ウォッチウィンドウ等で変数の中身を確認しながら実行すれば、 論理的なエラーを発見するのに死ぬほど役立つ。 呼び出し履歴を併用すれば、変数の状態も追いかけ放題。
ちうか、733は「デバッグ」をどのようにやればいいのかが そもそも明確に判ってないような気がする。
プログラマ歴20年だけどデバッグ機能ってほとんど 使ったことない。
733とは違うが自分もデバッグ方法やVSのデバッグ機能の使い方を知りたいな よい書籍やサイトないですか?
あんまり自慢にならんね、それは。
739 :
738 :2008/02/03(日) 21:30:48
740 :
733 :2008/02/03(日) 21:49:54
>>734 ループ部分とかループ回数分確認し続ける、とかなりそうですね・・・
使いどころが難しそうだ
>>735 バグ取りくらいの認識なんで、エラーの行見て修正
論理的なところは紙に全部書きだして直してます
>>740 ループを抜け出たいなら、ちょうど出た所にブレイクポイントをかけておいて
通常実行をすればいい
あと気をつけないといけないのは、DebugモードとReleaseモードの違いね
Releaseの場合は、普通はコードが最適化されるので、その都合上
デバッガで追いかけられない場合がある
その場合はDebugモードに戻して再実行すること
742 :
733 :2008/02/03(日) 22:42:26
>>741 なるほど、それなら便利そうです
まだそういった作業が必要なレベルのものを組んだことがないんで実感が沸かなかったのかな・・
ありがとうございました
743 :
733 :2008/02/03(日) 22:43:15
うわあげちゃったごめんなさいorz
744 :
デフォルトの名無しさん :2008/02/03(日) 23:41:33
visualc++2005express editionをインストールしているんですが、今visualc++2008express editionがでてるじゃないですか。 なので2005をアンインストールして、2008をいれたほうがいいのでしょうか? それと2005と2008の違いを教えてください。
VCEEについては、そんなに変更はなかったんじゃないかな。
新しいものが好きなら2008 安心を得たいなら2005
iostream系の日本語の処理が、2005はおかしかったって話だけど。
locel
>>736 自分の書いたものしかデバッグしないの?
20年前か、、CodeViewで衝撃受けたころかなー
デバッグ使えない奴はバグの原因が自分のコードか他人のコードか確認できないから バグを他人のせいにしやすい。
printfならいっぱい入れるけど
752 :
デフォルトの名無しさん :2008/02/04(月) 12:29:02
誰かご存知だったら教えてください。 VS2005のVC++でWin32ベースのDLLを作成しました。 その後セットアッププロジェクトで レジストリの編集を行うところで戸惑っております。 すでに存在する、複数行文字列値(REG_MULTI_SZ)の値に ある文字列を追加したいのですがセットアッププロジェクト上には 複数行文字列の項目がみあたりません。 セットアッププロジェクトのレジストリ編集では 複数行文字列の値を操作できないのでしょうか? いい解決方法などご存知の方、どうぞよろしくお願いします。
ここ初心者スレですけど
754 :
752 :2008/02/04(月) 14:01:06
すみません、、、スレを改めます。 失礼しました。
学ぼうとする姿勢がある限り人はずっと初心者だってばっちゃが言ってた
REG_MULTI_SZで検索
char buff[256]; for (int i=0; i<sizeof(buff); i++) { printf("%c", buff[i]); } をもっと速くなるようにチューニングしたいのですが どのような方法がありますか?
>>757 それは遅いのか?
本当に?
ちゃんと最適化しても問題になるほど遅いのか?
OK!
それなら、取り敢えずputchar(buff[i])ではどうだろうか。
buff内にナル文字がないことが保証されているのなら、printf("%.256s", buff)でいいね。
760 :
757 :2008/02/04(月) 18:27:20
>>758 ありがとうございます。
とりあえずputcharにしました。
速くなった気はしないでもないです。
>>759 困ったことにナル文字があります。
761 :
100 :2008/02/04(月) 18:31:14
先日まで動いていたプログラムを実行したところ、 リソース(ダイアログ)が表示されなくなってしまいました。 原因が全く分かりません。 エラー、警告ともに0です。 実行できていたときから修正などは一切していません・・・何が原因でしょうか? どなたかお分かりの方、お教えて頂けないでしょうか><
>>760 斯くなる上は、fwrite(buff, sizeof(buff), 1, stdout)だ。
# 変わらんと思うけどねぇ。
>>760 sizeof(buff)を変数に移して使った方が速いんじゃないかな
>>763 sizeof(buff)は定数だから心配なし。
>>761 それだけじゃエスパーじゃない限り返答不能です。
ダイアログ呼び出し前後のソースを公開してください
質問です。最小化の動作って、指定した座標などに向かって動作させられますか? 可能ならどんな関数を使えばいいか教えて下さい。お願いします。
>>764 そうなん?てっきり値が変わらなくても毎回サイズ計算するものだと思ってたよ
>>766 簡単には出来ないと思うけど、自分でウィンドウサイズと位置を制御して
アニメーションさせれば似たような事ができると思うよ
769 :
100 :2008/02/04(月) 18:53:56
申し訳ございません。 ソースは下記の通りです。 int PASCAL WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Ret; hPrevInstance = hPrevInstance; lpCmdLine = lpCmdLine; nCmdShow = nCmdShow; // Create Dialog Ret = DialogBox( hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, DIO_Sample ); return Ret; } 前回実行させて動作確認できたときから何も触っていない状態で、 今日実行させたらリソース画面が出てこなくなりました。 プログラムの問題なのでしょうか?
>>767 計算するって言ったって、何を計算すると思ったのかね。
まさか、size_t foo = 4; は計算すると思わないだろ?
size_t foo = sizeof(int); は?
勿論、size_t foo = sizeof(buff); だって同じことだ。
771 :
757 :2008/02/04(月) 19:00:30
>>768 そのアニメーションをさせる関数が分かりません;
SystemParametersInfoはアニメーションを指定の座標へ行わせるものではないんですよね?
なんて検索したら見つかるでしょう・・
何がしたいのかいまいち分からないな。 既定の動作だと最小化するとタスクバーに入るけど それをどうしたいの? もしかしてタスクトレイに入れたいとか?
>>772 定期的にSetWindowPosでも呼び出して座標とサイズを指定してやればいいんじゃないかと
>>770 計算というか、中にある型やバッファのサイズの値を調べて取得する処理って事かな
内部的動作に詳しくないから、そういう処理は別になくて、バイナリコード的には
調べたサイズの値が直接入っているかもしれないけど。
>>773 そうです。タスクトレイへアニメーションつきで最小化をさせようと考えてます。
今、タスクトレイの座標取得をし、GetWindowRectで自ウィンドウのサイズを取得し、
DrawAnimatedRectsで自ウィンドウ位置からタスクトレイへアニメーションを考えてやってるんですが、少々問題がありまして。
文で説明するのが難しいんですが、ウィンドウは最大化状態ではないのに、アニメーションがウィンドウ一杯のメニューバーの大きさから
タスクトレイへ向かってアニメーションされてしまいます。それを自ウィンドウサイズに合わせる方法が全く分からず悩んでます。
>>774 DrawAnimatedRectsはRECT構造体を指定しないといけないんで、他でありますか?
XPでの最小化の挙動を見ると、タイトルバーだけが縮小しながらタスクバーに向かう感じだな 同じような挙動にしいなら、タイトルバーサイズのサブウインドウを用意して それを縮小アニメーションさせつつ指定座標に移動させていき、指定座標にたどり着いたら 元のウィンドウを非表示にする必要がある。 何に使うのかは知らないけれど。
>>777 よくわからんけど、
>>778 の一行目みたいなウィンドウズ準拠の動きは嫌だってこと?
ウィンドウ全体が縮小しながら移動するようにしたい?
そうなるとやっぱ定期的にSetWindowPosでセットするしかないんじゃない?
>>777 >DrawAnimatedRectsはRECT構造体を指定しないといけないんで、他でありますか?
GetWindowRectで取得したRECT構造体のデータを使いたいって意味なら
RECT構造体っていうのは、
left→左上座標 X
top→左上座標 Y
right→右下座標 X
bottom→右下座標 Y
の4つで構成されてるデータ。
SetWindowPosにはleft、top,、right - left、bottom - top の値を設定すればいい
>>779 >>778 のような動きをさせたいんで回答としては有難いものなんですが、タイトルバーサイズのサブウィンドウを用意する必要があるんでしょうか?
DrawAnimatedRectsのRECT構造体はタイトルバーサイズの数値が入ってればいいってものではないんですか?
開始点のRECTには、タイトルバーサイズの数値がそれぞれのメンバに入ってるんですが、
何故か最大サイズのタイトルバーからアニメーションが始まります・・
てゆーか、新しくそれ用にサブウィンドウを用意するのが良く分からない・・・w
それもまた調べなければですね^^;
>>780 レスが食い違いました。
ちなみになんですが、SetWindowPosってのはウィンドウレベルの指定と、ただ画面を動かすものではないんですか?
SetWindowPosはサイズも指定できるよ
というかDrawAnimatedRectsAPIで普通に
>>778 の動きになるような気がするんだけど
実際にそういうの作ったことないから俺は発言控えた方がいいな。
混乱させるだけみたいだし。
>>782 と、言いつつ、試しにコレだけやってみたけど普通に動いてるよ
なんか範囲の設定が間違ってるんじゃない?
RECT rect, rect2;
GetWindowRect( hWnd, &rect);
rect2.left = 750;
rect2.top = 580;
rect2.right = 800;
rect2.bottom = 600;
DrawAnimatedRects(hWnd, IDANI_CAPTION, &rect, &rect2 );
>>784 ありがとうございます。
私のは何が違っているのか判明しました。
上ではタスクトレイの座標を取得し、と書きましたがトレースしたら取得できてませんでした;;
HWND tray;
RECT stray;
tray = FindWindow("ModelApp","SysPager");
GetWindowRect(tray,&stray);
では取得できてませんでした。
DrawAnimatedRectsの方の使い方や考え方はあってたのに、こっちが違ったとはorz
FindWindowはこの記述じゃいけないんですかね?
ModelAppはエントリポイントで指定したClassNameです。
>>786 取り敢えずなんですが、以下のように記述してやってみましたが出来ませんでした;
HWND getTrayToolbar(HWND hToolbar)
{
HWND hTrayWnd, hNotifyWnd, hSysPager;
hTrayWnd = ::FindWindow("Shell_TrayWnd", NULL);
if (hTrayWnd == NULL)
return NULL;
hNotifyWnd = ::FindWindowEx(hTrayWnd, NULL, "TrayNotifyWnd", NULL);
if (hNotifyWnd == NULL)
return NULL;
// OSの違いを吸収
// SysPagerが取得できなかったときは、win2000,Meと仮定し、
// TrayNotifyWnd直下にToolbarWindow32がある可能性にかける。
hSysPager = ::FindWindowEx(hNotifyWnd, NULL, "SysPager", NULL);
if (hSysPager == NULL)
hSysPager = hNotifyWnd;
hToolbar = ::FindWindowEx(hSysPager, NULL, "ToolbarWindow32", NULL);
return hToolbar;
}
HWND tray;
RECT stray;
getTrayToolbar(tray);
GetWindowRect(tray,&stray);
これでstrayに座標が入ってるはずなんですが、表示してもちゃんとした数値は入ってませんでした。
>>786 変に改造したのがよくなかったです。
HWND getTrayToolbar(HWND hToolbar)
{
を
HWND getTrayToolbar(void)
{
に戻し、
getTrayToolbar(tray); を
tray = getTrayToolbar();
にしたところ取得できました。
初心者の分かりづらい質問にも親切に答え、参考サイトを調べて頂いたりトレースして頂いたり本当に有難うございました!
789 :
デフォルトの名無しさん :2008/02/04(月) 23:38:23
Visual C++6.0 (WinNT4.0)で古いシステムのメンテナンスをやることになって しまいました。VB5.0/6.0やVB.NET,C#.NETは使ってきましたがC++を実務で するのは初めてです。 ソースを修正してデバッグモードで実行しても、デバッグウィンドウで表示される 結果は元のソースでの処理結果のままなのですが、こういうものなのでしょうか。 (ビルドして生成したDLLは修正したとおりに動く) また、ビルド時に構成でReleaseとDebugが選択できますが、これの違いは なんでしょうか。構成をDebugにしてもDLLは生成されますが、本来はReleaseで 作るべきものなのでしょうか。
Debugビルドだと色々なエラーチェック用のマクロが定義されたり、 メモリ領域を利用する前に特定の値で初期化したりしてバグを発見しやすくしたり、 実行ファイルにデバッグ用の情報を埋め込んだり、最適化を無効にしてデバッガで追いやすくしたり。 つまり、デバッグ向けで速度が遅い、実行ファイルがでかい。 なので開発はDebugビルドで製品として出す場合はReleaseビルドかな。普通は。 VC6.0しらないし、デバッグウィンドウが何を指して言っているのか分からないけど Releaseビルドだとうまくデバッグできないかもね。
済みません、教えてください。 VC++で作ったプログラムで、例外が発生したときにデバッグ情報をファイルに 書き出すようにしたいと思うのですが、変数領域についてよく分からないのです。 ファイルアクセスとか例外が起きそうなところに__try,__exceptブロックを作って GetExceptionInformation()で例外情報を取り込んで、 レジスタの値を調べて、スタック情報を記録するところまではできました。 ただ、これだけだとポインタの指すデータが残らないので不便だと思い、 データの領域も記録しようと思うのですが・・・どこら辺を記録すればいいのか 分かりません。 いろいろ調べたところ、.dataセクションと.bssセクションの領域はファイルヘッダから 計算できる(他に方法があれば教えてください)ことは分かったのですが、ヒープ領域の アドレスってどうやって調べればいいのでしょうか? あと、変数って.dataセクションと.bssセクションとスタックとヒープ領域に作られる と思ってたんですけど、他の領域にも作られるんですか? 済みませんが、よろしくお願いします。
792 :
789 :2008/02/05(火) 00:36:53
>>790 ご回答ありがとうございます。
やはりReleaseビルドですべきですか。
ちなみに今、デバッグウィンドウに処理結果が反映されない、といっているのは
Debugビルドのものです。
>>792 デバッグウィンドウってのは自動変数とかをのぞく奴?
ブレークポイント仕掛けてステップ実行してけば普通は値が反映されると思うけど。
正直よくわからん。
794 :
789 :2008/02/05(火) 01:03:15
>>793 そう、普通にブレークポイントで止めて、ステップ実行しながら変数の値を
追っかけていくのですが自分が追加したロジックを無視してしまうのです。
DLLを生成するとそのロジックを反映したもので動作するので不思議です。
支障がないならリビルドしてみるとか・・
リリースビルドで無視するのなら
>>741 の理由で普通にある事なんだが
デバッグビルドで無視するのは本当に飛ばしてるのか、
ブレイクポイントが適切な行に設定されてないのかどっちかかな
797 :
789 :2008/02/05(火) 01:14:58
>>795 とりあえず、本来は修正結果がデバッグでも反映されるべき、っていうのは
わかったのでまた試してみます。ありがとうございました。
>>788 その引数の渡し方だと、実際に引数として渡した変数そのものではなくて
別の変数が関数内で作られてしまうから取得はできない
そういう場合は、HWND getTrayToolbar(HWND &hToolbar)
と記述すると、実際に渡した変数にそのまま格納される
じゃなければ、HWND *lphToolbar などとしてポインタを引数で渡すとか。
Debugビルド = VisualStudioのデッバッガ用のビルド デバッガ入れてない環境では動作しないしない可能性がある。 ビルドしたプログラムの配布禁止(ライセンス違犯)
関数名を入力すると引数とかがポップアップ表示される機能は、プロジェクトを作成しないと働かないみたいですが、 cppファイルとかを単体で開いた時にも機能するようにはできないでしょうか?
同じ関数名だってリンクされるものが違ったら別の関数なんだから そんなの無理に決まってるだろ
リンクとか関係あるの?
804 :
デフォルトの名無しさん :2008/02/05(火) 21:48:18
goto label
>>801 秀丸に単語補完機能がある。それで似たようなことはある程度可能。
と言ってもこういう質問がでる時点でIDEとかエディタとか知識が少なめに感じる・・・
>>803 同名の関数を保持したライブラリやオブジェクトがハードディスク上に複数あるとする。
そのいずれも呼び出し側のcppファイルとは異なったフォルダにある。
さて、呼び出し側のcppファイルを解析するだけで、複数ある同名関数の中の
どれを呼び出せばいいのかがわかるだろうか?
ヘッダだけで情報は充分じゃねーの。 インクルードパスさえなんとかなればな。
まあどうにもならないけどな。
>>806 どれを呼び出せばいいかなんて分かる必要があるの?
引数ならヘッダ見れば分かるし、というか分からないとコンパイルできないだろ
パスの設定は見落としてた
VCのIDEはプロジェクトを作成して使う前提なんだから 嫌ならIDE使わなきゃいい
>>809 ごめんごめん。
ライブラリやオブジェクト
↓
ライブラリやオブジェクト、それに付随するヘッダ
という事で。
しかしVSはcppとかの拡張子に関連付けたりするんだよな。 インストール直後いつものエディタが起動しないのであせるw
>>809 どうしてもcpp単体で見られるようにしたいと言うんなら
自分で検索するインクルードヘッダの参照パスを指定できるエディタでも作ればいいよ。
>>812 インストール時に関連付けの設定できなかったっけか
>>814 できる、、けどOSから順番に入れなおしてるとインストール順によって
状況が変わるみたい。
>809 だからプロジェクト作らないとコンパイルもできない。 プロジェクト作らずにコンパイルする方法もあるが
Unixでpthreadを使ってマルチスレッドプログラムを作ってきました。 VisualC++では何を使ってマルチスレッドにするのが一般的ですか?
createすれっど
>>817 状況によって何を使うべきかが変わるので
一般的とかそんなの無い。
強いて言うなら、どれも結局Win32 APIのCreateThreadに行き着く。
821 :
デフォルトの名無しさん :2008/02/06(水) 19:11:48
メニューに関して質問です。 CreateMenu(), AppendMenu() を使用して "ファイル(&F)" [POPUP] (hMenuFile) "ファイルを読み込み" セパレータ "履歴" [POPUP] (hMenuRecent)→ "&0 " + path セパレータ 終了(&X) な感じに作成し、履歴からポップアップされるpathを選んだ時に GetMenuItemRectで位置を取得しようとするのですが、 インデックスを試しに0にして値を調べて見ると、 hMenuFileの時でもhMenuRecentの時でも同じ、つまり"ファイルを読み込み"の位置情報しか取得しません。 インデックスを1にすると、0の時のtopに履歴からポップアップされたメニューの縦幅がプラスされた値になります。 ちなみに、上の二つのメニューハンドル値は、ちゃんと違う値でした。 色々条件を変えながらやってるのですが、どうしても path にあたる位置情報取得出来ず、、どの辺が間違ってるのでしょうか?
822 :
デフォルトの名無しさん :2008/02/06(水) 20:55:36
今DXライブラリをインストールとMicrosoft Platform SDKもダウンロードしてライブラリを使うために
http://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2005express.html#R3を参照にして設定してたんですが 、
#include "DxLib.h"
// プログラムは WinMain から始まります
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{ if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{ return -1 ; // エラーが起きたら直ちに終了
}
DrawPixel( 320 , 240 , 0xffff ) ; // 点を打つ
WaitKey() ; // キー入力待ち
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
で、------ ビルド開始: プロジェクト: test2, 構成: Debug Win32 ------
コンパイルしています...
DrawPixel.cpp リンクしています...
LINK : fatal error LNK1104: ファイル 'DxLib_d.lib' を開くことができません。
ビルドログは "file://c:\Documents and Settings\user\My Documents\Visual Studio 2005\Projects\test2\Debug\BuildLog.htm" に保存されました。
test2 - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
となって進みません。どうすればいいのでしょうか?
よろしくお願いします。
>LINK : fatal error LNK1104: ファイル 'DxLib_d.lib' を開くことができません。 そのライブラリをリンクしてください
824 :
デフォルトの名無しさん :2008/02/07(木) 08:57:44
ソリューションをビルドするとき,複数のプロジェクトを 依存関係に注意しながら並列にビルドすることができますよね? 一つのプロジェクトに含まれる複数のコンパイル単位を 並列にコンパイルさせるということは VC++ の IDE では 無理なんでしょうか? GNU make だとできるんですが,できれば IDE で できればいいなと思っています.
825 :
824 :2008/02/07(木) 09:07:37
Visual C++ 2008 からは /MP があることを発見したのですが, これって /Yc や /Gm と競合するんですね. /Yc は別途プリコンパイルヘッダを作ってやればいいだけなのですが, /Gm ってはずしちゃうと逆効果なのかなぁ. /Gm の効果をいまいち実感できていないのではずして /MP 使った方がいいですかね?
826 :
デフォルトの名無しさん :2008/02/07(木) 09:40:24
//あいうえお class Aiueo{ 定義 }; のように書いておけば IntelliSense で Aiueo のインスタンスを ポイントしたときに「あいうえお」も含めて表示してくれたり しませんかね? C++ ではコード内のコメントでドキュメンテーションするのは 無理なんでしょうか? C# だとその辺の機能があるんですが・・・
>>825 使った方がいいですかねじゃなくてさ
使ってみればいいじゃない
本人に違いがわからないならどっちでも同じこと
829 :
デフォルトの名無しさん :2008/02/07(木) 13:17:27
カット&ペーストなどによりインデントの違う コード(タブが 2 と 4)が混在しているとき、 一気に整形し直すことってできないでしょうか? C#では貼り付けた時に自動的に整形してくれるのですが C++では無理ですか?
C++は知らないけど VC++のエディタでできたと思う
C++の質問はC++スレですればいいよ
>829 CでよければK&Rにタブをスペースに変換する演習問題があったよ
833 :
デフォルトの名無しさん :2008/02/07(木) 13:51:19
>>831 Visual C++ の IDE のエディタでの話です
834 :
デフォルトの名無しさん :2008/02/07(木) 15:09:09
IntelliSenseでメンバーの補完をしようと一覧を 出しているとき private や protected のメンバを 一時的に隠したいとかできますか? どうせアクセスできない基底クラスのメンバがずらずらと・・・
そんなことができるって話は聞いたことないです
>>834 >一時的に隠したいとかできますか?
「一時的に隠したい」と願うことはできます。
Visual Studio 2005を使ってるんですが、 F5でデバッグ開始をすると一瞬だけ 「オブジェクト テスト ベンチ」 とタイトルバーに書かれたウィンドウが表示されます。 これを非表示にする設定などありますか?
出ましたお得意揚げ足取り
840 :
ああ :2008/02/08(金) 01:14:26
[質問]マウスクリックすると、そのクリックされた座標にビットマップでつくったキャラクターが移動するといったものを作りたいです。 OnTimer(UINT nIDEvent)やOnLButtonUp(UINT nFlags, CPoint point) にいろいろ記述してみましたが、うまくいきません。どなたか教えてください!
>>838 Ctrl+F5 or DOS窓からEXEを直接実行
揚げ足取りされるのが嫌なら正確な日本語を書けるように頑張りましょう
>>840 そのマウスクリックとやらが、どこをクリックするのかによっても変わってきます。
いろいろ記述してみましたとは、何を記述したのでしょうか。
上手く行かないというのは、何が上手くいかないのでしょうか。
その質問で答えが返ってくると本気で思っているのですか?
>>842 揚げ足取ってもいいけど答えになってないならレスしなきゃいい
自分はわかってるような言い方して結局説明しないとかね
そんならとっととこのスレから消えればいいじゃん
いいからあげんなよはげ。 揚げ足取られて悔しいのはわかるが見苦しいだけだぞ。
846 :
ああ :2008/02/08(金) 01:55:33
>>843 指摘ありがとうございます。
記述した内容を載せようと思ったら
行が多すぎるとのエラーがでたので分けてかきます!
//////////////////////////////////////
x1,y1はBITMAPキャラクターの座標です。
x2,y2はクリックした位置の座標です。
//////////////////////////////////////
void CMiyazaki_anime1View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
SetTimer(ID1, TIMER_TEXT1, NULL);//テキスト1を処理するタイマーセット
CView::OnLButtonUp(nFlags, point);
}
847 :
ああ :2008/02/08(金) 01:56:37
つづき! void CMiyazaki_anime1View::OnTimer(UINT nIDEvent) { // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください if(nIDEvent == ID1){ //IDによって処理を変える if(x2>x1 && y2>y1){ for(i=10,j=10;i<=x2-x1,j<=y2-y1;i++,j++){ x1+=i; y1+=j; } CRect rc; GetClientRect(&rc); bmpID = (bmpID+1) % 3; //表示するBMPを変更する } と今は記述しています。 OnTimerのif文に関しては、このときの条件で成功したらさらにif文を追加 しようとおもったのですが、失敗したためこれしか書いていません。 また、これで実行すると、キャラクターがいっきにマウスクリックした場所に 移動してきてしまいます。 キャラクターが歩くようにスムーズに動いてほしいです。 ちなみにクリックする場所はウインドウ内です。
848 :
デフォルトの名無しさん :2008/02/08(金) 09:38:34
TODOのコメントはそこに何か書いたら消せよw 少なくともここにあげるときくらいは。 for文の判定式のカンマは意味があるのか?
>>847 MouseButtonDownで、マウスの位置をメンバ変数に保存する。
Timerイベントが発生するたびに保存した位置に少しづつ移動させる。
VC++6.0とSDK。新規ダイアログ挿入からダイアログリソースを操作 出来ますが、クラスウィザードを使おうとするとオブジェクトIDが 出ないので何もできないです。解決方法はありますか?
何をやりたくてクラスウィザードを使おうとしてるわけ? クラスウィザードが何かわかってる?
やりたいことはデータの受け取り。オブジェクトID(IDD_EDIT1みたいなの。) が出ないからメンバ変数が設定できずに値のやり取りが出来ない。 エディトボックスから数値の受け取りが出来れば方法は何でも良いけど。
>>851 MFCクラスの作成>CDialogで作れる。
挿入 、クラスの新規作成、からGenericクラス以外選択できない のですがMFCクラスの作成はどうすればよいのでしょうか?
>>855 MFCプロジェクトで無いなら諦めろ。
Express版は論外。
857 :
821 :2008/02/08(金) 20:41:10
他のレスに埋もれてしまったみたいですが、
>>821 のような状況が未だに解決出来ず、助言頂けませんでしょうか。。
読む気がしないからスルーだろ
859 :
838 :2008/02/08(金) 21:36:20
>>841 さん
ありがとうございます
Ctrl+F5 or DOS窓ではなくF5の時出さないようにしたいんです。
一瞬しかでないんで、バーをクリックして消そうとしたんですが無理だったんで。
デバッグ中に表示→その他のウィンドウで消そうかと思ったんですが、
デバッグ中だけ「オブジェクト テスト ベンチ」の項目もなくなっていて…
F5の時でないようにするのは無理なんでしょうか?
質問の仕方が悪くてすいません。
スルーだな
その問題にメリットが感じられないので興味がわかない。
862 :
デフォルトの名無しさん :2008/02/09(土) 00:25:56
>>853 回答ありがとうございます!
「Timerイベントが発生するたびに保存した位置に少しづつ移動させる。」
ときの記述法が分かりません。ただ単に動かすのはx+=10;(xはキャラクターのx座標)
ですよね?
今の場合はどのように記述したらよいのでしょうか?
ゲームかなんかか? キャラクターを移動させるのは基本中の基本だから それが分からんとなるとどうにもならん。
数学の教科書でも引っ張り出してきて 一次関数でも復習したらいいんじゃないかな
>>862 それだと一回OnTimerが呼ばれただけで
for内でクリック座標まで足してしまってるでしょ?
int vx;
vx = x2 - x1;
if(vx > 10) vx =10; //10以上進まないようにする
else if(vx < -10) vx = -10;
x1 += vx;
これで良いと思う。
※x1、x2がintであると仮定してる
866 :
デフォルトの名無しさん :2008/02/09(土) 05:50:34
>>865 どうもありがとうございます!865さんの書き込みがある前に自己解決しました。
でも、丁寧に指摘していただきありがとうございました☆
visual c++ 2008で猫でもわかるプログラミングのwindows SDK編 イントロダクションにあるプログラムをコンパイルするにはどうしたらいいですか maicrosoft SDKsにパスを通す設定はしてあります エラーがでてビルドできません
868 :
デフォルトの名無しさん :2008/02/09(土) 09:37:53
>>867 なんでエラーメッセージを書かないんだ?
>867 そのプログラム書いたやつに直接質問しろ なんで糞サイトの尻拭いしなきゃならんのだ
>>867 >エラーがでてビルドできません
エラーが出ると言いながら内容を書かずにいる
回答が欲しけりゃ隠蔽すんなよボケ
猫でもの最初の方はVC5で相当古いからそのままじゃエラーでるよ あえて使う理由がなかったらあきらめて他のにした方がいい。
873 :
867 :2008/02/09(土) 10:59:24
874 :
デフォルトの名無しさん :2008/02/10(日) 04:11:03
>>870 いちいち人を見下す発言するな
ネットでしかエラそうにできない奴が
875 :
デフォルトの名無しさん :2008/02/10(日) 07:45:12
877 :
デフォルトの名無しさん :2008/02/10(日) 11:46:03
>>876 確かに正論だが、最後のボケはいらんだろ
hWndってなんて読むの?ふわんど?
h: ハンドル Wnd: ウィンドウ 読み方なんて無いと思うぞ
あえて読むならウィンドウハンドル
頭の中ではエッチウンドと読んでる
hってハンドルかー だからハンドルインスタンスなのか ヒンスタンスかと思った
>>881 フワンドのほうがよくね?
なんかつっかかるぞそれ
884 :
デフォルトの名無しさん :2008/02/10(日) 12:55:27
ちいおぼえた
えいちうぃんどと読んでる.意味的にこれが一番正しい
ウインドウハンドラじゃねえの??
2005EEから2008Proに乗り換えたんですが、 いずれもReleaseビルドで実行速度を優先にしても 2008の方がexeのサイズが40kB程大きくなってしまいます 原因として考えられることは何でしょうか
ありすぎて困る
EE→Proか 出世したな
>実行速度を優先にしても >2008の方がexeのサイズが40kB程大きくなって なんでサイズ優先にしないの?
DLLからスタティックリンクに変わっていたってオチな気がしないでもない。
というか、なんでコンパイラバージョン変えてバイナリサイズが同一とか 思えるんだろうか?
コンパイルする時間でバイナリが変化しうるのにバージョンが変わったらファイルサイズくらい変わるだろ。 処理時間も当然変わるし、へたすりゃ潜在的なバグが顕在化するかもしれない。 むしろ一切変わらなかったら何を間違ったんだ!?ってなるようなことだと思うが・・・
895 :
デフォルトの名無しさん :2008/02/10(日) 23:47:43
VC++ 2003.NETでビットマップをインポートして追加したんだけど、 なぜか実行してもそのビットマップが表示されません。 インポートじゃなく、新規作成でビットマップを追加すると表示されるのに・・。 なぜでしょう?
>>895 インポートしたビットマップと
新規作成したビットマップの色数は同じ? 違うなら同じにしてみたらどうなる?
後、表示ってのは自分で表示してるの?
それともツールバーとかピクチャとかのコントロールで表示させているの?
Visual C++のMFCプロジェクトにおいて、 Unicode ReleaseとUnicode Debugのプロジェクト設定を追加するにはどうしたらいいの? できれば非UniocdeのReleaseとDebugは残したままで「追加」がうれしいのだが。 過去だれかがうまいことやってたの見たことあるけど、 自分でやってみたらどうやっていいかわからなかった。
>>897 事故レス。
ビルド構成で追加してUnicodeと_Unicode入れればおk
簡単ですた
899 :
デフォルトの名無しさん :2008/02/11(月) 02:37:41
>>896 お返事ありがとうございます!
色数は同じです。
sampleBMP.LoadBitmap(IDB_SAMPLE);でリソースを読み込み、
OnDraw関数内で
BITMAP bmp;
sampleBMP.GetBitmap(&bmp);
CDC bmbkDC;
bmbkDC.CreateCompatibleDC(pDC);
CBitmap *old = bmbkDC.SelectObject(&sampleBMP);
TransparentBlt(bkDC, x1-bmp.bmWidth/2, y1-bmp.bmWidth/2,bmp.bmWidth, bmp.bmHeight,bmbkDC, 0, 0, bmp.bmWidth, bmp.bmHeight, RGB(255, 0, 255));
とし、画像を表示させようとしています!
戻り値はどこがおかしい? デバッガ使ってる?
ふと立ち寄ったが、役に立つ情報がひとつもないな。 素人に毛が生えた程度の知識の粘着キモオタが、はけ口をもとめて、素人相手に優越感を味わう いかにも2chらしい愉快なスレだな。。。 ざっと見るだけでも > 違犯ってなんだよ。違反なら判るが。 > 見苦しいから汚いコード貼らないでくれる? とか、いびり専門の粘着キモオタ。ゆとり世代はマジ糞だな。 質問者も聞くところがなくて困ってるんだろうが > すいません、この質問が終わったらよそに行きます。 > 見逃してください。 とかこびてるところ見ると痛々しい。なんでそこまで。。。 ネット上の我慢だと思って一時的にこびて聞いても、ほとんどたいした情報得られないのは スレ斜め読みするだけでも明らかだから、職場とか友達とかに聞いたほうが絶対いいよ。 2chもスレによっては技術系でも和気あいあいとやってるとこあるんだが、 ここは落ちるところまで落ちてる。 役に立たないくせにスレが排他的に立っていること自体が害悪。 せめてIDでも表示されるようになれば、少しは浄化されるんだろうな。 そう思わないか?
まぁ >素人に毛が生えた程度の知識の粘着キモオタが、はけ口をもとめて、素人相手に優越感を味わう まさにこういうクズしかいないから仕方ない
ID表示くらいで浄化されるわけないと思うがな。 せいぜいNGIDができて便利だなというくらい。
>901 お前が親切に対応してやれよ あれは自分が興味ある質問には答えてるよ
>>901 まあ落ち着けよ
ふと立ち寄ったにしてはやけに饒舌だなw
入門書読んでたらオーバーフローって単語が出てきたんだけど これってもしかしてすごいやばいんじゃ・・・ 技術があればいくらでもメモリを書き換えてすき放題できちゃうような気がするんだけど 本には気をつけろとしか書いてないんだけど、もしかしてVC++側でチェックしてくれてないの? っていうか一回ミスしたらパソコン動かなくなるんじゃ・・・VC++6.0だけど大丈夫だよね?
それはVC++の問題じゃなく言語の問題だからねぇ。
>>907 STLは正直詳しくないけど、最後から二つ目のレスのコードが動けばOKって事で良い?
なら、imbueの前の行にclear挟む必要があったけど、きちんと日本語が出力されてたよ。
ちなみにVC++2008EEで試した。
個人的には、ページ単位のホイールスクロールで即落ちをさっさと直せと問い詰めたい。
逆方向に一行とか生易しいレベルじゃねえよ、これは。
>>908 悪意なく起こってしまった分に関しては、
OSにプログラムが強制終了させられるだけ。
メモリの中ならいくらいじったってプロセス終了、
最悪でもOSの再起動で問題なし。
912 :
207 :2008/02/11(月) 21:08:45
woutなんて誰も使わないからバグっててもどうでもいい
914 :
デフォルトの名無しさん :2008/02/11(月) 23:30:38
vistaでVC++2008をインストールして下のプログラムを書きましたが、 '#include "stdafx.h"' をソースに追加しましたか? というエラー がでます。 どうすればいいでしょうか? #include <stdio.h> int main(void) { printf("hello"); return 0; }
#include "stdafx.h"をソースに追加してください
プリコンパイルヘッダを使わない設定にしてください
917 :
デフォルトの名無しさん :2008/02/12(火) 23:25:20
>>916 さん、解決しました、ありがとうございます
918 :
デフォルトの名無しさん :2008/02/12(火) 23:25:36
VC++2005でプログラムを作ってネットで無料公開したいのですが、新規プロジェクトの作成で困ってます。 CLRのwindowsフォームアプリケーションとWin32のWindowsアプリケーションは、 どう違うのでしょうか?どのへんに注意して選べばいいか教えてください。 たとえば、GUIの作りやすさとか人のマシンで動かす時に必要なランタイムとか機能の制約とか。。。
VC++ 2005のCLRアプリケーションは実行に.NET Framework 2.0が必要。 Win32アプリケーションは、大多数のWindowsアプリケーションと同じ 普通のEXEファイルが出来上がる。 といってもVC++ 2005ランタイムが必要だけど、これは.NET Frameworkに比べれば小さい。 GUIの作りやすさはCLRに軍配が上がるけど、それだったらC#使えよと思う。
VC++ 2005ランタイムってなんぞ?
921 :
918 :2008/02/12(火) 23:49:04
>>919 さん
数日調べててわからなかったので、ものすごく助かりました。
どうもありがとうございました!
コンピュータ音痴でもセッティングしやすいほうを選ぼうと思います。
Win32アプリケーションのほうは、GUIを作るにはリソースエディタが必要なんですよね!?
次はその辺を勉強してみます。
別に自分で手書きで.rcファイルとIDつくってもいいぞ どうせテキストファイルだ
923 :
918 :2008/02/13(水) 00:10:21
>>922 手書きする技量が。。。
テキストなんて、、、ないですかね。
926 :
918 :2008/02/13(水) 02:00:45
>>924 さん そこがリソースに関係した記事なんですね。勉強になります。ありがとうございます。
>>925 さん Expressです;;XNResourceEditor試してみます。ありがとうございました。
プログラムで図形描きたいのですが手順が詳しく乗っているサイトありませんか? どのプロジェクト作ったらいいかも分からない状況です
諦めましょう
>>927 Visual C++ 200X 画像プログラムやらなんやらと書いてある本でも買え
何も知らないような奴がいきなりネットだけで知識を得ようとするな
>923 リソースエディタは楽できるだけで 手書きする技量がないと結局何もできません。 最初からあきらめた方がいい。
>>930 >手書きする技量がないと結局何もできません。
そうでもないよ
連番IDに揃え直したりする事が必要にならなければエディタで事足りる
手書きが無理なぐらい馬鹿ならあきらめた方がいいということ 手書きしろとは言ってない
今時普通にあるスプリッタつかって3つのViewを配置したりする プログラムを作ろうとすると もうリソースエディタではどうしようもないだろ 設定とかのダイアログにしか使えない気がするんだが
複雑なことをやろうとする前提で、「何もできない」っていわれてもな
つか、「手書き」の意味が食い違ってないか? リソースファイルの手書きとAPI操作による手書きだと意味が違うぞ。 元々言っているのはリソースファイルの手書きの方だ。
リソースエディタの類は開発効率を高めるものあって 馬鹿にでも使えるためにあるんじゃないよ 馬鹿にでも使えるものがほしいならVC以外にした方がいい
馬鹿馬鹿言ってる方が馬鹿だ
VC++に挫折するやつが多いほど俺の価値が上がるってもんだ
Unix系のライブラリなんかはバリバリ作れるセンパイがいたが VCはてんでわからない人だったな。 後輩の俺が世話を焼いてやったもんだ。
Cの関数を使うと古い形式として宣言されましたという警告が出ますが、_s付きの関数はLinux上でもコンパイルできますか?
コンパイラの対応状況によるんでないの?知らんけど。
少なくともansi Cにはprintf_sなどない
943 :
デフォルトの名無しさん :2008/02/13(水) 15:55:55
>>940 M$独自の実装だからLinuxでは無理と思われ
使い方さえ間違っていなければCの関数の
VCが吐く古い形式警告は気にしなくても良いじゃん
Linuxでいうところのusleep(microsecond) を使いたいのですが、どうすればいいですか。
MessageBoxでダイアログを作ると ドラッグで移動できるけど CreateDialogで作ると移動できない。 コードはほとんど同じなのに何故 なんでしょう?
移動できない、とは? 移動以外は動作してるのか? MessageBoxはモーダル(== DialogBox())でメッセージループ自前だが、 CreateDialog()はモードレスで、メインのメッセージループを使う。 その辺なんじゃないの?
>>946 両方自前だよ。違うところはCreateDialogのメッセージループ
がbool形でdialogboxがLRESUL型ってところ。
CreateDialog 移動できないの検索結果 4 件中 1 - 4 件目 (0.09 秒) 普通では起きない現象みたいだから945さん以外の人は気にする必要ないかも
>>947 えーと、WinMainでMessageBox呼ぶと
メッセージループ書かなくても動作するけど
CreateDialogはそうはいかないよね?
これをどう説明する?
>>948 サンクス。
>>946 = >949?MessageBoxがモーダル
だけど?知ってる人でこういうこと聞く
人居たけど大学中退?
>>947 それウィンドウプロシージャ・ダイアログプロシージャのことでは?
メッセージループといったら、GetMessageなんかのほうだろ。
単純にウィンドウスタイルの問題じゃないのか?
たぶん常識では考えられないことやってるだけ
コードも示さず意味不明な質問するような馬鹿の分際で 答えてやってる相手に暴言はいてるようではな。
違うAPI使ってんだから、そりゃ違う結果になってもおかしくないだろと思うんだが・・・ 何か俺間違ってる?
950だけど、特殊な状態なようなのでこちらに問題があったようです。
>> 951 これから調べます。
>>952 詳しく。
>>955 頭良いね。
Visual C++ってlameのビルドとか出来るんですか?
知らんけど試しにlameのソース持ってきたらVC++6のプロジェクファイルついてるね 2005でビルドしたら物はできたけど
rarewaresからDLL落とせば?
>>954 どうでもいいことでキャンキャンほえるな
おまえのちんけなプライドなどに興味ない
>>930 おれは10年以上VC使ってるが、
rcファイルいじる必要があった場面なぞほとんどないがな。
例外はsyslog関係処理のときくらい。
おまえ、ツールを効率よく活用するということを覚えたほうがいいぞ。
と、ちんげ以下の微生物が申しております
>>929 図形かくくらい、ネットで十分だろ。というかネットのほうが便利。
いまどき本で勉強しようって感覚、おいおいって思うが。。
画像というのは図形で出来ているんだぜ?
>>933 これがいわゆる、素人に毛が生えた素人というやつだな。
>>918 あくまでおれの基準だけど、
本格的でごりごりしたGUI構成とか、COMとかOLEとかやりたいときは、
アンマネージドで。つまり非CLRで。んで言語はVC++かな。しかもVC6を使う。
そのあたりは個人的にノウハウがたまっているからというのもある。
お手軽なアプリ作るならマネージドで行く。つまりCLR。んで言語はVB.Netかな。
たとえばDB関連など最新テクノロジー使うときはマネージドで行く。つまりCLR。
言語はVB.Netでいくけど、C#のときもある。
VC+2005でお手軽アプリを作りたいという条件自体が、おれの基準と違うんだな。
>>919 と同意見ということだね。
>>974 ちょっと言い忘れた。
VC6のころは、C++関連の情報が主流だったけど、
2003とか2005とか2008とかの時代になると、C++関連の情報って激減している気がするんだよね。
ググッて情報が得られやすい環境を選択するというのが、けっこう生命線的に大事だと思う。
仕事だと開発環境選べないからもちろんそれでやるしかないわけだが、単なる遊びなんでしょ?
逆切れする質問者が多いなw 同一人物かね
>>973 で、結局君は具体的に何の図形を描きたいの?
○?△?□?
2D空間図形?それとも3D空間図形?
GDIで描画したいの?DirectXを使いたいの?
結局のところ何を教えて欲しいわけ?
>>958 同じく2005でやろうと思ったんですが
'sprintf' の宣言を確認してください
「現在のコード ページ (932) で表示できない文字を含んでいます」
「fatal error C1083: include ファイルを開けません」
等色々要求されます
一応仕上がって出来上がるんですが…
>>978 sprintf 関係はほかでも見ないか?例の sprinf_s のやつだよ。
VC自体あんまり使ったこと無いのか。
事故解決しましたb 有難うございました
>>976 下みたいな回答が多いのに逆切れも糞もない。
>927 : デフォルトの名無しさん:2008/02/13(水) 02:55:35
>プログラムで図形描きたいのですが手順が詳しく乗っているサイトありませんか?
>どのプロジェクト作ったらいいかも分からない状況です
>929 :デフォルトの名無しさん:2008/02/13(水) 03:29:07
>
>>927 >Visual C++ 200X 画像プログラムやらなんやらと書いてある本でも買え
>何も知らないような奴がいきなりネットだけで知識を得ようとするな
プログラムでマスを描きたいのですが手順が詳しく乗っているサイトありませんか? どのプロジェクト作ったらいいかも分からない状況です
ます? forでライン引いたら
プロジェクトの作成から図形の描き方までの手順が一通り詳しく乗ってるような ピンポイントなサイトがあると本気で思ってるんだろうか ネットを使うなら情報をかき集めて統合する事を覚えような
リバーシとかゲームの作り方解説してるサイトならいっぱいある
ゲームの作り方(笑)
ゲームの作り方(泣)
992 :
デフォルトの名無しさん :2008/02/14(木) 21:36:46
少し分かりにくいかも知れませんが固定1次元配列を 動的に2次元配列にしたいのですが。 例えば data[0]〜data[4] data[0]〜data[4] data[0]〜data[4] data[0]〜data[4] ↓ 動的 という感じにしたいのです。 悪あがきで CArray<int[4],int[4]> arraydata; とかやってもダメでした。 くぐってみると両方動的なものはありました。 typedef CArray<int, int> CIntArray; CArray<CIntArray, CIntArray&> ar;
993 :
デフォルトの名無しさん :2008/02/14(木) 21:38:13
CArray<int,int> arraydata[4]; とすれば役割は果たせますが、 これだと data[0] data[0] data[0] data[0] ↓ 動的 data[1] data[1] data[1] data[1] ↓ 動的 data[2] data[2] data[2] data[2] ↓ 動的 みたいな感じになって最初のパターンより フラグメンテーションが大きくなりそうな気がして 恐いのです。 よい方法があったら教えてください。
クラスか構造体にすればできるだろうけどスレ違い。
997 :
デフォルトの名無しさん :2008/02/15(金) 00:22:06
VisualStudio 2005 の VC++ についてお尋ねします。 共有ライブラリなどを全て静的にリンクさせて DLL などの外部ファイルに依存しない実行ファイルを作るにはどのような設定にすれば良いのでしょうか?
>>988 くだらないことぐだぐだ言ってる暇あんなら、本でも紹介すればいいじゃねーか。
おれはGDI+は紹介した。VC6のTutorialも紹介した。
くだらねーんだよ。お前は何を出したんだ。
>>997 CRTの静的ライブラリ版を使うにはコンパイルオプション/MT。
プロジェクトのプロパティ→構成→C/C++→コード生成→ランタイムライブラリ
リリースのほうを変更しないと意味ないからな。
ほかのライブラリはそれぞれマニュアルなどを見ろ。DLLしかなければご愁傷さま。
次スレないの?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。