★初心者にVisual C++を教えるスレ★ Part7
1 :
デフォルトの名無しさん :
03/06/22 20:15
2 :
デフォルトの名無しさん :03/06/22 20:15
VC++は死滅
VisualC++6.0を使用していますが、コンパイルした後のアセンブラコードを見るためには どうしたらよいのでしょうか? コンパイルオプションを見たのですが、それらしいものは書いてありませんでした…。
8 :
デフォルトの名無しさん :03/06/24 10:04
ダイアログベースのアプリケーションで、クラスウィザードからコントロールに メンバ変数を割り当てると、そのダイアログクラスのコンストラクタに //{{AFX_DATA_INIT(ダイアログクラス) ~ //}}AFX_DAT_INIT というのができて、その中でメンバ変数の初期化をしてくれてますが、 この中の処理(たとえば初期値とか)って書き換えてしまっていいん でしょうか? それとも、これはクラスウィザードが使う部分なのでいじるとまずいん でしょうか? 厨な質問と思うのですが、教えてください。
11 :
デフォルトの名無しさん :03/06/24 15:47
フォントをリソースなどで埋め込んで、アプリからそのフォントを使用したいのですが 可能でしょうか? よく、PowerPointやPDFで配布用にフォントを埋め込むことがあると思うのですが。
もしくは、システムのフォントディレクトリ(?)にフォントをコピーしなくても プログラムと同じディレクトリにおいても利用できるような方法はありませんか?
13 :
デフォルトの名無しさん :03/06/24 16:22
割り込みスマン! もまいら教えてくさい。 プリプロセッサ定義にUNICODEと_UNICODEがあるのですが これらはどうちがうのですか? MFCのコードを見ると、どちらかが定義されているときは 他方も定義されるようになっているのですが。。。
endlと'\n'って普通どっちを使えばいいんですか? あと、C++で標準入出力はcoutとcin使えばいいんですよね?
>14 endlは改行した上にフラッシュされる。 endlを使いましょう
16 :
魔王みそちる ◆xuU0ZqjUEo :03/06/24 19:12
.NETが糞。糞。ってよく聞きます。 どうして糞なんですか。 糞だとしたら使う開発環境は VC++.NETよりもVC++6.0のほうがいいってことですよね。
>>10 ありがとうございます。
今までは怖くてOnInitDialogでわざわざもう一度設定し直して
たんですが、これで安心して直せます。
リストビューやツリービューの上などにバーみたいなのを作って 「×」ボタンを表示するにはどうやったらいいんでしょうか。
22 :
デフォルトの名無しさん :03/06/25 10:20
コンボボックスの動作がおかしいので解決方法をおしえてください。
猫でもわかるの18~20章をやっているのですが、
http://www.kumei.ne.jp/c_lang/index_sdk.html コンボボックスをクリックしてもドロップダウンリストが正しく表示されず、
小さな青いバーがすぐ下にでてくるだけで、文字が一切出てこないのです。
文字の代入が失敗しているのかとおもって以下の(WPARAM)ComboNoの部分を1にしてみたりしましたがきちんと代入はされているようです。
for ( i = 0; i <= 3; i++ )
SendMessage(GetDlgItem(hDlgWnd, IDC_COMBO1), CB_INSERTSTRING, (WPARAM)i, (LPARAM)combostr[i]);
SendMessage(GetDlgItem(hDlgWnd, IDC_COMBO1), CB_SETCURSEL, , 0L)
HPには乗っていないようですが、コンボボックスが押されたときの表示処理をなにか書かなければいけないのでしょうか?
それともリソースエディタに何か問題があるのでしょうか?
VC++6.0Sp5
>>22 コンボボックスのドロップダウンリストの高さが足りないだけ
>>22 リソースエディタで、コンボボックスの▼をクリックしてみなよ。下に伸ばせるようになる
>>21 Spy使ってみたけどよく分からないです。ReBarがあるみたいだったけど。
SplitterWndを使っているので、CreateViewのあとに
m_wndFolderDB.Create(m_wndSplitter.GetPane(0,0), IDD_DIALOGBAR, CBRS_TOP, 1);
とかやってみたんですが、うまくいきませんでした。
>23 >24 ありがとうございます。解決しました。 コンボボックスのプロパティばっかり見てました。 まさかマウスで下に伸ばすことができるとは・・・。 _| ̄|○ やっぱり何か本買っておいたほうがよさそう・・・。
27 :
デフォルトの名無しさん :03/06/25 15:09
WndProcはどこから呼び出しているのですか?GetMessage(&msg,NULL,0,0)、 TranslateMessage(&msg)、DispatchMessage(&msg)のどれかだと思うのですが。
28 :
デフォルトの名無しさん :03/06/25 17:45
>>22 MoveWindowとかでテキトーに伸ばしたら?
DIBSectionなんですけど、簡単なクラスにしてダブルバッファリングに使ってます。 bmpを読み込んで表示、ペンやブラシを使った描画なんかもとくに問題ありません。 それで今度、画像バッファのピクセルデータを直接弄って、バックバッファに 転送すると(BitBlt)、以前の画像のままでどこも変わっていません。 データを弄った後に、StretchDIBitsでbmpを画像バッファに転送してやり、それから 画像バッファからバックバッファにBitBltしてやるとうまく行きます。 まあ当然かな?とも思いますけど 弄ったデータ->画像バッファ->バックバッファ->画面DC っていう流れは普通ですか?(バックバッファに直接書けと言うのはナシでお願いします)
指定したディレクトリ内のファイル名とサブディレクトリ名を表示させたいのですが プロジェクトがこのソリューション構成で選択されていないため、このプロジェクトの構成はスキップされました。 GetFileSystemEntriesの引数照合がうまくいきません というエラーが出てしまいます 現在、WIN32コンソールプロジェクトで作ってますが どのプロジェクトを使った方がいいのでしょうか? C++.NETを使ってます どこが間違ってるんでしょうか?わかる方いらっしゃいましたらよろしくお願いします #include "stdafx.h" #include <afx.h> #include <windows.h> #using <mscorlib.dll> using namespace System; int _tmain(int argc, _TCHAR* argv[]) { char StrPath[255];//対象フォルダ用の文字列宣言 char Str_Filename_Array[1024][255]; //ファイル名格納変数 //対象フォルダパスの入力 scanf("%s", StrPath); Str_Filename_Array[0]=Directory.GetFileSystemEntries(StrPath); printf("%s",Str_Filename_Array[0]); }
31 :
デフォルトの名無しさん :03/06/26 03:52
以下のようなエラーが出ているのですがどうやって解決するかわかりません。 c:\~\include\vector(132) : error C2036: 'struct Cab::_cab_token_t *' : サイズが定義されていません。 おそらくヘッダに問題があるのではないかと思うのですが、エラーの意味自体 ほとんど理解できずにいる状態で参っています。 まさかvectorいじれというわけではないでしょうが・・・ 分かる方いらっしゃれば宜しくお願いします。
>>31 コンパイラ エラー C2036
'class-key' : サイズが定義されていません。
指定された識別子は宣言されずに、そのアドレスが使われました。
宣言されていないオブジェクトのサイズを使うことはできません。
次にこのエラーの例を示します。
struct A* pA;
struct B { int i; };
B* pB;
void main()
{
pA++; // エラー、A のサイズは分かりません
pB++; // OK, B は宣言されています
}
/////
つまりは、vecotr のテンプレート引数に渡した構造体の宣言が怪しいと思われ。
WIN32コンソールプロジェクト.NETのプロジェクトで作成したら
プロジェクトがこのソリューション構成で選択されていないため、このプロジェクトの構成はスキップされました
というエラーは解消されたのですが
error C2065: 'Directory' : 定義されていない識別子です。
error C2228: '.GetFileSystemEntries' : 左側がクラス、構造体、共用体ではありません。
エラーが出てしまいます
解決策がありましたらよろしくお願いします
ソースは
>>30 のままです
34 :
デフォルトの名無しさん :03/06/26 10:58
初めてのプログラム板に流されてきました。 ① もし A かつ B ならば not B にして、C する ② もし A かつ not B ならば B にして、C する これを書けばこんな感じなのでしょうか? if A and B then not B C if A and not B then B C ①②両方を行いたいのですが、永遠にループしてしまいます。 そうではなく ①の場合は②を一度行って終わり。 ②の場合は①を一度行って終わり。 このようにしたいのですがどうすればよいでしょうか? どうぞよろしくお願いします。
36 :
デフォルトの名無しさん :03/06/26 13:11
(゚Д゚)
38 :
デフォルトの名無しさん :03/06/26 16:13
アプリケーションが起動して、メインウィンドウを表示するとき ShowWindowに渡すフラグって、何にするのがいいの? MFCのソース見ると SW_SHOWNORMAL 使ってるし、 >初めてウィンドウを表示するときには、このフラグを指定してください。 ってMDSNにも書いてあるが、じゃ SW_SHOWDEFAULT はいつ使うのかと。 SW_SHOWDEFAULT の方が行儀いい...?
39 :
デフォルトの名無しさん :03/06/26 19:09
Visual C++を買うと、Windowsのアイコンやビットマップファイルが手に入ってましたよね? インストールしても見つかりませんが、どこにあるんでしょう。 単体VC++でなくて、MSDEVを買わないと無いのかな?
需要と供給のバランスが悪い。
41 :
デフォルトの名無しさん :03/06/26 19:49
42 :
デフォルトの名無しさん :03/06/26 19:51
あの、レジストリキーの名前の最大長ってどれくらいなんでしょうか。 RegEnumKeyEx()にバッファサイズがあるんですけど、何いれればいいのか わかりません。
43 :
デフォルトの名無しさん :03/06/26 22:23
おながいします。m(__)m GDI+を使うために最新のPlatformSDKをインストールしたのですが VC6のインクルードファイルやライブラリファイルのディレクトリ の優先順位先頭にそのPlatformSDKのフォルダを指定して良い ものでしょうか? というのが、現在の先頭はデフォルトのDeveloperStudioの VCフォルダになっているのですが、その中のヘッダファイルと 同名のファイルがPlatformSDKにもあるもので。。。 ちなみにPlatformSDKのフォルダを最下位にすると、GDI+を使用 するときに、ULONG_PTRという型が無いといって叱られます。 BaseTsd.hというファイルがインクルードされているのですが 現在インクルードされているVCの方では型が宣言されていなくて PlatformSDKのほうでは宣言されているようです。 長文しみません。。。
>>43 新SDKを、新規ディレクトリにインストールすると、そんな感じに困ったことになった気がする。
なもんで、そのとき私は、
新SDKの include と lib ディレクトリの内容を丸々
旧SDKの include と lib ディレクトリに上書きしてしまった。
とりあえずこれで問題なく動いてくれたと思う。
まぁやるんであれば、当然ながら
ファイルバックアップしてからやりなされ。
>>44 ども。CWnd::ShowWindow() のほうだけ見てますた(;´Д`)
>>45 レスありがとうございますm(__)m
やっぱり上書きするしかないですか。。。
既存のがあるのでコワいのですが、僕も
バックアップとってやってみますネ。
どうもです。。。
>43,>45 待て待て!別の場所にインストールしても 新SDKのinclude,libを最優先にすればそれでいいはずだぞ。 VisualC++付属のPlatform SDKは、あれは要するにVC++発売時点での Platform SDKがオマケで付いてきてるだけなんだから。 新Platform SDKのヘッダと、VC++のMFCやATLのヘッダを一緒に 使ってうまくコンパイルできないようなことが希にあるが、 適当に対処するかMSに文句を言ってくれたまえ…。
>>40 同感。あまりに多すぎると順に片づける気力もなくなっちゃうぞ
>>34 どこかのスレに既に回答あり。これじゃいけないの?
if (A){ B= !B; C; }
>>27 Windows2000でMFCアプリを動かしたときのコールスタックの一部はこんな風になる。
AfxWndProcBaseがMFCのWindowProcだ。
AfxWndProcBase(HWND__ * 0x001303f6, unsigned int 273, unsigned int 32784, long 0) line 220 + 21 bytes
USER32! UserCallWinProc@20 + 24 bytes
USER32! DispatchMessageWorker@8 + 264 bytes
USER32! DispatchMessageA@4 + 11 bytes
CWinThread::PumpMessage() line 853
>>29 > それで今度、画像バッファのピクセルデータを直接弄って、バックバッファに
のあたりの言ってることが分からない…。
51 :
デフォルトの名無しさん :03/06/27 02:05
VisualC6で、F7を押すと変更の有無に関わらず 全ファイルがリビルドされるようになってしまいました。 元に戻す方法があれば教えてください!
>>51 日付設定がおかしくなってんじゃないの?
Windowsの設定と対象ファイルのタイムスタンプを確認しる
53 :
デフォルトの名無しさん :03/06/27 09:14
>>52 全くそのとおりでした。
ありがとうございました。
54 :
デフォルトの名無しさん :03/06/27 10:56
やっぱ探したけど、VC++単体だとアイコンやビットマップファイル無さそうです。 どこからか入手出来ないかな?
>>54 VC++単体は持ってないので分からないけど
もしかしてCD-ROMの方に収録されてるんじゃ?
>>54 C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Win95\
にあったけど。VCのCDを *.ico *.bmp で検索すれば出てくるんじゃないかな。
//俺は、そういうアイコンは ExtractIconEx() とか SHGetFileInfo() で
//OSの実行ファイルから直接アイコン取得して表示してるよ。
57 :
デフォルトの名無しさん :03/06/27 17:44
WinSockを使って非同期のネットワーク接続を 実現するプログラムをDLLで作りたいんですが、 どうしたらいいのかさっぱりです。 なにか参考にできるような資料はありますでしょうか? わかりにくくてすみません。
58 :
デフォルトの名無しさん :03/06/27 17:52
>57 本屋行けばいいんじゃねーの?
59 :
デフォルトの名無しさん :03/06/27 18:05
VC++6.0のインテリセンス(メンバ自動表示)が働かなくなってしまったんですが、 どうやったら復活しますか? 「ツール」-「オプション」ではチェック入ってます。
>>59 プロジェクトの.ncbファイルを削除してリビルド
してみたら。
>>60 ありがとうございます。
出るようになりました。
>>57 ・DLLの作り方を勉強する。(簡単なモノから作る)
・WinSockの本でネットワークにアクセスする勉強をする。
この二つを分けて勉強すれば辿り着く。ガンガレ!
言っとくがマジレスだ。
63 :
デフォルトの名無しさん :03/06/28 00:40
「かちゅ~しゃ」のように、スプリッターウィンドウの中のビューを切り替えるには どうすればいいのでしょうか?
64 :
デフォルトの名無しさん :03/06/28 05:16
#include <cmath> int main(){ std::sqrt(1); return 0; } このファイルをBorland C++でコンパイルするとエラーは出ないのに Visual C++でコンパイルすると error C2653: 'std' : 識別子がクラス名でも名前空間名でもありません。 というエラーが出てしまいます。 なぜなんでしょうか。
cmath.h // cmath standard header #if _MSC_VER > 1000 #pragma once #endif #ifndef _CMATH_ #define _CMATH_ #ifdef _STD_USING #undef _STD_USING #include <math.h> #define _STD_USING #else #include <math.h> #endif /* _STD_USING */ #endif /* _CMATH_ */ /* * Copyright (c) 1994 by P.J. Plauger. ALL RIGHTS RESERVED. * Consult your license regarding permissions and restrictions. */
>>65 解決しました。
ありがとうございました。
67 :
デフォルトの名無しさん :03/06/28 15:50
画像の情報を生成して(ドットごとの色を指定して) ビットマップで書き出したいのですが、参考書籍や サイトでお勧めのものがあったら教えていただけませんか? とりあえずぐぐってみたものの、有力なサイトは見つかりませんでした。 GUIメニューで画像の保存とかを選ぶのではなく、 プログラムを走らせたら勝手に書き出してくれるようなのを作りたいです。
68 :
デフォルトの名無しさん :03/06/28 21:24
>67 猫でもわかる~のSDK第2章に載ってる罠
MFCを学ぶのに最適なページ知りませんか?
70 :
デフォルトの名無しさん :03/06/28 21:41
71 :
デフォルトの名無しさん :03/06/28 21:42
72 :
デフォルトの名無しさん :03/06/29 02:09
r‐-‐- ⌒ヽ | | | || i i'^i h_,|_,|_,ノ( ノ|/ | | ``".´ ´" ノ 人 入_ /~ | / | | | '; ,,----、,,,,,,,,,、、 | '; / ,,-‐―、ヽヽヽヽ | | 〔/ ))))ヾヽヽ | ト /.,,,,、、 ,ヽξ\Ξ/ | \ / ==/ .,==- レi! ヽ |\〔、 ,(_,、ノ( "",,ノ:: 6) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ '; ノ λ:" ‐=‐^ン ...::::: |/ < さいたま~!(@w荒 ト ノ λ:::::. .::.. ::...::::::/ \__________ \ ̄ \::::::::::::::// ._ \ \__/ `ヽ | \ | / ̄ヽ ヽ | HardRock ヽ i | ヽ_/ | ヽ / さ、さいたま~!! /
>>64 おれは、stdは省略して「::」だけでやってる。
これだとVC++でも、BC++でも、コンパイル通る。
ちなみに、ほんとにノーマルのBC++?
CompilerとかBuilderとか後ろに付くやつじゃなくて?
74 :
名無し@沢村 :03/06/29 16:03
質問です。 表示後に、「閉じる」ボタンで非表示にしたモードレスダイアログが再表示できなくて困ってます。 ShowWindow(SW_SHOW)で再表示しようとすると、ウインドウハンドルがないといって怒られます。 ShowWindow(SW_HIDE) ⇔ ShowWindow(SW_SHOW) の切り替えをするときに、ほかに何かしなければならないのでしょうか? MainFrmにて m_pCDialog = new CDialog(CWnd::GetDesktopWindow()); if (m_pCDialog->GetSafeHwnd() == NULL) { m_pCDialog->Create(); m_pCDialog->MoveWindow(0, 0, 90, 90, TRUE); m_pCDialog->SetImageNum((unsigned int)pDC->m_uiNumCameras); for (unsigned int i = 0; i < pDC->m_uiNum; i++) { m_pCDialog->Set(i, pDC->a.GetInfo(i), pDC->a.GetBuffer(i)); } m_pCDialog->ShowWindow(SW_SHOW); } CDialogにて CDialog::OnHide() { ShowWindow(SW_HIDE); } としています。
76 :
名無し@沢村 :03/06/29 20:28
>>75 そりゃあ「閉じる」ボタンを押した後にDestroyWindow()が呼び出されているんでしょうなあ。
>>75 >MainFrmにて
>m_pCDialog = new CDialog(CWnd::GetDesktopWindow());
>if (m_pCDialog->GetSafeHwnd() == NULL)
この辺のコードはMainFrmのどこに入ってんの?
ありがとうございます。
>>76 DestroyWindow()を呼び出している覚えはないんですが、
どこか裏で呼び出されているってことでしょうか?
>>78 えーっと、このダイアログを呼び出すためにつくったボタンのイベントハンドラの中で呼んでます。
はじめMainFrmのコンストラクタで呼んで、親(MainFrm)のウインドウハンドラ
をダイアログに渡そうと思ったんですが、うまくいかなかったので...
その後、MainFrmを前面に出したくなったので、デスクトップのウインドウハンドラを渡してますが。
どのタイミングでダイアログのインスタンスを作っていいのかいまいちよくわかってません。
80 :
デフォルトの名無しさん :03/06/29 22:16
>>79 ・「CDialog」の部分は、本当は違う名前という理解でOK?
・DoModal()してないので、DestroyWindow()は呼ばれてないと思う。
・「ウインドウハンドラ」ではなく「ウインドウハンドル」
・再表示させるときの ShowWindow(SW_SHOW) はどんな風に呼んでるの?
>ShowWindow(SW_SHOW)で再表示しようとすると、ウインドウハンドルが >ないといって怒られます。 一番大事なこの部分のコードとエラーメッセージを書いてくれないとな
>>79 >このダイアログを呼び出すためにつくったボタンのイベントハンドラ
m_pCDialog という名前から察するに、CDialogクラス(あるいはそれを継承したクラス)のポインタが
CMainFrameのメンバ変数として宣言されていると思うけど……
イベントハンドラが2回以上呼び出された場合の処理は?
どこかでdeleteしてる?
>>81 >・「CDialog」の部分は、本当は違う名前という理解でOK?
OKです。
>・DoModal()してないので、DestroyWindow()は呼ばれてないと思う。
なるほど
>・「ウインドウハンドラ」ではなく「ウインドウハンドル」
失礼しました。
>・再表示させるときの ShowWindow(SW_SHOW) はどんな風に
こんな感じです。
if (!m_pCalibDialog->IsWindowVisible())
{
m_pCDialog->ShowWindow(SW_SHOW);
}
ちなみに、閉じるボタンのところで、
ShowWindow(SW_HIDE);
Sleep(1000);
ShowWindow(SW_SHOW);
とやっても、再表示されませんでした。
>>79 Dialog::OnClose()だと特別な処理かなにかがされるのでしょうか?
プログラム実行中はダイアログは1つだけを表示、非表示にしてつかいたいので
Destroyはしたくないのですが。
>>84 上のように、唯一のダイアログを使いたいので、MainFrmのデストラクタでのみdeleteしてます。
>>85 んー、問題ないように見えるけどねぇ
やっぱ、変なとこで DestroyWindow()してんのかな。
そこから攻めたほうがいいかも。
>ちなみに、閉じるボタンのところで、
>ShowWindow(SW_HIDE);
>Sleep(1000);
>ShowWindow(SW_SHOW);
うちではできたがなぁ。
>>85 唯一のダイアログということだけど、
>>79 >どのタイミングでダイアログのインスタンスを作っていいのかいまいちよくわかってません。
作るのはメインフレームのOnCreateでいいんじゃないかい?
ボタンのイベントハンドラで
>m_pCDialog = new CDialog(CWnd::GetDesktopWindow());
なんて書いたらメモリリークが激しく起こりそうな予感。
ちゃんとポインタを初期化してチェックもしてれば別だけど。
>>87 ほかの方々
おかげさまで、少し進展しました。
CDialog の OnShowWindow() で CDialog の上に乗せるタブコントロールを
Create() していたのがまずかったようです。
お騒がせしました。
>>88 確かにメモリリークは起こりそうなのですが、上でも述べましたように、
MainFrmのコンストラクタで new CDialog(this) すると、怒られる現象に悩まされていて、
このようにしているわけでして。
でも、おっしゃるとおり、チェックしなければならないのでめんどうそうですね。
セオリーとしては new CDialog() はどこでするべきなんでしょうか?
>MainFrmのコンストラクタで new CDialog(this) すると、怒られる現象 コンストラクタの段階ではメインウィンドウができてないので当然 this->m_hWnd は NULLとなり、怒られる
>>90 >>91 他みなさま、ありがとうございます。
あとは、何とかやってみようと思います。
VC++6 です。 CArchive& ar があって、 while (ar.ReadString(buf)) { TRACE("%s\n", buf); } とかやっているのですが、ファイルの内容が表示される途中で、 CArchive exception; EndOfFile. とか表示されます。実際のファイルに EOF が入っているとかはないです。 try/catch を入れてみても catch できません。 exception が表示される原因は何なのでしょう?
age ます……
95 :
デフォルトの名無しさん :03/07/01 16:32
VC++.NETです(フォームアプリケーション) 今、読み込んだテキストファイルを文字コードや改行コードの変換 プログラムを作っているのですが '型キャスト' : 'System::String __gc *' から 'const char *' に変換できません。 というエラーが出てしまい困っています コード変換の為にfopenは欠かせないのでキャストが出来ないで困ってます char型にキャストできる方法はありますでしょうか? //ファイルダイアログボタンを押した時 private: System::Void button2_Click(System::Object * sender, System::EventArgs * e) { if(openFileDialog1->ShowDialog() == DialogResult::OK) { System::IO::StreamReader * sr = new System::IO::StreamReader(openFileDialog1->FileName); textBox1->Text=(sr->ReadToEnd()); label1->Text=openFileDialog1->FileName; FILE *in_fp; in_fp=fopen((const char *)openFileDialog1->FileName,"r"); sr->Close(); } }
ウインドウのボーダー、メニューバー、タイトルバーのサイズはどうやって求めれるでしょうか? ウインドウのリサイズの時に困ってます。 横 描画領域+ボーダーx2 縦 描画領域+ボーダーx2+メニューバー+タイトルバー と考えて、SetWindowPosでやろうとしているのですが、他に効率のいい事があればお願いします。
98 :
デフォルトの名無しさん :03/07/01 22:18
スレッド同士で何かしらの同期を取る一般的な方法ってどんな方法でしょうか?
イベント、ミューテックス、クリティカルセクション、セマフォ
100 :
デフォルトの名無しさん :03/07/01 23:08
セマフォ
101 :
デフォルトの名無しさん :03/07/01 23:10
イベント、ミューテックス、クリティカルセクション、セマフォ の内どれを使うかはMSDN読んでちょ
102 :
名無し@沢村 :03/07/02 00:57
>>96 CScrollView::ResizeParentToFit()
104 :
デフォルトの名無しさん :03/07/02 12:08
>>96 GetSystemMetrics()見れ
105 :
デフォルトの名無しさん :03/07/02 12:14
>>93 LPTSTR ReadString( LPTSTR lpsz, UINT nMax );
throw( CArchiveException );
ってあったけど、サイズ指定する必要あるのでは?
Bool ReadString(CString& rString );を通ってないって事だと思う
106 :
デフォルトの名無しさん :03/07/02 16:52
スレッドの終了の仕方を教えてください。 ThreadFile(){ while(bflag!=1){・・・・・・ } return 0; } ThreadEnd(){ bflag=1; CloseHandle(hThread); ・・・・・・ } ※bflagはグローバル変数です。 このような感じで、終了させているのですがデバックしたところCloseHandle(hThread);の部分で例外処理が起きてしまいました。 解決方法をご教授していただけると幸いです。
>>106 スレッドが実際終了したのかを確認せんとね。
WaitForSingleObject辺りを調べてみたら?
108 :
デフォルトの名無しさん :03/07/02 17:14
CloseHandle の時の hTreadの値調べたいいんじゃない? NULLとかになってない?
109 :
デフォルトの名無しさん :03/07/02 18:25
プログラム内での値をEXCELのファイルに書き出すこと はできるのでしょうか。 例えば変数の変化していく値をEXCELの各セルに書き出したいのです。 とても難しいでしょうか。
>>109 DDE使えば出来る。
・・・・・・・・・今更DDEもないかな・・・・・・・。
112 :
デフォルトの名無しさん :03/07/02 19:18
>>111 すいません。
オートメーションってなんでしょうか。
113 :
デフォルトの名無しさん :03/07/02 20:28
>>112 初心じゃ無理、COMとOLEの知識が要る
114 :
デフォルトの名無しさん :03/07/02 21:08
>>113 そうですか・・・
ありがとうございます。
テキストファイルの書き出しで我慢します。
115 :
デフォルトの名無しさん :03/07/02 22:16
>>109 私はヘタレなのでコンマで区切ってテキスト出力して、
EXCELにCSVとして読み込ませてました。
数値と文字列だけならこの方が楽なので
>>117 同感。
VC++.NETについて質問です。
方向キーなどのシステムキーの受け取り方がわからないです。ダイアログボックスにメッセージ
OnSysKeyDown() ( WM_SYSKEYDOWN ) を定義しても、システムキーを受け取ってくれない
のです。
HELPを見ると、「WM_SYSKEYDOWN」メッセージは「ALTキー + ??」に使われてしまっているようです。
VC++6.0は、OnSysKeyDownでシステムキーを受け取ることができたはずですが・・。 よろしくおねがいします。
方向キーはOnKeyDownじゃなかった?
>>120 OnKeyDownも駄目でした・・・。
122 :
デフォルトの名無しさん :03/07/02 23:18
>>118 ダイアログじゃなくて、ダイアログ内でフォーカスをもっているコントロールのWM_KEYDOWNが呼ばれてるはず
PreTranslateMessage内でWM_KEYDOWNを監視かな
>>123 PreTranslateMessageを使ってみたら、うまくいきました。
どうも、ありがとうございます。
125 :
デフォルトの名無しさん :03/07/03 01:50
リソースのストリングテーブルって、何か「セグメント」っちゅーのがあって、 16個単位でロードされるのでメモリ節約云々てMSDNに書いてあるけど、要する にリソースIDを #define IDS_STRING_A1 1000 #define IDS_STRING_A2 1001 #define IDS_STRING_A3 1002 #define IDS_STRING_B1 1016 #define IDS_STRING_B2 1017 #define IDS_STRING_C1 1032 こんな風に16単位で使う場面ごとにグループ分けしとけばいいってことでつか?
それとも先頭からIDが連番かどうかに関係無く16個まとめて(上の例では先頭の 1000から16個無いので、結局全部)ロードされるのでしょうか?
スタティックライブラリを作ったのだけど、その後がよくわかりません。 ライブラリ用のヘッダファイルは ツール→ オプション→ディレクトリ→インクルードファイル にあるパスに置いとけば#include<>で読み込まれるけどlibファイルは ツール→ オプション→ディレクトリ→ライブラリファイル にあるパスに置いとくだけじゃ駄目なの? プロジェクト→プロジェクトへ追加→ファイル でlibを追加すればコンパイルできるけどCの標準ライブラリはそんなことしなくても使えるのは何故? 自分のライブラリもヘッダファイルをインクルードするだけで使えるようななりたい。 そしてデバック用とリリース用を使い分けないと警告が出るんだけどCの標準ライブラリはどのように自動的に選択されてるの? またstdio.libとかstring.libとか見つからないけどどっかにあるの?
128 :
デフォルトの名無しさん :03/07/03 11:12
プロジェクトー設定ーリンク のオブジェクト/ライブラリモジュール
やっぱりキャストは無理なんでしょうかね・・・ string* ならキャストが出来たのですが 肝心のchar型できません・・・
>>128 ありがとう。確かにそこにライブラリ名を追加するとできた。
でも同じ名前のデバッグ用とリリース用のスタティックライブラリを同一パスに置けないから
片方の名前を少し変えるしかないね。違うパスにおいても片方がいつも優先されるから。
ヘッダファイルとライブラリの名前は違ってても大丈夫だった。
Cの標準ライブラリもこういうふうになってるのかな?
>>127 printfとかが入っているのはlibc.libでは。
>>131 ありがとう。ヘッダと名前が違ってもいいんだね。ライブラリは。
133 :
名無し@沢村 :03/07/03 13:39
>>127 ヌヒよ、ヘッダファイルに
#ifdef _DEBUG
#pragma comment(lib, "aho.lib")
#else
#pragma comment(lib, "baka.lib")
#endif
と書いておけ。
134 :
デフォルトの名無しさん :03/07/03 13:54
>>129 CStringは使っちゃだめなの?
System::String_gcが何かわからん
>>133 ありがとう。ヘッダのインクルードだけでリンクできたよ。
#pragmaは見たことあったけどどんな意味か調べたことなかった。役に立つね。
137 :
名無し@沢村 :03/07/03 16:51
>>95 System::String::CopyTo()でwchar_tの配列へ文字列をコピーする。
fopen()の代わりに_wfopen()を使う。
これでどうだ? 出来るかどうか知らないが。
>>116 すいません。詳しく教えてくださいませんか。
なんとかして使えるようになりたいんです。
>>138 単純に数値なり文字列なりをカンマで区切って書いていくだけ。
例えば、
1234,ああああ,abcd
なら、A1に1234、B1にああああ、C1にabcdが入るって感じ。
改行を入れればエクセル上でも次の行になる。
セル間を抜きたければ,,とすればいい。
140 :
デフォルトの名無しさん :03/07/03 22:40
>>139 なんどもすいません。
CSVというのがよくわからなくて。。。
何か例を書いていただけるとありがたいのですが。
出力できるまでのプログラムを書いてくれるとうれしいです。
>>140 EXCELでファイル保存するときにファイルの種類をCSVにして、
それをメモ帳か何かで見てみるとどんな風に成ってるか
分かりますよ
143 :
デフォルトの名無しさん :03/07/03 23:04
>>142 甘えてました。調べてみます。すいません。レスを汚して
>>140 CSVってのはカンマ区切りのテキストファイルだから例を挙げるまでも無いっしょ。
>>139 に書いてあるような感じだよ。
1234,ああああ,abcd
2345,いいいい,bcde
3456,うううう,cdef
4567,ええええ,defg
みたいな。ファイルのopen,read,write,closeが解らないなら正直論外。
まずそこから勉強しる。
145 :
デフォルトの名無しさん :03/07/04 00:37
CSVファイルの読み込みでできました。 ありがとうございます。
CSVの処理は一見むちゃくちゃ簡単そうだけど、 文字列にカンマや制御コードやダブルコーテーションが入っている時の処理があるから 意外と奥が深いんだよな。とくにCSVの解析。
Excelならタブ区切りの方がシンプルかもね
148 :
デフォルトの名無しさん :03/07/04 11:37
Win32アプリで、標準Cのprintfの文字列が指定した桁より小さかったら、 スペースで埋める、-だったら、左寄せにするみたいなこと出来ますか? やり方を教えてください。
>>148 printf使えば?
ウインドウとかに表示するならsprintfで文字列作って表示。
もしくはCStringのFormat()。
>>137 char g[100];
System::String::CopyTo(0,g,100,openFileDialog1->FileName->Length);
FILE *in_fp;
in_fp=_wfopen(g,"r");
これでやってみましたが
2 番目の引数を 'char [100]' から '__wchar_t __gc[]' に変換できません。
__gc 配列と Object * または Array * 間でのみ変換できます。
というエラーが出て出来ませんでした・・
CopyToの使い方が間違ってるのかな?
153 :
デフォルトの名無しさん :03/07/04 15:25
1つのプログラムの1セット全部(exe,cpp,dsw等)をCDを介して別のパソにコピーし、 dswを開いた所、ClassView情報ファイルにアクセスできませんと出て、また ビルドした所、プログラム データベース '\debug\vc60.pdb' を開けません、とでました。 そこで、Debugフォルダの中の全てのファイルを消して、再度ビルドした所 できました。ただ、関数名を書いて(を書いた時に出てくる仮引数リストが出なく なり、また、上の所の関数一覧表も表示されなくなりました。解決方法を教えて ください。
>CDを介して別のパソにコピーし、 実はリードオンリ属性がついたままという落ちではあるまいな
155 :
デフォルトの名無しさん :03/07/04 15:56
>>154 そういう落ちになってしまいました。
一度消してしまうと、関数名を書いて(を書いた時に出てくる仮引数リスト
が出なくなり、また、上の所の関数一覧表も表示されなくなると言うのは
もう復活できないんですか?あと、この現象は、ソースをコピーしてビルド
した時などにも起こることがあります。
初めの二つの問題は、ドラッグ→プロパティで一気に属性を変える事で 解決できました。また、後の二つの問題も同じ方法で解決できたのですが、 一度消してしまったので、だめになってしまったようです。 ユーザー関数があるという認識(仮引数-型-名前表示、ウイザードバーの表示) を更新させるには、まず、ヘッダーファイルがあると認識されてなければ ならないようです。新規にヘッダーファイルを作って、コピーする事で その瞬間に、全てのユーザー関数が一度に認識されました。 ここでの認識されていないというのは、ビルド等は普通に行なえるが、 便利な機能が使えなくなっているということです。 認識されなくなったヘッダーファイルを認識させる方法があるなら教えてください。
157 :
デフォルトの名無しさん :03/07/04 18:17
wstring ws = L"あ"; ws.c_str()が返してくれるのは、ASCIIでしょうか、ウニコードでしょうか。
160 :
デフォルトの名無しさん :03/07/04 21:09
CPUの周波数によって表示を変えたり メモリーの容量で表示を変えたり HDDの容量で表示変えたり OSによって表示変えたり実行できるOS制限したり できませんか?
できますが、マルチなので教えません。
162 :
デフォルトの名無しさん :03/07/04 21:20
どうやって?
164 :
デフォルトの名無しさん :03/07/04 21:43
ncbは消してもダメでした。clwはありませんでした。用語的には、 ウィザードバーはこのファイルをトラッキングしていないと言うみたいです。
166 :
無料動画直リン :03/07/04 22:38
>>165 >clwはありませんでした
じゃ作れよ
>>167 作るもんなんですか?ncbとかoptみたいに勝手に作られるタイプのものだと
思っていました。ただ、考えてみると、無いという事は消す必要が無いと
いう事で、作る必要も無いと思うのですが。どういうものなんですか?
169 :
名無し@沢村 :03/07/05 02:30
>>151 ヌヒよ、managed C++ の基本を勉強したほうがいいんじゃないのか?
そういう俺も使ったことはないんだが。
String* s = openFileDialog1->FileName;
__wchar_t g = __gc new __wchar_t[s->Length + 1];
s->CopyTo(0, g, 0, s->Length);
g[s->Length] = L'\0';
FILE* in_fp = _wfopen(g, L"r");
こんな感じでどうだ?
MSDNライブラリ見ながら適当に書いてみたが。
170 :
デフォルトの名無しさん :03/07/05 03:28
初心者です。 「USB接続されている全デバイスの取得」や 「USB接続されているCF」を検索出来るような APIってありますか? 宜しくお願いします。
だれか(;´Д⊂)
>>171 Spy++でExplorerを見る位しましょう。
WTLのCPaneContainer/CPaneContainerImplを調べれ。
>>174 ありがとうございます。早速調べてみます。
できました。 プロジェクト→プロジェクトへ追加→ファイル→ファイルを選んでOKをクリック です。複数を一度に行ないたい場合は、ドラッグしてOKをクリックでできます。 お答えいただいた方、ありがとうございました。
177 :
デフォルトの名無しさん :03/07/05 16:07
エディットボックスやボタンを作ったんですけど そのボタンをもう使わないからDELETEで消すとエラーが現れます。 そのボタンに関連のある変数を全て消してもエラーが出ることがあります。 使わないボタンを消すにはどうやって削除するといいんでしょうか。 今は可視ボタンを無効にして見えなくしてます。
>>177 手動
Delphiなら自動なんだけどね
179 :
デフォルトの名無しさん :03/07/05 17:00
またDel厨が出てきた。ウザイ。
182 :
デフォルトの名無しさん :03/07/05 20:08
>>181 消せないだろ?
手動で消せって警告でてくるのに
確認したのはVC6だけど
変数しか消してないのか。ボタンのハンドラや他の関連するコードは消してないのか。
C#なら楽なのに(激藁
187 :
デフォルトの名無しさん :03/07/05 21:24
MFCを使ってソースを書いている場合にスレッドを作るときはCreatThreadで作ると終了時に例外処理は出やすくなるんですか? ダイアログを終了させたときに例外処理が出てしまいます。 教えていただけるとうれしいです。
>>187 関係ないと思われ。複数のスレッドから同時にオブジェクトを操作する
場合には非MFC時同様の注意が必要。
VS.NETで、windows.hをインクルードしてるのに WS_EX_LAYERED が、定義されてないってでるのは何でだろう マウスをかざしたらインテリセンスが働いてちゃんとでてるのに
191 :
名無し@沢村 :03/07/05 23:22
>>190 _WIN32_WINNT を正しく定義していないから。
>191 _WIN32_WINNTでぐぐったら猫でもわかるがヒットしました 基本中の基本だったんですね、すみません
プログラミングをやってみたいと思い、visualc++.netを買ったんですが C言語の知識がない為、使い方がわからない状態です。参考本というのも .netに関して殆どなく、amazonで評判の良かった"やってトライ"を買った のです初めからプログラミングされているサンプルを書き換えて行くともの ばかりで、中途半端にしか理解出来ない状態です。 質問は二つなのですが、c++.netを使う上でC++6.0やC#の本は初心者に参 考になるでしょうか?0からプログラミングを組んで行く過程を載せている ような参考書はないものでしょうか?
>>6 0からプログラミングを組んで行く過程を載せている
ような参考書はないものでしょうか?
Cからやれ・・・
非常に地味に感じるかもしれないけど。
そんなに回り道ではない
>>6 (
>>193 )
>>194 氏の言うと通り、CやC++の基本の部分からやってみれ。
以外にも重要で、Win32プログラムを作る上でも、MFC使っていても
基本は使っていくもの。
それから「猫でもわかる」で、最初からやっていくのも手。
しっかしよくわからないものをよく買う気になるよなぁ
「金をだしたら、モトをとるため意欲が出る」というヨタ話でも 真に受けたんではないか?
200 :
デフォルトの名無しさん :03/07/06 05:35
おれもc++.netってただのC++6.0の次のバージョンだとおもってたw
>>195 「猫でもわかる」ですか。探してみます。
>>194 ,202,203
CとC++が同じ物だと思っていたのですよ。実際今でも違いがわかりませんが
C++.NET以外の参考書がc++.netに通用するかどうかが怖い所です。
>>196 ,197,200,201 お褒めの言葉どうも。(.ー.)
金をどぶに捨てるつもりはないんですがね・・・。
近い将来どうしても使わなくてはならないのです。
いまどき通じるのか知らんが C++の書籍=グラマー VC++の書籍=リーダー あと一緒だろうとたかをくくってボーランド系の本を買う儀式が あなたを待っています
206 :
デフォルトの名無しさん :03/07/06 13:01
Cstring型に入っているshift_jis文字列をunicodeに変換する簡単な方法ってありますか?
208 :
デフォルトの名無しさん :03/07/06 14:17
VC++でMFCの関数や使い方が乗っている詳しい本知りませんか?
すいません、C++で生成されたクラスインスタンスの解放について質問があります。 以下のコード中の"※"が付いたコメント部分について、いったいどちらが正しいのでしょうか。 void test() { int i,cnt; cnt = 3; // この↓クラスは定義/実装済みとして... TestClass *arrCls; arrCls = (TestClass*)malloc(sizeof(TestClass)*cnt); // こんな初期化はいらない? for(i=0;i<cnt;i++) arrCls[i] = *(new TestClass()); arrCls[0].doSomething(); // ※ 下でメモリをfreeにするなら、個別にdeleteはいらない? for(i=0;i<cnt;i++) delete &arrCls2[i]; // ※ 上で個別にdeleteするなら、ここでfreeはいらない? free(arrCls2); }
メモリは動的に確保した分だけ解放しなければならない。 その前にvectorなりCArrayなり使ったほうが。
>>210 ありがとうございます。で、その解放の方法について、知りたいんです。
>>209 のソースのように、mallocでメモリを確保して、そこで個別にnewしている場合、
delete するべきなのか、それとも freeで終わっていいのか、と悩んでいます。
> その前にvectorなりCArrayなり使ったほうが。
すいません、勉強(基礎固め)中なので、あえてこんな事しています(苦笑
> for(i=0;i<cnt;i++) arrCls[i] = *(new TestClass()); これは、newしたインスタンスのコピーするわけで、 newした分がリークする。リークするので、deleteの しようがない。 どーしてもmallocでいくなら、placement newを使うこと。
213 :
名無し@沢村 :03/07/06 15:22
>>212 すいません。気づきませんでした。
>>209 のソースだと、deleteされるのは、コピーされた方ですね。
> どーしてもmallocでいくなら、placement newを使うこと。
..なるほど。..っていうか"placement new"の意味がわからないので、
ちょっと調べてみます。ありがとうございました。
215 :
デフォルトの名無しさん :03/07/06 19:01
自分全く知識が無いんですが まず何を見て勉強すればいいんでしょうか。 検索しても何が何やら・・・ 本買った方がいいですかね?
まぁ何も知らない人がVCを買っても、 VCをVCとして意味のある使い方が出来るまで数ヶ月~数年かかるわな。
ちょっと(不?)便利なエディタを買いました ぐらいの認識を脱する頃には次のバージョンの告知がきてますた BCCからはじめろっていうのはあながち間違ってないかも
>>215 まず猫に逝け!
使い方が分からんの何にもならんからな。
パッケージ品を買えば物事が解決すると思ってるんだろうな・・・
べつに
その点、割れ厨は有料無料どころか英語だろうが有効な情報を探すのに余念がないぞ ページ単位で雑誌のスキャン画像が出回ってるのには驚いた 犯罪だけど熱心さだけは大したもんだよ
225 :
デフォルトの名無しさん :03/07/06 23:16
コマンドラインアプリケーションを作っているのですが、 セットアップしたらPATH環境変数も設定されている状態に したいのです。 セットアッププロジェクトでインストールフォルダの パスをシステムのPATH環境変数に自動登録する方法が 分かりません。 どなたか、お教え下さい。
227 :
デフォルトの名無しさん :03/07/07 00:05
コンボボックスの扱い方について質問です。 コンボボックスをダイアログに挿入し、変数のタイプをCComboBox、カテゴリをコントロールに設定し、 後は何も手を加えずに実行したところ例外処理が出てしまいました。 なぜでしょうか? どう対処すればよいか教えてください。
228 :
デフォルトの名無しさん :03/07/07 00:49
>>226 ありがとうございます。
これでうまくいくかと思ったのですが、
セットアッププロジェクトは環境変数を
変更(置き換え)してしまいます。
PATH変数の現在の値とインストール先の
フォルダのパスをマージするにはどうしたら
良いのでしょう?
現在の値 + ";" + フォルダのパス を書き込め!
230 :
デフォルトの名無しさん :03/07/07 01:21
>>229 セットアッププログラムなので、現在の値自身は
分からないのです。現在の値を取れるかと思い、
%path%を書いてみたのですが、レジストリに
%path%と書かれてしまって、登録前の値を取り出す
ことができませんでした。
>>213 ありがとうございました
早速試してみます
>>213 検索したらMSDNサイトに引っかかりました
これからは自分でもっと調べます
余計な手間かけてすみませんでした
233 :
デフォルトの名無しさん :03/07/07 14:21
すいません。エラーが消えないので質問します。 新しいダイアログを作ってコンストラクタでそのダイアログを作成するようにしたら エラーになりました。以下のことを行うまではエラーになりませんでした。 ①新しいラジオボタンを以前にあったラジオボタンの数から追加した。 しかも、メインのダイアログとは別に2つダイアログを新しく作っているのですが、 そのうちの一つはダイアログの作成関数をコンストラクタで作っているのに その関数をとばしてしまいます。 これはどういう原因なのでしょうか
>>233 別なコンストラクタ呼んでねぇ?
引数確認しる
>>169 教えてもらったやり方でやってみたらエラーがなくなりました
ありがとうございました
もう少し変数や関数の勉強します・・
>>227 あれだな、リソースIDがバッティング(重複)してる可能性あり
resource.hを開いてそのコンボボックスのIDを確認しる
そんで別のコントロールに同値のIDが割り当てられてたら
そのIDを他のIDに変える
変えるIDはresource.hの下のほうに
#define _APS_NEXT_CONTROL_VALUE *** ***は数字
になってるからその数字を割り当てて
_APS_NEXT_CONTROL_VALUEの値を+1する
例えば #define _APS_NEXT_CONTROL_VALUE 32768 になってるなら
32768を割り当てて
#define _APS_NEXT_CONTROL_VALUE 32769 にする
237 :
デフォルトの名無しさん :03/07/07 22:26
>>236 ありがとうございます。早速、調べてみます。
助かりました。
238 :
デフォルトの名無しさん :03/07/07 22:55
文字の比較について教えてください。 char cBuff[]=" "; strcpy(cBuff,m_edit); if(strnicmp(cBuff,"M",1)==0) { ・・・・・ } 文字列はエディットボックスからCString型で取得し、char cBuff[]にキャストしています。 ここで、エディットボックスに’M'を入れてデバックするとif文を通り抜けてしまい同じ文字だと認識してくれません。 どうしてでしょうか?教えてください。
>>238 デバッグでifでブレークしてその時のcBuffの内容を見てみたら?
240 :
デフォルトの名無しさん :03/07/08 00:38
>>240 おっ。いろいろなタイミングでかわるのは知っていたが、
ちゃんと国ごとにあわせているとは。やるな。
242 :
デフォルトの名無しさん :03/07/08 14:01
自作のプログラムを実行すると、 「例外処理 (初回) は xxxxxxxxx.exe にあります: 0xC0000005: Access Violation。」 と出てしまいます。 プログラムの処理自体は終了しているみたいなんですが…。 原因とかわかりますでしょうか?
244 :
デフォルトの名無しさん :03/07/08 22:18
245 :
デフォルトの名無しさん :03/07/08 22:28
スレッド内で、UpdateData(false)を使ってダイアログに表示しようと思ったんですが、 表示できませんでした。 スレッド内で得たデータをダイアログに常に表示しようとするときはどうすればよいんでしょうか?
>>245 メッセージ飛ばすとか。
つーかダイアログに何を表示しようとしてるの?
247 :
デフォルトの名無しさん :03/07/08 22:39
>>246 こんなことしてないか?
CHogeDlg::Hoge()
{
AfxBeginThread( worker_thread, (LPVOID)this );
}
UINT worker_thread(LPVOID ptr)
{
CHogeDlg* pDlg = (CHogeDlg*)ptr;
pDlg->m_edit = "(゚д゚)ウマー";
pDlg->UpdateData(FALSE);
}
249 :
デフォルトの名無しさん :03/07/09 21:43
>>248 思いっきり似たようなことしてます・・・・(多分)
スレッドについて、それ以上にVC自体もまだまだ、勉強が足らない部分があるので、
良いアドバイスを頂けるとうれしいです。
250 :
デフォルトの名無しさん :03/07/09 23:06
エクセルの表に書かれた文字や数字を書き換えたい場合 どんな関数を使えばよいのでしょうか?
>>249 そのうちASSERTで怒られるよ。要はCWndオブジェクト(派生含む)は、他のスレッ
ドに持ち越せないということ。(MSDNの「MFCテクニカル ノート 3: Windows ハ
ンドルとオブジェクト間のマップ」参照)
スレッドには、ダイアログなりエディットボックスなりの HWNDを渡してSetWindowText
や SetDlgItemText など使うか、
>>246 のようにダイアログに文字列をユーザ定義
メッセージで送信(スコープに注意)して、ダイアログ側で更新処理をするとか、
いろいろ考えられる。
252 :
デフォルトの名無しさん :03/07/10 23:01
すみません。 動的にビットマップ リソースを描き換える方法ってありませんか?
253 :
名無し@沢村 :03/07/10 23:11
>>250 ヌヒよ、それはVBAでスレ違いだが教えてやろう。
RangeオブジェクトのValueプロパティかFormulaプロパティを書き換えるんだよ。
Visual C++のデバッカーが起動したときuserinitのせいでフリーズするんだけど、 おんなじ症状が出た奴いない?Windows2000でね。
>>253 >>255 ありがとうございます。
超初心者なもので・・・excelvbaについて勉強します。
ついでにCOMって何でしょうか?
すいません検索しても分からなかったもので
DDEで逝け
258 :
デフォルトの名無しさん :03/07/12 16:06
今日Visual C++.net standard 2003 を買ったのですが、インストール時に何も言わずに インストーラが落ちます。同じ現象の方いらっしゃいませんでしょうか?何が悪いのか見当 も付かずに困っております。誰か助けて下さい。 環境: WindowsXP Home Edition (sp とか Windows update は全部入れました) Visual Studio 6.0 が入っていたのを普通にアンインストールした 手順: Disk 1 で setup.exe を実行したら Prerequisties ディスクを求められたのでそれを入れて インストール手順の 1 の "Visual Studio.NET 必須コンポーネント" は無事終了。 2 の "Visual C++.NET" に進むと Disk2 が求められるので入れると、必要ファイルをコピーし 始めているようなメッセージが出て来て、その後に「1,2分かかります」みたいなメッセージ付き のプログレスバーの付いたダイアログが出て来て、その後にチラッと "Visual C++.Net セットアップ" というタイトルのウィンドウが一瞬出たかと思ったらすぐ消えてその後何も起こりません。 Prerequisties の修復インストールを何度もやってみたりしたのですが、ここから先に全く進まな いんです。どなたか解決策を御存知とか、心当たりのある方教えて下さい。お願いします m(__)m
>>259 どーもです。でもそこは一応見たんですよね。
で、ウィルス関係のソフトも別に入れてないから関係無いだろうと思いつつ、
一応試してみたけどやっぱ何も変わらないのです。
下の関連情報の所にあるようなログを吐くようなところまですら行かないので何も手掛りが無い…
黙って落ちるインストーラーなんてどうしていいのか分かんないですよぅ。
このままインストール出来なかったら返品…出来ないんだろうしなぁ…。どうしよう…。
>>260 CD-ROMが破損してるんじゃないかい?
チェックサム(あるのか?w)汁。
皆様ありがとうございますm(_ _)m とりあえずこのまま分からなければサポートに問い合わせようとは思っているのですが、 まずは僕のマシンが悪いのかCDが悪いのかを切り分けるために月曜に仕事場のパソコンに インストールしてみる事にします。 一応ライセンスとしては僕一人で使う分には複数台にインストールしても良いみたいなので。
264 :
デフォルトの名無しさん :03/07/12 23:14
265 :
名無し@沢村 :03/07/13 00:07
↑ ブラクラ
267 :
デフォルトの名無しさん :03/07/13 19:13
すみません。 混合モードがデバックすると突然出てしまうのですが、混合モードの見方を教えていただけませんか? →5F42B249 cmp dword ptr [eax],1 こんな感じで出てしまうのですが 何を意味しているのかさっぱりわかりません。 お願いします.
>>267 >>混合モードがデバックすると突然出てしまうのですが
コードペインを開いてる?
>>こんな感じで出てしまうのですが 何を意味しているのかさっぱりわかりません。
アセンブラ(ニモニック)
269 :
デフォルトの名無しさん :03/07/13 21:21
すみません。 メニューやメッセージボックス等に割り当てられている システムフォントを取得するには、どうしたら良いでしょうか?
271 :
デフォルトの名無しさん :03/07/14 00:26
exe とか dll のバージョンってどうやって管理してますか? 1.xx.bbbb で、x がマイナーバージョンで b にビルド番号とかがくるかと思うんですが そこまで管理してますか?
デスクトップのリストビューを詳細表示に変更したいのですが やり方がよくわかりません。 SetWindowLongでスタイルをLVS_REPORTにして、 ListView_InsertColumnで列を追加しても、ファイル名の列しか 表示させられません。しかも列見出しの部分はキャプションが 表示されないです。根本的にやり方間違ってますか?
すいません、環境書き忘れました。 VC6 SDK(非MFC)でOSはW2Kです。 よろしくお願いします。
外部エディタって使えますか?
>>271 MSのどっかの文章で以下のような記述を見たような気がする。
メジャー = 同じ製品シリーズだが、途中で開発を分岐したか、あるいははじめから別開発。基本的に下位バージョンとの互換性は考慮しない。
例)VC++6.0とVC++7.0
マイナー = 機能の変更・拡張があるが、可能な限り互換性を残したもの。
例)VC++7.0とVC++7.1
リビジョン = 仕様の変更は無いが不具合の修正を行ったため、アップデートの必要があるもの。
例)VC++6.0とVC++6.0 SP1
ビルド = 不具合の修正を行ったもの。公開しないかも。
.NETではまた違うわけだが。
>>272 なんか足りない。
LV_COLUMN構造体辺り調べるとわかるかも。
278 :
デフォルトの名無しさん :03/07/14 22:10
DWORD型で指定した値をTRACEで見るとき、%? でみればいいんですか。
>>277 ListView_InsertColumnで、LV_COLUMNをパラメータとして
渡してるんですけど、全く無視されてる感じなんですよねぇ(´・ω・`)
そもそもデスクトップの場合、列見出しの要素はwindowsによって
初めから決められてる気がするんだけど、違うのかなあ・・・
デバイスコンテキストのHDC構造体の 基本的な仕様の説明とその関連の応用例について、 比較的わかりやすくまとめてレポートされてあるサイトって どこかにないでしょうか?
訂正。HDCは構造体ではなくハンドルでした(´・ω・`) VC++におけるハンドルの定義自体が概念的にいまいち理解できていませんが。 ハンドルって要約するとプログラム的に一体どのように処理されているのでしょうか?
ハンドルの中の人も大変ですね
>>281 別にそんなもん気にせんでもプログラミングは出来る!
つーか誰もしてねーだろ。
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
質問です。 1. 複数のスレッドから、一つのウインドウにメッセージを Post or Send したときに、競合は発生しないで、 順番待ちするという理解でよいでしょうか? 2. 複数のスレッドで、一つの構造体を利用したいとき、クリティカルセクションを使うと思うのですが、 そのときに、構造体の変数ごとに、Lock, Unlock を呼び出す関数を定義するのは効率が悪くて大変です。(メンバがいっぱいある) もっと効率のよい方法はないでしょうか。 例 bool Get~~1(); void Set~~1(bool abc); bool Get~~2(); void Set~~2(bool efg) ・ ・
>>281 ハンドルは、ウインドウズ内部のリソースを隠すためのもので(直接扱うと危険)
リソースのポインタテーブルのIDみたいなもんだよ
287 :
デフォルトの名無しさん :03/07/15 11:57
すみません。 uxtheme.dllを遅延読み込みにしたいのですが、出力ウィンドウに 「xxxx.obj : warning LNK4229: 無効なディレクティブ '/DelayLoad:uxtheme.dll' が見つかりました。無視します。」 と表示され、/DelayLoadインポートが認識されていないようなのです。 なので、WinXP以外のOSで、開発したアプリを起動させようとすると 「uxtheme.dllが見つかりません。」 というエラーメッセージが返ってきて起動しません。 #include <Delayimp.h> #pragma comment(lib, "Delayimp.lib") #pragma comment(lib, "uxtheme.lib") #pragma comment(linker, "/DelayLoad:uxtheme.dll") ↑これでも通常通りuxtheme.dllが先に読み込まれてしまいます。 遅延読み込みにするにはどうしたら良いでしょうか? 開発環境はVC++.netです。
>>287 DelayLoadは#pragmaで指定できない
プロジェクトの設定いじれ
289 :
デフォルトの名無しさん :03/07/15 12:08
エディタ部分の質問なんですが、 ソースウィンドウでカーソルのある行に下線を出すことはできないのでしょうか? カーソル行が認識しやすくなれば他の方法でも知りたいです。 ちなみにVC++6.0をつかってます。
>>285 >2. 複数のスレッドで、一つの構造体を利用したいとき、
個々の変数を保護するんじゃなくて
操作(operation)を保護すべき。
そうでないと不必要に複雑になって破綻するかもね。
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
292 :
デフォルトの名無しさん :03/07/15 15:17
FormViewに貼り付けたコントロールのサイズを 動的に変更するにはどうすればいいんでしょうか? C#なんかでいうDockプロパティでの動作がしたいのです。
>>290 なるほど、そうしてみます。ありがとうございました。
>>294 ありがとうございます。
試しにOnSizeでMoveWindow(0,0,cx,cy,TRUE)してみました。
解決しました・・と、思ったら・・
試しているのはListCtrlを貼り付けたFormViewなんですが、
ウィンドウサイズを小さくしてスクロールバーが出ると挙動が変です。
スクロールするとListCtrlの下にFormの地がでてきます。
元のFormを物凄く小さくしてみたり、OnGetMinMaxInfoで最小サイズを
決めてスクロールバーが出ないようにしてみたものの・・
スマートなやり方はあるんでしょうか?
スクロールバーを出さなければ良いのならビュークラス内でSetoScrollSizeすれば良いかも
ModifyStyle(WS_HSCROLL | WS_VSCROLL, 0); でスクロールバー消せたかも
>>297 ありがとうございます。
void CxxxView::OnInitialUpdate()に
SIZE total, page, line;
total.cx = total.cy = 1;
SetScrollSizes(MM_TEXT, total, page, line);
を足したら思いどうりの動作になりました。
問題は・・よく理解できてないこと(´・ω・`)ショボーン 精進します。
>>298 動作しないスクロールバーが出てしまいました。
私のやり方が悪かったのかもしれないですが。
>>295 今回は試しませんでしたが、MoveWindowと似たことが
出来るのかな? ありがとうございました。
>>286 ありがとうございます。
なんとなくですが理解できました。
HDCについてはなんも解決しておりませんがw
301 :
デフォルトの名無しさん :03/07/16 18:27
すみません。 コンボボックスのリスト部分の高さを、 リソースを編集する方法ではなく、 動的に変更するにはどうすれば良いでしょうか?
>>301 試してないけど、 CComboBox::MeasureItem をオーバーライドして実現できないかな?
>>301 MoveWindowとかウィンドウの大きさを変更する方法でOK。
コンボボックスの場合はウィンドウの大きさ=リストボックスまで含んだ大きさで、
選択文字列表示部はそのウィンドウの高さに依存しない。
305 :
デフォルトの名無しさん :03/07/16 23:54
VC++6.0(5.0かも?)でVISIOライクなソフトを作っています。 ビューに矩形や楕円などのオブジェクトを配置したりして 図を描いていく感じです。 そこで質問させてください。 ScrollViewを使って画面の拡大縮小をやろうとしています。 SetViewportExt と SetWindowExt を使って拡縮比を決めるのは 分かったのですが、 SetViewportExt と SetWindowExt どちらの 値を変更するのが一般的なのでしょうか?(楽に扱えるでしょうか?) 何段階かに拡大できるようにしているのですが、ビューをスクロールしても 常に画面の中心を拡大していく方法は無いのでしょうか? ScrollToPosition(うろ覚え、違うかも)を使って真面目に計算するしか 無いのでしょうか? すみません、まだ全然C++やVCに慣れていないもので的外れな質問かもしれませんが よろしくお願いいたします。
306 :
デフォルトの名無しさん :03/07/17 13:55
浮動小数点aがあたえれれたとき、少数以下n桁に四捨五入した文字列を返す関数を定義し、その動作を確認しなさい。 こんなレポートがでたのですがさっぱりわかりません。誰かわかりませんか?
わかります。
再び質問させていただきます。 HDC hDC = ::GetDC(0); で得られるデバイスコンテキストのハンドルとは 一体どんな(どういう場面で使われる)デバイスコンテキストなんでしょうか? 以前、MSDNライブラリかどこかに書いてあったのを見たような気もするのですが、 今探すとどうも肝心なところが見つからないもので・・・
>>309 スクリーンのデバイスコンテキストを取得する。
よく「デスクトップの」などと説明されてたりするが、
それだとデスクトップのリストビュー部分みたいな感じがするからよろしくないな。
用途はありがちなところでは、スクリーンキャプチャとかスクリーンに描画とか。
後者はプレゼン用のマーカーツールとかな。
MSDNには例によって英語版にだけ書いてある。
.NET以降の日本語版は新しくなってるようだが未確認。
311 :
デフォルトの名無しさん :03/07/17 23:57
VC++で作られたソフトにはどんなものがあるの?
Officeとか
315 :
デフォルトの名無しさん :03/07/18 09:26
SDIでCSplitterWndを使い下の様なViewを作りました。 A ┌──┬─────────┐ │ │ │B │ │ │ │ ├─────────┤ │ │ │C │ │ │ ├──┴─────────┤ │ │D │ │ └────────────┘ ウィンドウの高さを変更するときDの高さはそのままにしたいのです。 ただC,D間のバーを使っての変更は可能のままで。 CMainFrame::OnSizeでSetRowInfo(),RecalcLayout()をやってみたものの どうもうまくいきません。Dの高さを保存しておけばよいのかとも思いますが どのタイミングで保存すればいいのかも分かっていません。 何か良いやり方ありませんでしょうか?
316 :
デフォルトの名無しさん :03/07/18 09:29
フルパスで指定したファイルが存在するかしないかを 返してくれるAPIってありますか? GetFileAttributesが0xFFFFFFFFかそうでないかで 判定するとか、CreateFileを使っても良さそうですが、 なんかそのものズバリなAPIってないんでしょうか。 Is~なんて名前で無いかとMSDNで探してみたんですが 見つけられませんでした。
>>318 shlwapiにPathFileExistsというのがある。
別にGetFileAttributesでいいと思うが。マクロにでもしておけば。
Shell API は遅いというイメージが。そんなことないですよねぇ?
318です 319さん、早速ありがとうございます。 ズバリなAPIですね。やっぱり探し方が甘いのかしら。 マクロって#defineするやつですよね? 引数も取れるんですか。やってみます。 ありがとうございました。
>>320 中で何やってるのか知らんから何とも言えん。
プロファイリングしてみるしかあるまい。
そういや昔Win32API質問箱でちょっとした話題になってたな。
GetAttributes、CreateFile、FindFirstFileのコストで。
>>321 #define IsExists(a) (GetFileAttributes(a) != 0xFFFFFFFF)
322さんレスありがとうございます 引数を取れるっていう言い方はおかしかったですね。 FindFirstFileもありましたか。 ちょっと興味があるのでWin32API質問箱の過去ログあさってみます。
初めて質問させて頂きます。よろしくお願いします。 開発環境はVC++6.0です。 まず、クラスAのprotectedメンバにクラスBを持たせます。 そしてクラスAのインスタンスを作成すると、クラスB→クラスAの順にコンストラクタが実行されることがわかったのですが、 この時クラスBではデフォルトコンストラクタが実行されているようです。 上記の状況でクラスBのデフォルト以外のコンストラクタを実行することは可能でしょうか? (クラスAのコンストラクタのみを実行して、クラスA,そしてクラスA内のクラスBの初期化を完璧に行いたいのです) また不可能である場合、クラスB内に初期化関数を用意しクラスA内から実行する方法では何か問題があるでしょうか?
>>324 Aのコンストラクタで初期化記述子を使用すればよい
A::A() : m_B(1)
{
//m_BはBのインスタンス
}
「:」の後がそれ。あとはヘルプか参考書でも見て。
class A{ A(){m_pB = new CClassB(hoge);} ~A(){delete m_pB;} protected: CClassB* m_pB; }
>>323 FindFirstFileは検索に使う奴だろ?
今回は使えん事は無いが面倒なだけだと思うが?
存在するかどうか「検索」するんだし、CreateFileよりは引数も少なくて簡単だと思うが
FindCloseするのがメンドリ
そこまでわかるなら直リンすれや
>>310 ありがとうございます。
ここでいうスクリーンというのはデスクトップ画面全体の画面領域との解釈でよいのでしょうか?
336 :
デフォルトの名無しさん :03/07/19 22:23
Dlgクラス内の関数から何も派生、継承されていないNameというクラスを作りその中にa(int num,char *buff1) という関数を作りデバックしたところ値はきちんとa関数に渡されるのですがその後、m_edit1=buffのところで 例外処理が出てしまいました。どうすればよいのでしょうか? OnBUTTON1() { int i; char buff[8];CString cs; Name *pMyname; pMyname=new Name; Updatedate(true); cs=m_edit1; strcpy(buff,cs); i=1; pMyname->a(i,buff); m_edit1=buff; Updatedata; } a(int num,char *buff1) { int num2; char buff2[8]; num2=num+1; strcpy(buff2,buff1); strcat(buff2,"aa"); } こんな感じで作ってみたんですが、うまく動きませんでした。 誰かご教授してくださると幸いです。
337 :
デフォルトの名無しさん :03/07/19 22:29
>>336 すみません。上のUpdateData(true)とUpdateData(false)打ちミスしました。
>>336 用語を正しく使って書き直し。
ところで、
>Updatedate(true);
>Updatedata;
これなんじゃい。
まだ悩んでます~w どなたか解決のヒントを・・
CSplitterWndの派生クラス作りつつ考えております。
新たな疑問なんですが
>>315 の画面を作り、CとDの間の分割バーを左クリックすると
クリックしただけで下に2pixel分割バーが動いてしまうのですが
なぜでしょうか?他の分割バーは左クリックだけでは何も起こりません。
>>336 strcat(buff2,"aa"); でバッファあふれてるんじゃねーか。
usleep がつかえないんですけどどうしたらいいですか? ちなみにエラーメッセージは c:\program files\common files\system\mapi\1041\kita.cpp(19) : error C2065: 'usleep' : 定義されていない識別子です。 以上よろしくおねぎあします
VCにusleep()は実装されていません(VC6以外は知らない) Sleep()でも使ってください(ミリ秒単位) マイクロ秒単位での中断なら無理だけど
343 :
デフォルトの名無しさん :03/07/21 09:34
SP5をインストールしようとしてるんですが、「他のアプリが使用中」と言って、 MSVCP60.DLLがコピーできません。 ノートンとかを停止させてもダメ。 しょうがないからシステムフォルダに直接コピーしようとしたら、今度は 「Windowsが使用中だから」と言ってコピーできない。 どうしたらよいのでしょうか?
344 :
デフォルトの名無しさん :03/07/21 10:01
.NETのSDKにはC++のライブラリが含まれていないようですが、 Platform SDKていうのをインストールすると、 タダでC++もコンパイルできるのですか?
>>344 それはC++標準ライブラリが含まれているか?という質問か?
それともC++コンパイラが含まれているか?という質問か?
>>343 それ、なるよね。
使用中のファイルを再起動時に置き変えるソフト、探すとあるはずだからそれ使う。
>>345 C++標準ライブラリが含まれているか?という質問です。
348 :
デフォルトの名無しさん :03/07/21 13:51
VC.netでリソースファイルが追加できんんす なんでじゃろ
350 :
デフォルトの名無しさん :03/07/23 14:17
オーナーデータリストの描画ってさ リストが表示する時に表示するデータを 渡してやるって感じだと思うんだけど 元データの変更は検知してくれるのかい?
>>350 再描画する部分のリストアイテムデータを持ってくるので、
元データ変わったらUpdateしよう。
352 :
デフォルトの名無しさん :03/07/23 23:38
どうしても、解決できないんので教えてください。 現在、ファイルの中身を見ては処理、を指定フォルダ以下 全てのファイルに対して行っています。 プログレスコントロールを使いたいのですが、一度全ファイル数を 見てしまうと、結構なタイムロスになります。 これを解決する方法は無いでしょうか?
353 :
無料動画直リン :03/07/23 23:38
355 :
教えてください :03/07/24 00:09
VC++で、Waveでデータを波形にし、サンプリング周波数を出すプログラムはできたのですが、 波形の高い部分を見つけ、それをテキストに変換し保存するプログラムが分かりません。 どなたか、教えてくれませんでしょうか? 参考ソースがあるURLなどご存知でしたらお願いします。 せめて、音声データをテキスト変換するプログラムを教えてください。 お願いします。
>>355 マルチたん(;´Д`)ハァハァ
・・・失せろや
357 :
デフォルトの名無しさん :03/07/24 02:41
すみません。 エディット ボックスにて現在選択中の文字列の位置を 文字単位ではなくバッファ単位で取得するには どうすれば良いでしょうか?
>>357 長いテキストを編集するエディタを作っているのでなければ
GetWindowText() から取ってきて文字列を切り出せば
いいと思われ。
>>358 解決しました。ご教授ありがとうございました。
>>352 そんなにタイムロス出る? 一度列挙してしまえば、ファイルエント
リがしばらくはキャッシュされるので
列挙→再び列挙しながら処理 vs 列挙しながら処理
って、大して処理時間変わらないと思うんだけど。
>>360 開始するまで待たされるのが嫌なんじゃないの?
まあ、プログレスバーを適当にするしかないかな。
サブフォルダが10個あったら1-1000のレンジにして1フォルダ辺り100ファイル扱えるようにする、
フォルダごとのファイル数が違っていても1フォルダ終わると1/10進む。
サブフォルダごとにそんな処理をやり、途中でファイルが増え過ぎたら、ちょっとプログレスを戻す。
そんなんしかなさそうだな。
エクスプローラでファイルを大量にコピーするときもけっこういい加減だしな。
漏れの妥協案は、ディレクトリごととかにファイル数を計数して総数に足していく。 グラフが後戻りするけどな。 もうちょっと手間かけるなら、プログレスバーを2本にして 処理するフォルダとフォルダ内のファイルでグラフを別けると後戻りしなくはなるな。
処理する一方で、ファイル数数えるスレッドも動かす。これ。 数えてる間だけは、じわじわとバーを進めとく。(強気に進めると、後で数が わかったときに進捗が戻ったりしてカコワルイことがあるから、弱気に進める)
>>363 面倒だけど、後者が好きだな、漏れは。
全体の進捗と個々の進捗があると精神的にも優しいと思う。
366 :
デフォルトの名無しさん :03/07/24 19:12
すみませんが、CEdit::CharFromPos の戻り値の 文字インデックスのバッファ単位から 文字単位を調べたいのですが、 どうすれば良いでしょうか?
皆さんレスどうもです。
>>360 氏
最初は設計の段階でそういう事を言われていたのですが、
実際にその処理をしてみて、以下のようになりました。
およそ2万ファイルを、三回試した平均です。
ファイル検索のみ・・・15秒
実際の処理のみ・・・17秒
両方併せた処理・・・32秒
最初はスレッドも考慮して作成していたのですが、スレッドから戻ってくる頃には
実際の処理も佳境に入っていて、プログレスバーの進み方が異常です。
更に、困ってるのはHDDのカリカリ音です。
出来ればファイル検索は一回にしたいので、
>>363 氏のやり方でやろうかなと考えてます
ロジック的には
スレッドでディレクトリのファイル数を検索(サブディレクトリは含まず
併せて処理をして行き、スレッドの戻り値をプログレスバーにセットしたいと
思います。
私はかなりの素人なのですが、意外にこういった手段って確立されてないのですね。 ノートンのスキャン中みたいな感じで進捗を表示したかったのですが、 レスを読んでみて、ああ、きっとノートンもアバウトなんだなぁって感じました。 皆さん、ありがとうございました。
369 :
デフォルトの名無しさん :03/07/24 22:50
strcpy ではなく _mbscpy を使わなければ不具合でるってことあります?
370 :
名無し@沢村 :03/07/24 23:35
371 :
デフォルトの名無しさん :03/07/24 23:59
VC++は人気なくなった。 周りの人間で使える人はいない。 VC++は頭のいい奴が自慢をするためだけのソフト。 コードの再利用ができない。 作った人しかわからない。 VC++の需要は0になりつつある。 これからはC#の時代です。
372 :
デフォルトの名無しさん :03/07/25 00:14
>>371 プログラマーのくせに全角英数字を多用していることから分かるように
あなたは出来損ないのプログラマーで、VC++に挫折したみたいですね。
373 :
けけけ ◆rCmM5mBD26 :03/07/25 00:23
VC++はヘーゲルの精神現象学と同じです。 くだらない屁理屈と大して変わりません。 自分からスパゲッティソースコードにしてどうするのですか? VC++はニヒリズムの波によって消去される。 けけけけけけけけけ。
VBプログラマが紛れ込んでいる予感!!!
>>368 ウィルスバスターでもファイル数の検索と、ファイルの検索を同時にやってるな。
結局それしかねーんじゃねーかな.
>>371 > 周りの人間で使える人はいない。
それは単にお前の周りにいる人間が低レベル名だけだろ。
まぁお前の文章を見てるだけでも十分低レベルだと分かるがな〔w
いちいち釣られんな
378 :
けけけ ◆rCmM5mBD26 :03/07/25 00:40
いまどきC++使っている人はいません。 今はC#.NET、VB.NETが主流です。 VC++.NETはおまけで作られました。 ビルゲイツ会長に見捨てられたのです。 .NETの三種の神器でVC++.NETの話題なんか全く聞きません。 プログラミング業界の今後の趨勢が気になる次第である。
むしろC#の方が捨てられていく気がするけど・・・ MFC7ATL7とかの本とか出ないけどさすげ~欲しい
380 :
けけけ ◆rCmM5mBD26 :03/07/25 00:51
Javaで実行効率が問題となった場合、言語のレベルで最初に疑うの はインスタンスの生成と破棄の部分だろう。インスタンスの生成では ヒープにメモリを確保するという重い処理が必要だし、インスタンス の破棄のためのガベージ・コレクションはさらに重い処理だからである。 結果として、大量のインスタンスを扱う場合は、生成と破棄の オーバーヘッドを避けるためにインスタンスを使い回したりインスタ ンスの粒度を大きくしたりすることになる。そして、ソース・コード の可読性が落ち、バグの発生率が上昇し、プロジェクトが失敗する。 嘆かわしい話だ。 そう、生成と破棄のオーバーヘッドを避ける抜本的な解決は、 生成と破棄のオーバーヘッドをなくしてしまうことなのだ。ヒープに メモリを確保することなくインスタンスを生成し、ガベージ・コレク ションに頼らなくてもメモリを破棄できる手段を用意すればよいので ある。 実際、生成と破棄のオーバーヘッドがないデータ表現の方式はJava にも存在する。intやdoubleのような値型だ(Javaでは基本データ型と 呼ぶ)。値型はスタックに配置されるのでヒープにメモリを確保する 必要がない。値型のスコープは明確なのでガベージ・コレクションに 頼らずとも的確にインスタンスを破棄できる。これならオーバーヘッ ドはほとんど発生しない。 このように考えていくと、インスタンスの生成と破棄のオーバーヘ ッドを回避する根本的な手段は新たな値型を定義可能にすることだと 分かる。C#には、この新たな値型を定義するための文法struct(構造 体)がある。C#に乗り換えたくなってこないだろうか?
>>380 お前うざいし、C++使ったらそんな心配しなくていいし
54 :鬱院生の卵 ◆rCmM5mBD26 :03/06/27 03:22 ID:1/U7Jb1+
>>34 >>43 誕生日おめでとう~!!
(・∀・)\(・∀・) ナデナデ
あなた達におめでとうが言いたかったです。
つらいこともたくさんあるけどほんの少しの楽しい事、嬉しいことでも絶対生きていたらあると思うんだ。
とにかくおめでとうです。少し嬉しい気持ちになりました。
>>385 unsigned charの文字列の場合、strcpy()ではキャストしなくてはならない。
というか strcpy と _mbscpy 、ステップインしたらどっちも strcpyの アセンブラルーチンに。引数の型が違うだけ?
389 :
デフォルトの名無しさん :03/07/25 02:06
DirectMusicを使うのに"dmusici.h"をインクルードしようとしても できません。警告分では "fatal error C1083: インクルード ファイルがオープンできません。" と出ます。Includeディレクトリも探したのですが、やはりファイルは 見つかりません。関係あるのかどうかわかりませんが、 winmm.lib dxguid.lib dsound.libはリンクさせてあります。 バージョンは6.0、OSは2000です。 どなたか教えてください。
>>389 インクルードファイルがなかったらエラーになるに決まってるでしょ
>>390 必要な宣言等をシコシコ自分で書けばエラーは出ない
>>390 ,391
問題はインクルードファイル"dmusici.h"が無いことです。
DirectMusicのプログラムをを載せてあるサイト等でも
初めからあるのか何の説明もありません。
"dmusici.h"はどうやって入手するものなのでしょうか?初めから
あるものなのでしょうか?教えてください。
SDK入ってないんじゃないか
他のDirectXはどうですか?
1. DirectX SDK 未インストール。 2. ファイルが壊れて、破損ファイルとして扱われ消えちまった。 3. 実はパスが通ってないだけ。 4. 妖精さんが消しちゃった。 どれかじゃないの?
396 :
デフォルトの名無しさん :03/07/25 07:24
VisualStudio.NET2003のアカデミックはライセンス認証が必要ときいたのですがwinXPのものと同じと考えていいのでしょうか?
原因わかりました。 1. DirectX SDK 未インストール でした。VC初心者なのでその辺が良くわかっていませんでした。 どうもありがとうございました。
プログラム2:10進数の整数の桁数を表示する 例えば "12340" という整数が与えられたとき、5けたの数字であるから "5" を表示するようなプログラムを作る。
CString s; s.Format( "%d", 12345 ); SetDlgItemInt( IDC_EDIT1, s.GetLength() );
わかりません。教えてくさい
401 :
デフォルトの名無しさん :03/07/25 18:26
VC++ってコードはわかるけど コードを書くまでがわからない プロジェクトの作成?とか
402 :
デフォルトの名無しさん :03/07/25 18:37
VS.NET2003インストールしてるんですけどどれぐらい時間かかるんでしょうか? なかなか終わってくれないんですが、、
403 :
デフォルトの名無しさん :03/07/25 18:48
MFCを使ったプログラムです。 peopleというクラスがあり、そこに文字列をprivateで、char name[]と宣言しています。 piblicでpeople(char p_Name[])とあり、これがコンストラクタです。 TESTViewクラスで、このpeopleクラスのオブジェクトを作りたいので、コンストラクタであるTESTView関数で、people("kazu")のように書いているのですが「'people::Name' : クラス、構造体、共用体のメンバは、初期化できません。」とエラーがでます。 peopleクラスのcharではなく、intとかなら具体化できるのですが、文字列の扱い方がよくわかりません。 アドバイスをお願いします。
メンバの配列変数は初期化できませむ
あ・・・ >>peopleというクラスがあり、そこに文字列をprivateで、char name[]と宣言しています。 は、char name[10]の間違いです。
まず、CStringやstd::stringじゃダメなのか。 どうしてもcharにしたいなら、 メンバをchar name[128]にするとか、char* nameにしてコンストラクタでnewするとか。
>>404 となると、この場合はpeopleクラスのname変数に文字を入れたいのですが、どうやるべきでしょうか・・・
>>405 people(const char* pName){lstrcpy(name, pName, 10);}
ごめんなさい・・・CStringでよいかもしれません。 かなり知識がないのでわかりませんでした。 試してみます
エディタを他のに変えてみたいんですけどどうすればいいですか?
413 :
デフォルトの名無しさん :03/07/25 21:47
質問させて下さい 今、練習で、簡易ワープロ作ろうとしています 半角英数なら普通にできるのですが 日本語を入れようとすると 字を決定する前のひらがなを打ったり 漢字に変換している途中は ウィンドウ下部に書かれてしまい 決定するまでカレットの場所に行ってくれません OnKeyDownには入ってくれますが そもそも座標の与え方がわかりません どなたか教えてくれませんでしょうか よろしくおねがいします
>>413 CWnd::SetCaretPos()
スマンIMEか。ImmSetCompositionWindow()だな。
>>415 できました
正直言うとすぐにできたわけではないのですが
ImmSetCompositionWindowをヒントに
いろいろ調べて解決できました
ありがとうございました
お世話になりました
MFCでプログラムを組んでいます。 int型の数字とCString型の文字を、CString型に同時に入れる方法はあるでしょうか。 AfxMessageBoxで表現したいのですが、CString型じゃないと使えません。 int型の数字も同時にAfxMessageBox関数で表現したいのです。
>>419 C言語の基礎からやることをお勧めする。
>>419 MSDNライブラリ中の、CStringクラスメンバをくまなく探すなり
422 :
デフォルトの名無しさん :03/07/26 08:55
こんにちわ。 VC++を勉強しようと思っています。 解説本でお勧めのものはあるでしょうか? プログラミング自体初めてです。 よろしくお願いします。
だから入門書に載ってるようなことを質問する奴が絶えないわけか・・・
>>419 俺はGetBufferを使ったりするんだけど・・・・
426 :
デフォルトの名無しさん :03/07/26 13:17
>>424 ということはあなたは本を買って勉強したんですよね?
>>419 のエラーをわざと出そうと思ったけど出ねー。
どんなシチュエーションで出る?
試したテスト↓
CString str = "test";
const char* p = str; // ノーエラー
char buf[100];
strcpy(buf, str); // ノーエラー
printf(buf, "hoge %s hage", (LPCTSTR)str); // ノーエラー
>>426 まともな奴は最初に入門書くらい買うでしょ
>>427 それでエラーが出ないのは当たり前なわけだが
431 :
デフォルトの名無しさん :03/07/26 19:29
#include<iostream> using namespace std; int main() { int d,b,c,a,t; cout<<"揚力を入力してください"; cin>>a; d=a*a; cout<<"翼面積"; cin>>b; cout<<"揚力係数"; cin>>c; t=d*b*c; cout<<t; } 上記のような、プログラムをかいたのですがVisaul C++のほうから、コンパイル後に 実行すれば問題なく動作するのですができた、実行ファイルを実行すると最後の値を入力し終えた後に 怒涛の勢いで終了してしまいます。 メモを取れるくらいの間、表示させとおくのは、どうしたらいいでしょうか?
Sleepつーか終了直前にキーの入力とか待てば良いのでは?
意味不明。 コマンドプロンプトから実行すれば?
つーかVC++スレのネタじゃねー名。
むしろFAQだよな
>>431 最後の行にキー入力待ちを置いて、
入力後に終了させようにすれば?
MFCでウインドウをエクスプローラ形式で作った場合 左側のツリービューのスタイルはどうやって変更? ちぇっくボックスつけるとか点線つけるとか・・
WM_CREATEをオーバーライドして基本クラスのOnCreate()呼ぶ前に引数のスタイルメムバいじるか、 ウィンドウが作成された後ならModifyStyle(Ex)()かSetWindowLong()
441 :
名無し@沢村 :03/07/27 15:04
ModifyStyleでできました。さんくすです
443 :
デフォルトの名無しさん :03/07/27 16:33
>>443 この問題、開発とどーいう関係が? ShellExtentionとかかな?
445 :
デフォルトの名無しさん :03/07/27 16:42
かなり前、C++を勉強し始めた頃 MFCはバグが多いから使わない方がいいと言われて 現在まで使用せずにいたのですが、 現在は使った方が良いんでしょうか? 又は使っても大丈夫でしょうか? 使用しても無問題ならMFCについて勉強したいのですが 前に言われた言葉が引っかかっており 躊躇しております。
>>445 Win32APIを理解してるなら大丈夫。
447 :
デフォルトの名無しさん :03/07/27 17:31
>>446 445じゃないけど
それは、MFCを知らなくても大丈夫っていうことなのか
> MFCはバグが多い
っていうのに対して大丈夫って言ってるのか
よくわからん
MFCのバグと思ったら自分のバグだったりする コンパイラ通ってもエラー出ることって結構あったな、厨房の頃は(;´Д`) MFCってそんなバグ多くないと思うが、あってもMFCソース見れるし msdnドキュメントに嘘つかれたことならあるが
VCのSTLにもバグがあるよ。
こう言うと
>>445 はSTLも使わないのだろうか
>>446-449 なるほど、使っても大丈夫みたいですね
MFC勉強しよう~
>>449 それはライブラリっすよねぇ
先輩にライブラリに頼るな。自分の力で作り上げろ~
とか言われて使わせて貰えんかったなぁ。
先輩ももういないし、今から勉強してみるかなぁ
標準ライブラリも使わせないような奴は単なるアホだ
車輪の再開発とは… なんという先輩だ
そういう先輩に限って普通に #include <stdio.h> とか書いてるはず。 後輩「これもライブラリですよね・・・」 先輩「いや、これはいいんだ。」 てめーの基準は何だよ!!
>>450 使っても大丈夫みたいですね。
じゃなくて大丈夫だから、マイクロソフトが入れてるんだろ?
そのセムパイに、MFCにはどんなバグがあるか聞いてみるといいよ
456 :
デフォルトの名無しさん :03/07/27 19:55
多分、その先輩はboostとか知らないな(w 使いまくったれ
>>443 何を今更って感じだな。
XPでVCを使うほどストレスたまるモンはそうそうない。まだ98で使ってた方がマシ。
458 :
デフォルトの名無しさん :03/07/27 20:57
VCでつくったソースを配布することになったのですが 個人情報とか漏れますか? デバッグビルドだとwindowsに登録した名前が漏れるらしいですが それ以外にもあれば教えてください
>>458 割れで作ったものなら逆汗して
シリアルキーを調べればバレます。
>>459 ((((;゚Д゚)))ガクガクブルブル
じゃなくって本名とかHDDのフォルダ名とかあまり知られたくないのです
VCのことではないですが環境変数の値を実行ファイルに残したままのものがあった
と聞いたので警戒しています
この前登録名バレてヘコんでますがソースを見てもらうメリットも捨てがたくて質問しました
>>460 ユニコードの罠に気をつけながらバイナリエディタ使って検索してみればいいんでないの。
うむ。デバッグビルドだと、バイナリぱっと見ただけでも、ソースファイルの フルパスが入ってますな。 ってか、デバッグビルドのバイナリ配布するの? MFCとかCRTのデバッグ版DLLのバージョン問題もあるっちゅーか、配布 禁止じゃなかったっけ?
デバッグ版DLLは配布禁止。
唐突に失礼します。 LPCTSTRって何?何バイトの変数なんでしょうか?
465 :
名無し@沢村 :03/07/28 00:55
エディタの文字サイズ小さくしたいんだけどどうやっらたできますか? VC++6.0です
ツール→オプソン→書式
471 :
デフォルトの名無しさん :03/07/28 21:40
すみません。 ラジオボタンは1つのダイアログにつき オンの状態に出来るのは1つだけですが、 これを、複数オンの状態に出来るようにするため には、どうすれば良いでしょうか?
グループボックス
>>471 コントロールをタブオーダー順に並べたとき、
(グループの先頭のラジオボタン)と、
(グループの最後のラジオボタンの次のコントロール)に
Groupプロパティを設定します。
ああメンドクセー。
474 :
デフォルトの名無しさん :03/07/28 22:37
グループボックスにあるラジオボタンのどれかが変更されたときに 拾えるメッセージってありますか? BN_CLICKEDをラジオボタンごとに持たせるのは何か、嫌で。
475 :
デフォルトの名無しさん :03/07/28 22:45
SSE2で整数の内積演算のプログラミングをしたいのですが、 本がなくてさっぱりわかりません。 例えば、unsigned char a[8] b[8]との内積の和 a[0]*b[0]+a[1]*b[1]+.... をSSE2で書くと、どのようになるのでしょうか。 よろしくお願いします。 また、MMXで書いたものはあるのですが、 SSE2に直すことでさらなる速度アップは望めるのでしょうか。
476 :
デフォルトの名無しさん :03/07/28 22:51
RS232CをとおしてXmodemでデータを送信するプログラムを作りたいのですが どうすればいいでしょうか データの送受信はできているのですがネット上いろいろ探しても プロトコルを設定する方法がわかりません これだけでは情報が足りないかもしれませんが これでわかる方がいたらよろしくおねがいします
>>474 CWnd::GetCheckedRadioButton()
デバッグしてたら INT 3 で止まるんですけど、INT 3って一体どういう処理をしているのでしょうか?
>>478 intはソフトウェア割り込み
オペランド3はブレイクポイント・割り込み
Foo() {
_asm int 3;
}
実行するとメッセージが表示されて実行が停止される(Debugビルドで確認)
Var() {
ASSERT(FALSE);
}
アサート表示後、再試行ボタン押下→デバッガの混合モードでみると
int 3から復帰していることが確認可能
アセンブラ詳しくないのでこの辺で...
8086アーキテクチャーの話ね 他のアーキテクチャの話は知らないのでご容赦
483 :
名無し@沢村 :03/07/29 01:02
>>474 ヌヒよ、親ウィンドウのOnCommand()でまとめて処理すればいいんじゃなかろうか
せっかくだから俺はON_COMMAND_RANGEを選ぶぜ
C++.NETでリソースエディタでツールバーに新しいボタン追加したんだけど 押した時の処理の追加の仕方がわからんです。 どうやればよいの??
486 :
デフォルトの名無しさん :03/07/29 11:42
CString str = _T("str"); CTypedPtrArray<CPtrArray, CStringArray*> paStrA; CStringArray* pStrA = new CStringArray; pStrA->Add(str); paStrA.Add(pStrA); paStrA.GetAt(0)->RemoveAll(); paStrA.RemoveAll(); でメモリーリークするのですが、どこがおかしいの?
あ、deleteぬけてた すまん
489 :
デフォルトの名無しさん :03/07/29 11:49
>>489 そのよりって言うの好きじゃない。ボッタ栗バーと同じ。
491 :
デフォルトの名無しさん :03/07/29 14:24
識者の方宜しくお願いいたします。 VC++6.0英語版の開発環境にて、0x5cを含む二バイト文字(SJIS)を表示させたい場合、 0x5cを含む対象文字に\を付加することで、正しく表示されることは知っていますが、 \文字を付加せずに、他の方法で正しく表示させることは出来ますでしょうか? (英語版の環境は変更できないんです…)
・文字列は全部リソースに放り込む。 ・UTF-8で入力する
>>485 あーそれ俺も知りたい。VC++.NETのToolBarエディタから
イベントハンドラの追加できないすよね?
いまんとこ、すげー面倒な方法でやってます。
1)ダミーのAcceleratorエントリを追加し、ID_HOGEというIDをつけておく。
2)AcceleratorエディタでID_HOGEのイベントハンドラを追加する。
3)ToolBarエディタで目的のボタンにID_HOGEを与え、イベントハンドラと結合
4)Acceleratorエディタに戻ってID_HOGEを削除
われながら馬鹿な方法だと思う。。。
494 :
デフォルトの名無しさん :03/07/29 15:00
>>492 ありがとうございます。
リーソースファイルを修正できないのと、Win95でも動作させなくてはならないため、
教えていただいた方法は難しいかと思います。
再度条件をまとめますと以下になります。
・開発環境VC++6.0英語版(Win2000英語版上)
・作成した実行ファイルは日本語版のWin95からWinXPまで動作させる必要がある。
・messageboxを含むソースのみ修正可能。現状文字コードはSJIS
>>494 いつごろのMS-Cだったか、昔は/Jオプションを指定すると、
文字列リテラルや文字定数の0x5cの直後に\を付加してくれた。
さすがに今のVC++6の/Jオプションにそんな機能はないかねえ。
やはりゴリゴリと\をつけまくるのがいいのでは。
その程度のフィルタコマンドなら間単に作れるでしょ。
496 :
デフォルトの名無しさん :03/07/29 17:39
fscanfでテキストファイルの読み込みをしようとしたのですが 実行するとASSERTE(stream != NULL)みたいなエラーが出てしまいます. テキストファイルのほうになにか問題があるのでしょうか?
497 :
デフォルトの名無しさん :03/07/29 19:30
>>483 あ・・・そうですね。
それでいきます。
どうも。
>>493 おおお~!どもです。
別の方法見つかるまで使いますっ!
>>496 ちゃんとオープンできてる?
ファイルが存在する?
モードまちがってない?
ファイルに排他ロックがかかってない?
501 :
デフォルトの名無しさん :03/07/29 20:23
500とられた(T_T)
502 :
デフォルトの名無しさん :03/07/29 20:25
自分で作ったのクラスからビュークラスの関数呼ぶって事は普通しないんすか・・・? やり方わからん
20分前~俺は~馬鹿だった~ ・・・あほなこと言ってごめんなさい
505 :
デフォルトの名無しさん :03/07/30 09:25
>>495 どうもです。やはりその方法しかなさそうですね…
sedで置換してみます。
ありがとうございました。
Enemy *pEnemy; pEnemy = new Zako; クラスへのポインタ宣言をしておいて、 あとからnewでオブジェクトを作ろうとすると、 error C2061: 構文エラー : 識別子 'Zako'; と出てしまいます。どうしてエラーなのでしょうか?
>>506 includeしてないだけじゃ?
#include "Zako.h"
508 :
デフォルトの名無しさん :03/07/30 14:58
今、学校でVC++6を弄んでるんですが、入門書のおすすめなどありましたら教授ください。 学校なので、MFCライブラリリファレンスの類は、全種あるのですが、なにぶん内容が難しすぎて…(汁) 今現在、参考にしてるのは、「独習C++」、「新VisualC++6.0入門(ビギナー編)」です。 やはり次に進むべき道は、「新VisualC++6.0入門(シニア編)」でしょうか…? しかし通販じゃないと近所にはなさげな悪寒… 自分の知識としては、Cの基礎を一通り学んだ程度です。
猫でもわかる、でいいじゃん。 本がいいと言うなら、いちおう本にもなってたはず。 内容が優れてるかと言われれば疑問だが、入門には良いと思われ。 林晴比古も悪くないけどね。 学校でとりあえず必要としてるだけならいきなりMFCでもいいけど、 まともに覚えたいんなら、まずはSDKオンリーで仕組みから理解していくべきだと思う。
だから、本はスレ違いなんだよ
511 :
デフォルトの名無しさん :03/07/30 16:08
C++はCをマスターしてから勉強したほうがいいですか?
初心者に教えるスレだからいいと思うけどね。 自分は林晴比古の新VisualC++6.0入門シリーズで勉強した。 がんばってくれ。
>>509 なるほど…猫わかもたしか本になってたんですよね…一度調べてみます。
(やっぱり本がいいです;)
>>510 すいません、スレを検索した限り、他に適当なスレが見当たらなかったのでここで質問させてもらいました。
くだ質とかの方がよかったですかね…?
>>512 このシリーズで攻め続けようか、他に乗り換えようか、少し悩んでます…<林先生の本
初心者に推薦図書スレを教えるのが筋だと思うが・・・
てか三回くらい作り直しました。。。 ありえねえええ
ああきにしないで
518 :
デフォルトの名無しさん :03/07/30 20:54
教えてください。 いま自分のViewにCListCtrl m_listがあるとします。 ここでこのm_listにアイテムを追加するときにSetItemDataで構造体アドレスをセットしたいです。 この構造体はそのアイテムに関連する情報を保持しており、リストにアイテムを挿入するときにnewします。 問題なのはこのViewがDistructされるときにこのm_listがデストラクトされてもnewした構造体は自動では解放されません。 あるいはDeleteAllItemsなどを呼び出したときとか。 Viewのデストラクタでdelete m_list.GetItemData(i);などとしても もしリストにSetItemDataしてなければ変なアドレスでdeleteしそうです。 こういうケースではどういう対処が良いですか? CListCtrlを派生してInsertやDeleteItem系のメソッドを絞って提供し アイテムの追加や削除を全部管理しないと無理ですか?
>>513 最初は林の本でも大丈夫だと思うけどね。
ちょっと実力がついてきたなと思ったら用途に合わせたものを買えばいい。
そうなんですか。そこを何とか。どなたか良いお知恵を。 もしくは普通こうやる、とか。 お願いします。
>>521 SetItemData してなければ、GetItemData では 0 が帰って来る。と思う。
もし違ってたらゴメン。で、LVN_DELETEITEM だかなんだかの通知を受けて
0 じゃなければ、delete する。
あるいは new したものは View のメンバ変数 CTypedPtrList<hoge> m_items;
とかに全部入れといて、view のデストラクタで全て delete する。
524 :
デフォルトの名無しさん :03/07/30 23:07
VC++6.0でmakeファイル使ってる人っています? VCってmake使えるの?
525 :
デフォルトの名無しさん :03/07/30 23:09
>524 nmakeってあるはずだよ。 さがしてみそ
526 :
デフォルトの名無しさん :03/07/30 23:14
>>525 確かにありますね。
nmakeってコマンドラインから使うんですか?
IDEからは使えないんですか?
527 :
デフォルトの名無しさん :03/07/30 23:14
528 :
名無し@沢村 :03/07/30 23:16
学校のおじさんのつくったVisualC++真面目に勉強している、へたれたちのいるスレはここですか?
みなさま。ありがとうございます。 よくかんがえたらViewのデストラクタより先にm_listがなくなっていそうです。 そこでいちばん簡単な方法としてm_listにSetItemDataしたものを別個にリストにして 保持しておくことにします。なんか無駄な気もしますが。
531 :
デフォルトの名無しさん :03/07/31 00:06
すみません。文字列をdouble型に変換したいのですが、 CString str = 2.5584; double don = atof(str); とした時、donの値が"2.5583999999…"になってしまいます。 この原因が全く判らないで困っています。 どなたか解決策をご教授してください。
1/3 = 0.3333333....
>>531 double型は2進数であらわされます。
ですので、10進数小数を2進数に直すと丸め誤差が生じます。
つまり、double型では、正確に2.5584を表すことは原理的にできないのです。
別に実害はないので気にせず行くのがよいでしょう。
CObjectの派生クラスで、リソースに登録してあるアイコンのハンドルを取得するには どうすればいい?ロードアイコンとかセットアイコンとかいっぱい試したけど 自分じゃむりだった・・。
>>533 そうだったんですか。ありがとうございました。
でも、こっちでは、どうしても文字列"2.5584"を
正確な数値でdouble型に変換したいのですが、
良い方法はないでしょうか?
>>537 double型では、正確に2.5584を表すことは原理的にできないのです。
~~~~~~~
>>537 計算するときに小数点第5位以下を四捨五入すると貸して自分で工夫するしかねーよ。
小数を正確に表すことは出来ん。あきらめな。
>537 doubleでは不可能。 誤差が嫌なら小数部と整数部に分けてintに格納とか。 演算出来ないけど。
543 :
デフォルトの名無しさん :03/07/31 14:25
ピクチャボックス、またはエディットボックス上に bold表示で文字を表示させたいんですけど どういう関数を使えばいいんでしょうか
エディトボックスについては、SetFontすればよろし。
>>538 しました。そこも見たとおもいます。
アプリケーションクラスでロードアイコンすると、
Debug Assertion Failed!が出て、ビルド自体できないんすよね。
ちなみに出てるファイルはafxwin.inlのline26です。コードは
HICON hIcon = NULL;
hIcon = LoadIcon(IDR_MAINFRAME);
if (hIcon == NULL)AfxMessageBox (_T("アイコンがロードできません"));
でappクラスのコンストラクタに入れてます
って書いて、まさかと思って違う関数に入れたら通ったヽ(´∀`)/
Appクラスのコンストラクタってあんた・・・
いや、とりあえずどこでもいいからつっこんでコンパイラ通したかったんすよ笑 てかCImageListのadd関数にハンドル渡すとまたDebug Assertion Failed!が でるうううう!また俺馬鹿なことやってんだろうなぁ。。。泣
人間は生まれながらにして自由だが一方で鉄の鎖に繋がれている。 ルソーの社会契約論にそうある。 人間が家畜化してるらしいよ。
ままままじでわからんです! appのInitInstanceの最後に HICON hIcon = NULL; hIcon = LoadIcon(IDR_MAINFRAME); if (hIcon == NULL)AfxMessageBox (_T("アイコンがロードできません")); data.Treeimage.Add(hIcon); TreeimageはCImageListです。この状態でリビルドしてもエラーでないんすけど ブレークポイントで調べると四行目のAdd関数の時にDebug Assertion Failed! がでます。なんか悪い事してる・・・?
>>549 せっかくアサーションが発生しているなら、
CImageListのソースを見てみろよ。
>>550 エラーのとこに出てるフォルダ名vs70buildsで検索かけたけどでない。
インクルードフォルダもみたんですけど・・・。
ソースどこにあるんすか??
ソース見ろってことは俺悪い事してるのか
>>551 インストール時にMFCのソースも入れましたか?
あった!!!!けど、意味不明・・・。 BOOL Arrange(UINT nCode); でエラーなんですけど、うぅ~
{ ASSERT(m_hImageList != NULL); return ImageList_AddIcon(m_hImageList, hIcon); } こっちでした。あ”ぁ~・・・・・・・
>>553 それってCListCtrlじゃないの?
>>554 Create()してないでしょ。予想通りだけど。
笑っちゃうくらい凄いっすね。。。 まじ尊敬しちゃう・・・。ありがとうございました!!
>556 >>appのInitInstanceの最後に だからね。Create()が通ってるわけもない。
え、普通にCreateしたらできましたよ。 てか、今度はプログラム自体のアイコンが変わっちまいました・・・。 もう一時間格闘したよ・・・
560 :
デフォルトの名無しさん :03/07/31 22:16
すいません。メモリ確保について質問です。 int x = 160; int y = 30000 int *image = (int *)malloc( sizeof(int) * x * y ); for(i = 0 ; i < x * y; i ++) image[i] = 0; としたのです。このとき、i = 0でなぜかエラーになってしまいます。 デバッグするとimage[0]にメモリが確保されていないように思います。 これはどういう対処をすればいいのでしょうか?
>>560 callocを調べてみると幸せになれるかも。
562 :
デフォルトの名無しさん :03/07/31 22:44
564 :
デフォルトの名無しさん :03/08/01 00:19
最小化をするとタスクバーにアイコン化されるようにする コードを教えて下さい
たのむ・・・。もう・・・つかれた・・・。お、おしえてくんなまし
567 :
名無し@沢村 :03/08/01 00:47
568 :
デフォルトの名無しさん :03/08/01 01:04
プログラムが分かる先輩が辞めてしまいいきなりC言語を見てくれって言われたんで すけど全く分かりません! LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です byrhkprt.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exeの実行エラー とエラーが発生するのですが何が原因なのでしょうか? 過去レスで プロジェクトー設定-リンク で設定とあったのですがそのプロジェクトが見当たりま せん。 使っているのはc++4.0です。 バージョンが古いのでしょうか? 教えてください。
569 :
デフォルトの名無しさん :03/08/01 10:41
AdjustWindowRectで、メニューバーが複数行になる場合でも1行分のサイズしか返さないんですが 正しい値を得る方法はありませんか。 というかこれできないとこの関数の存在意義ないじゃないですか!おかしいですよ!
アイコンのIDをIDRにしてた・・・。ごめん俺・・・俺・・・逝ってくるわ・・・
激しく厨な質問で申し訳ないのですが、 Platform SDK でHeader: ~~.idl と書かれているものはどのようにして呼び出せばいいのでしょうか? どうやら、COMみたいなのですが、Prog id もCLSIDもわからず…
詳しく言うとIStaticPortMappingインターフェイスを取得したいんですが…
idl自体はmidlでコンパイルすればいいが、 PlatformSDKなら、コンパイル済みな、同名.hが付属しているはず。
OfficeXPとかSleipnirみたいに、ツールバーとかメニューを かっこよくするにはどうすれば??
NATUPnP.hだけでなくNATUPnP.idlすらありませんでした(汗
どこを探した?
HDの中すべて探したんだけど(検索した) SDKを落としなおすしか…
ふーむ。 C:\Microsoft SDK\Include のディレクトリ 2001/05/30 18:20 67,477 natupnp.h 2001/06/03 22:49 10,086 natupnp.idl
そもそもPlathome SDKがはいってなかった予感 インスコ中でし
(^^)
VS.NETのMFCで拡張子を追加したくて、ファイルの種類エディタを開きたいんですが 表示メニューにエディタがなくてできないんですがどうすればいい??
584 :
デフォルトの名無しさん :03/08/02 11:33
VS.NETのWindows Installer作成機能で、 インストールの最後に「Windowsを再起動しますか(Y/N)」 というダイアログを出して再起動するようなものを作りたいんですが、 標準の機能だけでは無理なんでしょうか。 カスタム動作用のプログラムを作る必要がありますか。 でもその再起動用プログラムまでインストールする必要がありそう なのが気になります。
586 :
無料動画直リン :03/08/02 11:38
インストールが必要な再起動プログラムってどんなだよw
588 :
デフォルトの名無しさん :03/08/02 14:22
>>587 おまえ、メジャーリーグ級の馬鹿だな。
カスタム動作用のdllもインストーラに含めるって意味に決まってるだろ。
猫でもわかるプログラミングのSDK編 第6章 簡単なメニューのところでお聞きしたいことがあるのですが、 Visual C++ .NET だとリソースエディタを使ってメニューを作成すればいい というのは分かったので、実際にメニューを作ったのですが、 メニューバーそのもののIDの設定の仕方が分かりません。 メニューバー上で右クリックしても設定できないようですし・・・。 それと、IDが設定できれば myProg.lpszMenuName = "メニューバーそのもののID"; とすれば良いと認識しているのですが、間違っているでしょうか?
めんどいから素直にMFC組みなおすわ
>>589 Resource View内の項目を右クリープロパティ
>>591 Menuが空じゃないと設定できなくない??
>>584 この順序でやってみよう。
(1)本当にOSの再起動が必要かどうか見直す。
アプリの作りを変えられないだろうか。
(2)InstallShieldかなにかを買う予算がないか交渉してみる。
(3)あきらめられないかどうか検討する。
(4)もしも、どーーーーしてもVS.NETでやらなくてはならいならば…
まずWindows Installer SDK(Platform SDKの一部)のドキュメントを熟読する。
orcaとmsi編集ツールを駆使するのだ!
>593に追加。 (4)は結局はmsiのプロパティをちょこっと変更すればいいだけなんだけど。 VisualStudioのビルドに組み込むのが大変だし管理しづらくなるので 全然お勧めしない。
上ってのは階層の話です。。。
>>595 これは全部ルートになってる
先にルート作って、そのときに返ってくるHTREEITEMを使って子を作る
TVS_LINESATROOT指定してたあああああああ!! 597さんまじすいません。。。 つくづく自分はばかだなぁと・・・・
CString iconname; Treename = "icon"; HICON iconname; 間接操作のレベルが異なるって出るんだけど、 どうすればCStringの文字列でHICONを作れる??
あれ。。。 CString iconname; iconname = "icon"; HICON iconname; だよ
きのせいだよ
もうめちゃくちゃだな
>>593 解説ありがとうございます。
(1)は仕組み的にだめだったので、いまは(3)でやっています。
#やっているというかなにもしていないというかw
VS.NETのインストーラ作成機能はしょぼいんですね。
SDKのドキュメントにはいろいろ書いてあるっぽいのに
なぜできないんだろうと思っていました。
(4)はおすすめでないとのことなので、(3)を検討してみようと思います。
しかし8万か22万ですか...。
とはいえ、SDKのドキュメントを理解するのは大変そうですし。
>>604 に書いてある質問なのですが、
どういうエラーが出てコンパイルが通らないのか皆目検討がつきません。
どなたかご教授お願いします。
>>606 簡単に言うと、おまいが test.cpp から呼び出した
int CRingBuff::Out
bool CRingBuff::In
CRingBuff::CRingBuff
は実体がねぇぞってコンパイラ様がお怒りに
なってるってこった。
書いてあるのだけど、何で見つけてくれないんだろ・・・。 うーん。 もうちょっと考えてみます。 #今見て気づいたけど、エラーログとIDEのエラー表示が若干違うな・・・。 >605&607 レスThx!
609 :
デフォルトの名無しさん :03/08/07 00:49
もまいら教えてくさい!! VS6.0なのですが、上書きのときのエディタの キャレットが通常のときと一緒なのですがVS.NETの ように上書きのとき幅広にしてわかるようにできないものでしょうか?
610 :
デフォルトの名無しさん :03/08/07 01:52
DLLプロジェクトからLIBファイルを作成するにはどう すればいいのでしょうか?
611 :
デフォルトの名無しさん :03/08/07 03:48
Cを知らないとC++を習得するのは無理ですか?
>>611 C++はCの拡張規格であるから、
C++でCの基本的な書式や関数はだいたいそのまま使える。
だから書式がC++より単純なCの方からやり始めた方が、
プログラミングの勉強がしやすい。
いきなりクラスとかコンストラクタとか聞かれてもわけ分からんでしょ?
いきなりポインタとか聞かれてもわけ分からんと思うが
616 :
デフォルトの名無しさん :03/08/07 11:28
なんで初心者用のguiを主体にしたC++のプログラム勉強のページとか本とかないんですか?(あってもちょっとしか載ってない) 魔法の文いっぱいでも良いから、誰か作ってよ! exeファイルにならないとおもしろくないよぉ!
>>616 面倒でも最初はコンソールで
しこしこやったほうがいいだろうねぇ
どうしてもやりたいなら簡単なダイアログベースで
やればいいと思われ。
そこでBCBなんですっ!! GUI主体のC++だから初心者でも安心 MFCと同じ、なんて考えてる人は一度触ってごらんよ 世界が変わるよ
>>616 そりゃ、VC++ は基本的に“GUI を主体にしていない”からですよ。
620 :
デフォルトの名無しさん :03/08/07 12:09
ウインドウズ同士の(移動、サイズ変更時の)当たり判定って簡単にやれる方法(APIとかで・・・)ないっすか? 一応チャイルドウインドウ限定ということで・・・。 spy++見ても、あるウインドウがWM_SIZINGとか来てるときに他のウインドウに重なっても、 重なられたウインドウってメッセージとかきてないみたいなんですよね。 やはり古典的な方法でやるしかないのでしょうか?
すいません、win32apiのみで、MFCは使用してないっす。
>>622 ありがとうっす。なんとかなるかな?
古典的な方法・・・ゲームみたいにそれぞれ個別に自前でチェック・・・。
>>622 なんとかうまくいきそうです。ほんとありがとうございました。
>>622 >libファイルってDLLと同じ場所に勝手にできるんじゃなかたっけ?
すんません。クラスをエクスポートしていませんでした。
全く何もエクスポートしないとlibはできないんですね。
初心者用HP参考にしてなんとかやってる者でつが、 DirectInputの初期化で手間どってます // DirectInput の初期化 ShowWindow(SW_SHOW); 167res = DirectInputCreate(AfxGetInstanceHandle(), DIRECTINPUT_VERSION, &m_pDInput, NULL); if( res != DI_OK ) { 170res = DirectInputCreate( AfxGetInstanceHandle(), 0x0300, &m_pDInput, NULL); if( res != DI_OK )return 1; } res = m_pDInput->CreateDevice( GUID_SysKeyboard, &m_pDInputDev, NULL); res = m_pDInputDev->SetDataFormat(&c_dfDIKeyboard); res = m_pDInputDev->SetCooperativeLevel( AfxGetMainWnd()->m_hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); m_pDInputDev->Acquire(); 上をビルトすると c:\Download\Lv2_Src\MainFrm.cpp(167): error C2065: 'DirectInputCreate' : 定義されていない識別子です。 c:\Download\Lv2_Src\MainFrm.cpp(167): error C2440: '=' : ''unknown-type'' から 'HRESULT' に変換できません。 c:\Download\Lv2_Src\MainFrm.cpp(170): error C2440: '=' : ''unknown-type'' から 'HRESULT' に変換できません。 こんなエラーが出てきます。解決策教えて下され
winapiで、フォーカスのない時でも、キーイベントを監視したい、つまり、 常駐プロがラムを作成したい、誰か、教えてください。help help help
>>628 > 常駐プロがラムを作成したい
ごめん、少しワロタ
>>628 SetWindowsHookとかそのあたりを使おう。
631 :
デフォルトの名無しさん :03/08/08 06:36
何気にMSDNライブラリを見るやつでwebみたらタブブラワザなんじゃ、、
632 :
デフォルトの名無しさん :03/08/08 12:37
外のフォルダにあるアイコンファイルを、現在のプロジェクトに 追加したいのですが、リソースビューで 「リソースの追加」→「インポート」として、他フォルダのアイコンファイルを 選択して「開く」としても何も起こらないのです。 「リソースの追加」の「インポート」ってどの様にして使うのですか? 全く何も起こらないのですが
>>632 パスに日本語を含むフォルダからはリソースがインポートできない。
VS.NETのバグと思われ。これVS.NET2003では直ってますか?
634 :
デフォルトの名無しさん :03/08/08 14:04
>633 どうもありがとうございます。 しかしVC.NETのバグだったとは・・・。 そういうバグ情報ってどこから仕入れているのですか?
635 :
デフォルトの名無しさん :03/08/09 06:21
SDIでリストコントロールとかツリーコントロールを作って、OnCrickのメッセージを 拾い選択されているアイテムの情報を得ようとしても、一回目のクリックは前回クリック した位置のアイテム情報を拾ってしまうんですが、これを回避する手段はありますか? UpdateDataをしてみたり2回GetSelectedItemをしてみても最初のクリックで拾うのは 無効なデータ(戻り値が0x00000000)になってしまいます VC6SP5 Win98SEです。
>>635 >一回目のクリックは前回クリック した位置のアイテム情報を
一回目にクリックしたのになんで「前回」があるの?
if(前回のアイテム == NULL) return; みたいなのではダメなのか?
と思ったらなんか勘違いしてた 636同様よく分からん
>一回目にクリックしたのになんで「前回」があるの? 分かりづらくてすみません。一回目では前回の情報はありませんから 必ず失敗するんです。 クリック位置 : GetSelectedItemの戻り値 一個目 : 失敗 二個目 : 一個目のハンドル 三個目 : 二個目のハンドル 四個目 : 三個目のハンドル ・ ・ ・ ・ という状況なんです。ちなみに同じアイテムを二回クリックすれば そのアイテムのハンドルは得られるんですが、そんなことする必要の あるソフトなんて見たことないですし・・・
あ、わかった。 OnLbuttonDown(){ i = GetSelectedItem() DefWindowProc() } みたいなことになってるでしょ。
>>640 なってます。微妙に違いますが↓
OnClickTree(){
m_hSelectedTreeItem=m_cTree.GetSelectedItem();
TRACE(HTREEITEM[%08X]が選択されました\n",m_hSelectedTreeItem);
}
ってなってます。ほかにどうすればいいのか知らないので・・・
TVN_SELCHANGEDじゃあかんのか
>>642 参考にしてみたところ嘘みたいに動くようになりますた。ありが㌧
う゛っSELCHENGEDならGeteSelectedItemでも出来るのね・・・
ソースを眺めてると標準ライブラリのstringでなくCStringを使ってる香具師が多いようですがCStringがstringより優れてる点ってどの辺りでしょうか
MFCがインターフェースとしてCStringを使っているから。 CString::Formatがあるから。
650 :
デフォルトの名無しさん :03/08/10 15:38
VC++でリリースビルドした実行ファイルにプロジェクトファイルが保存されていた フォルダ名が残っていますが消せますか? それともみなさんあまりそういうの気にせずに配布してます?
>>646 参照カウントを使用していて代入やパラメータ渡しが高速だから
>>652 2003です
実行ファイルの場所がReleaseフォルダなので大丈夫じゃないかと思います
ちょっと訂正
pdbファイルがフルパスで記述されてます
>>653 Releaseビルドの場合もデフォルトでは/PDBオプションが付くようだ。
はずしかたは/PDBオプションのヘルプで。
>>654 構成プロパティ→リンカ→デバッグ→デバッグ情報の生成
をいいえにすることで解決しました
ありがとうございました
>MFCがインターフェースとしてCStringを使っているから。 これがでかいんじゃないかな。 wstring使っててもそれだけじゃすまないし。
>>655 これってプロジェクト毎に設定するしか方法ないのかな?
すべてのプロジェクトでReleaseビルドはデバッグ情報の生成を切る
オプションってないの?
659 :
デフォルトの名無しさん :03/08/11 03:39
シンボルファイルってどう使うんですか? DirectX9.0bのシンボルとかDLしたんですが、使い道がサパーリ(;´Д`)
660 :
デフォルトの名無しさん :03/08/11 09:32
下記のようなメッセージが出るのですが原因がわかず困っています。 どなたか分かる方はいらっしゃいますか? Warning: constructing COleException, scode = DISP_E_MEMBERNOTFOUND ($80020003). 例外処理 (初回) は RecTest.exe (KERNEL32.DLL) にあります: 0xE06D7363: Microsoft C++ Exception。
662 :
恵比寿帝冥 :03/08/11 12:59
ここ以外に良い掲示板があったら教えてください。
663 :
デフォルトの名無しさん :03/08/11 13:23
Visual C++.netのいい参考書orサイトってありますか?
665 :
デフォルトの名無しさん :03/08/11 17:39
タスクトレイにアイコンを表示してメニューを表示するところまではできたんですが そのメニューの項目をクリックしないと消えてくれません。 えっと、やっぱ他の別のウィンドウとかをクリックして メニューがアクティブでなくなったら消えてほしいんですが いつまでもしつこく出ています。 どーすれば、消えてくれるんでしょうか?
XMLの出力をしたいんですが、普通にファイル出力で出力してくしか分からないんですが、 何かいい方法ありますか?
とりあえず、その分で本当に人に意味が伝わるか 自分で確認してからもう一度書いておくれやす。 何に対してどのようにしたいからXMLを出力したい?
669 :
デフォルトの名無しさん :03/08/11 23:48
テキストエディタをつくりたいのですがエディットボックスコントロールでは 最大32kbまでの文字列しかあつかえないそうですが大きなサイズの文章編集 が出来るものをつくるにはどうすればいいのですか
>>669 RichEditBoxだったかな・・・そんなのがあるよ
671 :
デフォルトの名無しさん :03/08/12 00:06
>670 ありがとうございます 助かります
>テキストエディタをつくりたい もし、秀丸とかその系統のものを目指しているなら 自作が早道。RichEditCtrl はとかく使いにくい。
>>666 SetForegroundWindow(hWnd);
こいつがなかったせいみたいでした。
つけたらOKでした。
ありがとうございました。
VC++からDBの操作についてなのですが、 CDaoRecordsetの派生クラスをつくりクラスウィザードで 複数のテーブルを選択して派生クラスのメンバ変数として 選択した複数のテーブルがメンバ変数に登録されたのですが、 1つのテーブルだけを処理したいのですが、可能なのでしょうか? たとえば下記のようなコードを実行すると意味のわからない レコード数が戻ってきてしまいます。 クラスを作る段階で選択しているテーブルが1つだけなら 問題なくレコード数なのどは参照できるのですが・・・ ----ここから---- CRecSet MyRecSet; MyRecSet.Open(); MyRecSet.MoveLast(); long RC = MyRecSet.GetRecordCount(); //ここに意味不明な数値 MyRecSet.Close();
VC.NETなんですけどダイアログにコントロールを追加するには どうすればいいんでしょうか?
676 :
恵比寿帝冥 :03/08/12 12:08
677 :
デフォルトの名無しさん :03/08/12 13:45
独自のライブラリを作ってそれに名前空間名Commonを つけて、それをつかうために using namespace Common; と書いたのですが、 `global namespace'' のメンバではありません。 と叱られてコンパイルできません。 Common::function(); と完全修飾すれば通るのですが... なにか原因は考えられるでしょうか?
↑C++相談室で教えてもらいますた。 ありがとうございますた。。。
679 :
デフォルトの名無しさん :03/08/12 17:34
新規作成(Win32プロジェクト)のコードをそのままビルドしようとすると Debugだと project1 error LNK2001: 外部シンボル "__RTC_InitBase" は未解決です。 project1 error LNK2001: 外部シンボル "__RTC_Shutdown" は未解決です。 project1 error LNK2019: 未解決の外部シンボル @_RTC_CheckStackVars@8 が関数 _WinMain@16 で参照されました。 project1 error LNK2019: 未解決の外部シンボル __RTC_CheckEsp が関数 _WinMain@16 で参照されました。 project1 fatal error LNK1120: 外部参照 4 が未解決です。 Releaseだと project1 error LNK2019: 未解決の外部シンボル @__security_check_cookie@4 が関数 "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 project1 error LNK2019: 未解決の外部シンボル ___security_cookie が関数 "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 project1 fatal error LNK1120: 外部参照 2 が未解決です。 というエラーが出るのですが何が原因でしょうか? 環境/Win2000/VC++.NET
680 :
デフォルトの名無しさん :03/08/12 21:48
VC++.NETなんですけど、 WM_CLOSEメッセージが来た時に、MessageBoxを出して終了するかしないかを決定するのを組んだのですが、 メッセージボックスが表示されません。Altキーを押すと出てくるんですが。。 何が原因なんでしょうか? 以下がその部分です。よろしくお願い致します。 case WM_CLOSE: int nResult; nResult = MessageBox(hWnd, "本当に終了してもよろしいですか?", "確認", MB_YESNO | MB_ICONQUESTION | MB_TOPMOST | MB_SETFOREGROUND); if(nResult == IDYES) DestroyWindow(hWnd); break;
681 :
デフォルトの名無しさん :03/08/13 01:20
つまらないことですがお願いいたします。 VC++のエディタでクラスのコンストラクタが自動メンバ表示 されないのですが(デストラクタはされる)何か理由が あるのでしょうか?
直接呼べないコンストラクタを補完して何かうれしいのかね?
たしかに、デストラクタは明示的に実行できるね。 でも、それは反論にはなっていないよ。
もう一回コンストラクタ、デストラクタから 勉強しなおしてきます。。。
デストラクタは明示的に呼べるが、 コンストラクタは明示的に呼べない。 従って、コンストラクタを補完する必要はない。
VC++6(sp5)でstlport4.5.3を使い始めたんですが、 #include <iostream> #include <deque> using namespace std; 上記のように宣言すると、iostreamでライブラリの競合エラーが出て使えません。 これを回避する方法ご存知でしたら教えていただけないでしょうか。
>>687 確かstlportの優先順位をageれば良かった気が…
689 :
デフォルトの名無しさん :03/08/14 06:41
C++って、Cより++(チョメチョメ)な分エロいんですか? どんなプレイのことをC++(シーチョメチョメ)って呼ぶんですか? それと昔、棒ランド(某ランド?)っていうヤバい会社もC++してたんですか? MSのはVisual的にスゴいのか・・・(;´Д`)ハァハァ
>>688 解決しました。ありがとうございました。
691 :
デフォルトの名無しさん :03/08/14 11:07
C言語なら俺に聞け!スレから来たんですが、VCでのDLLの 作り方がよく わからず、困っております。どなたかわかりやすく 教えてください。 それか、ソースを晒すのでDLLにしてください。 おねがいします。(サイトみて手順通りやってみたけどできない 泣)
ソースだけ晒しても無駄ですんで、 どうできなかったのか具体的に説明してください。
695 :
デフォルトの名無しさん :03/08/14 15:05
VC++ 6.0でクラスライブラリを作って、そのヘッダやライブラリファイル が入っているフォルダをオプションのディレクトリのところに登録したんだが、 いざそのクラスのヘッダファイルをインクルードしてもビルドはちゃんと できるのにメンバがMFCやWin32の関数みたいにエディタのIntellisence機能で出てきて くれないんだけど、どうしたらいいんでつか? やっぱりその都度、プロジェクトにソースやヘッダファイルを追加しないとダメなんですか?
ヘッダーだけプロジェクトに参加させればえぇで。
昔にCでDOSで動くやつを書いていたんですけど、さすがにGUIアプリケーション作りたくなってVCを使ってみたいと思いました。この場合、開発過程の習得は簡単なのでしょうか? 不安なのはCとC++で文法がどれぐらい違うのかということです。
698 :
デフォルトの名無しさん :03/08/14 17:19
Console ApplicationをMFCサポートで作成しています。 プログラム実行中に、右上の×ボタンを押下すると強制終了できますが、 強制終了できないようにすることは可能でしょうか?
>>697 CとC++の違いっつうと、クラスとオーバーロードかね。(ほかにもあるけど)
もっともそれよりもWindowsアプリの場合は結構めんどくさい事しなきゃならんから
まずC++を勉強するのか先か?
猫でも分かるプログラミングでも読んでみ?
ぐぐればすぐ出る。
>>698 永遠に止まらないプログラムを書きたいのですね?
701 :
デフォルトの名無しさん :03/08/14 18:09
>>700 途中で窓を閉めてしまうとエラーがでてしまいます。
なので、処理終了後には自動で窓が閉めれるといいのですが・・・
702 :
デフォルトの名無しさん :03/08/14 18:47
ソースを選択してctrlかシフトを押しとどれかのキーを押すと自動にソースにあった インデントが入る機能があったと思うんだが、どうやるんだっけ?
>>696 レスさんくすです。
Win32API関数とかが、何もしなくてもIntellisenceが起動するのはVC++内部の仕様なんですかね?
バグです
>>702 Ctrl+K→Ctrl+F (VC++.NET)
Alt+F8 (VC6)
>>697 違いというよりも追加要素といった方がいいな。
とりあえず、クラスの構造や機能を理解して、
さらにクラスの継承、コンストラクタ・デストラクタ、
オーバーロード、オーバーライド、エラー処理を
最低限抑えておくとVC++に移行しやすい。
テンプレートもやっておくと便利だが、
やらなくてもとりあえずVC++は使えるので、
VC++を使いながら勉強しても特に問題ない。
漏れはC→Java→VC++と変則型だったので、
VC++やりながらC++も勉強した。
まぁ、JavaとC++は内部処理的にはともかく書式は似ているので、
それほど苦にはならなかったけど。
708 :
デフォルトの名無しさん :03/08/15 01:42
Visual C++で mylib.h // mylib_tの説明 typedef struct mylib_t { int value; // valueの説明 } mylib_t; // mylib_initの説明 void mylib_init(mylib_t *self); mylib.c #include "mylib.h" #include <memory.h> void mylib_init(mylib_t *self) { memset(self, 0, sizeof(*self)); } というソースをビルドしてmylib.libを作ります。 次に別プロジェクトのapp.cからmylib.hをインクルードして 関数・構造体をインテリセンスで列挙したところ コメント部分がチップヘルプで表示されません。 mylib.h, mylib.cをapp.cと同じプロジェクトに移動すると表示されます。 ソースを提供しないでヘッダとライブラリファイルだけでリリースして なおかつインテリセンスのチップヘルプでのコメント表示を有効にするには どうすればいいのでしょうか。mylib.bscをlibと同じディレクトリに生成しても表示されませんでした。
>>708 よ。VisualC++スレで
>Visual C++で
は、ないだろ。
711 :
デフォルトの名無しさん :03/08/15 14:03
質問お願いいたします。 TRACE0マクロでデバッグウィンドウに文字を出力する方法を 最近覚えたのですが、例えばintとかに入っている 数値を出力する場合も文字に変換しないといけないのでしょうか? (そのまま出力すると数値でなく文字化けみたいになるのですが)
// TRACE の例 int i = 1; char sz[] = "one"; TRACE( "Integer = %d, String = %s\n", i, sz );
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
extern "C"が要らなかったっけ?
>>716 すいません。本当に手探りなので、どこに付けるのか
教えていただけるとうれしいです。
(ちなみに、return a+b;だけの関数を備えたDLLの場合
は今の書き方で出来ました。関数1個だけの場合)
718 :
デフォルトの名無しさん :03/08/15 17:07
ファイルを実行したら、DAMAGE: after normal block(#40)というのが出てきました。 これは何なんでしょうか?
719 :
デフォルトの名無しさん :03/08/15 19:40
板違いの指摘を受け、パソコン初心者板から移動してきました。 クライアント領域にビットマップを表示したいのですが、 メモリデバイスコンテキストに割り当てたビットマップクラスオブジェクトは 表示終了後に必ず解放しなければなりませんか? 例えば以下のようなコードにおいて、最後の::SelectObject呼び出しは必須ですか? これを行わないで関数が終了した場合、 pMDCはスコープを失ってDeleteされた結果として 何らかの深刻なエラーを引き起こしますか? もし起こすとしたら、なぜ起こしますか? { CBitmap Bitmap,*pDefBitmap; CDC *pMDC; pMDC = new CDC; // この辺りで::LoadBitmap pMDC->CreateCompatibleDC(pDC); pDefBitmap = pMDC->SelectObject(&Bitmap); // この辺りで::BitBlt pMDC->SelectObject(pDefBitmap); // ←ココ } CPenクラスやCBrushクラスも同様に解放を行わないと実行時エラーが起きるようですが、 どうして起こるのか原理がサポーリです。;_; 高名な先輩プログラマの皆様、よろしくおねてぃ。
というか解放して問題が出なければとりあえず解放しといた方が良いと思うんだが
それいぜんに、そのコードでは、pMDCとかがリークしているわけだが。
722 :
デフォルトの名無しさん :03/08/15 21:44
>>721 pMDCは関数の終了とともにスコープを失って
自動的にデリート(デストラクタ呼び出し)されませんか?
では↓
{
CBitmap Bitmap,*pDefBitmap;
CDC MDC;
// この辺りで::LoadBitmap
MDC.CreateCompatibleDC(pDC);
pDefBitmap = MDC.SelectObject(&Bitmap);
// この辺りで::BitBlt
MDC.SelectObject(pDefBitmap); // ←ココ
}
MDCを静的に確保してみましたが、これならどうでしょう?
723 :
デフォルトの名無しさん :03/08/15 21:57
>>722 (´-`).。oO(pDefBitmapってちゃんとオブジェクトを指してんのか?)
>722 されない。断じてされない。スコープがはずれるのは、ポインタそれ自体で あって、ポインタの指し示す先にあるオブジェクトではない。 struct test{ ~test(){printf("d");} };というクラスでもでっち上げて試してみたらどう? さてSelectObjectだが。 ・必須です。 ・起こします。 ・MSDNのDeleteObjectのRemarkには、"Do not delete a drawing object (pen or brush) while it is still selected into a DC."とあります。そのようなことを前提にAPIが 設計されていないから、でしょう。失敗すれば、結果はリソースリークです。
>>724 >スコープがはずれるのは、ポインタそれ自体であって、
>ポインタの指し示す先にあるオブジェクトではない。
そうでした・・・。m(__)m
今再度調べてみたところ、
::SelectObjectは解放されたオブジェクト(今まで参照していたオブジェクト)を
デストラクタを呼び出してdeleteする機能があるので、
明示的には::DeleteObjectを呼ばなくていいみたいですね。
そういう意味でも、最後の::SelectObject呼び出しは必須だということで・・・
むぅ、動作が難解だ・・・。;_;
回答どもでした。また何かありましたらよろしくお願いいたします。m(__)m
>>723 pDefBitmap = pMDC->SelectObject(&Bitmap);
これは正当なようです。
とりあえず、コンパイラは文句いってきません。(笑
>デストラクタを呼び出してdeleteする機能があるので、 >明示的には::DeleteObjectを呼ばなくていいみたいですね。 ・・・と思ったら、やっぱりちゃんとdelete pMDC;ってやんないとダメみたいだわ。(笑
VC6ので、ファイルをオープンする時に const char* じゃなくて stringって使えますでしょうか? #include <fstream> ...略... string FNAME = "c:\test.txt"; ifstream file_in; file_in.open(FNAME); みたいにしたいのです。
730 :
デフォルトの名無しさん :03/08/16 02:40
新規作成(Win32プロジェクト)のコードをそのままビルドしようとすると Debugだと project1 error LNK2001: 外部シンボル "__RTC_InitBase" は未解決です。 project1 error LNK2001: 外部シンボル "__RTC_Shutdown" は未解決です。 project1 error LNK2019: 未解決の外部シンボル @_RTC_CheckStackVars@8 が関数 _WinMain@16 で参照されました。 project1 error LNK2019: 未解決の外部シンボル __RTC_CheckEsp が関数 _WinMain@16 で参照されました。 project1 fatal error LNK1120: 外部参照 4 が未解決です。 Releaseだと project1 error LNK2019: 未解決の外部シンボル @__security_check_cookie@4 が関数 "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 project1 error LNK2019: 未解決の外部シンボル ___security_cookie が関数 "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 project1 fatal error LNK1120: 外部参照 2 が未解決です。 というエラーが出るのですが何が原因でしょうか? また、"__RTC_InitBase"や"__RTC_Shutdown"などは何なのですか? ぐぐってもダメでしたし、MSDNにも見つかりませんでした。 よろしくおねがいします。 (環境/Win2000/VC++.NET)
731 :
デフォルトの名無しさん :03/08/16 03:08
>>730 ヘッダファイルに付属していたであろう
*.lib をプロジェクトにぶちこめ!
c_str使ったりいろいろ試したんですが無理でした。 素直にconst char* でやります。
あるいはMFCならCStringを使うといい
>>714 どうやら、戻り値がないとDLLはだめ?なのかIntで戻り値を返す
ようにしたら普通に呼び出せるようになりました。(書き方は変えました
が)この事は常識なのでしょうか?それとも、やはり私の書き方がおかし
いのでしょうか。まぁ、とりあえずできたのでよしとします。
736 :
デフォルトの名無しさん :03/08/16 22:14
737 :
べんとらべんとらすぺーすぴーぽー :03/08/17 21:25
質問させてください。m(__)m これはCPenオブジェクトの配列にそれぞれ別個のPen設定を保存して、 それを切り替えながら文字や線を描画する処理です。 void PenTest(CDC *pDC){ const int iMaxPen = 5; CPen *myPen[iMaxPen],*pOldPen; pOldPen = (CPen*) pDC->SelectStockObject(BLACK_PEN); // デフォルト設定を保持 for (int i=0; i<iMaxPen; i++){ myPen[i] = new CPen; // ::CreatePenでmyPen[]の各要素に別個のPen設定を保存する } // 適宜Penを切り替えながら描画する何らかの処理 // pDCをデフォルト設定に復帰した後、myPen[]を削除 pDC->SelectObject(pOldPen); for (i=0; i<iMaxPen; i++){ myPen[i]->DeleteObject(); } delete [] myPen; // ← ココ } 描画が終わった後、メモリ領域をdeleteしようとすると実行時エラーが起きます。 なぜなんでしょう?;_; ちなみに、 for (i=0; i<iMaxPen; i++){ myPen[i]->DeleteObject(); delete myPen[i]; // ← ココ } のように書くとエラーはおこりません・・・。 むぅ、どちらも配列を削除していることには違いないんだけど・・・。
>むぅ、どちらも配列を削除していることには違いないんだけど・・・。 char *p[2]; p[0]=malloc(10); p[1]=malloc(10) char *p=malloc(20); の違いがわかるか?
>>738 むほっ。よく分かりません。;_;
最初の行は要素2のポインタ配列を用意して、
要素のそれぞれに10バイトのメモリ領域へのポインタを割り当てています。
これはdelete [] p;で削除します。
2番目の行は(配列ではない)ポインタに
20バイトのメモリ領域へのポインタを割り当てています。
これはdelete p;で削除します。
これと
>>737 とがどういう風に結びつくのでしょうか。_●□=
VC++6.0ってXPにもいれられますか?
>>739 > これはdelete [] p;で削除します。
だめ
>739 1.char *p[2]; p[0]= new cahr [10]; p[1] =new char [10] 2.char *p[2]; p[0]= new char; p[1]=new char; ・1,2について解放の仕方をそれぞれ述べよ(10点)。
>>742 1番
{
char *p[2];
p[0]= new char [10]; p[1] =new char [10];
for (int i = 0; i < 2; i++){
delete [] p[i];
}
}
2番
{
char *p[2];
p[0]= new char; p[1]=new char;
delete [] p;
}
・・・くわっ!Σ( ̄□ ̄;
そうか、delete [] p; っていうのは、
ポインタが参照するメモリ領域が配列の時に使うのですね!
ポインタ自身が配列の時に使う構文じゃないってことですか。
2番は間違えですね。ひゃっひゃっひゃ・・・恥ずかP。(〃゚▽゚;A
ありがとうございました。m(__)m
744 :
デフォルトの名無しさん :03/08/18 03:35
appidってどうやったらわかりますか?
745 :
デフォルトの名無しさん :03/08/18 03:38
appid?
746 :
デフォルトの名無しさん :03/08/18 04:07
アプリケーションIDだと思うんですけど。プログラムIDと同じらしいですが
とりあえず、appidが出てくるurlの例でも示せ
749 :
デフォルトの名無しさん :03/08/18 17:45
ちょっと相談、っていうか教えて欲しい。 今開発中のアプリにテキストの表示機能が必要と言うことになった。 Notepad.exeを呼び出してもいいが、そのファイルを変更されてしまう可能性がある。 となると、アプリ中で表示しないといけないのだけどなにか手っ取り早い手はあるかな?
MFCなら CEditView とかダイアログにテキストボックス作ってそれで表示するとか Win9xなら64kの制限あるけど
751 :
デフォルトの名無しさん :03/08/18 18:14
Visual C++.NET でプロファイラを使おうと思ってマニュアルを調べたのですが、 「/PROFILE リンカ オプションは削除されました。」 や 「リンカ ユーティリティであるソース プロファイラは削除されました。」 という記述しか見つかりませんでした。 プロファイルできなくなってしまったんでしょうか?
>>750 NotepadもWin9xだと32KBの制限があるから64KBなら問題なし。
ってことで、ダイアログ作って中身をスクロールバーつきのEditBoxでやることに。
レスThx.
753 :
デフォルトの名無しさん :03/08/18 20:00
VisualC++6.0でC言語(C++ではなくて)を勉強し始めた超初心者なんですが #include <igraph.h>で、プログラムを作っても 「fatal error C1083: インクルード ファイルがオープンできません。'igraph.h'」となって実行ができません。 付属の解説書を読んで自分の知識では答えが見つけられませんでした・・・。 物凄い初歩的な質問で恐縮なんですがグラフィックスをプログラムする場合 どのような設定をしたらよいのか、無知な自分にどなたか教えてやって頂けないでしょうか。
754 :
デフォルトの名無しさん :03/08/18 20:02
「今私のオッパイ見てたでしょう。」ってそりゃ見ますって。
これだけの立派なオッパイが目の前にあったら。
淫乱女教師がフェラ、パイズリで同僚の先生を責めまくります。
挿入部のアップも豊富なのでオマンコもモロ見えですよ。
無料動画をどうぞ
http://www.exciteroom.com/
>>753 そんなファイルはないか、またはその解説書オリジナルのものだと思う。
絵を書きたかったらWindowsプログラミングのスキルは必須。
>>2 の「猫でも~」を見ることをお勧めする。
Windows SDK編 第1部 25章あたりで絵を描いてるから。
あれ? VC++は .NETも含めてこのスレ?
>>754 誰が貴様のような自意識過剰女なんぞ見るかよ!
759 :
デフォルトの名無しさん :03/08/19 02:08
>>755 勉強しなおしてきます・・・。ありがとうございました。
762 :
デフォルトの名無しさん :03/08/20 08:25
#include <stdio.h> #include <conio.h> int main(void) { for(;;)//終了はCtrl+cで { if(kbhit()) printf("%c ",(char)getch()); } return 0; } ビルド時に自動的に実行されるプログラムに比べて、Debug、Releaseフォルダに できた.exeのスピードが遅くて困っています。配布する時に動作の悪い方しか できないので。解決方法を教えてください。
>>762 スピードが遅いと言うのは、キーを押しっぱなしにした時の事です。
くだらんよチミ
C++.NETのWindowsフォームアプリケーションでプログラムを作っているのですが CStringArray型を使いたいと思い#include "afxcoll.h"をしてみたら MessageBox::Show("1");の場所で error C2653: 'MessageBoxA' : 識別子がクラス名でも名前空間名でもありません。 error C2660: 'System::Windows::Forms::Control::Show' : 関数に 1 個の引数を指定できません。 というエラーが出てしまいます #include <afx.h>を記述しただけでエラーが発生してしまうのですがエラーを消す為にはどうしたらいいでしょうか? From1.h内 private: System::Void button1_Click(System::Object * sender, System::EventArgs * e) { //CStringArray Cst_File_Array; MessageBox::Show("1"); } From1.cpp内 #include "stdafx.h" #include "afxcoll.h" #include "Form1.h" #include <windows.h>
>>765 WindowsフォームアプリでMFCのクラスを使えるの?
VC++で、セマフォみたいな機構を利用したいのだがなんかあったっけ?
>>766 MessageBox::Showを使わなければ
エラーが発生せず正常に使えます
String* Str_File_Array[];の配列だとAddが使えず・・
SystemArray型はサイズが固定なので動的には使えず・・
なので文字列を追加していく処理を行うにはCStringArray型を
使うとかなり楽なんですよ
だからMFCクラスを使おうと思っているんですが
>>769 Vectorでstring使っちゃダメなの?
>>770 すいません
「Vectorでstring」ってどういう意味ですか?
#include <string>
using namespace std;
で通常のbasic_stringを使うという事でしょうか?
std::vector<CString>ってことだろ。
>>772 なるほど、そういう事ですか
ありがとうございました
>>773 ArrayListでうまくできました
本当にありがとうございました
はまっていた所なんで助かりました
C++.NETFrameworkでiniファイルの書き込みと読み込みをしたいのですが
ネットで調べた所したのURLにサンプルコードがあったのですがC#で書かれていて
よくわかりません
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/039inifile/inifile.html このサンプルコードをどのように使えばいいのでしょう?
試しにclass IniFileHandler {}をコピペしてみましたがエラーが発生してしまいました(当たり前だが)
error C2814: 'Ar::Form1::IniFileHandler' がマネージ 'Ar::Form1' の中で定義されています。明示的に __gc、__nogc または __value を指定する必要があります。
error C2337: 'DllImport' : アトリビュートが見つかりません。ビルトインまたは、現在の名前空間でアクセスできるカスタム属性ではありません。
error C2143: 構文エラー : ';' が 'public' の前にありません。
どうかよろしくお願いします
>>775 using namespace System::Runtime::InteropServices;
using namespace System::Text;
// Ini 読み込み
[DllImport("KERNEL32.DLL", EntryPoint = "GetPrivateProfileString", CharSet = Ansi)]
static UInt32 GetPrivateProfileString( String* lpAppName,
String* lpKeyName, String* lpDefault, StringBuilder* lpReturnedString,
UInt32 nSize, String* lpFileName );
// Ini 書き込み
[DllImport("KERNEL32.DLL", EntryPoint = "WritePrivateProfileString", CharSet = Ansi)]
static UInt32 WritePrivateProfileString( String* lpAppName,
String* lpKeyName, String* lpString, String* lpFileName);
>>776 回答ありがとうございました
エラーは消えたのですが今度はForm1.cpp内でエラーが発生してしまいました
宣言してる場所がおかしいのでしょうか?
Ar\Form1.cpp(16): error C2129: 静的関数 'unsigned int Ar::WritePrivateProfileString(System::String __gc *,System::String __gc *,System::String __gc *,System::String __gc *)' が宣言されましたが定義されていません。
Form1.cpp内 #include "stdafx.h" #include "Form1.h" #include <windows.h> using namespace Ar; int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA; Application::Run(new Form1()); return 0; }
Form1.h内 namespace Ar { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::Text; using namespace System::Runtime::InteropServices; // Ini 読み込み [DllImport("KERNEL32.DLL", EntryPoint = "GetPrivateProfileString", CharSet = Ansi)] static UInt32 GetPrivateProfileString( String* lpAppName, String* lpKeyName, String* lpDefault, StringBuilder* lpReturnedString, UInt32 nSize, String* lpFileName ); // Ini 書き込み [DllImport("KERNEL32.DLL", EntryPoint = "WritePrivateProfileString", CharSet = Ansi)] static UInt32 WritePrivateProfileString( String* lpAppName, String* lpKeyName, String* lpString, String* lpFileName); 中略 //iniファイル処理関数 private: System::Void IniFile(System::Object * sender, System::EventArgs * e) { WritePrivateProfileString("Setup","test","1",String::Concat(Application::StartupPath,"Setup.ini")); }
>>777 >>776 のコードはクラスの中で定義します。
>>779 ~ StartupPath, "Setup.ini"));
↑これだと区切り文字を付け足してないので失敗します。
~ StartupPath, "\\Setup.ini"));
781 :
デフォルトの名無しさん :03/08/23 22:21
以下のプログラムをvc++6.0でコンパイルすると 「コンストラクタの宣言に戻り値の型が含まれています」というエラーがでます。 どうしてでしょう? わたしの使っている教科書そのままなので、構文がおかしいとは思えないのですが・・・。;q; class complex{ float r, i; public: complex(float a = 0.0, float b = 0.0); float real(); float imag(); } complex::complex(float a, float b){ r = a; i= b; } float complex::imag(){ return i; } float complex::real(){ return r; }
782 :
デフォルトの名無しさん :03/08/23 22:35
>>781 class complex{
/* ~ */
};// ←セミコロンがねぇよ。
783 :
デフォルトの名無しさん :03/08/23 22:44
>>782 (゚◇゚)~ガーン それだけなのー!?
・・・ほんとだ、コンパイラとおった。(w
ありがとうございました。m(__)m
784 :
すれ違いだが :03/08/24 02:48
>>781 どうせだから勉強がてら四則演算子とかも定義してみ。
785 :
デフォルトの名無しさん :03/08/24 09:36
int main(int argc,char* argv[]){ ←二個目の引数でパスを渡す char path[20]; strcpy(path,argv[2]); chdir(path) こんな感じでやっているんですが、コンパイルすら通りません。 VCでchdirとか入力すると引数候補とかが表示されるのに、 それは定義されていませんんと出ます。なぜでしょうか?
786 :
デフォルトの名無しさん :03/08/24 09:39
>>785 #include <direct.h>
787 :
デフォルトの名無しさん :03/08/24 09:58
2個目なら argv[1] じゃないの? ところで、path[20] って少なすぎ。
>>787 二個目の要素じゃなくて二個目の引数だからargv[2]でOKだろ。
789 :
デフォルトの名無しさん :03/08/24 10:42
>>786 そんなのあるんですか~、標準関数じゃないっぽいから
知らなかった~
>>787 うーん、適当に20文字にしてしまいましたが、少ないですか~
790 :
デフォルトの名無しさん :03/08/24 11:28
windowsやDOSでは、 argv[0]に引数の個数、argv[1]に第一引数、argv[2]に第二引数・・・なんだよね。 僕の使ってる教科書はargv[0]が第一引数になっていてかなり戸惑った。
> argv[0]に引数の個数、 違います。
792 :
デフォルトの名無しさん :03/08/24 11:35
793 :
デフォルトの名無しさん :03/08/24 11:39
あ、プログラム名だ。 引数の数はargc-1だな。
>>789 強いていうなら、多い少ないの問題でないと思う
動的2次元配列なんですが、 典型的なダブルポインタつかったパターンで対応できない場合 (2次元目の要素を見つける度にpush_backする必要がある)ではどうするのが 一番手っ取り早いでしょうか。 みなさんどう対応されてますでしょうか。 ベクタのベクタ(vector<vector<int> > v; ) を試したのですがメモリ使用量が多杉&処理速度も低速 &stlport453でこれやるとVCのheapエラーが出て実用になりませんでした。
list<vector<T> > deque<T* > あたりではどうか。
797 :
デフォルトの名無しさん :03/08/24 13:41
結局
>>751 の件はどうなんでしょ?
私も調べたんですが見付けられず(鬱
どなたか情報お願いします_(_^_)_
vector<vector*<int>>で代用。
>>796 外側をlistにするのは気がつきませんでした。
ポインタ使った方法にも興味があります。
ありがとうございます。早速試してみます。
>>798 おお、こういった記述もできるんですね。
もちょっと勉強してみます。
ありがとうございました。
>799 やっぱそうなん?(鬱 セコいよなぁ、M$もその金魚の糞共も
VC++ .NETスタンダードとプロフェッショナル(VS.NET)とを比べての スタンダードが劣る部分は何ですか?
最適化が出来ないってのは、大きなアプリケーションを作る上で致命的ですよねぇ。 ここはMSに貢いでまでVS.NETを買うべきでしょうか。
>>804 漏れがヘタレってことも多いにあると思うけど、VC6std でコンパイルした奴と
VC2003.net Proffessional (赤版)でコンパイルした奴を比べたら
10秒ぐらいかかる処理が2秒ぐらいで終わったよ… ┐(´ー`)┌
ちなみにファイルサイズは 約130KB → 110KBで 20KBぐらい減った。
最適化を期待してヨカタよ。
○最適化を期待して(VS2003 Prof 赤版を買って)ヨカタよ。 に訂正…。
非赤で13万弱か…。お財布と相談しつつ慎重に検討してみます。 ありがとうございました。
808 :
デフォルトの名無しさん :03/08/25 10:58
>>805 すんなにかわるのかぁ・・・。はふーん。
相変わらず6.0スタンダードでがんばってる漏れは負け組み?
809 :
デフォルトの名無しさん :03/08/25 13:45
>相変わらず6.0スタンダードでがんばってる漏れは負け組み? 仕事ならしょうがないんちゃう?
仕事でスタンダードなら負け組みもいいところ
>>809 仕事なのにスタンダードなんて使うのか?
812 :
デフォルトの名無しさん :03/08/25 20:22
つーか金がないならボーランドの無料コンパイラ使うけどな SDKベースでシコシコ開発するよ(疲)
814 :
デフォルトの名無しさん :03/08/25 23:16
>>813 速度優先とサイズ優先のコンパイルオプションがある
どちらでコンパイルしてもVC6よりサイズがコンパクトだったw
動作も問題なかったし、速度も問題なし
ただし、dependancy walkerとかspyとかがないから、それに相当するモノを・・・・・
フロントエンドを導入すれば開発環境としては問題がないだろうが・・・・・
815 :
デフォルトの名無しさん :03/08/26 06:23
ピクチャボックスの大きさを簡単にわかる 方法はどうすればいいのでしょうか。 プロパティを見ても分からないし・・・
動的に構造体を作りたい場合はどうしたらいいのでしょうか?
>>818 すいません、訂正です。
構造体の配列を動的に確保したい場合はどうしたらいいのでしょうか?
構造体を定義しといて確保したい場所でnewすればええんでないのかい?
std::vectorかなんかを使う
>>780 返事が遅くなってスマソ
クラス内で宣言したらちゃんと使えるようになりました
ありがとうございました
824 :
デフォルトの名無しさん :03/08/27 21:12
C++スレでスレ違いと言われたのでこちらでおながいします。 >VC.netでコンパイルしたプログラムを.netフレームワークなしで >動かすにはどうすればいいの? > >mscoree.dllがロードできないって言われて終わる。 >検索しても.netフレームワークをインストールすれ、っていう >文献は見つかったけど、コンパイルをどう工夫するのか、ってのはない。 >なんか簡単なプログラムを書いた友達はデフォルトで動く、 >って言ってたけど、なんかオプションとかあるの?
825 :
デフォルトの名無しさん :03/08/27 22:03
VC6でWindows APIをベースに簡単なプログラムを作っています。 ウィンドウクラスのレジストで WNDCLASSオブジェクトのhbrBackgroundメンバに (HBRUSH)GetStockObject(NULL_BRUSH)をセットして 背景を透明にしたいと思います。 しかし、このままでは背景がうまく再描画されてくれません。 WM_PAINTメッセージを受取ったとき、 ちゃんと背景が再描画されてデスクトップが透けて見えるようにするには どうしたらよいでしょうか? どうかお知恵をお貸しください。m(__)m
あぼーん
背景とデスクトップをSRC_PAINTさせればいいんちゃう? アフォですまんm(__)m
>>825 NULL_BRUSHは背景を透過するものではないのだが・・・
>>827 むみゅう。うちのMSDNではSRC_PAINTが検索に引っかかってこないのですが・・・。
>>828 では透明にするにはどうしたらよいのでしょう?
背景や枠を透明にできないと、
万景方号に拉致されてしまいます。;_;
>>824 マネージドC++だったら.NETフレームは絶対必要。.NETフレームワークなし
で動くのはアンマネージドC++でビルドした場合だけ。つまりVC++7.0を使って
MFCアプリでも何でもいいからネイティブコードを生成すればいい。
>>829 >>うちのMSDNではSRC_PAINTが検索に引っかかってこないのですが・・・。
BitBltなどにあるラスタオペレーションコードでしょう
SRCCOPYとかSRCPAINTとか
>>では透明にするにはどうしたらよいのでしょう?
普通はデスクトップをキャプチャーして背景にコピーでしょうか。
「猫でも」にもあるでしょう、たぶん。
Win2000以降ならレイヤードウィンドウをつかうとか。
>>825 すまん。SRCPAINTやった。
でもこれはBMP関係だから意味ないかも( ´Д⊂ヽ
マネージドと案マネージドのC++コンパイラって同じものなのかな? だとすればコマンドライン引数でスイッチできるのかも。だけど普通は プロジェクトの自動生成の段階でどっちか決定するし、そもそも使う ライブラリだって違うから、マネージドと案マネージドを切り替えるな んて事もしない。だからコマンドライン引数なんて考えた事もないよ。
834 :
デフォルトの名無しさん :03/08/28 08:55
質問です。 MFCで、エクスプローラの左側のペインのようなフォルダツリーを 簡単に作れるクラスはないですか?
無いです。 お次の方どうぞ。
>>835 おいおい、エクスプローラ自体がMFCだろが。
結構いろいろなところで使われてることが多いので、そういうクラスがあると思うのですが・・・。
「MFCの中にフォルダツリーを簡単に作れるクラスは無いか?」と言う問いに 「無い」は適切な答えだと思うが。
>>840 簡単にできるっていうのは画面分割の方をさしているかと思われ
ツリーもMFCのCTreeCtrlの方が若干扱いやすい…かも
MFC + PIDL ってのは、そこら辺にごろごろ落ちてるけどな。
MFCならCodeProjectとかCodeGuru行けば、いっぱいありそうだけどな。
845 :
デフォルトの名無しさん :03/08/28 21:45
VCで#include "cpgplot.h"を使うにはどうしたらよいですか? PGPLOTのライブラリーが必要とあったのですが導入方法がまったく分かりません。ご教授頂けると幸いです。
846 :
デフォルトの名無しさん :03/08/28 21:53
PGPLOTをインストールして、ヘッダのディレクトリをパスに追加するか、 ヘッダファイルを全部VisualC++のヘッダディレクトリにコピーする。
>>836 Explorer.exeをDependency Walkerで見てもMFC42.DLLとかでてこないよ。
MSVCRT.DLLは出てくるからMFCをスタティックリンクしてるとも考えにくい。
よって多分MFCは使ってない。
849 :
デフォルトの名無しさん :03/08/28 23:25
850 :
デフォルトの名無しさん :03/08/28 23:42
なんだこりゃ?フォートランじゃねえか。
今日初めてVCでGUIアプリをつくったが、、、 お前らマゾだろ
はじめはそう感じるかもね・・・。
つーか、PGPLOT自体、VCだけでコンパイルできない雰囲気だが。
MFCは慣れればVBなんかより開発効率いいよ。特にプログラムが でかくなると。
>>850 コンパイル済みのライブラリ探した方が早いね。それかUNIXでやるか。
857 :
デフォルトの名無しさん :03/08/29 00:26
850です。どうもありがとうございます。 学校のレポートでどうしてもC言語を使って物理シュミレーションしなくてはならなかったので使いたかったんでが、なにか 他に良い方法はないでしょうか?UNIXや、LINAXを使っていないのでVCでするしかなかったもので。
こんなわけのわからないマイナーなライブラリ使うよりも、 WindowsのGDI使った方が早い気がするんだが。
サウンドプログラミングがMFCだったのでショックだった。 SDKで書いてあれば、SDK、MFCに両方に対応できるだろうに。
というより、一体どういう学校なんだよ。カリキュラムに問題があるな。 シミュレーション以前にグラフィックライブラリの基本ぐらいは実習で教えるだろ? 元々CやC++にはグラフィックの扱いは定義されてないんだからな。 WindowsのGDIは初心者には癖が強すぎて難しいと思う。 OpenGLとGLUTを使うのがベストだな。俺が学生の頃シミュレーションはよくこれでやった。
861 :
しぇけなべいべな :03/08/29 18:51
VC6でアイコンリソースを作成すると、例えば IDI_ICON1 ICON DISCARDABLE "icon1.ico" という具合に、IDに「IDI_ICON1」という名前をつけても、resource.hの方で #define IDI_ICON1 110 のようにされて、ID名をconst char*型からconst int型に強制的に変更されてしまいます。 こうなると、ウィンドウクラスのレジストで、 WNDCLASS wc; wc.hIcon = LoadIcon(hInst, "IDI_ICON1"); としてもエラーになってしまいます。(LoadIconの第二引数がLPCTSTR型であるため) MSDNには、「ID番号を使う場合、MAKEINTRESOURCEマクロを使用せよ」と書かれているので、 WNDCLASS wc; wc.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1)); のようにするのですがうまくいきません。 どうやったらうまくいくのでしょうか・・・。;_;)ノノ ちなみに、メニューIDやビットマップIDなどもconst int型に強制変更されてしまうため、 随所でMAKEINTRESOURCEマクロが必要になるのですが、これらは正しく機能します。 iconの場合だけ機能しません。
それはよくひっかかるんだよね。 IDI_ICON1じゃなくて"IDI_ICON1"にすべし。
863 :
デフォルトの名無しさん :03/08/29 20:10
CListCtrl で DeleteItem を使っているのですが、大量のアイテムを削除しようとすると 時間がかかりすぎて困っています。何か解決方法はないでしょうか?
削除中SetRedrawで描画を止めればいいかも
>>864 レスありがとうございます。早速試してみます。
おかげさまで激速になりました。
867 :
デフォルトの名無しさん :03/08/30 02:58
VisualC++のプロファイラを使って行単位のカバレッジを 行いたいのですが、インクルードしているiostreamなどの ヘッダの中身まで検査されてしまい、網羅率が上がりません。 プロファイルダイアログの「詳細設定」に/EXC ヘッダ名.h と書いたり、ソースファイルの#includeしている行を EXCで除外したりしましたが、改善されませんでした。 プロファイルの対象からヘッダファイルをはずす方法を 教えて下さい。 使用環境はVC6.0のプロ版です。よろしくお願いします。
869 :
デフォルトの名無しさん :03/08/30 11:39
質問おながいします。 CComboをCreateしてAddStringしたのですが、 ドロップダウンリストにスクロールバーが表示されません。 スパイでみたところWS_EX_RIGHTSCROLLBARはたっているのですが。。。
>>869 普通にリストボックスの高さが広すぎるのでは?
リソースエディタの中で↓をクリックすると高さを調節できるようになったはず
872 :
デフォルトの名無しさん :03/08/30 13:24
VCいじってるんですけど、ウィンドウの様々な項目の意味がわかりません。 どこかにそういうのを解説してあるサイトありませんか? またはそういうの中心の本でもいいです。
スクリーンの低消費電力モードを無効にする方法はありませんか? SystemParametersInfoだとWindows2000でうまく機能しないので。
874 :
デフォルトの名無しさん :03/08/30 14:02
ダイアログにボタンを貼り付けたのですが 表示されるとDisabledされます。 なんででしょうか。。。
>>870-871 どうもすみませんでした。解決しました。
WS_EX_RIGHTSCROLLBAR以前にWS_VSCROLLが立っていませんでした。
お騒がせしました。。。m(__)m
>>873 設定-コントロールパネル-電源オプション
879 :
デフォルトの名無しさん :03/08/31 11:22
画像の縮小をしたいのですが、StretchBlt()を使うととても汚いです。 もっときれいに縮小できる方法はありませんか?
SetStretchBltModeは試してみた?
881 :
デフォルトの名無しさん :03/08/31 11:48
教えてください。 Win32プロジェクトと.netプロジェクトの違いは一体何ですか? Win32ってWinNT以降のOSの総称ですよね? .netって一体何ですか? どちらを使うべきか迷います。
>>880 SetStretchBltModeをCOLORONCOLORにしたらきれいになりました。
どうもありがとうございました。
VisualC++ Ver6 SP5 使ってます。ツールバーの配置が偶に換わるんですが防ぐ方法はあるのでしょうか? いつもは↓ ■ | ■■■ | ■■■ | ■■■ | ■■■ | ■匚二二二二▼ | ■ || ■■■■ | ■■■■■ | ■ | ■■■■■■ 匚二二二二▼ | 匚二二二二▼ | 匚二二二二▼■ || ■■■■■■ || ■■■■ | ■ | ■■ | ■ | ↑という配置になっているのですが、デバッグを終えてVCの画面に戻ってみると↓ ■ | ■■■ | ■■■ | ■■■ | ■■■ | ■匚二二二二▼ | ■ || ■■■■ | ■■■■■ | ■ | ■■■■■■ 匚二二二二▼ | 匚二二二二▼ | 匚二二二二▼■ || ■■■■■■ || ■■■■ | ■ | ■■ | ■ | ↑のように縦一列になってたりします。
886 :
デフォルトの名無しさん :03/08/31 17:21
にた症状で、DirectXのプログラミングしてる時、 作成しているアプリで、たとえば640x480の全画面表示をやると 終了した時にVisualStudioまでその解像度になってしまうことがあるんですが、 これも解決方法ありませんか?
887 :
デフォルトの名無しさん :03/08/31 17:29
>>884 通常時とデバッグ時のツールバー配置を、全く同じにすればずれません。
888 :
デフォルトの名無しさん :03/08/31 18:28
自ウインドウ(SDI or ダイアログベース)のウインドウハンドルの取得のしかたを教えてください。 関数の引数に HWND があるのでウインドウハンドルが知りたいのです。 環境はWin2k+VC++6.0Proです。
HWND GetSafeHwnd()
>>890 それだ!!これが原因だったのかぁ・・・
㌧クス
m_hWnd直接使っちゃだめなの?
894 :
デフォルトの名無しさん :03/09/01 10:03
ユーザーインターフェイススレッドを new でヒープに作りました。 ここで PostQuitMessage した場合、ヒープは delete されるのでしょうか? コンストラクタは呼び出されているようなのですが。
メールを送信したいのですが、どのようにしたら良いのでしょう? やはり、CAsyncSocket??
>> 894 素直にwinsockを直接叩きなさい。
まぁ宛先違うけどな
>>896 すいません、直接叩くって言うのは・・・?
APIを叩くだのポートを叩くだの言ってるやつは素人。 ポートを開くだの閉じるだの言ってるやつも素人。
そんなもんにこだわるのが素人
visual c++ 6.0ってgarbage collectionないの? マルチスレッドのDLL書いてるんだけど、ない場合死にそう…。
C#ってそういう人のためにあるんだろうな。
906 :
デフォルトの名無しさん :03/09/01 20:52
当方超初心者です。 Winsockのことで質問です。(業務上TCP/IPをやることになった・・・) ちなみにコンパイラはVC5.0です。 Winsockのconnect()でWSAEADDERINUSEが帰ってくるケースとしては どのような場合が考えられるのでしょうか? ソケットのクローズをクライアント側で行うプログラムを作成しています。 この時クライアント側がアクティブクローズを行っていることから TIME_WAIT状態のソケットがクライアント側で発生するという記事をみました。 このようにしてClient側でTIME_WAIT状態のソケットが大量に発生した場合 やはりClient側のconnect()でWSAEADDERINUSEが帰るのでしょうか? またそれに関するMSDNのページなどがありましたら教えていただきたいので どうかよろしくお願いします。 ちなみにVBではそれらしい技術情報を見ましたが・・・
>>906 bindしてからconnectしてる?
908 :
デフォルトの名無しさん :03/09/01 21:09
VC++.NETのひとつ前のバージョン(VC7?)ってもう手に入らないの? お店においてない。
VC5・・・・
910 :
デフォルトの名無しさん :03/09/01 21:14
>>904 .NET版のC++はGC使えるらしいよ
>>907 はい。行っているとおもいます。
(元の処理は自分が組んだのではないのですが・・・)
通常は問題ないのですが
大量に処理を実行させたときに現象が発生します。
bind()で上記の値が返ってくるケースは幾つか記事を見たのですが
(サーバー側がクローズしたときにソケットがまだ裏で生きているのでbindで再使用が出来ない)
conect()で発生するケースが見つからなくて・・・
今回発生している原因がconnectなのは確かですし
MSDNでもconnectが値を返すのを確認しましたが
現象が発生するパターンが出てないので・・・
発生ケースとしてはbind()の場合と同じなのでしょうか?
bind()→connect()でTIMEWAITの判定を行うのが
サーバーかクライアントかという違いということなのでしょうか・・・
TCP/IPは本当に初心者なので処理自体もまだうろ覚えの状態で調べてるため
単純な問題かもしれませんがよろしくお願いいたします。
>>888 MFCならCWnd::m_hWnd、SDKならコールバックのところでウィンドウハンドル
取れるけど、それにアクセスできない特殊な条件とかなの?
>>905 スマートポインタとスマートポインタの配列版は
手持ちのものを使ってますが重宝してます。
>>905 待て待て。
確かに参照数が0になったら抱えてるオブジェクトをdeleteしてくれるが、
それをGCと呼ぶのは語弊があるぞ。
JAVAとC++は根本が違うという事を意識しないときっと痛い目に遭う。
で、boostとJAVA互換スレッドライブラリを作って妥協したりする(´ー`)y-~~
>>913 それはつまりスマートポインタ内でしかその参照を
数えてないわけで、スマートポインタ以外でポインタを
保持しているとしてもdeleteされるから、
第三者が書いたプログラムが俺が書いたコードの内部で生成
したインスタンスの参照を持っているのに勝手にdeleteされる
可能性もありで、グローバルなGCではない、
っていう理解で正しい?
>>903 自分でGCに替わる仕掛けでも作りましょう。手っ取り早い方法は
削除対象のポインタをどっかにプールしておいて、抹消したい時点
でいっきにdeleteする。もんだいはdeleteすべき時期をどうやって
決めるか。以前.NET GCの仕組みがMSDNマガジンに解説されてたけど
すんごい事やってるね。
>>908 >>909 VC++.NET(Visual Studio.NET 2002)の一つ前っていうと6.0でしょ。
>>910 .NET版つまりマネージド版なら確かにGC使える。でもアンマネージド
のVC++7.0だったら使えないよ。
>>914 そゆことだ。
smart pointerだけを使えばいいんだけど、そうしてくれない人もいる。
(smart pointerはコストが高いと、プロファイルもせずに思いこんでいる人とかね)
そういう人が出てきた時点であぼんぬする。
あと、C++でもgcはあるにはあるよ。名前失念したので自力検索してくれ。スマソ
C++.NETのBinaryWriterでテキストファイルを出力する処理を作っているのですが 行ごと格納されている文字配列を一つのString型に統合して バイト型に変換、BinaryWriterで書き込みというやり方でやっていたのですが このやり方だと小さいサイズの書き込みは問題ないのですが、大きいファイルの書き込みになると メモリが増大してしまって処理が極端に遅くなってしまいます 分割して書き込んでいけばいいと思うのですが BinaryWriterでテキストを分割して書き込むいい方法はないでしょうか? for(int Int_OutCount=0;Int_OutCount<Aay_output_Array->Count;Int_OutCount++) { //配列に入ってる文字列を統合する Str_Replacement = String::Concat(Str_Replacement,Convert::ToString(Aay_output_Array->Item[Int_OutCount])); } //文字列をバイト列に変換する(ファイルに書き込む文字コードはShiftJIS) Byte bytesData []=System::Text::Encoding::GetEncoding(932)->GetBytes(Str_Replacement); //書き込み先のパスを設定する FileStream* Fst_Output = new FileStream(Str_Save, FileMode::OpenOrCreate,FileAccess::ReadWrite); //バイナリ書き込みモードを設定する BinaryWriter* Biw_Writing = new BinaryWriter(Fst_Output); //ファイルに書き込み Biw_Writing->Write(bytesData);
下のやり方に変えたら分割してできるようになりました お騒がせしました、、、 //書き込み先のパスを設定する FileStream* Fst_Output = new FileStream(Str_Save, FileMode::OpenOrCreate,FileAccess::ReadWrite); //バイナリ書き込みモードを設定する BinaryWriter* Biw_Writing = new BinaryWriter(Fst_Output); //検索でヒットした行数分ループする for(int Int_OutCount=0;Int_OutCount<Aay_output_Array->Count;Int_OutCount++) { //配列に入ってる文字列を統合する Str_Replacement = String::Concat(Str_Replacement,Convert::ToString(Aay_output_Array->Item[Int_OutCount])); //文字列長さが1500以上になった場合 if(Str_Replacement->Length > 1500) { //文字列をバイナリモードに変換する(ファイルに書き込む文字コードはShiftJIS) bytesData=System::Text::Encoding::GetEncoding(932)->GetBytes(Str_Replacement); //ファイルに書き込み Biw_Writing->Write(bytesData); //格納用文字列の解放 Str_Replacement=Str_Replacement->Remove(0,Str_Replacement->Length); } }
920 :
デフォルトの名無しさん :03/09/03 06:54
自分はコンソールアプリを作る時、Main.cppにmain関数、#include "ooo.h" #include "ooo.h"、プロトタイプ宣言を書いて、その他は全て.hファイルに 書いています。ただ、落としたソースを見てみるとよくc、cppファイルが 複数入ったプログラムがあるのですが、何のために複数用意しているのでしょう。
921 :
デフォルトの名無しさん :03/09/03 07:08
え、cppに宣言して実装をh?
はい。いつから、なぜこういうスタイルになったか覚えていませんが。 ただ、どこにどの関数があるか見つけやすかったりしますが。 ////Main.cpp//// #include <stdio.h> //Map.h void InitMap(int*); void ShowMap(int,int,int,int,int,int,int*); //Fighting.h void CheckFighting(int,int,int,int*); void CheckVSFighting(int,int,int,int*); #include "Map.h" #include "Fighting.h" int main(void) {return 0;} ////Map.h//// void InitMap(int*) {} ... ////Fighting.h//// void CheckFighting(int,int,int,int*) {} ...
初心者に・・教えてくれるんですよね?│柱│ω・`)ジー あのぅ・・C++ってまず何を参考に勉強すればいいんですか? 試しにC++が書ける?ソフトみたいなの使ったんですが、 何を書けばいいのかわからないし・・(;とか{って何?) 誰か助しけて・・(´;ω;`)
>>924 C から始めたら。すでに枯れた言語だけど基本です。
あまり時間をかけずに一通り仕組みを理解したら C++ に進む。
同じように理解したら VC++ 。
あとは努力次第である程度書けるようになるでしょ
すいません、ちょっとお聞きしたいんですが、 ワークスペースを開こうとすると 「SHCV.DLLが読み取れません、VCをインストールしなおしてください」 というエラーがなぜか突然でるようになってしまいました。 以前までは普通に使えていたんですが、、、 一旦アンインスコして入れなおしたんですが、やはりダメでした。 ド素人なもので、DLLとかよくわからないんですが、 検索したら同名ファイルはいろいろ落ちていたので拾ってはみたものの、 どこに入れればいいのかも分からず、 なにかやたらな事したらどうなるか分らないので怖いです。 何か対処法がありましたら教えてください。よろしくお願いします。
スマソ、、、 ちょっと前にVC本体のドライブを変えようと思って インスコしなおす作業をしていたんですが、 その時になぜか例のファイルだけ消えずに残ってたらしく、 そのため新しいドライブの方にはこのファイルが作られなかった模様です。 そして今日久々に立ち上げようとしたらエラーがでた、、、 ということだったみたいです。 新しいフォルダの方にコピペしたらエラーがでなくなりました。 こんなことで悩んでいた挙句スレ汚し、、、 どうもすいませんでした。
>>926 ,
>>927 ありが㌧!!
C、C++、VC++全部同じだと思ってましたw
今ツタヤ行って「C言語超入門ゼロからのプログラミング」っての買ってきたんで
927のサイトも一緒に見ながら勉強します。
.cppはひとつで残りは全て.hというスタイルを貫きます。
個人でやるならどうぞご自由に
>>933 やっぱり貫けません、ごめんなさい。
本当はどう言う風にするのが正しいのか知りたいです。
ANSI-Cではこうするとかあるなら教えてください。
また、グーグルのキーワードでも良いです。
935 :
デフォルトの名無しさん :03/09/03 17:00
>>934 普通は
○○○.hファイルに宣言を書き,
拡張子以外同名の○○○.cppに
○○○.hで宣言してる関数の実装を書きます
936 :
デフォルトの名無しさん :03/09/03 17:01
>>934 で,C++なら
○○○.hと○○○.cppのファイルは
クラスごとに1セットって感じ
WTLは.hにガリガリ書いていくけど、あれはクラスだし、ちょっと違うか。
クラスっていうかテンプレートだから
940 :
デフォルトの名無しさん :03/09/04 01:59
継承を使うときは基底クラスと派生クラスで別ファイルにする、しない、どっち? わしの場合、 継承関係が複雑になってくるとインクルードシールドが必要になって面倒なので、 一ファイルにまとめちゃうんですが・・・。
つーかVCの話じゃねー
CStringからWCHAR*への簡単な変換方法はないでしょうか。 現在MultiByteToWideCharを使っているのですが もっと便利な関数があったら教えてください
#define UNICODE
944 :
デフォルトの名無しさん :03/09/04 05:12
>>920 は宣言と定義の違いをもっと理解した方がいい。
そのやり方だと、ソース間で(この場合はヘッダ間でか)相互にインクルードしあう場合はどう対処する?
初心者向きの本には、分割コンパイルについて述べられているものが少ないのも問題な気がする。
ヘッダは宣言のみとし、#ifndef,#define,#endifで二重定義を防ぐようにするのは習慣にすべき。
>相互にインクルードしあう場合 意味もなくテンプレートにしたり、インターフェースクラスを活用して逃げる(w
なんか、スレ違いな話題が進行しているような気がするが VC7.1に移行してから pragma once のみで統一するようにした。 見た目にシンプルな方がイイ。
>>944 そうなんですよね。オレもソース分割でかなり悩みました。
自分のソースは今のところ短いから問題ないんですが、
人のソースを読むときに難解で・・・。
VCだとプリコンパイルだかなんだかでstdafx.cppなんかが
作られてますが、こういう手法ってVC以外でもとられる
もんなんでしょうか。
949 :
デフォルトの名無しさん :03/09/04 12:02
すません。 Unix Cは経験あるけど、VC++&C++は初めて触るというのに いきなりVC++開発突っ込まれてしまったプログラマです。 fstreamとかでテキストファイルを排他&追加モードでオープンしたいのですが、 どうやって指定すればいいのでしょう? openmode = ios::appで追加モードにできるというのはわかったんですが……;
>>944 相互にインクルードしあう場合、分割コンパイル、#ifndef,#define,#endif
全部使ったことがありませんでした。基本は全部Main.cppに書いて、
長くなってきたら.hを作っていくと言う感じでした。win32アプリでも
WinMain.cppと.hという感じで作っていました。
MSDNライブラリがMFCマンセー仕様になってる気がするのは気のせいでしょうか?
955 :
デフォルトの名無しさん :03/09/04 22:23
Visual C++ 6.0 Visual C++ .NET Standard Visual C++ .NET Standard 2003 ってあるけど やっぱ新しいほうがいいの?
>>955 >やっぱ新しいほうがいいの?
.net 2002は使ったことないがバグだらけという噂。
2003は漏れの感じでは良く出来てるかと。(ただし、重たい)
↓次スレハ マカスィタ!!
↓ ↑ └→┘
猫でもわかるプログラミング(
ttp://www.kumei.ne.jp/c_lang/index.html )
のC言語編第57章のプログラムがエラーになるのですが、どうすればよいのでしょうか?
-------エラーメッセージ----------
'WinMain' : 関数はオーバーロードできません。
--------以下ソース---------------
#include <windows.h>
int WINAPI WinMain( HANDLE hInstance ,
HANDLE hPrevInstance , LPSTR lpCmdLine , int nCmdShow )
{
MessageBox(NULL,
(LPCSTR)"メッセージ・ボックスのテストです。",
(LPCSTR)"猫でもわかるプログラミング",
MB_OK);
return 0;
}
---------------------------------
>>961 HANDLE → HINSTANCE に置換。
大昔のVCではHANDLEでも通ったのだが。今は型がより厳密になった。
いい加減、時代遅れな猫を参考にするのはやめよう。
>>963 だな。あそこは修正すべきだよな。
VC++4.0だったよな。確か。
もうそんな骨董品使ってる椰子いねーよな。
>>962 お~!!できました。どうもありがとうございました。
>>963-964 確かに…今までも結構苦労しながら読んできたんですよ…
ここ以外にお奨めのサイトとかってありますかね?
966 :
デフォルトの名無しさん :03/09/05 20:24
すいません。。 Platform SDK っていったいなんですか?
968 :
デフォルトの名無しさん :03/09/05 22:02
猫ねえ・・・ たまに関数や構造体をど忘れした時に、リファレンス的に見ることはある。 ていうか検索かけると上位に出てくることが多い。 あそこで勉強するのはさすがに勧められないな。
969 :
デフォルトの名無しさん :03/09/05 22:13
本買え。
MFCからはじめろ。MFCわからなけりゃ他の言語にしな。 MFCはVisualC++に初心者向けの本がくっついてきただろ?読むならそれで十分だ。
972 :
デフォルトの名無しさん :03/09/06 19:14
EngBitBlt というのがよくわかりません。 おしえてください。
973 :
デフォルトの名無しさん :03/09/07 04:14
Win32Applicationで最小化して戻した時など再描画の処理を入れて 文字などが消えないようにしますが、コンソールみたいにウインドウに焼き付ける みたいな方法で同じ事がしたいのですが、その方法があるなら教えてください。
>>973 WM_PAINT もしくは、 OnDrawで描画するようにする。
Winプログラマの常識。
>>974 ありがとうございます。
いつもはWM_PAINTでやっているのですが、ゲームを作っていて、
マップ、コマンド、アイテムなどユーザーに選択させながら表示させている
のですが、それを再表示するとなると、又選択させないといけないのです。
表示と選択処理は別にするのが普通だと思うのですが、マップは攻撃範囲に
よって表示するものが変わり、コマンドだと所持しているアイテムに
よって変わるなど、その地点では必要ないデータを渡すのが
ごちゃごちゃして嫌だったので楽な方法が無いかと質問しました。
OnDrawは始めて聞きました。調べてみます。
>>975 Doc/View使ってないならWM_PAINTで描画すればよろしかと。
>表示と選択処理は別にするのが普通だと思うのですが
常に、そうするべきと思われ。
なんだか、設計に問題ありなような気がするなあ。
>>946 ありがとうございます。
>Doc/View使ってないならWM_PAINTで描画すればよろしかと。
始めて聞いた言葉なので調べてみます。
>常に、そうするべきと思われ。
>なんだか、設計に問題ありなような気がするなあ。
とにかく楽に作る事を考えていたので、これ以外の拡張の時もすごく大変
でした。ゲームを作りながらプログラムを勉強しているので、行き当たり
ばったりなのもあると思いますが。もう一度1からやりなおします。
>>975 普通はCreateCompatibleBitmapを使うだろ。
>>978 ありがとうございます。それも調べてみます。
AdvancedWindows 買おうと思ったけど たけーーーーーーーーーーーーーーーー!!! 買って損しないか心配
ゲームならOnDrawで描画するより、タイマーで割り込みをかけてOnTimerで描画した方がいい。 というかゲームのプログラムはそれが普通。 こうすれば常に描画を更新しているから、再描画を指示する必要はない。 一冊ゲームプログラミングの本を買うことをおすすめするよ。 慣れてきたらDirectXとマルチメディアタイマーに切り替えな。OnTimerは精度悪いから。
>>981 おぉ、そうなのか。
なんかおすすめのゲーム製作本はある?
984 :
デフォルトの名無しさん :03/09/08 14:55
あるボタンを押してその関数内の処理を 強制終了させるためのボタンを作りたいので すがボタン内の処理を強制終了させる関数、 方法はありませんか
ボタンのイベント処理を別スレッドでやってるだろうから、 その、イベント処理をやってるスレッドに WM_QUIT でも投げてやればよし。 そのイベント処理をやるスレッドが while( 0 < GetMessage( ... ) ) { } って感じじゃない時は、 グローバルな変数をつかう。たとえばグローバルなスコープに volatile static int haltButtonProcess = 0; などと書いておいて、 イベントハンドラ側に if( haltButtonProcess ) return; ってな記述をちりばめておく。 外部から haltButtonProcess = 1; とかってやると、強制終了できる。
ボタン内の関数・・・何となくVBっぽい感覚だな。 強制的に別のスレッドを終了させるには、TreminateThread()という関数がある。 でもこれは危険だから使わない方がいいよ。 何かグローバル変数を用意しておいて、終了ボタンを押したらグローバル変数をtrueにして、 作業してるスレッド内ではループのどこかでグローバル変数を調べて、 フラグが立っていたらExitThread()をする、という方法がある。こちらの方が安全。
グローバル変数よりも、メンバ変数のほうが良くないか?
↓今度こそ次スレをマカスィタ!!!
>>988 別スレッドにオブジェクトを渡すと構成がデバッグの時assertで落ちます。リリースなら通るんですがね。
コールバックの引数にオブジェクトのポインタを渡そうとしたら、そういうエラーが出て、
停止位置のMFCのソース読んだらオブジェクト渡すなというようなことが書かれていました。
埋め
梅
>>991 別にオブジェクト渡すなんていってないよ。
MFCだとマルチスレッドもクラスだから、そのクラスのメンバに変数を追加して、
メンバ関数でその変数を書き換えるようにすればいい。
>>984 が作ってるのは CWinThread派生のUIスレッドじゃなくて、
ワーカスレッドっしょ?多分。
Microsoft Platform SDKはどこにあるのでしょう? MicrosoftのDownloadサイトでPlatform SDKを検索しても Pentablet用とかしか命中しません・・・ October 2002が欲しいんですが・・・。
ケコーンついでに
1000げとスザー
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。