■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

★初心者にVisual C++を教えるスレ★ Part24
251 名前:デフォルトの名無しさん :2006/11/07(火) 22:38:29
>>250
コントロールに振られているリソースIDを間違って削除したんじゃない?

252 名前:デフォルトの名無しさん :2006/11/08(水) 01:08:23
スタティックライブラリ(*.lib)を作成し、配布したいと考えています。
libができたのでテストアプリにリンクしてビルドしたところ、以下の
warningがでてしまいました。libの利用者が意識することなく、
このwarningを解消したいと思っているのですが、方法をご存知の
方がいましたら教えて頂けませんか。

・warningメッセージ
d:\projects\testlib\src\hoge.h(11) : warning C4142: 型が再定義されていますが、それはコード生成上何の効果もありません。

・上記行数にあるコード
typedef unsigned long U_INT32;

ライブラリをビルドする際に宣言されたtypedefが、アプリを
ビルドするときにも有効のまま残ってしまっているのだと推測
しているのですが、どう解消したらよいのか見つけられていません。

作業環境は以下のとおりです。
Windows XP Home SP2
MS VC++ 2005 Express Edition
MS Platform SDK for Win Svr 2003 SP1

よろしくお願いいたします。

253 名前:デフォルトの名無しさん :2006/11/08(水) 02:14:09
VC++.NET 2005 Pro(2003theSpokeユーザに配布されたもの)環境にて質問です。

あるソリューションで、DLLと、それを動かすテストアプリケーションを作成しています。
テストアプリケーションをコンパイルする段階で以下のコンパイルエラーが出ます。

エラー1fatal error LNK1104: ファイル 'd:\MyDocument\Visual.obj' を開くことができません。DebugTool

このオブジェクトファイルが何なのか検討尽きません。
依存関係も設定済み・・・Visual...と名付けたファイルなども無しです。
プロジェクトファイルの位置はマイドキュメント直置きにしてるわけでもなく、ディレクトリ
設定を見てもMyDocumentを設定してる項目は無いと思います。

心当たりのあるかた、教えてください。お願いします。

254 名前:デフォルトの名無しさん :2006/11/08(水) 05:53:51
>>252
hoge.hからその宣言を外し、ライブラリの方のhoge.hをインクルードしている方に移動すればよろしかろ。

255 名前:デフォルトの名無しさん :2006/11/08(水) 15:30:40
http://support.microsoft.com/kb/315780
のページを参考に、GDI+を用いてグレースケールのGIFを作成するプログラムを作ってみたのですが、
一度ファイルに書き出したのち再度読み込み Bitmapインスタンスからパレットを取得してみると、
ColorPalette構造体のFlagsに設定したはずのPaletteFlagsGrayScaleが得られません。

Bitmap::Save() を用いて保存したんですけど、それでは不十分なんでしょうか

256 名前:デフォルトの名無しさん :2006/11/09(木) 09:05:23
VC++2005 standard /MFC です。
OnActivateメッセージが発生したときに、
マウスカーソルのあるボタンのクリック動作をさせたいです。

マウスカーソルの下のコントロールを取得する方法を教えてください。


257 名前:デフォルトの名無しさん :2006/11/09(木) 10:01:31
全然関係ないけどボタンにマウスオーバーしたとき
ビットマップ変えるのどうやるんだっけ?
と思ってCBitmapButton思い出したけど
これマウスオーバーじゃなくてフォーカスだな
ということはhittestでやらないとだめか

258 名前:デフォルトの名無しさん :2006/11/09(木) 10:09:34
ツールバーはマウスオーバー対応してるね

259 名前:256 :2006/11/09(木) 12:19:28
レスどうもです。
「マウスオーバー」で 少し検索してみたところ、
マウスポインタの座標から割り出す・・・みたいなことが。

メニューにマウス乗せたときや、webのリンクにマウスを乗せたとき、
いろいろと使ってそうなのに・・・。

260 名前:デフォルトの名無しさん :2006/11/09(木) 12:31:32
>>257
ボタンのウィンドウにWM_MOUSEMOVEが飛んできたら、1回だけマウスオーバーの絵を描画
WM_MOUSELEAVEが飛んできたら絵を戻す

みたいな感じに俺はやってる

261 名前:デフォルトの名無しさん :2006/11/09(木) 13:10:05
http://www.geocities.jp/supermisosan/kakusanseconddimension.html
VC++proでこの計算をやってみようと思ったのですが
エラーがたくさんでて削除して他の例をしようと思ったのですが
エラーが引き継がれてしまいました。
解決策教えてください・・・。

コンパイルしています...
a001.cpp
c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'FILE' : 定義されていない識別子です。
c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'output' : 定義されていない識別子です。
c:\program files\microsoft visual studio 8\vc\include\sal.h(11) : error C3861: 'fopen': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(14) : error C3861: 'printf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(15) : error C3861: 'scanf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(59) : error C3861: 'fprintf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(61) : error C3861: 'fprintf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(64) : error C3861: 'fclose': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\stdio.h(69) : error C2378: 'FILE' : 再定義されています。シンボルは typedef でオーバーロードできません
c:\program files\microsoft visual studio 8\vc\include\stdio.h(131) : error C2143: 構文エラー : ';' が '*' の前にありません。


262 名前:261 :2006/11/09(木) 13:57:01
別のプログラムを書いてみたんですが
まったく同じエラーがでます。。。

263 名前:デフォルトの名無しさん :2006/11/09(木) 14:21:19
>>261
つ[#include <stdio.h>]

264 名前:デフォルトの名無しさん :2006/11/09(木) 14:34:49
>>263
ありがとうございます。。エラーはかなり激減したんですが
次はこんなエラーが出てしまいました。。。。

//三辺の長さと面積の計算
[#include <stdio.h>]
[#include <math.h>]

int main(){
float a,b = 10.7,c,h,s;
a=20.5;
c=14.5;
h=(a+b+c)/2;
s=sqrt(h*(h-a)*(h-b)*(h-c));
printf("a=%f b=%f c=%f \n",a,b,c,s);
return 0;
}

コンパイルしています...
a001.cpp
c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'FILE' : 定義されていない識別子です。
c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'output' : 定義されていない識別子です。
c:\program files\microsoft visual studio 8\vc\include\sal.h(11) : error C3861: 'fopen': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(14) : error C3861: 'printf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(15) : error C3861: 'scanf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(59) : error C3861: 'fprintf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(61) : error C3861: 'fprintf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(64) : error C3861: 'fclose': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\stdio.h(69) : error C2378: 'FILE' : 再定義されています。シンボルは typedef でオーバーロードできません
c:\program files\microsoft visual studio 8\vc\include\stdio.h(131) : error C2143: 構文エラー : ';' が '*' の前にありません。

265 名前:261 :2006/11/09(木) 14:35:48
すいませんエラー部分間違えました

計算.cpp
c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(2) : error C2014: プリプロセッサ ディレクティブのシャープ記号 (#) の前に、空白文字以外の文字があります。
c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(3) : error C3409: 空の属性ブロックは認められません。
c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(3) : error C2143: 構文エラー : ']' が '[' の前にありません。
c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(3) : error C2014: プリプロセッサ ディレクティブのシャープ記号 (#) の前に、空白文字以外の文字があります。
c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(5) : error C2337: 'int' : 属性が見つかりません。
c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(5) : error C2146: 構文エラー : ']' が、識別子 'main' の前に必要です。
c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(5) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(6) : warning C4305: '初期化中' : 'double' から 'float' へ切り詰めます。
c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(11) : error C3861: 'sqrt': 識別子が見つかりませんでした
c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(12) : error C3861: 'printf': 識別子が見つかりませんでした
ビルドログは "file://c:\Documents and Settings\PC-USER\デスクトップ\計算\Debug\BuildLog.htm" に保存されました。
計算 - エラー 9、警告 1
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========

266 名前:261 :2006/11/09(木) 14:49:15
] #include <stdio.h>
] #include <math.h>
int main();
{
float a,b = 10.7,c,h,s;

a=20.5;
c=14.5;
h=(a+b+c)/2;
s=sqrt(h*(h-a)*(h-b)*(h-c));
printf("a=%f b=%f c=%f \n",a,b,c,s);
return 0;
}

------ すべてのリビルド開始: プロジェクト: 計算, 構成: Debug Win32 ------
プロジェクト '計算'、構成 'Debug|Win32' の中間出力ファイルを削除しています。
コンパイルしています...
計算.cpp
c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(1) : error C2059: 構文エラー : ']'
c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(1) : error C2014: プリプロセッサ ディレクティブのシャープ記号 (#) の前に、空白文字以外の文字があります。
c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(2) : error C2014: プリプロセッサ ディレクティブのシャープ記号 (#) の前に、空白文字以外の文字があります。
c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(4) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
ビルドログは "file://c:\Documents and Settings\PC-USER\デスクトップ\計算\Debug\BuildLog.htm" に保存されました。
計算 - エラー 4、警告 0
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========

エラーだいぶ減らせたんですがここから
どう改善したらいいでしょうか・・・
長々とコピーすいません

267 名前:デフォルトの名無しさん :2006/11/09(木) 14:59:11
ひろったソースをわけもわからずビルドしたって何の意味もないよ

268 名前:261 :2006/11/09(木) 15:03:29
>>267
いえ、VisualC++による理工学問題の解法って本で
プログラムの数値計算の例題をしているんですが・・・

269 名前:デフォルトの名無しさん :2006/11/09(木) 15:06:57
ダメだこりゃ

270 名前:261 :2006/11/09(木) 15:06:59
’]’でヘッダーが使われなくなってしまうんですよね。。。
ググったんですがやはりVC++再インスコしかないんでしょうか

271 名前:デフォルトの名無しさん :2006/11/09(木) 15:07:03
cppファイルの(1)行目と(2)行目のプリプロセッサ ディレクティブのシャープ記号 (#) の前に、空白文字以外の文字があるのが問題じゃないかな

272 名前:261 :2006/11/09(木) 15:10:48
>>271
削除するとヘッダーの108エラー19警告が出てしまうんですが。。。

------ すべてのリビルド開始: プロジェクト: 計算, 構成: Debug Win32 ------
プロジェクト '計算'、構成 'Debug|Win32' の中間出力ファイルを削除しています。
コンパイルしています...
計算.cpp
c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'FILE' : 定義されていない識別子です。
c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'output' : 定義されていない識別子です。
c:\program files\microsoft visual studio 8\vc\include\sal.h(11) : error C3861: 'fopen': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(14) : error C3861: 'printf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(15) : error C3861: 'scanf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(59) : error C3861: 'fprintf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(61) : error C3861: 'fprintf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(64) : error C3861: 'fclose': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\stdio.h(69) : error C2378: 'FILE' : 再定義されています。シンボルは typedef でオーバーロードできません
c:\program files\microsoft visual studio 8\vc\include\stdio.h(131) : error C2143: 構文エラー : ';' が '*' の前にありません。
c:\program files\microsoft visual studio 8\vc\include\stdio.h(131) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
c:\program files\microsoft visual studio 8\vc\include\stdio.h(131) : error C2371: 'FILE' : 再定義されています。異なる基本型です。



273 名前:デフォルトの名無しさん :2006/11/09(木) 15:13:29
まったくの初心者向けの本じゃなくて
Cの基礎は知ってる前提の本じゃないかな?

274 名前:デフォルトの名無しさん :2006/11/09(木) 15:14:55
それぐらいの簡単なことでつまずくようだったら
もうちょっと短いサンプルで勉強したほうがいいよ。

275 名前:デフォルトの名無しさん :2006/11/09(木) 15:16:11
C/C++言語自体の勉強が必要。
英語が分からないのに、英語の本で理工学の勉強するようなもんだ。

276 名前:261 :2006/11/09(木) 15:20:17
Cはいちを勉強したんですが、、、
もう少しVC++の入門書読み返して見ます。。。

277 名前:デフォルトの名無しさん :2006/11/09(木) 15:22:45
http://www.amazon.co.jp/gp/product/4526053597/
Visual C++による理工学問題の解法 (単行本)
佐藤 次男 (著), 佐藤 裕哉 (著)

本の題名は間違い。よく検討して買いましょう, 2004/12/27
レビュアー: カスタマー
この本、Visual C++とついていますが、流体のグラフィクス表示や
大規模数値計算の可視化を可能にする本ではありません。しかも、
VC++の説明もろくになく、簡単なグラフィクス表示、つまり計算結果
のグラフ表示しか書いてありません。題名は全くの検討違い。
プログラムの方もC++なのに全然特性を利用しておらず、後半の
内容はほとんどC言語です。内容も理工学問題とありますが、
明らかに振動を中心とした電気工学で理工問題ではありません。

278 名前:デフォルトの名無しさん :2006/11/09(木) 16:15:26
>>276
VC++と名の付く本じゃなくて、C/C++言語の本で勉強しなさい。

279 名前:デフォルトの名無しさん :2006/11/09(木) 19:57:38
>>261
>c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'FILE' : 定義されていない識別子です。
>c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'output' : 定義されていない識別子です。

c:\program files\microsoft visual studio 8\vc\include\sal.h を>>261のプログラム例で上書き
なんて馬鹿なマネはしてないよな?

280 名前:261 :2006/11/09(木) 22:15:55
>>279
そうだったみたいです。
sal.h(なんだこれ)とstdio.hがぶっこわれたみたいです。
結局大学図書館いって再インスコしてきました・・・。
お騒がせしました。

281 名前:252 :2006/11/10(金) 00:27:02
>>254さん
レスありがとうございます。

書いて頂いた方法で解決できると思うのですが、
別々に管理するのは大変なので、出来れば
ライブラリをビルドする時のヘッダとユーザに
配るものとを共通にしたいのです。
(質問するときにちゃんと書くべきでした。
すいません・・・)


282 名前:デフォルトの名無しさん :2006/11/10(金) 00:32:58
>>281
それじゃ、#ifdefマクロで宣言を括ってやって、ビルドするときはそのマクロを定義するってことで。

283 名前:デフォルトの名無しさん :2006/11/10(金) 01:40:36
環境はVS2003のVC++です
新規でWin32プロジェクトを作成すると自動生成コードのおかげで
起動するとフォームが表示されてしまいます
簡単なファイルチェックだけしたいのでウィンドウは表示したくないのですが
どこをコメントアウトしたらいいのか教えてください?
コンソールプロジェクトでやってもコンソールウィンドウが出てしまって・・・







284 名前:デフォルトの名無しさん :2006/11/10(金) 03:24:32
ヒント:Visable

285 名前:デフォルトの名無しさん :2006/11/10(金) 12:38:22
CWnd::SetActiveWindow()

って、どのウィンドウをアクティブにするか引数送れないのだけど
どうやって記述すればいいのですか?

static CWnd* lcwnd=GetActiveWindow( );
: //何かアクティブウインドウが変更される処理
SetActiveWindow(lcwnd); //←元のウインドウをアクティブに戻したい(コンパイルエラー)


286 名前:デフォルトの名無しさん :2006/11/10(金) 12:50:10
>>285
オブジェクト指向を勉強してください

287 名前:285 :2006/11/10(金) 13:31:04
オブジェクト指向ってことで 見覚えのある記述をしてみました
lcwnd.SetActiveWindow(); //×
lcwnd::SetActiveWindow(); //×
lcwnd->SetActiveWindow(); //○
コンパイルは 通りました(サンキュー☆)が
意図する結果にはなりませんでした

オブジェクト指向ってことは
lcwnd が示すオブジェクトに SetActiveWindow が用意されていない から
意図する結果にならなかった、と考えましたが あってますかね?

とすると 不特定(別アプリ)のウインドウに対しては
CWnd::SetActiveWindow() ではないものを使うべき・・・
ん〜〜

288 名前:デフォルトの名無しさん :2006/11/10(金) 13:40:45
ttp://support.microsoft.com/kb/97925/ja

289 名前:285 :2006/11/10(金) 14:06:24
>>288
おかげさまでできました! サンキュです
GetActiveWindow() ではなく
GetForegroundWindow() を使うべきだったのですね

290 名前:デフォルトの名無しさん :2006/11/10(金) 15:24:59
ピクチャボックスを使ってグラフを書こうとしているのですが、
計算した数値結果をそのままグラフに反映させたいと思っています。
左上を(0、0)としていますが、左下を(0、0)と変換できるような関数はないんしょうか?

環境:XPでVC++EEを使っています。

291 名前:デフォルトの名無しさん :2006/11/10(金) 15:37:58
座標系を

292 名前:デフォルトの名無しさん :2006/11/10(金) 15:52:24
>>290
ttp://msdn.microsoft.com/library/en-us/gdi/cordspac_0u43.asp

293 名前:デフォルトの名無しさん :2006/11/10(金) 16:14:36
MM変えるか
MM変えないで原点を移動して(x,-y)とか
ほかにもいろいろ

294 名前:デフォルトの名無しさん :2006/11/10(金) 16:30:24
>>292-293

ありがとうございました☆
できそうです!!

295 名前:261 :2006/11/10(金) 18:40:04
>>273,274,275,278
おとなしくCの初歩の本を借りて読んでみたらだいぶ理解できました。
ありがとうございました。

296 名前:デフォルトの名無しさん :2006/11/10(金) 19:20:56
質問なのですが・・・
UNICODE文字(スペース含む)のバイト数がとれません。
なぜでしょうか?わかる方いましたらお教えください

297 名前:デフォルトの名無しさん :2006/11/10(金) 19:25:02
英数字じゃなくて日本語ならうまくいくかも

298 名前:296 :2006/11/10(金) 19:54:30
>>297
それは私に対しての回答でしょうか?
もしそうでしたらすみません。回答の意図がわからないです。

質問が少々曖昧でしたのでもう一度

CString ss = _T("山田 シスコ");
int nLen = _mbsnccnt( (unsigned char*)(LPCTSTR)ss,ss.GetLength() );

とした場合、nLenにはなぜか4が返ってきます。
半角もしくは全角を含んだバイト数はどのように取得すればよいのでしょうか?


299 名前:デフォルトの名無しさん :2006/11/10(金) 20:02:09
4であってる

300 名前:296 :2006/11/10(金) 20:05:50
すみません。
>半角もしくは全角を含んだバイト数
ではなく
半角もしくは全角のスペースを含んだ文字列のバイト数
です。

>4であってる
ということは、スペースが入った文字列のバイト数は取れない
ということでしょうか?
それとも他に何か方法があるのでしょうか?

301 名前:デフォルトの名無しさん :2006/11/10(金) 20:21:47
>300
今やったらsizeofで普通に取れたが

302 名前:デフォルトの名無しさん :2006/11/10(金) 20:22:43
山田 シスコ
&#x5c71;&#x7530;&#x3000;&#x30B7;&#x30B9;&#x30B3;
山田 シスコ

こういうこと。

303 名前:デフォルトの名無しさん :2006/11/10(金) 20:23:58
>300
通信バッファか何かとか?


304 名前:デフォルトの名無しさん :2006/11/10(金) 20:27:48
>300
すまない、詳細読んでなかった。


305 名前:デフォルトの名無しさん :2006/11/10(金) 20:35:20
ss.GetLength() * sizeof (TCHAR)ではだめか。
それとも俺は何か読み飛ばしているのか。

306 名前:296 :2006/11/10(金) 20:36:09
ひたすら検索したところ

int ret = WideCharToMultiByte(CP_ACP,0,(LPCWSTR)lpStr,-1,NULL,0,NULL,NULL);

の戻り値で取れそうです。
本当にありがとうございました。


307 名前:デフォルトの名無しさん :2006/11/10(金) 20:42:39
だったらこれはどうよ。MFC 7以降限定だが。
CStringA s(lpStr);
s.GetLength();

308 名前:296 :2006/11/10(金) 20:49:53
>>307
取れました。
情報ありがとうございます。

309 名前:247 :2006/11/10(金) 22:02:11
>>247 は自己解決しました。
 DllMain の前で
 HINSTANCE hInstDLL; を宣言して、
 hInstDLL = hInstance; をDllMain の冒頭に追加して
 SetWindowsHookEx の第3引数を hInstDLL にしたら
 フックはかかったようです。


310 名前:デフォルトの名無しさん :2006/11/10(金) 22:05:48
VC++2005 で MFC ですが、初心者なのでこちらで

BEGIN_MESSAGE_MAP(CvddocumntDoc, CDocument)
ON_MESSAGE(IDC_DATA_ADD_Request, &CvddocmntDoc::OnMyAddData)
END_MESSAGE_MAP()

と定義しておいて、dllから 
SendMessage(NULL,IDC_DATA_ADD_Request ,wParam,lParam);
で、

LRESULT CvddocmntDoc::OnMyAddData(LPARAM L,WPARAM W)
{......... }
を呼び出そうとすると、コンパイルできなくなりました。
エラーメッセージは

.\vddocmntDoc.cpp(22) : error C2440: 'static_cast' : 'LRESULT (__thiscall CvddocmntDoc::* )(LPARAM,WPARAM)' から 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)' に変換できません。

どなたか初心者にお導きを〜〜〜〜〜〜〜〜〜〜〜〜

311 名前:デフォルトの名無しさん :2006/11/10(金) 22:12:08
引数の型がおかしいだけじゃないの?
エラーメッセージを読んで

312 名前:デフォルトの名無しさん :2006/11/10(金) 23:13:59
メッセージはCWndの派生クラスに送れ
CDocumentの派生クラスはWM_COMMANDだけ。

313 名前:デフォルトの名無しさん :2006/11/10(金) 23:44:39
そういえばunicodeだと全角も半角も2バイトだっけ
だから全角半角混在でも文字数数えるのは非常に楽

314 名前:デフォルトの名無しさん :2006/11/11(土) 07:17:25
Visual C++ 7.1を使っています。
エスケープシーケンスについてなのですが、
ESC [y; xH のようなのをエスケープシーケンスドライバを組み込まなくても
同じような動作させたいのですが、どのようにしたらいいでしょうか?
コマンドプロンプトで例えば
1:
   現在の数値:○○
2:
   現在の数値:○○
のようにスクロールしないで同じ位置に表示させたいのですが。

315 名前:デフォルトの名無しさん :2006/11/11(土) 07:56:40
\r

316 名前:デフォルトの名無しさん :2006/11/11(土) 08:01:00
>>314
それはスクロールしているのじゃないのか?

単に同じ場所で情報を更新したいだけなら、こんなんでどうでしょ。
printf("現在の数値:%d\r", num);

317 名前:デフォルトの名無しさん :2006/11/11(土) 08:07:47
>>315,316
レスありがとうございます。
1行なら\rだけでいいのですが、複数行を同じ位置に表示にさせたいのです。
例えばこんなかんじです。

時刻
    JST:08:00:00
    UST:23:00:00
時差:1秒以内です。



318 名前:デフォルトの名無しさん :2006/11/11(土) 08:38:19
>>317
諦めてAPI使え。

319 名前:デフォルトの名無しさん :2006/11/11(土) 08:45:34
http://www.c3.club.kyutech.ac.jp/~sukiyaki/index.php?%A5%DE%A5%EB%A5%D0%A5%C4%A5%B2%A1%BC%A5%E0
これみたいに
system("cls");
してから毎回書き直す

320 名前:デフォルトの名無しさん :2006/11/11(土) 08:50:40
>>317
一番下の行でやればいい。

321 名前:デフォルトの名無しさん :2006/11/11(土) 09:19:19
>>313
WindowsのWCHARはUTF-16なんで全て2バイトではない。
サロゲートペアを使って4バイトで1文字を表す文字もある。

322 名前:デフォルトの名無しさん :2006/11/11(土) 11:08:59
相談です。


VC++2005EEにてビルドしたらこのようなエラー構文が出ました。
対処方法を教えてください。
※○○はわしの名前

c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2653: '  MessageBox' : 識別子がクラス名でも名前空間名でもありません。
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2664: 'void System::Windows::Forms::Form::Show(System::Windows::Forms::IWin32Window ^)' :
1 番目の引数を 'System::String ^' から 'System::Windows::Forms::IWin32Window ^' に変換できません。

323 名前:デフォルトの名無しさん :2006/11/11(土) 11:20:55
>>322
全角スペースを半角に置換する

324 名前:デフォルトの名無しさん :2006/11/11(土) 11:22:11
>>322
置換した後に首吊るのを忘れるなよ。

325 名前:デフォルトの名無しさん :2006/11/11(土) 11:25:34
すいません、なるべく煽らんで下さい

326 名前:デフォルトの名無しさん :2006/11/11(土) 11:34:42
ていうか本の手順に沿ってやってっただけなんです。
まだ序盤なんです。こんなとこで躓いたら先にいけません

327 名前:デフォルトの名無しさん :2006/11/11(土) 11:40:57
教えてクン養成マニュアル

明日の「教えてクン」を目指す、若き戦士達に以下の文章を捧げる。
日々精進し、パソコンヲタクどもの親切を蹂躙してやれ。

1. 努力を放棄すること
いやしくも「教えてクン」たるもの、努力をしてはならない。
過去ログを読んだり、検索してはいけない。
「英語は苦手なので、分かりません。」は、高く評価できる。
辞書片手にマニュアルやReadMeを読むなど、決してしてはならない。
他力本願と言われようと、自分で調べたり試行錯誤したりせず、他人の努力の結果を搾取するのが、正しい「教えてクン」である。
また、「もう何が悪いのかサッパリ分かりません。」と言ってふてくされるのも有効である。
「サッパリ」という単語が「やる気の無さ」を効果的に表現している。
「原因を特定するには、何をすべきでしょうか?」と訊いてしまうと自己の積極性が現れてしまうので、「教えてクン」失格である。

2. 情報を開示しないこと
使用OSや、機器構成などの必須の情報を知らせてはならない。
マザーボード名やBIOSのバージョンも同様だ。
具体的なアプリ名やバージョンも隠蔽すべきだ。
「DVD再生ソフト」のように曖昧に表記しておけばよい。
反対に「前から欲しいと思っていた○○」とか「安売りされていた ○○」等の「どうでもいい情報」は、どんどん書いてやれ。
トラブルの場合は、状況を正確に記述してはならない。
「なんだかうまく動きません。」とか「エラーが出ます。」等と具体的なことは何も書かないことが重要である。
また、自分の試してみた事も具体的に書いてはいけない。
考えられる組合せのマトリックスを作成し、状況を整理するなどもってのほかである。
最悪の場合、それだけで問題が解決してしまうこともあるのだ。
「いろいろやってみたけど、動きません。」が理想的だ。



328 名前:デフォルトの名無しさん :2006/11/11(土) 11:42:16
3. 答える人間のことを考えないこと
「教えてクン」は、孤高の戦士である。
相手のことを考えるようでは教えてクン失格というものだ。
以下のような行動が、望ましい。
初心者であることを高らかに宣言し、初心者向けの丁寧で分かりやすい説明を強要する。
専門用語の使用を禁じておくとさらに効果的である。
簡潔な説明を禁じられたヲタクどもは、同じ内容を説明するのに、何倍もの労力を強いられる。
自分は努力せず、相手には多大な努力をさせることこそが「教えてクン」の真骨頂である。マルチポストも有効である。
そのBBSを信用していないことを明確に示せる。
「どうせ、お前らじゃ分からんだろう。」という意志表示として高く評価できる。
もちろんマルチポストの非礼をあらかじめ詫びてはならない。
それでは、単なる「急いでいる人」になってしまう。
それは、教えてクンではない。質問のタイトルは、「教えてください。」で良い。
タイトルを読んだだけでは「何に関する質問」か全く分からない。
そういう努力は、答える人間にさせれば良いのだ。
とにかく、答える人間が答えやすいように気を使って質問してはならない。
傲慢で不遜な態度が必須である。「聞きたいことがあります。」など、プロの仕事であろう。

最後に、言うまでも無いことだとは思うが、答えてくれた人達に礼の言葉を返すなど言語道断である。
せっかく「教えてクン」を貫いてきたのに、最後にお礼を言っているようでは、画竜点睛を欠いていると言わざるを得ない。
質問だけしておいて、後はシカトが基本である。
上級テクニックとして、「そんなことはもう試しました。」とか、「そこまで初心者じゃありません。」などと言って、回答者の神経を逆なでしておけば完璧である。

以上のことを踏まえて質問すれば、君も立派な「教えてクン」である。
ビバ!教えてクン! 教えてクンに栄光あれ!!


329 名前:デフォルトの名無しさん :2006/11/11(土) 12:34:56
>>322
http://pc8.2ch.net/test/read.cgi/tech/1162215248/384

330 名前:デフォルトの名無しさん :2006/11/11(土) 16:08:21
重い処理をするとカーソルアイコンが砂時計になって、ウィンドウ操作が出来ない状態になりますが、
それを防ぐ手立てはありますか。

331 名前:デフォルトの名無しさん :2006/11/11(土) 16:20:43
その重い処理を別に作ったスレでやれば良い。

332 名前:330 :2006/11/11(土) 16:59:16
マルチスレッドってことですか。
ありがとうございます。

333 名前:デフォルトの名無しさん :2006/11/13(月) 14:01:26
この質問ここでいいのかな?

VC++(SDK)で、フォーム(でOK?)上の子ウィンドウ(コントロール)の
フォントって全て共通に出来る?

つまりは、
「フォントを与えると全部の子ウィンドウのフォントを一括して変えられるAPIがある」のか
「1つ1つ変えるしかない」のかって言うことなんだけど・・・

誤字、用語間違いあったら許して。

334 名前:デフォルトの名無しさん :2006/11/13(月) 16:17:21
共通のフォント使えば良いじゃん。

335 名前:デフォルトの名無しさん :2006/11/13(月) 19:58:46
教えてください
インストールしたのに使えません。
バクっているんでしょうか。
環境はウィンドウズです。

336 名前:デフォルトの名無しさん :2006/11/13(月) 20:27:40
その通りです。
どうやらバクっているようですね。
で、何を教えれば良いのですかな?

337 名前:デフォルトの名無しさん :2006/11/13(月) 20:30:55
質問に質問で返すな ぼけ

338 名前:デフォルトの名無しさん :2006/11/13(月) 22:12:55
相手してくれるのをwktkしていたのが良く判る時間差ですね。

339 名前:デフォルトの名無しさん :2006/11/14(火) 15:44:33
あるボタンを押したときに、PreTranslateMessageにVK_SPACEが押されたような
メッセージを送りたいのですが、どうやればよいのでしょうか?

340 名前:デフォルトの名無しさん :2006/11/14(火) 15:53:39
最近、VC6からVC++EEに乗り換えたんですが、参考書がないんですけど、
.NETに似てる感じがするんですけど、
.NETの参考書でも勉強するには十分なんでしょうか?

341 名前:デフォルトの名無しさん :2006/11/14(火) 16:12:18
言語を勉強するのか、.NET Frameworkを勉強するのか、IDEの操作方法を勉強するのか

342 名前:デフォルトの名無しさん :2006/11/14(火) 16:21:42
>>341
Frameworkです。

343 名前:デフォルトの名無しさん :2006/11/14(火) 16:41:14
GetSafeHwnd()で得た値をCStringかchar型の変数に保存したいのですが、
どうすればよいのでしょうか?

344 名前:デフォルトの名無しさん :2006/11/14(火) 16:53:11
CString::Format、sprintf、、、

345 名前:デフォルトの名無しさん :2006/11/14(火) 16:59:58
>>342
現状C++で.NETな本はほとんどないから、他の言語を使った.NETの本を使い、
MSDNライブラリやWebでC++/CLIの構文の知識を補完するしかないと思う。

346 名前:デフォルトの名無しさん :2006/11/14(火) 17:36:11
..345
ありがとうございました☆
そうします

347 名前:デフォルトの名無しさん :2006/11/14(火) 22:16:19
VC++.netで開発をしています。

CString filename = L"abcdefg";
const char *cast;
cast = (LPCSTR)(LPCTSTR)filename;

とキャストをするとcastには最初の"a"しか入りません。
どうやってキャストをすればよいのでしょうか。

348 名前:デフォルトの名無しさん :2006/11/14(火) 22:39:38
ポインタだからキャストしても中身は変わらんよ

349 名前:デフォルトの名無しさん :2006/11/14(火) 22:56:18
>>347
Unicodeビルドだろうからchar*じゃ、まずいんじゃね?

const _TCHAR *cast;
cast = (LPCTSTR)filename;



350 名前:デフォルトの名無しさん :2006/11/14(火) 23:16:54
どうしても char* が欲しいなら、wcstombc でマルチバイト文字列に変換

351 名前:デフォルトの名無しさん :2006/11/14(火) 23:21:04
CStringAにキャストもありだな。

352 名前:デフォルトの名無しさん :2006/11/15(水) 21:17:41
質問です。

ビューの中にあるコントロールの座標をTwips単位で
取得する方法を教えてください。


353 名前:デフォルトの名無しさん :2006/11/15(水) 21:22:04
ぐぐったら1発でみつかった

354 名前:デフォルトの名無しさん :2006/11/15(水) 23:10:04
Form1とForm2を作って
Form1_Loadの中に

Form2 *f2p = new Form2();
f2p->Show();
f2p->Activate();

って書いて起動時にForm2を表示してアクティブウィンドウにしたいんだけど、どうしてもForm1がアクティブになってしまうんだ。
Form1にボタン貼り付けて同じ内容コピペするとForm2がアクティブになるんだけど・・
何ででしょうか?
他にもForm1_Loadの中に
this->Hide();や
this->Visible = false;
って書いて非表示になるかどうかやってみたけどならないです。
初回起動時の処理をしたいんだけど上手くいきません何方かご教授をお願いします。

環境:VC++ .NET 2003

355 名前:354 :2006/11/15(水) 23:51:59
ごめんなさい
調べたら原因が分かりました。
順番としてLoadが実行された後にFormが表示されてるんですね。
参ったな・・・

356 名前:デフォルトの名無しさん :2006/11/16(木) 02:24:27
>>354
C++/CLIのWindows.Formの話をしてるならshownイベントが使える。

357 名前:デフォルトの名無しさん :2006/11/16(木) 11:49:40
SDKでcreatewindowで作ったウィンドウの上に、
createwindowでチェックボックスを作ったのですが
Tabキーでフォーカスの移動が出来ません。
WS_TABSTOPも入れてあります。

ダイアログならタブオーダーで設定できるみたいですが・・・

もし「これを忘れるとTabキーでフォーカスの移動できんよ」という注意点が在ったら
教えて下さい。

358 名前:デフォルトの名無しさん :2006/11/16(木) 12:06:13
つ IsDialogMessage

359 名前:デフォルトの名無しさん :2006/11/16(木) 12:07:00
いい加減メル欄直せ>俺 orz

360 名前:1/2 :2006/11/16(木) 22:51:23
Windows2000、VC++7で開発してます
MFC等使わず、CWindow・CDialogなどWin32APIのラッパクラスを自作してやってるのですが

class CMainWnd : public CWindow・・・・
class CConfigDlg : public CDialog・・・・
という二つのクラスを作りました
このときCMainWndは、メンバとしてCConfigDlgの実体m_confDlgを持ちます
CDialogにはDoModal(仮想関数)という、内部でDialogBoxParamを呼び出してモーダルダイアログを作成するメソッドがあり
CConfigDlgにはDoConfigという、いくつか引数を取り必要なデータを確保した後にDoModalを呼び出すメソッドがあります
CMainWndでは、あるメニューを選択された時にm_confDlg.DoConfig(・・・)を実行します

もう1週間くらいチマチマと開発しているのですが
ずっと問題無く動いていたのですが、昨日から突然DoConfig内のDoModal呼び出し時に例外0xC0000005を吐くようになりました
他の部分はそれなりに書き換えたりしましたが、DoConfig・DoModal近辺は一切手を加えてないのでエラーの心当たりも無く
どうしたものかほとほと困り果ててしまいました


361 名前:2/2 :2006/11/16(木) 22:53:17
どうしたものかほとほと困り果ててしまいました

362 名前:2/2 :2006/11/16(木) 22:57:33
以下がエラーのメッセージです
  test.exe の 0x0043ffe6 でハンドルされていない例外が発生しました
  : 0xC0000005: 場所 0x0000006c を読み込み中にアクセス違反が発生しました。

DoConfigのコードは以下のようになっています
  int CConfigDlg::DoConfig(CWindow* pParent, LPCTSTR tID, CConfigData& kcData) {
    m_TemplateID = tID;
    SetData(kcData);
    m_blConfig = true;
    return DoModal(pParent);
  }

DoConfig内を混合モードで追ってみたところ、以下のようなアセンブラコードで
    return DoModal(pParent);
  0043FFD8 mov esi,esp
  0043FFDA mov eax,dword ptr [pParent]
  0043FFDD push eax 
  0043FFDE mov ecx,dword ptr [this]
  0043FFE1 mov edx,dword ptr [ecx]
  0043FFE3 mov ecx,dword ptr [this]
  0043FFE6 call dword ptr [edx+6Ch]
  0043FFE9 cmp esi,esp
  0043FFEB call ILT+2245(__RTC_CheckEsp) (4368CAh)

0043FFE1のMOVで、edxには0x00000000が代入されて居ましたので、これが直接の原因ではないかと思ってます

関数テーブルが壊れてるとか、そういう問題なのでしょうか?
それとも別のものなのか、良く分かりません

どなたか、心当たりのある方はいらっしゃらないでしょうか

363 名前:デフォルトの名無しさん :2006/11/16(木) 23:00:34
どこか全然別の関数でCConfigDlgのメンバを壊している悪寒。

364 名前:デフォルトの名無しさん :2006/11/16(木) 23:03:47
>>363
さっそくのレスありがとうございます

まったく別の場所で破壊ですか
それだと、全体的に洗いなおした方がよさそうですね・・・
少し、コードと格闘して見ます

365 名前:デフォルトの名無しさん :2006/11/16(木) 23:07:29
エラーが出始めた頃に新たに付け加えた関数とか、内容をいじくった
関数がわかればいいのだが。

そのためにも、完成するまでにセーブした日付入りソースは必須。
つまりエラーが出ないのはどこまでなのかさかのぼって比較して検討
できる。

366 名前:デフォルトの名無しさん :2006/11/16(木) 23:07:47
変なエラーに悩まされずに済むし
MFC使っててよかったなと思う

367 名前:デフォルトの名無しさん :2006/11/16(木) 23:10:02
>>365
なるほど、確かにそうですね
今度から要所要所ででもバックアップ作成することにします

368 名前:デフォルトの名無しさん :2006/11/16(木) 23:12:28
csvが便利だよ

369 名前:デフォルトの名無しさん :2006/11/16(木) 23:13:22
cvsだったorz
とにかくこれは自分には欠かせない

370 名前:デフォルトの名無しさん :2006/11/17(金) 02:25:11
エディットボックスが3つあって、
特定の一つの値のみをUpdateData(FALSE)のような形で更新したいのですが、
どのような方法をとればよいのでしょうか。

371 名前:362 :2006/11/17(金) 06:42:57
解決しました

CMainWndのメンバに、それぞれBOOL*32、BYTE*256の配列があり、コンストラクタでZeroMemoryしてたのですが
ヘッダを確認してたら、
BOOL m_bl[256];
BYTE m_cb[32];
と要素数が逆になっていたので、これを直したところエラーも消えました
ここで、CConfigDlgのメンバまでZeroMemoryされてたんですね・・・

皆さん、ご助言ありがとうございました

372 名前:デフォルトの名無しさん :2006/11/17(金) 07:37:49
無駄にZeroMemory()するなという教訓だな。

373 名前:デフォルトの名無しさん :2006/11/17(金) 08:35:17


374 名前:デフォルトの名無しさん :2006/11/17(金) 11:39:04
>>370
・DoDataExchangeに細工をする
・DDXを使わず、直接エディットボックスを更新する

375 名前:デフォルトの名無しさん :2006/11/17(金) 13:15:09
>>374
ありがとうございます。解決しました。

376 名前:デフォルトの名無しさん :2006/11/17(金) 13:58:38
ソースをビルドしようとしてもメニューにビルドが表示されていなくてできません。
odbc32.libというファイルをライブラリのフォルダに入れてみましたがそれでも改善されません。
他に何が必要か分かる方いたら教えてください。

377 名前:デフォルトの名無しさん :2006/11/17(金) 16:31:14
プロジェクトを作っていない悪寒。

378 名前:デフォルトの名無しさん :2006/11/17(金) 16:39:35
質問です

―――――――――――――――――――――――-|
| | No | 社員名 | 社員コード | 住所 | 電話番号|
|――――――――――――――――――――――― |
| | 01 | あああ | xxxxxxxx | xxxx | xxxx-xxx |
|+ | 02 | あいう | xxxxxxxx | xxxx | xxxx-xxx |
||-| | | | xxxx | xxxx-xxx |
||-| | | | xxxx | xxxx-xxx |
||-| | | | xxxx | xxxx-xxx |
| | 03 | あおう | xxxxxxxx | xxxx | xxxx-xxx |
| | 04 | かかか| xxxxxxxx | xxxx | xxxx-xxx |
| | 05 | ききき | xxxxxxxx | xxxx | xxxx-xxx |
|―――――――――――――――――――――――

ちょっと見づらいかもしれませんが、このような表示形式のグリッド(VSFlexGrid)があります
列のヘッダにてソート(ソート対象はNo、ソートは降順)をかけたときに下記のような表示にソート
されたいのですが、どのようにしたらよろしいでしょうか?ご教授をお願いします。

ソート後
―――――――――――――――――――――――-|
| | No | 社員名 | 社員コード | 住所 | 電話番号|
|――――――――――――――――――――――― |
| | 05 | ききき | xxxxxxxx | xxxx | xxxx-xxx |
| | 04 | かかか| xxxxxxxx | xxxx | xxxx-xxx |
| | 03 | あおう | xxxxxxxx | xxxx | xxxx-xxx |
|+ | 02 | あいう | xxxxxxxx | xxxx | xxxx-xxx |
||-| | | | xxxx | xxxx-xxx |
||-| | | | xxxx | xxxx-xxx |
||-| | | | xxxx | xxxx-xxx |
| | 01 | あああ | xxxxxxxx | xxxx | xxxx-xxx |
|―――――――――――――――――――――――

379 名前:デフォルトの名無しさん :2006/11/17(金) 16:56:52
それ作って売ってるやつに聞けよ
ここサポートセンターじゃないよ

380 名前:デフォルトの名無しさん :2006/11/17(金) 18:33:53
質問です。

CString ss = L"あああテスト1いいいテスト1ううう";
で、最初の「テスト1」のみ削除する場合、どのように
すればよいのでしょうか?

381 名前:デフォルトの名無しさん :2006/11/17(金) 19:17:24
質問になってない

382 名前:デフォルトの名無しさん :2006/11/17(金) 19:23:02
>>380
最初の「テ」の所にカーソルを移動させて
Deleteキーを4回押下する。


383 名前:380 :2006/11/17(金) 19:35:24
すみません。再度説明いたします。


CString s1 = L"テスト1";
CString s2 = L"あああテスト1いいいテスト1ううう";
//消去処理

結果
s2には"あああいいいテスト1ううう";
となるようにしたい

s2にセットされている文字列から最初に見つかったs1の
文字列を消したいのですがどのようにしたらよいのでしょうか?

384 名前:デフォルトの名無しさん :2006/11/17(金) 19:49:14
いろいろ方法あるけどCStringのメンバ関数使えばいいんじゃね?

385 名前:デフォルトの名無しさん :2006/11/17(金) 19:59:26
CString::Remove
これのソースまねたらできそうな気がするが

386 名前:380 :2006/11/17(金) 20:00:44
>>384, 385
レスありがとうございます。
確認してみます。

387 名前:376 :2006/11/17(金) 20:28:20
>>377
ありがとうございます、その通りでした。
borlandのようにソースをそのままコンパイルとはできないのですね。
プロジェクトを作ったら無事にexeファイルを作れました。

388 名前:デフォルトの名無しさん :2006/11/17(金) 21:06:51
>>387
スタートメニューのVisual C++のコマンドプロンプトを起動して、
そこでコンパイル・リンクする。

389 名前:デフォルトの名無しさん :2006/11/17(金) 21:11:40
Modern C++ Design のオブジェクト・ファクトリの項を見て、以下のソースを試して見ました。まずヘッダです。

#include <map>

template< class AbstractProduct, typename IdentifierType,
  typename ProductCreator = AbstractProduct* (*)() >
class Factory
{
  typedef std::map<IdentifierType, AbstractProduct> AssocMap;
  AssocMap associations_;
public:
  bool Register( const IdentifierType& Id, ProductCreator creator ) {
    return associations_.insert(
      AssocMap::value_type( id, creator ) ).second;
  }
  bool Unregister( const IdentifierType& id ) {
    return associations_.erase( id ) == 1;
  }
  AbstractProduct* createObject( const IdentifierType& Id ) {
    typename AssocMap::const_Ierator i =
      associations_.find( id );
    if ( i != associations_.end() )
    {
      return ( i->second )();
    }
  }
};

class Shape {};
class Line : public Shape {};
class Circle : public Shape {};
class Porygon : public Shape {};

390 名前:389 :2006/11/17(金) 21:12:56
次にソースです。

#include "Factory.h"

Line* __cdecl createLine()
{
  return new Line;
}

Circle* createCircle()
{
  return new Circle;
}

Porygon* createPorygon()
{
  return new Porygon;
}

void main()
{
    Factory< Shape, const char* > factory;
    factory.Register( "Line", createLine );
    factory.Register( "Circle", createCircle );
    factory.Register( "Porygon", createPorygon );

    //・・・・以下略
}



391 名前:389 :2006/11/17(金) 21:15:21
で、ビルドすると、

error C2664: 'Register' : 2 番目の引数を 'class Line *(void)' から 'class Shape *(__cdecl *)(void)' に変換できません。
スコープ内でこの名前を持つ関数でターゲット型に一致するものはありません。

と、C2664 のエラーがでちゃうんだけどどうして?

392 名前:389 :2006/11/17(金) 21:22:47
書いてて気が付いた。

Line* createLine() { return new Line; }

は当然駄目で、戻り値を上位型の

Shape* createLine() { return new Line; }

にしなきゃ通る訳ないよな・・・・orz

393 名前:デフォルトの名無しさん :2006/11/17(金) 21:51:47
>>380
よく見たらCString::Removeは1文字削除だった

たぶんこれ使えばできるだろう
CString::Find
CString::Delete

394 名前:デフォルトの名無しさん :2006/11/17(金) 22:28:41
すいません。もう一度質問です。先ほども書いたように以下のコードをModern C++ Design のオブジェクト・ファクトリを参考に書きました。

#include <map>

template
< class AbstractProduct, typename IdentifierType,
 typename ProductCreator = AbstractProduct* (*)()
>
class Factory {
public:
  bool Register( const IdentifierType& id, ProductCreator creator ) {
    return associations_.insert( AssocMap::value_type( id, creator ) ).second;
  }
  bool Unregister( const IdentifierType& id ) {
    return associations_.erase( id ) == 1;
  }
  AbstractProduct* createObject( const IdentifierType& Id ) {
    typename AssocMap::const_Ierator i = associations_.find( id );
    if ( i != associations_.end() )
      return ( i->second )();
  }
private:
  typedef std::map<IdentifierType, ProductCreator> AssocMap;
  AssocMap associations_;
};

class Shape {};
class Line : public Shape {};

395 名前:389 :2006/11/17(金) 22:33:32
先ほどのはヘッダ、こちらはソースです。

#include "Factory.h"

Shape* createLine()
{
  return new Line;
}

void main()
{
  Factory< Shape, const char* > factory;
  factory.Register( "Line", createLine );
  Shape* line = factory.createObject( "Line" );
  delete line;
}

ビルドすると、訳のわからん警告と、エラーがでまくります。
Loki は VC++ ではビルドできないって話を聞いた覚えがありますが、やっぱり駄目?

396 名前:デフォルトの名無しさん :2006/11/17(金) 22:40:31
>訳のわからん警告と、エラー

具体的に書けよ
・・・


397 名前:デフォルトの名無しさん :2006/11/17(金) 22:41:43
エラーをコピペして晒せ。それが出来ないなら去れ。

398 名前:デフォルトの名無しさん :2006/11/17(金) 22:42:45
つうか長文コピペされると迷惑

399 名前:デフォルトの名無しさん :2006/11/17(金) 22:44:01
長ったらしいソースを見せたい場合は固めてロダに上げるのが普通

400 名前:デフォルトの名無しさん :2006/11/17(金) 23:03:31
>397
いいの、かなりうざいよwww
Factory.cpp
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\xtree(149) : warning C4786: '?$reverse_bidirectional_iterator@Viterator
@?$_Tree@PBDU?$pair@QBDP6APAVShape@@XZ@std@@U_Kfn@?$map@PBDP6APAVShape@@XZU?$less@PBD@std@@V?$allocator@P6APAVShape@@XZ@3@@2
@U?$less@PBD@2@V?$allocator@P6APAVShape@@XZ@2@@std@@U?$pair@QBDP6APAVShape@@XZ@3@AAU43@PAU43@H' : 識別子が '255' 文字に切り捨てられました (browser 情報内)。
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\map(46) : コンパイルされたクラスのテンプレートのインスタンス化
'std::_Tree<char const *,struct std::pair<char const * const,class Shape * (__cdecl*)(void)>,struct std::map<char const *,class Shape * (__cde
cl*)(void),struct std::less<char const *>,class std::allocator<class Shape * (__cdecl*)(void)> >::_Kfn,struct std::less<char const *>,class std::allocator
<class Shape * (__cdecl*)(void)> >' の参照を確認してください
D:\TEMP\Factory\Factory.cpp(30) : コンパイルされたクラスのテンプレートのインスタンス化
'std::map<char const *,class Shape * (__cdecl*)(void),struct std::less<char const *>,class std::allocator<class Shape * (__cdecl*)(void)> >' の参照を確認してください
D:\TEMP\Factory\Factory.cpp(43) : コンパイルされたクラスのテンプレートのインスタンス化 'Factory<class Shape,char const *,class Shape * (__cdecl*)(void)>' の参照を確認してください
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\xtree(152) : warning C4786:
'?$reverse_bidirectional_iterator@Vconst_iterator@?$_Tree@PBDU?$pair@QBDP6APAVShape@@XZ@std@@U_Kfn@?$map@PBDP6APAVShape@@XZU?$less@PBD@std@@V?$allocator@P6APAVShape@@X
Z@3@@2@U?$less@PBD@2@V?$allocator@P6APAVShape@@XZ@2@@std@@U?$pa
ir@QBDP6APAVShape@@XZ@3@ABU43@PBU43@H' : 識別子が '255' 文字に切り捨てられました (browser 情報内)。
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\map(46) :

以下、略。

401 名前:389 :2006/11/17(金) 23:05:24
ちなみに以下の1行をコメントアウトすると、警告は大量にでるけど、ビルドはできる。

Shape* line = factory.createObject( "Line" );

そうそういい忘れた。環境はVC++6です。

402 名前:デフォルトの名無しさん :2006/11/17(金) 23:06:50
#pragma warning (disable: 4786)

403 名前:デフォルトの名無しさん :2006/11/17(金) 23:11:27
>402 THX

D:\TEMP\Factory\Factory.h(24) : error C2039: 'const_Ierator' : 'map<char const *,class Shape * (__cdecl*)(void),struct std::less<char const *>,class std::allocator<class Shape * (__cdecl*)(void)> >' のメンバではありません。

D:\TEMP\Factory\Factory.h(24) : error C2146: 構文エラー : ';' が、識別子 'i' の前に必要です。

D:\TEMP\Factory\Factory.h(24) : error C2501: 'const_Ierator' : 識別名を宣言するのに、型が指定されていません。

D:\TEMP\Factory\Factory.h(24) : error C2065: 'i' : 定義されていない識別子です。

D:\TEMP\Factory\Factory.h(25) : error C2065: 'id' : 定義されていない識別子です。

D:\TEMP\Factory\Factory.h(26) : error C2677: 二項演算子 '!=' : 型
'class std::_Tree<char const *,struct std::pair<char const * const,class Shape * (__cdecl*)(void)>,struct std::map<char const *,class Shape * (__cdecl*)(void),struct std::less<char
const *>,class std::allocator<class Shape * (__cdecl*)(void)> >::
_Kfn,struct std::less<char const *>,class std::allocator<class Shape * (__cdecl*)(void)> >::iterator' を扱うグローバルな演算子は定義されていません。(または変換できません)(新しい動作; ヘルプ
を参照)

D:\TEMP\Factory\Factory.cpp(27) : error C2227: '->second' : 左側がクラス、構造体、共用体へのポインタではありません。

cl.exe の実行エラー
ブラウザ データベースを作成中...

Factory.exe - エラー 7、警告 0


404 名前:デフォルトの名無しさん :2006/11/17(金) 23:24:05
VC++ 8で試してみた。
createObjectがおかしい、const_Ierator⇒const_iterator、Id(仮引数宣言)⇒id。
そしてi == associations_.end()のときに、何も値を返さないという警告になるが、一応コンパイル・実行できた。

それでもだめだったら、VC++ 6の問題だから仕方ないと思うよ。
さあVisual C++ 2005 EEだ。

405 名前:デフォルトの名無しさん :2006/11/17(金) 23:30:03
>404
駄目ですね。やっぱVC++6の仕様みたいです。

#template のネストもVC6では出来ないようだし・・・

406 名前:デフォルトの名無しさん :2006/11/18(土) 08:47:33
【初心者歓迎】C/C++室 Ver.32【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1160893851/

そういうどうでもいい話はこっち向き

407 名前:デフォルトの名無しさん :2006/11/18(土) 09:48:01
まとめ

Q
C/C++の本に書いてあるコードでVCでコンパイルが通らないものがあります。
どうしたらいいですか?

A
その本の推奨する環境でコンパイルしてください。

408 名前:デフォルトの名無しさん :2006/11/19(日) 00:55:38
無料でDLしたvisualc++を使ってるんだがさすが無料と言うべきか
textoutつかって日本語表示させようとすると見事に文字化けする。
マジ使えねぇ

409 名前:デフォルトの名無しさん :2006/11/19(日) 02:20:26
それが本当だったらとっくに大騒ぎになっているわ。

410 名前:デフォルトの名無しさん :2006/11/19(日) 02:51:00
>>409 http://pc8.2ch.net/test/read.cgi/tech/1163612924/46

411 名前:デフォルトの名無しさん :2006/11/19(日) 03:07:08
VC++.NET 2003のWindowsフォームアプリケーションでボタンの上にカーソルが重なったら
http://www2.ranobe.com/test/src/up15798.jpg
見たいにコメントを表示させたいのですがどうすればいいのでしょうか?


412 名前:デフォルトの名無しさん :2006/11/19(日) 03:13:07
つ System.Windows.Forms.ToolTip

413 名前:デフォルトの名無しさん :2006/11/19(日) 03:37:11
質問があります
おもに猫でも〜を見てプログラムを勉強してるのですが
datagridviewを使うにはどうすればいいのでしょうか?
CLRというのを選択しないと出てこないのですが
またMFCでもdatagridviewは使えるのでしょうか?

414 名前:デフォルトの名無しさん :2006/11/19(日) 08:30:42
>>408
どう見てもマルチです、本当に(ry

415 名前:411 :2006/11/19(日) 13:20:17
>>412
ありがとうございます。
ツールチップって言うんですね。
ヒント or ヘルプ and 浮かび上がる
とかで検索しててまったくヒットしなかったので助かりました。
どうも。


416 名前:デフォルトの名無しさん :2006/11/19(日) 14:24:07
Ellipse(hdc,10,10,100,100);

この一文の事でお聞きしたいのですが、
これをWM_PAINT内に書くとウィンドウ上に円が描かれます。

しかし、WM_PAINTから呼び出した別の関数で
上記の文を実行させると、ウィンドウからはみ出したり
円が描かれなかったりします。

その関数には (HWND hwnd)や(HDC hdc)などを渡したりもしています。
何でだろう?
相当馬鹿なことやってるかもしれないんですけど

417 名前:デフォルトの名無しさん :2006/11/19(日) 15:01:26
WM_PAINT部とその呼び出す関数を見せてみろ

418 名前:416 :2006/11/19(日) 16:29:28
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
Ellipse(hdc,10,10,100,100); //有効
EndPaint(hWnd,&ps);
return 0;
//以下略

switch(LOWORD(wParam)) {
case 1:
hdc=BeginPaint(hWnd,&ps);
Ellipse(hdc,10,10,200,200); //これがおかしい
EndPaint(hWnd,&ps);
break;

質問の趣旨が間違ってました。すまんです。
WM_PAINTの中でのEllipseは有効なのに、ボタン(IDは1)を押しても
円が描かれません。と言う事です。

419 名前:デフォルトの名無しさん :2006/11/19(日) 16:48:03
>>418ではないが俺も質問させて下さい。
Ellipseを使って円をランダムに表示させたいんだがうまくいきません。

case WM_PAINTの中はこんな感じです。

rx1 = rand() % rc.right;
atm[j][0] = rx1; atm[j][1] = rx1; //x1, y1座標
atm[j][2] = rx1 + 10; atm[j][3] = rx1 + 10; //x2, y2座標
hBrush = CreateSolidBrush(RGB(255, 226, 0));
hOBrush= (HBRUSH)SelectObject(hdc, hBrush);
Ellipse(hdc, atm[j][0], atm[j][1], atm[j][2], atm[j][3]);
SelectObject(hdc, hOBrush);
DeleteObject(hBrush);

配列に値を入れてるのは他のとこでその値を使いたいので成ってます。

WM_CREATEのなかに
srand((unsigned)time(NULL));
を入れて表示させてますが、円が分身しちゃいます。
しないで一定の場所に保つ方法ってありますか?

420 名前:デフォルトの名無しさん :2006/11/19(日) 16:54:15
>>418
それは正しい動作
おかしいと思うキミが理解できてない
MSDNのBeginPaintの解説を良く読んでみなさい


421 名前:デフォルトの名無しさん :2006/11/19(日) 16:58:00
>>419
分身?
WM_PAINTの度にランダム生成してんだから同じ場所に出ないのは当然だと思うんだけど?

422 名前:デフォルトの名無しさん :2006/11/19(日) 17:30:40
>>421
教科書のは大丈夫だったから良いと思ったら
仰るとおり再描画かけてたので分身してるっぽいです。
こんな質問するなんて、ほんと申し訳ないです。。。

423 名前:デフォルトの名無しさん :2006/11/19(日) 19:42:47
今、地図を描くプログラムをVisual C++6.0 で作ってるんですけど、
データの格納方法は完成したんですが、
データをそのまま使ってピクチャボックスに描くには不可能です。
なので、どうにかして、そのデータを使ってピクチャボックスに描きたいのですが
どうしたらいいでしょうか?

データは(0、0) 〜 (10000、10000)までの大きさです。
それをピクチャボックス(500、500)の大きさに描きたいです。
よろしくお願いします。

424 名前:デフォルトの名無しさん :2006/11/19(日) 20:12:41
縮小して描きゃえぇじゃん
つか、データの構造も知らさずにいったい何を言えと?

425 名前:デフォルトの名無しさん :2006/11/19(日) 20:34:19
>>424

1ファイルの中にX,Yの座標点のデータが入ってるんですけど、それを順番に読み込んで地図を描くってやつなんです。


426 名前:デフォルトの名無しさん :2006/11/19(日) 21:07:49
データも、画面も、サイズは決定してるんだから
・データの座標系を画面の座標系に変換して描画する
・(0,0)〜(10000,10000)サイズのオフスクリーンのキャンバスを用意してそこに一旦描画→StrechBltで縮小して画面に表示

好きな方でどうぞ

427 名前:デフォルトの名無しさん :2006/11/19(日) 23:12:18
スレ違いだけどドット画は縮小に向いてないね
馬鹿の考えた仕様は根本から作り直した方がいいかも

428 名前:デフォルトの名無しさん :2006/11/20(月) 02:56:41
馬鹿に馬鹿って言うヤツが馬鹿。

429 名前:デフォルトの名無しさん :2006/11/20(月) 09:20:34
もうね、みんなバカなんだしそれでええじゃないか('A`;

430 名前:デフォルトの名無しさん :2006/11/20(月) 20:58:20
vc++2005でz=cos(x+y)+sin(y)などの関数を描画したいんですけどMFCないからやっぱ無理?

431 名前:デフォルトの名無しさん :2006/11/20(月) 20:59:51
いいえ

432 名前:デフォルトの名無しさん :2006/11/20(月) 21:05:00
できるの?!
おしえてっ!!

433 名前:デフォルトの名無しさん :2006/11/20(月) 21:11:36
1. Windows API
2. .NET Framework
3. その他のGUIライブラリ

434 名前:デフォルトの名無しさん :2006/11/20(月) 21:12:54
これ忘れていた。
4. Academic or Standard以上を買う。

435 名前:デフォルトの名無しさん :2006/11/20(月) 21:19:40
結局金が要るのか・・・
僕には無理なのか・・・

436 名前:デフォルトの名無しさん :2006/11/20(月) 21:27:46
> 1. Windows API
無料。
> 2. .NET Framework
付いてるだろ?
> 3. その他のGUIライブラリ
無料のもあるだろ。

437 名前:デフォルトの名無しさん :2006/11/20(月) 21:38:37
画像ファイルに落として適当なビュアーで見る手もあるし、
Excelがあるなら、csvファイルに出力してもいいね。

438 名前:デフォルトの名無しさん :2006/11/20(月) 22:09:23
VC6 で言うところの 表示 - デバッグウィンドウ - メモリ は 2003 でもあるですか。
あるならどこにあるのか教えて頂きたいす。



439 名前:デフォルトの名無しさん :2006/11/20(月) 22:20:12
>>438
デバッグ→ウィンドウ→メモリ

もしかしたら、デバッグ実行してないとメニューに出ないかも。

440 名前:デフォルトの名無しさん :2006/11/20(月) 22:28:08
>>439
感謝を。明日、試してみるす。


441 名前:デフォルトの名無しさん :2006/11/21(火) 16:02:26
ビルド後、プログラムを実行すると以下のような例外が表示されます。

xxx.exe の 0x7c958fea で初回の例外が発生しました: 0xC0000005:
場所 0x00000010 に書き込み中にアクセス違反が発生しました。

今のところ特に問題は発生していないのですが、今後何かしらの
障害になりうるものであるならば早急に対処したいので、このエラーに関して
解決法、もしくはなにか情報をお持ちの方いましたらご教授をお願いいたします。

環境:WinXP Pro SP2 VS2005 MFC使用、MDIアプリケーション

442 名前:デフォルトの名無しさん :2006/11/21(火) 16:21:01
有名なコピペ

443 名前:デフォルトの名無しさん :2006/11/22(水) 18:27:52
VC++6を使ってるんですけど、ピクチャボックスの原点を左下にしたいんですけど、
どうしたらいいでしょうか?

444 名前:デフォルトの名無しさん :2006/11/22(水) 18:46:34
自分で計算しなさい

445 名前:デフォルトの名無しさん :2006/11/22(水) 18:49:14
そこをなんとか!!
座標(100,100)ってやって、左上からの座標じゃなくて、左下からの座標点を取りたいんですけど、
そういう関数ってないですか?

446 名前:デフォルトの名無しさん :2006/11/22(水) 18:55:14
>445
ヒント:CRectを返すメンバを探すこと

447 名前:デフォルトの名無しさん :2006/11/22(水) 19:13:25
SetOrigin()

448 名前:デフォルトの名無しさん :2006/11/22(水) 21:24:02
原点を移動するには左下の座標を求めないといけないからな
原点移動しないで自分で計算した方がapi呼ばない分コーディングが楽

449 名前:デフォルトの名無しさん :2006/11/22(水) 22:22:32
>>446-448
ありがとうございます!!

450 名前:デフォルトの名無しさん :2006/11/23(木) 13:09:16
APIでピクチャボックスの初期時の背景を白にしたいんですけど、
どうしたらいいんでしょうか?
MFCだと
CWnd *myP = GetDlgItem(////);
CClientDC myDC(myP);
CRect myCR;
myP->GetClientRect(myCR);
myDC.FillSolidRect(myCR, RGB(255,255,255));

この部分のAPI化です。
APIのスレが書けなくなっていたので、スレ違いだとは思いますが
よろしくお願いします。

451 名前:デフォルトの名無しさん :2006/11/23(木) 13:21:23
ほとんどそのまんまの名前のapi使うだけ

452 名前:デフォルトの名無しさん :2006/11/23(木) 13:22:32
>>450
MFCのソース見てみろ。
それだけならAPIを薄くラップしてるだけだ。

453 名前:デフォルトの名無しさん :2006/11/23(木) 13:38:32
>>451
>>452
あっ ありました!
ありがとうございました

454 名前:デフォルトの名無しさん :2006/11/23(木) 15:20:39
ウィンドウを表示するMFC拡張DLLを作成しているのですが、
なぜかdeleteのところでエラーが発生してしまいます
やっていることは単純で、グローバルな変数(CWnd*)を
グローバルな関数(外部アクセスの関数)で作成するだけです
その関数内でnewの前に変数がNULL以外の場合はdeleteするようにしています
調べたところ、エラーは必ず発生するのではなく、ウィンドウを×ボタンで閉じて
そのウィンドウへのポインタをdeleteした場合にのみ発生しています
なぜこのようなエラーが発生するのかご存じないでしょうか?
また、このエラーに対処するにはどのようにすれば良いのでしょうか?
参考になるサイトなどがありましたら教えて頂きたいのですが・・・

455 名前:454 :2006/11/23(木) 15:22:20
補足です

グローバス関数は何度も呼ばれることを前提としており、
呼ばれる度に前のウィンドウを破棄して新しく作る仕様です

以上、よろしくお願いします

456 名前:デフォルトの名無しさん :2006/11/23(木) 15:23:41
> このエラー
> このエラー
> このエラー
> このエラー
> このエラー
> このエラー

457 名前:デフォルトの名無しさん :2006/11/23(木) 15:30:06
>>456
アクセスがどうとかってエラーです

458 名前:デフォルトの名無しさん :2006/11/23(木) 15:31:53
エラーメッセージはコピペが基本

459 名前:デフォルトの名無しさん :2006/11/23(木) 15:45:40
>>454-455
MFC ライブラリ リファレンス
テクニカル ノート 17: ウィンドウ オブジェクトの破棄
http://msdn2.microsoft.com/ja-jp/library/5zba4hah(VS.80).aspx


460 名前:デフォルトの名無しさん :2006/11/23(木) 15:58:43
>>458
すみません
学校に行かないと環境がないので今は無理です・・・orz

>>459
ありがとうございます
参考にさせて頂きます

461 名前:デフォルトの名無しさん :2006/11/23(木) 16:05:17
>>460
学校なら先生に訊けよ

462 名前:デフォルトの名無しさん :2006/11/23(木) 16:34:31
>>461
情報系がメインの学校ではないので分かる人がいません・・・



追加で質問させて下さい

ウィンドウがすでにDestroyされていることを判断する方法ってありませんか?
例えば、下のようにウィンドウのポインタを定義します

CWnd* pTest;

これをnewしたりしてウィンドウを作ったとします
そして×ボタンが押された(DestroyWindowイベントが発生)とします
その時に、pTestからDestroyされたということを判断したいのです
そうすれば現在の問題は解決できるように思っています
どうかよろしくお願いします

463 名前:デフォルトの名無しさん :2006/11/23(木) 16:38:53
DestroyWindow() ないでポインタにNULLを代入して幸せになれそうです

464 名前:450 :2006/11/23(木) 16:56:21
HDC hDC = m_pict1.GetDC()->GetSafeHdc();
HBRUSH hBrush = CreateSolidBrush(RGB(255,255,255));//ブラシの設定
RECT rect;
::GetClientRect(m_hWnd, &rect);
::FillRect(hDC, &rect, hBrush);

すみません。同じ質問となるんですが、
こうしたら、ピクチャボックスの左上からウィンドウの右下までが白になってしまいました。
ピクチャボックスの全領域だけを白にするにはどうしたらいいでしょうか?

465 名前:デフォルトの名無しさん :2006/11/23(木) 17:11:27
>>464
myP->GetClientRect(myCR);
::GetClientRect(m_hWnd, &rect);

クライアント矩形を取る対象が違うと思うぞ

466 名前:デフォルトの名無しさん :2006/11/23(木) 17:17:10
>>465
どう書き直したらいいでしょうか?

467 名前:デフォルトの名無しさん :2006/11/23(木) 17:45:14
ピクチャボックスの領域を取れ

468 名前:デフォルトの名無しさん :2006/11/23(木) 17:54:44
>>467
すみません。どうやったら取れるんでしょうか?
すみません。お願いします。

469 名前:デフォルトの名無しさん :2006/11/23(木) 20:08:23
C#のDataGridViewみたいな表形式のコントロールを使い
VC++では作れませんか?

470 名前:デフォルトの名無しさん :2006/11/23(木) 20:13:43
>>468
引数の意味をよく読んでくれ。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/getclientrect.asp
あとここもよく読んどけ。
ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows.asp

471 名前:デフォルトの名無しさん :2006/11/23(木) 21:09:06
>>469
C++/CLIなどを使ってよいのならVC++でもDataGridViewは使える。
単に表形式の表示がほしいだけならMSFlexGridがある。

472 名前:デフォルトの名無しさん :2006/11/23(木) 21:16:37
>>470
HWND hWnd = m_pict1.GetSafeHwnd();
というふうにして領域を取得できました!
ご迷惑をおかけしました。。

473 名前:デフォルトの名無しさん :2006/11/23(木) 21:29:38
>>471
レスありがとうございます。
MSFlexGridををViewにどう貼り付けるのですか?

474 名前:デフォルトの名無しさん :2006/11/23(木) 23:08:59
Ctrl+VでOK

475 名前:デフォルトの名無しさん :2006/11/23(木) 23:57:34
VC++2005なのですが
#include <string>で宣言して
string taro;
ってうってるだけなのにエラーがでる?
どうしてなの?
エラー内容は・・・・
エラー2error C2146: 構文エラー : ';' が、識別子 'taro' の前に必要です。
エラー3error C2065: 'taro' : 定義されていない識別子です。
エラー1error C2065: 'string' : 定義されていない識別子です。

です。わけわかめ。

476 名前:デフォルトの名無しさん :2006/11/23(木) 23:58:49
>>475
std:string

もしくは

using namespace std;

でFA?

477 名前:454, 462 :2006/11/23(木) 23:59:29
>>463
よく分からないのですが、自身へのポインタをNULLにするには
どうやったらできるのですか?



処理は全体的にはシンプルなものです
ウィンドウを1つだけMFC-DLLによって表示させたいだけです
再呼び出しされたら以前のを消して新しく再表示させたいだけです


CWnd* pTest;//グローバル変数 同じcppファイル内のグローバル関数からのみ呼ばれる

アプリから呼ばれるグローバル関数
{
    if(pTest != NULL) delete pTest;//←ここを2回目に通った(呼ばれた)時にエラー発生(Windowが閉じられた場合のみ)

    //生成して表示する処理(略)
}


ただ、メモリ関連で大きくつまずいています(これによって進めなくなりました・・・)
ちょっと前までは明示的な処理によるメモリ開放という考え自体が全くありませんでした
(前に使ってた言語ではガベージコレクションで勝手に開放してくれたので・・・)

478 名前:デフォルトの名無しさん :2006/11/24(金) 00:05:55
>>476さん
ありがとうございました♪
こんなのに何時間もツマヅイテいたのかorz

479 名前:デフォルトの名無しさん :2006/11/24(金) 00:43:40
エラー1error C2664: 'void System::Windows::Forms::Control::Text::set(System::String ^)' : 1 番目の引数を 'std::string' から 'System::String ^' に変換できません。(新しい機能 ; ヘルプを参照)
こういう表示がでたらどうしたらいいですか?

480 名前:デフォルトの名無しさん :2006/11/24(金) 00:51:38
>>479
> (新しい機能 ; ヘルプを参照)
> (新しい機能 ; ヘルプを参照)
> (新しい機能 ; ヘルプを参照)
C++/CLIはC++とは別言語なので注意

481 名前:デフォルトの名無しさん :2006/11/24(金) 00:55:56
>>479
文字通りstd::stringからSystem::Stringへは直接変換できない(暗黙の変換がない)。
std::string s;があったとしてこんな感じで変換できる。std::wstringも同様。
gcnew System::String(s.c_str(), 0, static_cast<int>(s.size()));

482 名前:デフォルトの名無しさん :2006/11/24(金) 01:00:56
>>481
なんとかデバックできたけど、複雑ですね。
もっと簡単なコードで変換とかできないのですか?
>>481さん
詳しく教えてくださると幸いです。

483 名前:デフォルトの名無しさん :2006/11/24(金) 01:32:50
>>482
そういうときには俺様ライブラリを作ってその中に放り込んでおくんだ。

inline System::String^ ToSysStr(const std::string& s)
{
    return gcnew System::String(s.c_str(), 0, static_cast<int>(s.size()));
}

484 名前:デフォルトの名無しさん :2006/11/24(金) 02:10:07
>>483
ありがとうございます!
参考になります!

485 名前:デフォルトの名無しさん :2006/11/24(金) 02:11:22
ソース貼ると長くなってしまうんで↓です。
ttp://strawberry.web-sv.com/cgi/up/atr/nm2005.txt.html
クロマキー合成させたいのですが、ビルドすると
構文エラー:if とか
構文エラー:return
と表示されてしまうのですがナゼでしょう?
ソース自体、間違っていたら指摘していただければ
幸いです。

486 名前:デフォルトの名無しさん :2006/11/24(金) 02:23:25
>>485
括弧の数が合わないとかそんなのじゃないのかな?
38-40行目の括弧が怪しい感じだ。

487 名前:485 :2006/11/24(金) 02:45:08
>>486
}多かったっす。。。ありがとうございます( ̄∇ ̄)b
でも、出来た画像が真っ黒で・・。
合成は出来ませんでした。。
何か問題ありそうです。

488 名前:デフォルトの名無しさん :2006/11/24(金) 02:49:28
for(i=0;i<256;i++){
for(j=0;j<256;j++){
R=body1[i][j][2];//逆
G=body1[i][j][1];//逆
B=body1[i][j][0];//逆
//if ( R < 0x40 && G < 0x40 && B >= 0x80 ) {
if ( R < 80 && G < 64 && B >= 100 ) {
R=body2[i][j][2];
G=body2[i][j][1];
B=body2[i][j][0];
}

//}余分

new_body[i][j][2] = R;//逆
new_body[i][j][1] = G;//逆
new_body[i][j][0] = B;//逆
}
}
if ((fp3 = fopen("photo3.bmp","wb")) == NULL)
printf("ファイルオープンが出来ません\n");
else{
fwrite(head1, sizeof(head1), 1, fp3);
//fwrite(head2, sizeof(head2), 1, fp3); おいおい
fwrite(new_body, sizeof(new_body), 1, fp3);
fclose(fp3);
}

ねる

489 名前:485 :2006/11/24(金) 02:57:19
>>488
出来ました!!超感動です!!
ありがとうございます!!!!

490 名前:デフォルトの名無しさん :2006/11/24(金) 10:46:52
おまいら構造体のプレフィックスってどうしてる?

クラスなら C
メンバ変数なら m_
ポインタなら P
文字列なら状況により str

って付けてるけど、構造体は S だと文字列みたいだから、
とりあえず全て大文字にしているけど、おもいらどうしてる?



491 名前:デフォルトの名無しさん :2006/11/24(金) 11:13:12
>>490
激しくスレ違い。

492 名前:デフォルトの名無しさん :2006/11/24(金) 11:18:57
>491
そうだね。逝ってくる

493 名前:デフォルトの名無しさん :2006/11/24(金) 14:05:56
VC++ 2005ですが、
デバックのところの
ブレークポイント- フィルタの意味がわかりません。
これはどういうときに使うのでしょうか?

494 名前:デフォルトの名無しさん :2006/11/24(金) 14:08:18
ちょっと一息入れたいときにコーヒー飲むために使うんだよ。

495 名前:デフォルトの名無しさん :2006/11/25(土) 02:22:59
キーワード
 ブレークポイント
  フィルタ処理

496 名前:デフォルトの名無しさん :2006/11/25(土) 17:24:15
スプリッタウィンドウのペインを差し替えることって可能でしょうか?

497 名前:デフォルトの名無しさん :2006/11/25(土) 18:35:36
馬鹿には不可能

498 名前:デフォルトの名無しさん :2006/11/25(土) 19:36:38
経験者は語る?

499 名前:デフォルトの名無しさん :2006/11/25(土) 22:25:47
可能かどうかを訊く奴には不可能な法則

500 名前:デフォルトの名無しさん :2006/11/26(日) 01:54:53
VC++2005でチャットプラグラムを作り、それを踏まえてネットゲームを作ろうと思ってます。
ネットワークはネットで色々調べて概念だけはなんとかわかるようになったんですが、
実際プログラム作成しようとしても上手くいきません。

2005用に作成されたソースやコードではないためだと思いますが
ttp://stylefree.net/main/nprogramming/windows/windows2.shtml
このへんのサンプルをコピペしてもビルドできません。
("stdafx.h"をインクルードしろって言われて、それをインクルードするとさらにエラーが増える)

2005でも実行できるようなネットワークプログラミング講座みたいな
サイトや書籍で参考になるものがあれば教えてください。
もしくは、その他何か解決できる方法があれば教えてください。
よろしくお願いします。


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.