★初心者にVisual C++を教えるスレ★ Part23
otu
6 :
デフォルトの名無しさん :2006/02/24(金) 20:30:21
プロジェクトにlibファイルの追加はどうやるんでしょうか? VC++.net2003です
ヘルプ嫁
>>6 プロジェクトのプロパティからリンカの入力の追加の依存ファイルのところ。
構成に気を付けて設定すること。
9 :
デフォルトの名無しさん :2006/02/24(金) 20:56:09
>>8 gdi;pus.libを追加したらうまくいきました。構成に気をつけるっていうのは
何を気にするんですか?
>>9 デバッグ構成だけにlibを追加していてリリース時にエラーになって騒いだり、
デバッグとリリースで別libファイルなのに両方ともデバッグ版を指定してエラーになって騒いだりという人がいる。
いろいろやってみたんですが、どうもうまくいかないので教えてください。 public __gc class Form1 : public System::Windows::Forms::Form { public: CString test; ..... } で、error C3633: マネージ '<不明>' のメンバとして '<不明>' を定義できません。変換には reinterpret_cast が必要です。 と出るのですが、どうすればいいのでしょうか? VisualC++ 2003です。
>>11 gcクラスはアンマネージドクラスを持てないはず。
>>12 ではこの中でCStringは使えないのでしょうか?
pragmaでもリンクできる。
ていうかさ、 ライブラリをリンクしないと使えないヘッダファイルは、 #pragma comment(lib, "hogehoge") を書いておいてほしいよね。
ライブラリをリンクしなくても使えるヘッダファイル・・・
>>11 =13
CStringはMFC/ATLです
>>11 はどう見ても.NETです、本当に(ry
JNIを使ってJava関数を呼んだ時の 戻り値(文字列型)の取得方法について教えてください。 int型などは以下で戻り値を取得できたのですが jint iRtn = jni_env->CallStaticIntMethod( j_class, j_methodId ); 以下のようなString[][]を返すJava関数を呼んだ時は VC++側でどのように取得すればよいのでしょうか? jobjectなどでいろいろ試したのですが行き詰まりました。。 static string[][] getStringTest() { String[][] str = { {"aa","bb"}, {"cc","dd"}, {"ee","ff"} }; return str; }
>>18 Javaスレで訊いた方がいいんで内科医?
20 :
11 :2006/02/25(土) 10:15:12
System::Stringを使ったところ、うまくいきました。 ありがとうございました。
VC8です、新しいプロジェクトで CLRからWindowsフォームアプリケーションを選択してプログラムの 学習をしています 外観はFormに、buttonとtextboxを一個ずつ貼り付けた形です やりたいことは、テキストボックスに文字を入力して、ボタンを押したら input.txtというファイルに入力した文字を書き込みたいのですが どの様に書いたらいいでしょうか、よろしくお願いします
ここはド初心者にプログラムの仕方を教えるスレではありません まずは本でも買って勉強しろ
ド素人です。 VC++2005 Express Edition落としてC++のプログラム始めようとしてるんですが、 買った初心者向けの本(VS2003用)や、ネットのサイトは基本的に最初はMFCを使ったプログラムです。 ExpressにはMFCは同梱されていないようで、のっけからつまづいてる状況です。 ExpressにMFCを追加するのは可能ですか?Standard買えって話でしょうか。
MFCが使いたいなら買えって話です
>>24 或いはMFCを使わないWindowsプログラムの本を買うと言う手もある。
テキストデータを 読み込んでバイナリーで表示したいのですが。
独り言に話しかける奴きんもーっ
質問です。 +Rootディレクトリ //ルートのディレクトリ +コンポーネントディレクトリ //コンポーネントなくラスが入ってるディレクトリ +ネットワークディレクトリ //ネットワーク用のクラスが入ってるディレクトリ +ベースディレクトリ //ネットワークの基本的なクラスが入っているry このようにクラスのファイルをフォルダ分けして整理したいのですが、 ベースディレクトリに入っているファイルから、コンポーネントディレクトリに入ってるファイルをインクルードしたいときに #include "./../コンポーネントディレクトリ/Component1.h" と書くのではなく #include "Rootディレクトリ/コンポーネントディレクトリ/Component1.h" とは書けないのでしょうか?
>>31 書けます。そりゃもう、好きなように書けますとも。
それ相応のMakefileかプロジェクトの設定をする手間を厭わなければ。
33 :
843 :2006/02/26(日) 15:53:59
できました。 >>それ相応のMakefileかプロジェクトの設定をする手間を厭わなければ ということは皆さんはこのようにフォルダ分けをしていない方が多いのでしょうか? つーか、しないのが普通?
しなきゃいけないほどファイル多くない
ローカルなら相対パスだし、そうでないならMakefileに追加。
36 :
デフォルトの名無しさん :2006/02/28(火) 09:25:53
ツリーコントロールで質問させて下さい。 親を選んだら、即座に子を選択したいのですが、 例えば、ABCをクリックしたらDEFが選択される・・・ ABC DEF GHI JKL MNO 丁度VS2003のオプション画面の様な動きをさせたいのです。 なにか良い方法はありますでしょうか? (シングルクリックで子が開く様、Single ExpandはTrueにしてあります)
何か良い方法って、コードで選択させりゃいいじゃない
っ[SendMessage]&[TVM_SELECTITEM] っ[TreeView_Select]
39 :
36 :2006/02/28(火) 09:44:44
ありがとうございます もしかしたら、プロパティにそういう設定があるのかと思いまして・・・ コーディングでがんばります
VS2003で.NETプログラミングをしています。 DropDownListスタイルでComboBoxを使っているのですが、初期値を上手く設定できません。 SelectedIndexを使っても、デザイン画面とコード画面を切り替えたりしている間にいつの間にか消えてしまいます。 どうすれば上手く設定できるのでしょうか。
マルチには死を
42 :
デフォルトの名無しさん :2006/03/01(水) 22:01:07
ピクチャーボックス等で絵を表示している領域上に 見えないボタン(下のピクチャーが表示できるように)を設置する方法ってありますか? visibleをFalseにするとボタンの存在自体がなくなってしまうので・・・。
見えないなら、WM_LBUTTONDOWNで処理すればいいのでは?
VC6.0なんですが、プロジェクト名って変えられないんですか(涙)?
見えないボタンなんて存在しないのと何が違うのかサッパリわからん ていうか邪魔
フラットツールバーみたいなもの? フラットにして絵を貼れば
>>46 それやってみたんですが、やりかたまずかったらしくてプロジェクトが開けなくなってしまったんですが。
具体的にどのファイルのどこを書き換えればいいかわかりますか?
わかる
だが、マルチっぽいので断る!
クラス名じゃなくてプロジェクト名だけなら馬鹿でもできるだろ
53 :
42 :2006/03/01(水) 23:35:44
レスを求めといて、自己解決で申し訳ありませんが、
TransParentで目的が達成できることが分かりました。
>>43 見えないボタンという表現が良くありませんでした。失礼しました。
ボタン等を透明にする方法を知りたかったのです。
>>45 ピクチャーの一部をクリックするとイベントが起こるようなプログラムに
したいと思っています。別にボタンじゃなくてもいいです・・・。
>>47 そうするとジグゾーパズルみたいになるので、透明の方法を探してました。
駄レス失礼しました。
VC++ができて、あの書き換えができないのは不思議だ・・・
>>52 クラス名のほうがソースとヘッダをいじるだけだからはるかに簡単だと思うんですが。
>>55 プロジェクトファイル書き換えるだけだが。
>>51 どこら辺にマルチされてるん?マルチっぽかったら答えるのやめよと思うんだけど。
VS2005のVC++を使ってるんですが、 OPENFILENAME構造体のlpstrFileが LPTSTR型からLPWSTR型に変わっているみたいで困っています。 どなたか解決法をご存じないでしょうか?
プロジェクトの設定で使用する文字がUNICODEになってるんじゃないか?
#undef _UNICODE #undef UNICODE
>>60 2005でもLPTSTRだよ。
設定次第でLPSTRにもLPWSTRにもなるのがLP*T*STR。
プロジェクトの設定でマルチバイトを使用するようするのは一時的な回避手段だと心得ておくべき。
>>61-63 レスどうもありがとうございます。
マルチバイト文字セットを使うようにしたらコンパイル通りました。
今までVS2003を使っていた時は普通にコンパイル通っていて、
型の意味などは特に意識しておらず、どうしたらよいか全然分かりませんでした。
みなさん本当にどうもありがとうございました。
VS2003はデフォルトが非UNICODE(typedef LPTSTR LPSTR) VS2005はデフォルトがUNICODE(typedef LPTSTR LPWSTR) ただそれだけのお話
Unicode もそうだけど、2005 にしてから プロジェクト作るたびにいろんな設定 OFF にしまくり・・・ デフォルトの設定自体をいじることってできたっけ?
67 :
65 :2006/03/06(月) 09:10:59
typedefの文法前後逆じゃん俺・・・
VC++6.0でMFCActiveXコントロールプロジェクトを作成するときに、 MFC ActiveX ControlWizardの「このプロジェクトのコントロールにランタイム ライセンスをつけますか?」 のところを「ランタイムライセンスなし」で作成してしまいました。 あとになってつける必要ができたのでつけたいのですが、この場合、プロジェクトを再度 作成するしかないのでしょうか?どこかに設定があるのでしょうか?
69 :
デフォルトの名無しさん :2006/03/06(月) 11:18:33
VS2003使ってるんですが、 変数名や関数名にマウスのポインタを当ててポプアップするヒントがありますよね。 あれが、特定の関数の、特定の行から出なくなっちゃったんですけど、 なんでですか?
>>66 2005になって慌てているほうが間抜け。
どーんと構えていれば問題ない。
>>69 その行の前にミスがあったりすると出なくなる事があるような気がする。
72 :
デフォルトの名無しさん :2006/03/06(月) 15:19:07
>>71 ビルドも通ってるから明らかなミスは無いんですけどね、
2行前の変数宣言を1行から2行に分けて書いたら治った。
分けが分からん。
それがMSクオリティ まぁ、MSの作るIDEはどうも変な動作が多いからな _TEXT("")構文使って日本語入力するとクイックヒントが戻らなくなったりな
中でヒント出してる人とコンパイルしてる人は全然別だし
75 :
デフォルトの名無しさん :2006/03/06(月) 19:34:55
76 :
デフォルトの名無しさん :2006/03/06(月) 20:39:24
VS2003なんですが、いつの頃からかデバッグしようとすると しばらく固まったままになってしまうのです。大体30秒から1分ほどすると 何事も無かったようにようやくデバッグが動き出すんです。 いったいなぜ?
アンチウィルスソフトが関係しているとか
マシンのメモリがすくにゃい、デバッグしてるプログラムに大量のメモリをとるバグがある。
なんでメモリ確保が遅いんだとおもったら、 1MBじゃなくて、1GB確保しててワロタことがあったな
80 :
76 :2006/03/07(火) 00:19:06
レスありがとう。 ひょっとして既出の問題なのかなと思ったけど、うち固有の問題みたいですね。 マシンのメモリは1G積んでて、P4 2.4GHzなんです。 セカンドマシンの、P3 800MHz 128M ではなんとも無いんですこれが。 プロジェクトに関係なく固まるのでプログラムのバグじゃないです。 ノートンか、それともVC2003再インスコしてみよう。
81 :
デフォルトの名無しさん :2006/03/07(火) 01:12:50
こんばんわーVS2003を使ってvcを使っているものです。 プロジェクトを作る時【Win32 プロジェクト】っていうの選んで作っています いまコモンコントロールのリストビューをCreateWindowで作る途中なんですが プロジェクト作るときの自動生成されるコードについて質問があります コモンコントロールを使うための 【#include<commctrl.h>】【#pragma comment(lib, "comctl32.lib")】 などの文を【stdafx.hまたはcpp】(自動生成された)に書かず、 【プロジェクト名.cpp】に直接書くとエラーが発生してLV_COLUMN構造体などが 定義されていないとでます、これはなぜなんでしょうか? それと自動生成されたコードのWinMainは【int APIENTRY _tWinMain(..】 のようになっています、これはなんなんでしょうか? もしわかる方がいたら、答えてもらえるとサイワイです! 自分の知識レベルは猫でもわかるWindowsプログラミングを読めるくらいです。
なぜ、って定義されてないんだろ。inclueより前に出現したかか、includeしたのとは翻訳単位が別か。
83 :
デフォルトの名無しさん :2006/03/07(火) 01:42:47
すみません質問です。 ダイアログベースのMFCです。 ワーカースレッドなるもので、とある処理をさせています。 ここまでは無事完成したのです。 そしてその処理結果をエディットボックスに表示させたいのですが、 ワーカースレッド中の処理の終わりに、エディットボックスに割り当てたDDX変数に文字列を代入して UpdateData(FALSE);するとそこでアサートしてしまいます。 wincore.cpp の 889行目、ASSERT((CWnd*)p == this); // must be us だそうです。うん、よく分からない。 そこでワーカースレッドが処理を終わった頃を見計らって、 ワーカースレッドの外でUpdateData(FALSE)すればいいんじゃないか と思ったのですが、いつワーカースレッドが終わったのか、どうやって知ればいいのかが分かりません。 SPY++で見ていてもそれらしきメッセージも見当たりませんでした。 ど、どうすれば・・・
::PostMessageでも使って勝手に投げろよ。
85 :
83 :2006/03/07(火) 01:59:36
あ、コントロール変数でSetWindowTextでなんとかなりそう
>>84 それもいいですね。ありがとう、気づかんかった。酒飲み過ぎた
>>83 スレッドハンドルはイベントオブジェクトだから、ハンドルがあれば終了チェックが出来る。
Win32 APIだよ。わかる? わかんなかったら自分で調べてね。
>>81 APIENTRYはWINAPIと同じ意味。
_tWinMainは3番目の引数に対してWinAPIと同じようにTCHARを使うようにしたもの。
88 :
83 :2006/03/07(火) 10:57:49
>自分の知識レベルは猫でもわかるWindowsプログラミングを読めるくらいです。 誰 で も 読 め ま す
猫には読めないと思う
( ゚д゚)<
猫ひろしにも読めないと思う
江戸屋子猫なら読めるかな?
94 :
デフォルトの名無しさん :2006/03/07(火) 22:25:24
ダイアログボックスにコントロールを配置する時 その位置や大きさを数値で直接指定できませんか? リソースを直接編集やコーディング以外で。
グリッドつけるとかじゃ?
96 :
デフォルトの名無しさん :2006/03/07(火) 23:34:53
res だっけかRCファイルだったか位置情報を持ってる 構成設定ファイルなかったかなあ?なんか昔客に尋ねられて調べたような しらべてないような。
>リソースを直接編集やコーディング以外で。
リソースの直接編集やコーディング以外っていったいどんな事を指しているの?
最近のやつはVBのフォームエディタのような形式にかわったから プロパティで座標が指定できそうな気がするけど VC6使ってるからよくわからん。
少なくともVC7.1のリソースエディタのプロパティには位置情報がない。
スタティックテキストとエディットコントロールが 高さ方向の位置、微妙に合わないので嫌になります
102 :
94 :2006/03/08(水) 12:57:23
ウィンドウの大きさを自由に変えられるアプリなら別にいいんですよ。 適当に配置してコーディングで位置決めするから。 でもウィンドウ固定のアプリやダイアログで、みんなどうやって大きさ決めてるんですか? リソースエディタで適当に配置?やっぱり大きさは切りのいい数値じゃないと気持ち悪いんですが。 VS7.1のリソースエディタじゃ正方形のボタンを配置するだけでも苦労する。
そのくらいの問題ならレイアウトグリットで充分って希ガス。
[← →] こういうようなボタンで他のコントロールに合わせる
105 :
デフォルトの名無しさん :2006/03/08(水) 13:54:02
すいません。どうしてもわからないことがあるので教えてください ld:Undefined symbols: _answer_check というエラーが出るのですがこの原因がよくわかりません。 マックでemacsでやっています。 どなたかわかりましたら教えていただきたいです。 よろしくお願いします
>>105 一度なんて堅いこと言わずに、300回ほど死んだら?
マックでemacsでldのエラーのどこがVisualC++なのか
大方Visualという文字が見えなかったのだろう
VC++のobjをldでリンクしようとでもしてるんかいな
CString items = _T("111 222 333"); という文字列を対象に CString a, b ,c にそれぞれ a = "111", b = "222", c = "333" と格納したい場合は、どうすれば良いですか? _stscanfを使いたいんですが、使い方がいまいち分かりまへん。
有難うございます。 でも、ぐるぐる回すのではなく、一発で出来ないものでしょうか。 _stscanf(items, _T("%s %s %s"), a, b, c); どうもこれだと、うまく取れないのですが
CStringでデータ受けるなら
114 :
112 :2006/03/10(金) 13:05:04
たびたびすいません。 有難うございました。TCHARの配列で受け取ることにします。
115 :
デフォルトの名無しさん :2006/03/10(金) 18:39:43
1>マニフェストをリソースにコンパイルしています... 1>リンクしています... 1>マニフェストを埋め込んでいます... 1>プロジェクト : error PRJ0002 : エラーの結果 1 が 'C:\WINDOWS\system32\cmd.exe' より返されました。 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== VC2005でビルドするとこんなかんじでエラーします。 VC6では動いていたんですが・・・ どうすれば、ビルドできますか?
その質問どっかで見た
ハライテー
>>115 マニフェストを埋め込んだ後エラーになっているのだから、
まずはマニフェストの埋め込みで何かが起こっていると考えるべきだ。
しかもVC6にマニフェストなんて無かった。
だからVC6では上手くいくのも説明が付きそうな気がするだろ。
VC++6.0でMFC ActiveX Controlを作成し、Javascriptからメソッドを呼び出すように
したいのですが、動作させるマシンにより、動くマシンと動かないマシンが
出てきてしまいました。
・ActiveXはウィザードで作成し、そのままビルドしたもの。なのでメソッドはAboutBox()しかありません。
・HTMLはこんな感じです
<html>
<object id="hoge"
codebase="
http://サーバURL/hoge.cab#version=1,0,0,1 classid="CLSID:クラスID>
</object>
<body onload=hogehoge()>
<sctipt language="javascript">
function hogehoge()
{
hoge.AboutBox();
}
</script>
</body>
</html>
121 :
120 :2006/03/11(土) 02:25:07
で、上記HTMLを開くと、動くマシンでは当然バージョンダイアログが表示されるのですが、 動かないマシンだとランタイムエラー 「オブジェクトにてサポートされていないプロパティまたはメソッドです コード:0」 が出力されてしまいます。 環境が違っているのかと思い、OSやIEのバージョン等調査したのですが、 どちらも同じでした。 ほかに問題があるとすると、どのあたりに原因があるのでしょうか? 教えてください。 ちなみに、環境は OS:Windows2000 SP4 IE:Version6.0.2800.1106 IEパッチ:Q832894,Q831167,Q837009,Q867801,Q833989,Q903235 です。 もちろんインターネットオプションのセキュリティ等は設定済みです。 (信頼済みサイトにサーバを登録) 長々と書いて申し訳ありませんが、よろしくお願いいたします。 また板違いでしたらすみません。
122 :
デフォルトの名無しさん :2006/03/11(土) 14:48:32
インクルードのパスなんですけど、 例えばプロジェクト全体が入っているのがHogeフォルダだとして、 この直下に.dswとか.dspとかが入ってます。 で、Hogeの中に直にヘッダやらソースが増えてきたので、 Hogeの中にフォルダをいくつか作ってその中にヘッダとソースを分野ごとに仕訳しました。 main.cppなどメイン部分をMainフォルダ、グラフィック部分はGraphフォルダ、といった具合にです。 そうした時に、Mainのフォルダに入っているソースから Graphフォルダの中のヘッダなどをインクルードしようとしたときに 見つけられないみたいでコンパイルするとエラーになるのですが、 こういうときはどうやって#includeを書いたらよいでしょうか?
>>123 あれ、いけました。すいませんありがとうございました。
125 :
デフォルトの名無しさん :2006/03/11(土) 18:24:10
未だにVC6なんですけど、visualstudio2005とか買ったら コンパイルエラーのメッセージとか アホにも分かりやすく親切になってたりしますか?
コンパイルエラーがアホみたいに出て来たりしてな
アホイラネ
128 :
デフォルトの名無しさん :2006/03/11(土) 21:20:50
スマポーのコードを例示してください。 本当に分からず、こまってます。 C++3版読んでもよく分かりません。
質問です。 visual C++ 2005 Express を使い始めました。 PlaySound関数を使いたいので リンカに「winmm.lib」を追加し、#include <Mmsystem.h>と書いてるんですが ビルドすると 「fatal error C1083: include ファイルを開けません。'Mmsystem.h': No such file or directory」 になります。 いったいどうすれば良いのか途方にくれています。 どなたか教えてください。
>>129 Mmsystem.hが本当にあるか調べる
無いようです。 Mmsystem.hが無いとPlaySound関数は使えないのでしょうか?
いいえ。
>>129 Platform SDKはインストールしたか?
>>133 なるほどこれですか。
さっそくDLします。ありがとうございます。
135 :
129 :2006/03/12(日) 08:11:03
Platform SDKをインストールして mmsystem.hもincludeさせたんですが、ビルドすると >>error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません というエラーメッセージが大量に出てきます。 どうすればよいのでしょうか?
なんだかよくわからんけど、 そのエラーになってる行のコードを貼り付けてみるとよいかもしれん。
137 :
デフォルトの名無しさん :2006/03/12(日) 20:41:25
メンバにwstring m_wtext を持ってるクラスCHogeがあります。 CHogeのコンストラクタのなかで m_wtext.empty(); m_wtext = L"あああ"; MessageBox(NULL,narrow(m_wtext).c_str(),"",NULL); のようなことをしてみると、なぜか文字列がヘヘヘヘへ・・・・ンンンンのように既に壊れて表示されます。 narrowはCHogeの基底クラスで定義されている、wstringをstringに変換する関数です。 string CBase::narrow(const wstring& input) { char* buffer = new char[input.size() * MB_CUR_MAX + 1]; wcstombs(buffer, input.c_str(), input.size() * MB_CUR_MAX + 1); string result = buffer; delete[] buffer; return result; } 別のもっと単純なアプリの中で同じ事を試しても問題はでないのですが、 なぜか今回ちょっと大きめなプロジェクトに組み込んでみたところおかしくなりました。 アプリごとの何かしらの動作順序の違いかなにかでこういうことは起こり得ることでしょうか? でもコンストラクタのなかで関数を一個挟んだだけなのにアプリによって違いがでるというのは 理由がさっぱりわかりません。何かここが怪しげってところがあったら教えてください。 環境はW2k VC6.0++です。よろしくお願いします。
138 :
137 :2006/03/12(日) 20:42:13
うわ、すいません、スレ間違えました。
139 :
デフォルトの名無しさん :2006/03/14(火) 01:26:32
モードレスダイアログを呼び出したときに、 モーダルダイアログのように呼び出したダイアログ以外をロックしてしまい、 モードレスダイアログを常にトップに表示したいのですが、 どうするのがベストでしょうか。 今は、モードレスダイアログがときどき後ろに隠れてしまいます。
EnableWindowかな
EnableWindowで他窓無効化 SetForegroundWindow ただし、いかなる場合でもEnableWindowで無効化を解除できるようにコーディングしろよ さもないと、ダイアログ閉じたら二度とアプリが操作できなくなるからな
モードレスでも親子なら裏にいかないよ
2003のリソースエディタなんだけど、ツールバーのボタン削除ってどうやるの? 切り取りやDelしても消えないんだけど…
144 :
143 :2006/03/15(水) 22:59:49
あ、ヘルプに書いてあった。枠外にD&Dすればいいのね。
145 :
デフォルトの名無しさん :2006/03/16(木) 12:50:58
僕の人生もD&Dしたいです。 ていうかもうしてしまいました。 どうしたらいいですか?
VS.NET2005で作業しています。 MFCでフォームビューのシングルドキュメントのアプリを作っています。 最初に作成されたウインドウに貼り付けたコントロールの類は正常動作するのですが、 そこから派生したダイアログ(ボタンを押して新たに出現するダイアログ)に貼り付けたコントロールが うまく動いてくれません。 コンパイルは完了するのですが、 Debugモードでは Debug Assertion failed! と出て落ちてしまいます Releaseモードでは エラーこそ出ないものの、期待した動作一切が無視された状態です。 派生したダイアログを定義したクラス内に、リストなどのコントロール変数を宣言、 コンストラクタ内でそのダイアログ内のコントロール変数を利用して初期化。 この作業に入った瞬間にエラーが発生しているようです。 すみませんが、どなたかご教授願います。
>>146 クラスオブジェクトが生成されただけではウィンドウは作成されていない。
>147 ありがとうございます ということは ダイアログ.DoModal(); より後で、ダイアログが閉じるより前に コントロール変数をいじるということでしょうか? その場合は、ダイアログを定義したクラス内のどこに配置すれば、 ウインドウが開いた瞬間に適応されているように出来るのでしょうか。? 重ね重ね申し訳ありませんがお願いします。
CDialog::OnInitDialog
>147, 149 本当にありがとうございました、無事表示できました。
CString cstr[1000][10][30]; CMyClassの中にtableのデータを1000件保持したいのですが、 使っても問題ないですか。
>>151 つーかそれ、30万件の文字列ってなんだよ。
あっさりスタック食い潰しそうだからヒープに確保するようにして置けよ。
153 :
139 :2006/03/17(金) 00:14:54
>140-141 遅くなりましたが、ありがとうございました。 無事に解決しました。 ところが、次の問題が出ていまして。 モードレスダイアログでOKボタンが連打できてしまうために、 処理が終わる前にまたOKが押されたときの処理をやろうとしてしまっているようで、 エラーが出ています。 OKが押されたらその処理が終わるまでOKが押せないようにするにはどうしたらよいでしょうか。 モードレスダイアログはDLLで表示していて、DLLのソースはいじれないので、 Exeで押さえ込まなければならないのですが。。。
処理が終わるまでフラグかなんかで弾けばいいじゃない
>>153 OKが押されてから、その処理が終わるまで、メッセージの発行をする処理を実行していないか?
例えば、コントロールに値を設定したり、メニューを変更したり。
基本的にメッセージループに飛び込まなければ次のメッセージは Pump されないはず。
ただ、DLLのソースの中でやられちゃってたらダメだから。
その場合は、
>>154 のような逃げ技で…。
って感じ?
OKボタン押された時の処理ってのはどっちでやってるんだ? DLL側でやってるんならどうにもならん
CStringの比較で==とCompareがありますが どちらを使ったほうがいいのでしょうか?
158 :
153 :2006/03/18(土) 00:54:35
OKボタン押された後の処理はEXEでやっています。 DLL側でOKボタン押されたらユーザメッセージを投げるので、 それを受けとったら処理が走ります。 EXE側でやってるのは、DLLで設定した内容を元にデータを作って通信しています。 通信部分はメソッドが確立しているので詳しく見ていないのですが、 おそらくwinsockかなんかで通信しているのだと思います。
159 :
153続き :2006/03/18(土) 00:55:20
質問ばっかりで申し訳ないのですが、 今日、とりあえずリリースビルドを作ってみたところ、 モードレスダイアログの呼び出し部分でエラーになることがわかりました。 デバッグビルドでは問題ありません。 調べてみたところ、MSDNを見るとヒープの問題でこのようなことが起きることが多いようなのですが、 AfxCheckMemoryなどでチェックしても問題は特に出てきていません。 リリースビルド時の最適化を無効にすると問題ないことも分かりました。 動作の流れは (1)コンストラクタでLoadLibrary。 (2)ダイアログを呼び出すメソッド内でモードレスダイアログをクリエイトする関数呼び出し。 (3)1つ目の質問部分で書いている処理が正常終了したらダイアログクローズ。異常ならそのまま。 (4)デストラクタでFreeLibrary。 となっています。 メッセージボックスを表示させる方法でチェックしたところ[1]部分でエラーとなっています。 typedef int (__stdcall *DLGCREATE)(const char* szString, UINT nNum) DLGCREATE pDllCall = (DLGCREATE)GetProcAddress(m_hDll, "Create"); if (pDllCall != NULL){ nRet = pDllCall(m_szString, 10); ---[1] } コードに問題があると思うのですが、どこから手をつけていいのか分かりません。 これだけの情報では分からないことが多い(というかほとんど分からないと思う)のですが、 もしこのような問題に遭遇したことがあればそのときの解決の方法などを教えていただければと思います。 よろしくお願いします。
>>159 そういうときは、まずエラーになる部分で各変数の値がどうなっているか確かめろ。
VC6でダイアログを作って勉強中なのですが、 namespaceでコンパイルエラーになってしまいます。 namespaceの宣言やら関数を、呼び出すCdialog.cpp内に書くと問題ないのですが 自前のmyfunc.cpp内に書いて Cdialog.cpp内で呼び出すようにするとうまくいきません。 出来なかったりしまう?
cppをインクルードすりゃいいかも
164 :
161 :2006/03/18(土) 11:28:15
(myfunc.cpp) #include "stdafx.h" namespace abc { 自作関数 }; (CDialog.cpp) #include "stdafx.h" using namespace abc; ・ ・ プロジェクト作成時に出来た関数等々 ・ ・ BOOL CDialog::OnInitDialog() { 自作関数 } ざっくりこんな感じに書いてます。 エラーは↓とでます。 error C2871: 'abc' : 存在しないか名前空間ではありません。 error C2065: '自作関数' : 定義されていない識別子です。
>>164 C++では他のファイルに書いたものはそのままでは使えない。
宣言によって名前が見えている必要がある。
だからヘッダを作ってそこに宣言を書き、ソースファイルで定義(実装)を書く。
そして使うファイルでヘッダをインクルードする。
166 :
161 :2006/03/18(土) 11:46:14
167 :
http://www.vector.co.jp/soft/win95/util/se072729.html :2006/03/18(土) 18:51:43
TextSS の64bit化おながいします もしくは64bitにネイティブ対応した置換ソフトないですか?
今回Visual C++ 2005 Express Editionを入れてみて ヘルプがみれるので嬉しいのですが 家にあるVisual C++6.0 のヘルプを呼び出すとMSDNのコレクションが無いと 表示されて、終わってしまうのですが VC6++の場合は、html work shopで一から作らなければならないのでしょうか それともどこからかダウンロードして、インストールしなければならないのでしょうか よくわからないので、書き込みさして頂きました。 解る人がいればご教授願いたいです。
>>168 意味がわからん。
VC++6のヘルプはVC++6についていただろう?
新しいMSDNはVC++6には対応していないので
VC++6のIDEからは呼び出せないがそういうことか?
コンボボックスにリストから選択されたのではなく、 新たにキー入力された文字列を取得する方法を教えてください。 コンボボックスへ文字列入力→コマンドボタンでコンボボックスリストへ追加 の処理を作ろうとしているのですが、いきなり積まず息巻いた。
>>170 getWindowText()で取れない?
>>171-172 C++も初心者なもので継承に気が付かずコンボのメンバーしか
見てませんでした。
無事できましたm(_ _)m
174 :
153 :2006/03/21(火) 13:31:24
一応報告を兼ねて。 解決しました。 /GZを使って調べたところ、呼び出し規約が違うって出てきました。 DLL側が__stdcallでは無かったようです。 __stdcallを削除したら問題なく動作しました。 ま、DLLが__stdcallだったとしても名前を装飾してなかったんで動かなかったと思いますが。。。
なんだよそれ…。 でも、解決して良かったね。
何がしたいという訳ではなく、単なる知的好奇心としての質問なのですが…。 コンパネの地域のオプションでシステムロケールを英語に設定した上で、非UNICODEアプリを実行すると、 メッセージボックス等の文字が化け化けになってしまいます。 非UNICODEで〜A系のAPI(MessageBoxA等)が使われているので当たり前なのですが、 なぜかメニューバーだけは文字化けせず、普通に日本語が表示されます。 なんでかなーとexeの中を覗いてみたところ、 非UNICODEでも、メニューバーで使用されている文字列はUNICODEで格納されているようなのです。 (VC++6.0、2005experessで確認) リソース内の文字列って、常にUNICODEで扱われるのでしょうか。 もしそうだとしたら、Win9xの時代からずっとそんな仕様だったのでしょうか。
>>176 そうだよ。
ついでに言うと文字列リソースもUnicodeで格納されている。
だが、それなのに9xではLoadStringWが機能しない。酷い仕打ちだ。
178 :
176 :2006/03/22(水) 19:42:54
なるほど、ありがとうございます。 ヘンテコな仕様ですね。 そうすると、リソース内のUNICODEな文字列を LoadStringAの内部でわざわざSJISに変換しているってことですね。
179 :
デフォルトの名無しさん :2006/03/22(水) 23:38:46
Visual Studio .NET 2003 アカデミック を買ったのですが、これは、シェアウェアや商用で利用してもいいのでしょうか?
ライセンスを確り読むと答えが書いてあると思うよ。
なんでそういう事を2ちゃんで訊くかな。 M$に電話しろよ。
Visual Studio 2003 アカデミックを使っているのですが、 VC++でなぜかデバッグよりもリリースでのビルドの時の方が 処理速度が大幅に遅くなってしまっていて、 なにが原因かわからず困っています。 状況としてはデバッグの時には50fps以上の速度が出ていたのに リリースビルドした時には7fps程度しかでなくなってしまっているといった感じです。 色々と調べてみたところどうやら下記の部分が原因になっているようでした。 ang_cos, ang_sin, xtemp, ytempはdoubleで他の変数はintになっています。 x = (int)((j - length_temp) * ang_cos - xtemp + xbase); y = (int)((j - length_temp) * ang_sin + ytemp + ybase); どうも暗黙のうちに使われているらしいftolが怪しいのかなと考えているのですが… ビルドオプションを色々と変えてみても解決することができませんでした。 何かご存じの方がいたら教えていただけないでしょうか? よろしくお願いします。
> 色々と調べてみたところどうやら下記の部分が原因になっているようでした 何故そういう結論になったの? 別のところに致命的な原因があるような気がするけど… どこかの変数が初期化されてなくて云々…みたいな。 と個人的には思ってみる。
IDEから実行した場合、exe直実行より遅くなった事があったような希ガス。
>>183 すいません、説明不足でした。
DevPartner Profiler Community Editionを使って
処理に時間がかかっていた部分を調べてみたり、
x = (int)((j - length_temp) * 1 - 1 + xbase);
y = (int)((j - length_temp) * 1 + 1 + ybase);
と言うような風にした時は遅くなることがなかったからです。
x = (int)((j - length_temp) * 1.1 - 1.1 + xbase);
y = (int)((j - length_temp) * 1.1 + 1.1 + ybase);
と言うようにしてみた場合には処理が遅くなってしまいました。
x,yに直接適当な数値を入れてみた場合は遅くなることはありませんでした。
>>185 レスありがとうございます。
いま直接exeを実行してみたのですが、やはり速度は遅いままでした。
187 :
183 :2006/03/23(木) 14:57:21
何度もすいません。 x = (int)((j - length_temp) * ang_cos - xtemp) + xbase; y = (int)((j - length_temp) * ang_sin + ytemp) + ybase; と言うようにしてみたところ、 リリースでもある程度の速度が出るようになりました。(40fpsくらい) なぜか小数点以下の数値の扱いに違いがあるのですが… ビルドの最適化オプションを変えてみても症状はかわりませんでしたが 最適化関連の問題なのでしょうか? 一応解決はできましたが原因がよくわからないので 何かご存じの方がいましたらお教えいただけると助かります。 よろしくお願いします。
コードは見てみた?
189 :
183 :2006/03/23(木) 15:19:16
>>188 コードというとアセンブリ言語の事でしょうか?
アセンブリ言語はよくわかっていないので
短くはなっているかな位にしか考えてませんでした。
>>183 の時のコードでは下記のようになっていました。
長文で申し訳ありません。
リリースビルドの時
x = (int)((j - length_temp) * ang_cos - xtemp + xbase);
00401DB0 fild dword ptr [esp+28h]
00401DB4 fld st(0)
00401DB6 fmul st,st(5)
00401DB8 fsub qword ptr [esp+38h]
00401DBC fadd st,st(3)
00401DBE call __ftol2 (406DD0h)
デバッグビルドの時
x = (int)((j - length_temp) * ang_cos - xtemp + xbase);
0043065B mov eax,dword ptr [j]
0043065E sub eax,dword ptr [length_temp]
00430661 mov dword ptr [ebp-0A0h],eax
00430667 fild dword ptr [ebp-0A0h]
0043066D fmul qword ptr [ang_cos]
00430670 fsub qword ptr [xtemp]
00430673 fiadd dword ptr [xbase]
00430676 call @ILT+3965(__ftol2) (42BF82h)
0043067B mov dword ptr [x],eax
うちの VS20003 じゃ、ほぼ同じようなコード吐いてるけど Release で偉い遅くなるような事は無いなぁ。 j って変数があるってことは、ループの中? もしそうなら、実はループがおかしいとか。
つかそれ、40fps出るほうのリリースビルドでは
ああ、1.1 のとはまた別なのか、すまん
193 :
183 :2006/03/23(木) 16:01:26
iとjのループの中にあります。 値を出力させて見たところリリースとデバッグでループ回数に違いはありませんでした。 ほかに気になるところと言ったらjpgとpngとzlibのライブラリをリンクしていることなどでしょうか? 全てマルチスレッドのDLLを使うようにしています。 とりあえずいま新しくソリューションを作って問題の部分だけを試してみています。
原因がわかりました。 libpngにこんなようなコードが書いてあったので もしやと思って削除してみたところリリースビルドでも 遅くなると言ったことはなくなりました。 #if (_MSC_VER >= 1300) && (WINVER < 0x0500) //VC7 or later, building with pre-VC7 runtime libraries extern long _ftol( double ); //defined by VC6 C libs extern long _ftol2( double dblSource ) { return _ftol( dblSource ); } #endif ありがとうございました。 おかげ様で何とか検討つけて原因探すことができました。
ODBC APIについて、他に適切なスレが見つからなかったので、 ここで質問させてください。 開発環境:Windows 2000、Visual C++ 6.0、ODBC 3.0、MSDE 2000 SP4 まず、下記のようなSQL文を作成し、SQLPrepareを実行しました。 UPDATE TestTable SET Field1=? ※Field1はCHAR型(30バイト)で、NULL値を許可されたフィールドです。 次に、パラメータにNULL値をバインドしたかったのですが、どうしても うまくいきません。(UPDATE TestTable SET Field1=NULL を実行した のと同じ結果にしたい、ということです。) char szName[30 + 1]; strcpy(szName, ""); SQLINTEGER sNull = SQL_NULL_DATA; として、 (続く)
196 :
195 :2006/03/23(木) 22:43:35
(続き) SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 30, 0, NULL, sizeof(szName), &sNull); とすると、SQLBindParameter自体は上手くいくのですが、SQLExecuteで エラーとなり、エラー情報を取得すると HY090 文字列長またはバッファ長が正しくありません。 が返ってきます。 また、 SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 30, 0, szName, sizeof(szName), &sNull); とすると、SQLExecuteもうまくいくのですが、Field1がNULLではなく、 30バイト分半角スペースで埋められたデータが格納されてしまいます。 おそらくSQLBindParameterの8番目のパラメータの指定の仕方がまずいの だと思うのですが、どのようにすればよろしいでしょうか。 分かる方がいらっしゃいましたらお願いします。
誤爆?
.netでの画像の取り扱いについて教えてください。 win32APIでの透過GIFの扱いについてなのですが、どうも上手くいきません。 ググっても本当に情報が少なく困っております。助けて下さいorz
ビットマップのマスク透過じゃいかん? RLE圧縮すれば容量もそこそこ減らせる。 そういう問題じゃないとも思うが。
>>199 さん
画像っていざ本格的に扱うと難しいもので、とても参考になります。有難うございます。
ビットマップ画像の「ビットマップのマスク透過」で検討してみたいと思います。トンクスです。
WaitForMultipleObjects に自動リセットのイベントオブジェクトを指すポインタ配列を渡して "どれか 1 つがシグナル状態になったときに制御が返る"ようにしたとき、 (1) 制御が返ったとき、全ての自動リセットオブジェクトは非シグナル状態にリセットされる (2) 制御が返ったとき、最初にシグナル状態になっていた自動リセットオブジェクトのみ 非シグナル状態にリセットされる (配列の先頭から順にシグナル状態がチェックされるという仮定) のどちらの動作になるのでしょう? ご存知の方、ご教授ください
なぜ試さないの?
使用したclオプションとlinkオプションを取得したいのですがいい方法ありますか? 今は環境変数CL、LINKにオプションをセットしてgetenv_sしてるけど もっといい方法があれば知りたいです。
Visual C++で簡単なゲームのプログラミングをしているのですが、 debugバージョンの時にはちゃんと動くのですが、releaseバージョンの時には ゲームのはじめの画面が少し映ってすぐに終了してしまいます。 なぜでしょうか?
原因はバグです
まず間違いなく自分のバグだ。 初期化してない変数を利用してる可能性が強い思う。 メンバ変数とか忘れがちなので確認してみるといい。
あと自分が経験したのは、配列の領域を超えて書き込みしていたのに Debugビルドではたまたま動いていたが、Releasビルドでは落ちたと いうのがある。 たぶん配列の確保される領域が違ったんだと思う。
境界越えでSEGVとかが投げられるのってレアケースだしな
210 :
デフォルトの名無しさん :2006/03/30(木) 11:17:24
先生!質問です。 CWnd*から、コントロールのタイプ(Static Text, Check Box等)を判別するには、 どのようにすれば、可能ですか?
GetRuntimeClass
それだと一時オブジェクトの場合ダメじゃないか?
サブクラス化されてたら100%判別不可能だな
まあ悪あがきにはなるでしょ。
215 :
210 :2006/03/30(木) 11:39:51
ありがとうございます。
判別したいコントロールは、サブクラス化してないので、
>>211 さんの方法で出来ました。
それでは、あがいてきます。m(_ _)m
禿ヲタなら「そんな設計する方が(ry」っていうんだろうね。
dynamic_cast とか。
RTTIとか
3/32
220 :
デフォルトの名無しさん :2006/03/32(土) 11:27:14
探してもメニューの物だけだったので質問させて下さい。 チェックボックスのオンオフをアクセスキー?でも出来るようにしたいのですが ダイアログの場合だとキャプションで「&A」など指定あげれば勝手に実装されると思うんですが ダイアログでは無くウィンドウ?に表示させてあるチェックボックスをアクセスキーでも切り替え可能にしたいんです 調べてもそんな関数は無いようなので作ってみたのですが チェックボックスが選択中の枠で囲まれていない場合はキーで切り替え可能なのですが(周りの選択枠が出ないでチェックのみ変わります…これが原因の本丸っぽいですが…) 一度マウスで選択したあとでキーで切り替えが出来ない状態です… コードはプローシャ内の上記部分です switch (msg) { case WM_COMMAND: switch (LOWORD(wp)){ case ID_CHECKBOX: break; } return 0; case WM_KEYDOWN: if (GetKeyState(VK_CONTROL) < 0) if (BST_CHECKED == SendMessage(GetDlgItem(hWnd,ID_CHECKBOX), BM_GETCHECK, 0, 0)) CheckDlgButton(hWnd,ID_CHECKBOX,BST_UNCHECKED); else CheckDlgButton(hWnd,ID_CHECKBOX,BST_CHECKED); return 0; 根本から違う気がしますが よろしくお願いします。
読んでないけど コントロールにフォーカスがあるとキー入力はそっちに行ってしまうから キーメッセージをディスパッチする前に処理する仕組みが必要になる。 MFCやATL/WTLのPreTranslateMessageみたいなの。
222 :
220 :2006/03/32(土) 13:16:45
"ディスパッチする前に処理する仕組み"という事で メッセージループの方にWM_KEYDOWNの処理を入れたら出来ました ありがとうございました
プログラムに関する質問ではないんですが 最近久しぶりに.NET 2002でC言語書いてまして エディタで宣言や定義を+-ボタンで折りたためる機能があった気がしたんですが 見当たらなくて、どうやって出すかわからなくなってしまいました 使ってる人少なそうだけどどなたかご存じないですか? (もしかしたら勘違いか気のせい・・・?)
224 :
デフォルトの名無しさん :2006/04/03(月) 23:21:54
はじめまして。Visual C++を勉強して3日目の超初心者です。 データ型に数値を格納する際、オーバーフローというエラーが出てしまいます。 デバックしてみると、変数に「5.011456E+09」が格納されています。 これは指数表記で、5011456000のことでしょうか?
どんなプログラム作ったらそんなエラーがでるか見てみたいな
マルチバイト文字作った奴を殴りたい
_, ,_ パーン
( ‘д‘)
⊂彡☆))Д´) ←
>>227
_, ,_ パーン
( ‘д‘)
⊂彡☆))Д´) ←
>>228
_, ,_ パーン
( ‘д‘)
⊂彡☆))Д´) ←
>>229
ケンカはやめて
_, ,_ パーン
( ‘д‘)
⊂彡☆))Д´) ←
>>231
二人を止めて
_, ,_ パーン
( ‘д‘)
⊂彡☆))Д´) ←
>>234
_, ,_ パーン ( 'Д((☆ ⊂彡 パーン _, ,_ ☆))Д´) ミ⊃ _, ,_ (*))'Д´((*) ハァハァ… 俺に免じて二人ともケンカはやめて
ここで、なんと、 ● 〜▲〜 オデンマ〜ン 登場!!! ■ ハ
_, ,_ パーン ( ゜д゜) ⊂彡☆======● 〜▲〜 ■ ハ
パーン _, ,_ (゜д゜ ) ●======☆ミ⊃ ▲〜 〜 ■ 〜 >>
_, ,_ パーン ( ゜д゜) ⊂彡☆======● 〜▲〜 ■ ハ
パーン _, ,_ (゜д゜ ) ●======☆ミ⊃ ▲〜 〜 ■ 〜 >>
私のために争わないで
もう、何が何だか!?
質問があるんですが、VC++とC++は違うんでしょうか? いやですね、C++を学習するつもりで本を買ったのですがVC++を買ってました。 C++を学ぶならC++のやつを買いなおした方がいいでしょうか? すいませんがあげさせてもらいます
>>243 VC++は、C++言語を使ってアプリケーションを開発する
マイクロソフト製作・販売の統合開発環境ソフトの名称。
マルチだったか。 答えて損した。
>>244 ありがとございます
開発するということなので、どの道C++の知識がないとダメということですよね?
日本語が分からずに日本語の小説かけると思うか?
248 :
デフォルトの名無しさん :2006/04/15(土) 23:22:58
プログラムを組んでいる時に、APIを選択してF1を押すとそのAPIの説明のページが表示されます。 日本語の説明ページがあるのにもかかわらず、英語のページが表示されるのはどこの設定をかえればよいのでしょうか? ずっと悩んでいるのでおねがいします。
>>247 VC++でいいよって言う人もいるんですよぉ
何でもMSを使うからとか何とか。
>>249 「MSを使う」ってなによ?
質問する前に日本語勉強してくれ。
>>249 VC++の本を買っちまったならまずはじめることだな本によってはC++の説明をしながらのものもある。
>>243 の質問と回答って、レンプレ入りしてもいい気がするんだ。
>>248 IDE もしくは Document Explorer の ツール -> オプション -> 国際対応の設定 とか?
.net2003(spoken)を使っていて 猫でもわかるwindowsプログラミングの本の付録についている 何も無いウィンドウを描画するプログラムというサンプルをビルドしました。 2003環境では普通にコンパイル通って問題無いのですが この度2005に移行したら エラー1error LNK2019: 未解決の外部シンボル _main が関数 ___tmainCRTStartup で参照されました。MSVCRTD.lib エラー2fatal error LNK1120: 外部参照 1 が未解決です。C:\Documents and Settings\***\My Documents\Visual Studio 2005\Projects\pra_01\Debug\pra_01.exe というエラーが出てビルド出来ずに困っています。 初心者なのでエラーの意味もわかりませn。ソース見ないとわかんないかもしれませんが…・ 環境移行した理由は学校で使う環境が2005なので合わせる為です。
254 :
デフォルトの名無しさん :2006/04/16(日) 11:56:13
はじめまして。WM_MOUSEMOVEメッセージに関する質問です。 WM_MOUSEMOVEイベントが起こると関数A()が実行されるようにしてるんですが、 A()は処理が重いため、マウスを速く動かすとA()の処理が終わる前に WM_MOUSEMOVEメッセージが更新されてしまい、マウスを速く動かしている間は A()の処理が完了してくれません。 私としては、A()の処理が終わってから 次のWM_MOUSEMOVEメッセージを処理しにいってほしいのですが、 どのようにすれば実現できるでしょうか?
256 :
253 :2006/04/16(日) 15:01:22
>>255 ありがとうございます。
2005で新規プロジェクトを作製し
その後ソースのみのコピーで253の事象が発生するのです。。。
猫さんの所のを見て色々やってみたのですが…うーん
何も無いウィンドウを描画するプログラムなら ウイザードで作ればいい。
>>254 A()を別スレッドで動かさない限り
>()の処理が終わる前に WM_MOUSEMOVEメッセージが更新されて
は起こりえない。
260 :
デフォルトの名無しさん :2006/04/17(月) 22:05:43
>>259 さん
レスどうもありがとうございます。
詳しく調べてみたところ、A()の処理は完了していました。
InvalidateRectのあとに、UpdateWindowを実行していなかっただけでした。
お手数をおかけしました。
261 :
デフォルトの名無しさん :2006/04/18(火) 05:01:53
const array[10]; みたいな事をしたいのですがどうすればいいのですか?
263 :
261 :2006/04/18(火) 11:52:32
>>262 いえ、constで定義されてる物を配列で使いたいのですが
出来なくてこまってます。
ふつうに、const T array[10]とかやれば、array[1]はconst Tになるはずだが。
型をかかずに const array[10] とそのまま書いたに3000点。
ゴールデンハンマー
269 :
261 :2006/04/19(水) 21:17:19
ビンゴー
270 :
デフォルトの名無しさん :2006/04/20(木) 17:41:37
はじめまして。 VC初めて1週間の初心者です。質問させてください。 環境はVisual Studio 2005のVC++MFCです。 @ダイアログを表示する AOKが押されるとHTMLのページを開く(CreateProcess使ってます) B開いたページのテキストボックスに自動的に文字列を入力する ※HTML側の設定でテキストボックスにフォーカスが当たった状態になります。 ※文字列はプログラム内で固定で持っているものを使います。 上記のようなことを行いたいと思っているのですが、 Bのやりかたがわかりません。 どのような関数を使えばよいのか教えてください。 よろしくお願いします。
自分でHTML取ってきてフォーム解析して自分でテキストボック表示して そこにテキスト表示した方が100倍ぐらい楽だと思う。 とりあえずそれやってみろ
自動ログインプログラムを書きたいようにも見える
273 :
270 :2006/04/20(木) 19:19:38
>>271 実はそれも作ってあるのですが、
そのページでログインした後にもう一回パスワード入力画面が出るような作りで、
その2枚目に自動入力させるようなものが作れないかなと思いまして。
>>272 そうです。
その練習として作っています(;´Д`)
ログインでユーザ名とパスワード入力するのまんどくせーから自動化しろ言われてまして。
firefox使えあと氏ね、とか答えてあげてください(w
275 :
270 :2006/04/21(金) 12:03:36
一応、自己解決しました。 SendInputでそれっぽいことができましたので、 勉強してみます。 ありがとうございました。
276 :
デフォルトの名無しさん :2006/04/23(日) 15:45:42
VS8を使っていますが、どうしても解決できないので教えて下さい。 CDialogを継承したCLinkDlgというクラスを作っていますが、 下記のエラーがでて、コンパイルが通りません。 エラー 1 error C2248: 'CObject::CObject' : private メンバ (クラス 'CObject' で宣言されている) にアクセスできません。c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxcoll.h593 (出力の内容) c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxcoll.h(593) : error C2248: 'CObject::CObject' : private メンバ (クラス 'CObject' で宣言されている) にアクセスできません。 c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(553) : 'CObject::CObject' の宣言を確認してください。 c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(524) : 'CObject' の宣言を確認してください。 コンパイラでのこの診断により関数 'CStringArray::CStringArray(const CStringArray &)' が生成されました。 どうもコンストラクタがあやしいようです。 このクラスにCStringArray型のメンバ変数があり、初期化でひっかかるようなのですが。。。 やりたいことは、CStringArray型の変数を作成中のLinkDlgに渡すといったことです。 以下がソースになります。 宜しくお願いします。 (CLinkDlg.h内) public: CLinkDlg(CWnd* pParent = NULL); // 標準コンストラクタ virtual ~CLinkDlg(); CLinkDlg(CWnd* pParent, CStringArray& nameList , CStringArray& idList); CStringArray m_idList; CStringArray m_nameList; (CLinkDlg.cpp内) CLinkDlg::CLinkDlg(CWnd* pParent /*=NULL*/) : CDialog(CLinkDlg::IDD, pParent) {} CLinkDlg::CLinkDlg(CWnd* pParent, CStringArray& idList, CStringArray& nameList) : CDialog(CLinkDlg::IDD, pParent) ,m_nameList(nameList),m_idList(idList) {}
>>276 CStringArrayにはコピーコンストラクタが無いので、デフォルトのコピーコンストラクタが生成される。
その過程でCStringArrayの基本クラスCObjectのコピーコンストラクタを呼び出す事になるが
privateなのでアクセスできない。
よってエラーとなる。
278 :
デフォルトの名無しさん :2006/04/24(月) 01:31:30
>>277 ありがとうございました!
解決できました。
全く見当違いな質問だったらすいません。 VC6.0でwindows.hをインクルードして使えるようになる関数って、 プラットフォームSDKの関数なんですか?
280 :
デフォルトの名無しさん :2006/04/24(月) 14:34:01
はじめまして、.net 2003で開発している者です。 MSNメッセンジャーやout look,skypeのように、デスクトップの右下のタスクトレイの上部に アラートポップアップみたいなウィンドウを出したいのですが、どのように行っているのでしょうか。 MSNメッセンジャーで"○○がサインインしました。"と通知がでるウィンドウです。 調べてみましたが、調べるためのキーワードすら分からなかったので、 宜しくお願いします。
バルーンとかツールチップのことか?
282 :
280 :2006/04/24(月) 15:21:03
>>281 レス、どうもっす。
ツールチップでウィンドウ型のGUIが実現できるのですか??
MSNメッセの場合、×ボタンやオプションボタンがバルーン内に配置されているのですが。
283 :
281 :2006/04/24(月) 15:26:28
キーワードをあげただけ、詳細は知らない。 昔はツールチップを自作してたやつもいたような気がする。
284 :
280 :2006/04/24(月) 15:30:41
ありがとうございます。 ツールチップ、もう少し調べてみます。
フォームでボタンを一個作り、そこを押すとwavを再生するようにしたいのですが・・・ private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { sndPlaySound("J:\asfd\Win.wav",SND_ASYNC); } 上記の場合だと Form1.h(159) : warning C4129: '' : Form1.h(159) : warning C4129: 'W' : エスケープ シーケンスとして正しく認識されませんでした。 Form1.h(159) : error C2065: 'SND_ASYNC' : 定義されていない識別子です。 Form1.h(159) : error C3861: 'sndPlaySound': 識別子が見つかりませんでした こんな感じで怒られてしまいます。 環境はVisualStudio 2005で Winmm.libはリンカに追加済みです。 ちなみにMMsystem.hをインクルードするとかなりの数のエラーが発生してしまいました。 よろしくお願いします。
これはこれはご丁寧に、こちらこそよろしくお願いします。
288 :
285 :2006/04/24(月) 22:00:09
>>287 ありがとうございました。エラーは減りましたが下記エラーが表示されたままです。
Form1.h(159) : error C2065: 'SND_ASYNC' : 定義されていない識別子です。
Form1.h(159) : error C3861: 'sndPlaySound': 識別子が見つかりませんでした
どうみてもインクルードの問題ですよね…
でもmmsystem.hをインクルードすると88個エラー出ちゃって うーん
#include した場合に発生する問題を解決する方法は考えんのか。
290 :
285 :2006/04/24(月) 23:42:35
SoundPlayer を別に使ってみたところ、インクルードも何もなしで使えました 2005はよくわかりませんが、一応巧く動いてくれたので終わりということで ありがとうございました。
VC++6.0でbzip2のlibを静的リンク?とかいう DLLを呼び出さなくて良いのにビルドしたいのです。 どうやればいいのでしょうか?
そのbzip2とかいうものの .lib と .h を探して、それらをプロジェクトに追加してみたら。
失礼、ちゃんと理解してませんでした。 スタティックリンクライブラリのLIBを生成する為には どうしたらいいかを教えて頂きたいのです。
普通のライブラリの作り方と同じ DLLの方が特殊なやりかた
そのやり方が…どこか参考になるサイトとかあれば良いのですが…。
bzip2ならWin用スタティックLIBもどこかに転がってた希ガス。 少なくともCygwin用はあったが……
散々探したのですが見つかりませんでした。 スタティックでない方ならあったのですが…。
オープンソースだからソースからビルド でもスタティックリンクするとソース公開しないとだめだろ そういうことで普通はDLLにするんだな
>>298 BSDスタイルだから公開する必要ないでしょ。
DLLの場合免れるのはLGPLで、
GPLだったらDLLにしても避けられないし。
>>293 コマンドプロンプトでbzip2のフォルダで
"C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"
nmake -f makefile.msc
インストール先変えてるならパス変えてね。
てかさぁ、ビルドの仕方READMEに書いてあるんだけど???
まさか、READMEも読まずに、VC++の.dspファイル開いて、
DLLでしかビルドできませんとかほざいてるわけじゃないよね?
エディットボックスとOK・キャンセルボタンだけのダイアログを作りました。 OKボタンはDefault ButtonをTrueにしてます。 エディットボックスにカーソルがある状態で、Enterを押すとOKボタンが反応するようにしたいです。 DialogBox()だと、思ったとおりの動作になるんですが CreateDialog()だとEnterを押してもBEEP音が鳴るだけです。 CreateDialogでも期待通りの動作をさせることはできますか? DialogBox()ではメインの処理が止まってしまうので困ってます。
ID_OK
IsDialogMessageしてないとか
>303それでした。 お手間取らせてすいません。ありがとうございました。
305 :
デフォルトの名無しさん :2006/04/29(土) 23:34:59
VC++6.0で、プログラム行数が多くなると(と言っても5000行超え程度)、 エディタの動作がものすごく重くなるのですが、こういうものなのでしょうか?
1ファイルに5000行も書くなバカ。
俺には見える… スパゲッティコードが…
VC++6で重いなんて初めて聞いた
>306 500ファイルも作るなバカ。
311 :
デフォルトの名無しさん :2006/04/30(日) 16:16:32
インラインアセンブラで質問なんですが asm,_asm,__asmの違いって何なのでしょうか?
_の数じゃないかな。
最近、VC++6.0を使いはじめた初心者です。 あるファイルで使われている変数の中身を、違うファイルで使いたいのですが、 どうすれば値の引渡しができるんでしょうか?
#include
>>311 asmがISO C++でのキーワードだけどVC++では対応していなかった気がする。
_asmと__asmはVC++の独自拡張。どっちも同じだから好きなほうを使え。
316 :
311 :2006/04/30(日) 19:04:05
>>315 そういうことですか。
レス有難う御座いました。
ダイアログではなくウインドウに EDIT コントロールを WS_CHILD で生成した際に、現在のシステムに設定されているフォントサイズに応じて、EDIT コントロールの高さを設定するには、どのようなパラメタを見たらよいでしょうか。 現在は EDIT コントロールの DC から GetTextMetrics( ) を使って TEXTMETRIC 構造体の tmHeight メンバと、GetSystemMetrics( ) から取った SM_CYBORDER * 2 を使っていますが、サイズがズレているようです。
>>317 AdjustWindowRectを使ったらどう?
tmHeight 高さ でぐぐったらそれらしきのが見つかるけど
320 :
317 :2006/05/01(月) 12:50:54
>>318 ,319
レスありがとうございます。
1) GetTextMetrics( ) から tmHeight でフォントの高さを取得
2) GetSystemMetrics( ) から SM_EDGE で EditBox 内側の幅を取得
3) AdjustWindowRect( ) あら WS_BORDER で外側の枠線幅を取得
この 1) 〜 3) の値を足すと Just になりました。
GetSystemMetrics( ) で SM_EDGE と SM_BORDER 両方を取得すれば
AdjustWindowRect( ) は不要になるかもしれません。(未確認
初心者的質問でもないのですが、どこに投稿すべきかわからないのでここに。 IEでpdfとか開くとAcrobat ReaderプラグインがIE上で開きますよね? ああいうプラグインってどうやって作ればいいのでしょう。 何がやりたいかというとbbs2chreaderのIE版みたいなのを作りたいのです。 2chの板やスレのURLを開こうとしたら自作の2chビューワープラグインに渡すイメージです。
お前には無理だと思う
同意
ATL COM で作るんだっけ?
ネットワークがらみのコードを書いているんですが、 ISO-2022 <-> Unicode な変換をする Windows API もしくはライブラリはありませんか? #フリーで配布する予定なので、ライブラリの場合はライセンス的に問題のないものが良いです。GPL, BSD2, etc..
327 :
326 :2006/05/07(日) 17:43:28
引き続き調べてみると
HRESULT ConvertINetMultiByteToUnicode(
LPDWORD lpdwMode,
DWORD dwSrcEncoding,
LPCSTR lpSrcStr,
LPINT lpnMultiCharCount,
LPWSTR lpDstStr,
LPINT lpnWideCharCount
);
Requirements
OS Versions: Windows CE .NET 4.0 and later.
Header: Mlang.h, Mlang.idl.
Link Library: Mlang.dll.
が使えそうなので、MLang.h を include して
DWORD dwMode = 0;
ConvertINetMultiByteToUnicode( & dwMode, 50932, jisdata, nJSize, ucdata, & nUSize);
のようにしてみましたが
error C3861: 'ConvertINetMultiByteToUnicode': 識別子が見つかりません
となるようです。
(参考にしたURL)
ttp://www2d.biglobe.ne.jp/~msyk/cgi-bin/charcode/bbs.cgi?c=gr&n=211 ttp://www.kaede-software.com/2005/01/libiconv.html MLang.h を include する以外にコード的になにか必要なのでしょうか。
(MLang.hの存在とAPIの宣言は確認しました
329 :
321 :2006/05/08(月) 01:01:28
>>325 IE7入れたら設定のところで各機能拡張が何でできてるか見られますね。
AdobeとかはActiveXですね。
なんにせよ、できなくはなさそうなので、頑張ってみます。
330 :
デフォルトの名無しさん :2006/05/10(水) 18:42:36
ポインタとstaticがよく分からないのですけども staticのメンバを使えなくて困ってます。 class hoge { public: static char* str; hoge() { str = new char[10]; } ~hoge() { delete[] str; } }; これは通るのですけども、ヘッダとして以下のように分けると LINK2001:外部シンボル""public static char* hoge::str"(?str@hoge@@2PARA)"は未解決です。 LINK1120:外部参照1が未解決です。 と出てしまいます。 class hoge { public: static char* str; hoge(); ~hoge() { delete[] str; } }; hoge::hoge() { str = new char[10]; } ビルドはVS2003です。staticでなければ行くのですけども。 何が原因でしょうか?
str = new char[10]; これをコメントにすれば通るんじゃないか?
ああそうか上は通るのか
>>330 クラス内の静的変数の宣言はあくまで宣言でしかない。
普通のグローバル変数のようにどこかで定義をする必要がある。
どっかで、hoge::strを定義しろや。 上が通るようにみえるのは、リンカがclass hogeのコードを最適化で リンクしなかったからじゃねーの。
そして hoge クラスのインスタンスを2つ作ってあぼーんするわけだな
質問します 座標が与えられている(x1,y1)をa (x2,y2)をb ab間に線を引くとして、このabの線の長さを求める式はどのようにしたらいいでしょうか?
スレ違い
>>336 ここはおこちゃまの数学講座じゃないんだが。
ま、hypot()でも使っておけ。
>>338 ありがとうございます!
これで三角形の面積のプログラムがかけれます!
日本語も怪しいな
341 :
330 :2006/05/11(木) 10:02:12
クラスの外で char* hoge::str; を定義したらできるようになりました。 ありがとうございました。
342 :
デフォルトの名無しさん :2006/05/12(金) 19:09:25
ウィンドウのクライアント領域のみを半透明で表示したいのですが、 SetLayeredWindowAttributesを使って半透明表示すると、ウィンドウ 全体が透過されてしまいます。 タイトルバーや枠線など非クライアント領域はそのまま表示し、 クライアント領域のみ半透明にするには、どのようにしたらよいのでしょうか?
UpdateLayeredWindow
MFCのCHTMLEditViewみたく、HTMLファイルをプレビューしながら編集する機能を MFC使わずにSDKで作るにはどうすればいい? 検索ワードだけでも教えてけれ。
ActiveXをSDKだけでホスティングするのは骨だと思うよ。
そうですよね。 ATLを使って作る、の間違いです。 いずれにせよ骨が折れるのは変わらなさそうだけど。
>>347 そこまでわかっているなら検索ワードとか必要ないと思うけど。
---------------
自分で構文解析しながら、なんちゃってプレビューって言う手もあるよ。
質問です。 GDI+ のスレが見つからないのですが、GDI;+ に関してです。 画面上の 1pixel のみに点を打つ関数がみあたらないのですが、 ひょっとして無いのでしょうか? 宜しくお願いします。
350 :
デフォルトの名無しさん :2006/05/14(日) 12:02:51
関数内で意図的にthrowしている部分があるのですが、 デバッグモードで動かすと、デバッグウインドウに 「xxx.exe の 0x7c81eb33 で初回の例外が発生しました : Microsoft C++ exception: bool @ 0x05b9fe53。」 というメッセージが表示されてウザいです。 これを表示させなくする方法はありますか? IDEはVisualC++2003です。
おまえの質問がうざい
どこで質問して良いか迷ったのですが、 レジストリを変更せずにデフォルトの状態で カレントフォルダのDLLを優先して使用するようにすることは どうにかして出来ないのでしょうか? 強引な方法でもかまわないのですが… 何かありましたら教えていただけないでしょうか? 開発環境はVisual C++ .NET 2003です。 よろしくお願いします。
そのDLLと同名のDLLを予め削除しておく。
カレントフォルダに置いたつもりで実はそうじゃないとか
自分で作るプログラムならどうにでもなるはずだが
357 :
353 :2006/05/14(日) 17:01:38
>354 削除はちょっと出来そうにないDLLで… >355 実行ファイルと同じ所において直接実行しているので 間違い無いと思います。 >356 すいません説明不足でした。 自分で作るプログラムではなくて、 他のアプリケーションが呼び出しているDLLの関数の動作を変えたいのです。
それができるとウイルスが作れそうだね
>>357 参考までに言っておくと、DirectXSDKについてるD3DSpyは
対象アプリのカレントにd3dspy9.dllをd3d9.dllにリネームして配置している。
360 :
353 :2006/05/14(日) 18:42:17
>359
ありがとうございます。
試しにDirectXを使っているアプリのディレクトリに「d3d9.dll」を
コピーしてみたところ確かに呼び出しているDLLはカレントディレクトリのものになりました。
ところが同じアプリの他のDLL、たとえば「gdi32.dll」をコピーしてみてみたところ
カレントディレクトリのものをロードしてくれませんでした。
呼び出しているDLLの確認には「Dependency Walker」を使っているのですが…
この違いは何からきているのかわかりませんでしょうか?
WindowsXPだとデフォルトで
System32フォルダ→Systemフォルダ→Windowsフォルダ→プログラム本体があるフォルダ
の順でDLLを探すとあったのでどういう優先順位なのかがよくわかりません…
http://takuki.com/dennou/120-madotsukai.htm
マニフェストファイルちゅーのが必要なのだよチミ
>>360 gdi32.dllなんかは常にシステムフォルダのものを使用するようレジストリに記載されている。
(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs)
363 :
353 :2006/05/14(日) 23:31:32
>361 マニフェストファイル…調べてみて「****.exe.manifest」ファイルを適当に書いてみたところ どうやら目的のファイルをロードできるようになったようです。 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <file name="********.DLL" hash="DLLファイルのSHA1ハッシュ値" hashalg="SHA1"/> </assembly> と言うように書いたのですが、assemblyIdentityなども必ず記述しなくてはいけないのでしょうか? いまいちnameやらpublicKeyTokenの値の書き方がよくわかりません。 もう少し調べてみることにします、ありがとうございました。 >362 KnownDLLsで検索してみたところ色々と情報が見つかりました。 なるほど、逆に言うとKnownDLLsに書いてあるDLLをコピーして別に用意するというのは危険なのでしょうか? なかなかうまくいかないものですね…
微妙に空気が違うがちょっと教えてくれ。 久しぶりにw2kをインスコして、VC6.0+MSDNもぶちこんだんだが、VCからMSDNを起動しようとすると、 ヘルプを表示出来ません。 必要なファイルが見つかりません。 インストールをやり直してください。 こんなことになる。何度再インスコしても同じ。普通にスタートメニューからなら、MSDNも起動するんだが。 むかーーーし昔にもなった気がするが、何とか治した気がするが、今回はどうにも治らない! 解決法知ってる人、手ぇ貸してくださいorz
ヘルプのパスを設定すればいいんじゃないか
どこで設定するのだろう! いやさっきから色々やってんだけど(´・ω・`)みつからんでね
>>367 なるほど、どうやらウチの場合、VC++のインスコでアレされている可能性がナニそうだね。
いい加減6.0も古いからなぁ。学生はいいなぁアカデミックエディション・・・・・・・
という訳でがんばってみます。ありがとう!
素早く後日談 アンインスコして再インスコしても駄目(´・ω・`)駄目だこりゃ 何とかしてアカデミックパックを仕入れる事に決定!
割れ厨は氏ね
ちゃうがな。学生親戚頼り厨やがな(´・ω・)
君にはライセンスが無いんだから、いくら金払ったとしてもワレと同じだろw
ぇーやっぱだめー? 取り敢えずしかるべき物を熟読して、何とか合法な道を探そう(w
>>373 どうあがいても無理だろww
そういや学生の時にアカデミックライセンスでVS買った場合って
卒業した後はどうなるんだ?
素直にexpressからのアップグレートでVS2005買っとけ
くう・・・・あの頃に戻りたいぜ! ええっと、19800円? 出せる金額では有るがなんか悔しいwwwwwwww
>>376 そうなのか、thx
もっとも卒業まで最短でも後3年あるし、それまでにはC++0xのが出るだろうから
どうせ買うことになるんだろうが・・・
379 :
364 :2006/05/19(金) 19:24:24
DirectX9.0の最新SDKは、 .NET 以降の環境でないとインスコ出来ない、 と言う認識でいいのでしょうか。8.1は問題が無かったのですが。
>>379 俺は普段からVC6使うときにMSDNは別に起動するが、IDEから起動しなくてはならない理由って何?
これ知らないで人生無駄にしてるやつがいたとは
IEでは左上の’戻る’ボタンを押せば戻れるのに、5ボタンマウスを使う理由って何? ソフトウェアキーボードが有ればマウスで文字が打てるのに、わざわざメカニカルキーボードを使う理由って何? バイナリエディタが有ればexeなんて書けるのに、わざわざCコンパイラを使う理由って何? こりゃ極端な例だが、まあ、微妙にだが、手間が、違う、のだろう。
>>384 キーワードを見に行ってくれちゃうお茶目なF1キーのことか?
何より一番の手間はやっぱり、これまでのスタイルをかなり変えないといけない、って点なんじゃないですか。 キーボードのAとBが入れ替わってしまったら、とか考えると、ぞっとしますね。 人には人の価値観が有りますから、そっとしておいてあげましょう。
VB を起動して見れ
>>388 ありがとうございます。
VBはちゃんとSP6と表示されてました。
390 :
デフォルトの名無しさん :2006/05/24(水) 19:41:19
すみませんが質問です。 VB++で開発をやることになったのですが、 試験ツールを調べるように言われました。 有料無料一切関係なく、調べ上げろと言われたのですが、 DevPartnerというソフトしか見つかりませんでした。 他に普及しているソフトなどはありますか? よろしくお願いします。
進化したなVB…
392 :
390 :2006/05/25(木) 01:32:03
すみません。
>>390 です
VB++って・・・
VC++の間違いです・・・orz
394 :
デフォルトの名無しさん :2006/05/25(木) 16:15:14
VB(6)のActiveX DLLをVC(6)で使用して不具合が発生しました。 なぜなのか誰かご教授下さい。WinXP 以下が詳細です。 ---------VB側--------- Public Type Test a As Double b As String a As Double End Type Public Function TestApi( ByRef Buf As Test ) Buf.a = 1: Buf.b = "TEST": Buf.c = 2 End Function ---VC側---- #import でVB DLLのタイプライブラリ情報読み込み、 Com関連初期化してインターフェース取得後以下のように上記関数呼び出し Test tTest; memset( &tTest, 0, sizeof(tTest) ); pTest->TestApi( &tTest ); 以上で、tTest内容のa, bはVBで設定した内容となっているが、 cが不定のめちゃくちゃな値になっている。 なぜcが2にならないのでしょうか??
VB知らんけど間違ってるように見える たぶん間違いだろう
396 :
394 :2006/05/25(木) 16:44:26
・・・・・・・・訂正です^^;; Public Type Test a As Double b As String c As Double End Type
cが無茶な値、というのはVBで確認したの?
398 :
394 :2006/05/26(金) 09:18:29
>>397 VBの関数終了直前ではcには2が入っていて、
VCに戻ってきてすぐ構造体の中を見たらcがめちゃくちゃな値に
なっていました^^;
ActiveX DLLとCとの間の変換?かなにかが悪さをしているのでしょうか?
winsockでネットワークソフトを作成するときに、サーバー側のソフトをVisual Cで作成して クライアント側のソフトをVisual Basicで作成するという事は可能ですか? 具体的には、Visual C側のソフトでlisten関数で待ち続け、Visual Basic側のソフトで connect関数で接続することは可能ですか?どなたか教えてください。m(_ _)m
VCで確認したの?VBでつくられたActvieXオブジェクトを構造体と見立てて? その構造体はどこから出てきた?
>399 VC側でacceptで待ち続けないと接続はできない。
>>401 お返事ありがとうございます。listenで待てばいいと思っていたのですが、
acceptで待ち続けるが正解だったんですね。ということは、言語が違って
いてもサーバーソフト(Visual C) と クライアントソフト(Visual Basic)の接続
は可能だと言うことなんですね。ありがとうございました。m(_ _)m
インターネットの仕組み
404 :
390 :2006/05/27(土) 05:59:40
>>393 ありがとうございます。
BoundsCheckerもDevPartnerシリーズ(?)のですよね。
やはりそれしかないんですかね・・・
405 :
390 :2006/05/27(土) 06:00:14
>>393 ありがとうございます。
BoundsCheckerもDevPartnerシリーズ(?)のですよね。
やはりそれしかないんですかね・・・
VCを使って、ソースファイルを追加しデバッグをしようとしたのですが、 「シンボル情報がありません。」 と出て、デバッグができませんでした。 これを対処するにはどうしたらいいんでしょうか? ビルドは成功して、エラーはなかったみたいなんですけど・・・
408 :
デフォルトの名無しさん :2006/05/31(水) 19:02:56
デバッグビルドであるかを確認。 それでもダメなら /ZI あたりを調べれ
質問なのですが、子ウインドウ生成ってどうやるんですか?
411 :
デフォルトの名無しさん :2006/06/01(木) 20:26:37
質問です、最近学校でプログラムを始めたばかりの者ですが、 学校ではVisualStdio.Net2003でプログラミングしたものを 家の2005で開くと、ビルドエラーがおきて実行できないです。 変換画面が現れて、正常に変換が終了しました。とメッセージも出るんですが。 何回やってもビルドエラーが出ます、2003では間違いなく動くんですが 例えばただの #include <stdio.h> main() printf("Hello"); ↑これだけの物もビルドエラーが出てしまいます。 一体なぜなのでしょう
初心者未満はお帰りください。
413 :
デフォルトの名無しさん :2006/06/01(木) 21:11:21
学校の授業でC言語のプログラミングがあって 家でも練習したいんですが、コンパイラとか実行させるソフトとかって どこで何を手に入れればいいんでしょうか? 学校はLinuxですが、家ではWindowsです。 教えてください。
>>413 コンパイラにVisual C++を使いたいというわけではなさそうだな。
Cygwinなら、Windows上でUnix風の(ということはLinuxにも近い)環境が再現できる。
学校でやるのと忠実に操作感を再現したいわけではなければ、Visual C++も悪くない。
すれ違いだから、こんなスレで聞くよりよそで聞いた方がずっといいと思うぞ。
学校の先生か友達に聞けばいい
>>414 そうですか
操作とかは別にいいです。
プログラムを作ってコンパイルして走らせてそのとおりの結果が出る・・・というのができればいいんです。
Visual C++とか調べてみます。
>>415 そこまで詳しいやつがいない
「自分はどうでもいい」的な人ばっかりなんで
CComBSTRについて教えてください。 UNICODE環境で CComBSTR strA( "あいうえお" ); で生成した文字列から前から"うえ"の部分文字列をコピーしたい場合 CComBSTR strB( 2 , strA + 2 ); と書いてよいのでしょうか? printfで標準出力した結果を見ると問題ないようです しかし、CComBSTRクラスに対して+UNICODE2文字バイトずらすという行為は 本来NGだと思うのですが・・・ 個人的には下のどちらかを利用したいと考えています。 CComBSTR strB( 2 , strA.m_str + 2 ); CComBSTR strB( 2 , (BSTR)strA + 2); すみませんが詳しい人教えてください。
>>417 CComBSTR strB(2 , strA + 2);
これで平気。
CComBSTRはBSTRへの暗黙の変換があり、
BSTRは単なるOLECHARへのポインタとして扱えるから、
CComBSTR(int, LPCOLESTR);のコンストラクタが呼ばれ、新たなBSTRが作られる。
あと、BSTRをリテラルから構築するつもりなら、L"あいうえお"で初めからワイド文字にしておくほうがよい。
419 :
デフォルトの名無しさん :2006/06/02(金) 22:48:20
XP、VC2005で作業をしています。 2003でコーディングしたソースを実行すると、 ファイルをオープンする箇所で、 文字化けをしてパスが正しく取得できていません。 ちなみに、英語のみでのパスだとファイルをオープンします。 すみませんが、詳しい人適切な方法をよろしくお願いします。
構成プロパティ 全般 文字セット マルチバイト文字セットを使用する
421 :
デフォルトの名無しさん :2006/06/02(金) 23:29:58
>>422 プロパティの設定は確認して、マルチバイト文字をセットするに
なっていました。
CString path;
ifstream is(path);
if(!is)
return;
でリターンされてしまいます。
422 :
デフォルトの名無しさん :2006/06/03(土) 00:03:18
初めまして。 基礎的なことですが、Visual C++6.0(MFC)でわからないことがあったので質問させていただきます。 ダイアログボックスの中に簡単な線を描画したいと思っています。 一般的なウィンドウ上であれば、OnDraw関数において例えば Cpoint Line[2]; CPen lPen; Line.x[0] = 0; Line.y[0] = 0; Line.x[1] = 100; Line.y[1] = 0; lPen.CreatePen(PS_SOLID, 3, RGB(0, 0, 0)); oDC->SelectObject(&lPen); pDC->PolyLine(Line, 2); とすれば、長さ100太さ3の直線が引けます。 しかし、ダイアログボックス上において線を引く際に、線は引けるのですが、 lPen.CreatePen(PS_SOLID, 3, RGB(0, 0, 0)); 、pDC->SelectObject(&lPen); のような機能を持った関数(?)が見つからないために、太さ1のペンでしか 描画できずに困っています。(というのも、CDCクラスの使い方がわからない?) ダイアログボックス上に自由自在に破線を引いたり、太さを変えた線を引きた いと考えています。 どなたか詳しい方がいらっしゃったら、ご教授ください。
Windowsの描画の仕組み(デバイスコンテキスト)を理解しよう。
>>422 OnPaintでやってみたが普通に太さ3になったがな?
下のコードはデフォで出来てるCAboutに書いてみたコード
void CAboutDlg::OnPaint()
{
CPaintDC dc(this); // 描画用のデバイス コンテキスト
CPoint Line[2];
CPen lPen;
Line[0].x = 10;
Line[0].y = 90;
Line[1].x = 120;
Line[1].y = 90;
lPen.CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
dc.SelectObject(&lPen);
dc.Polyline(Line, 2);
}
> 線は引けるのですが
どうやって引いたの?
425 :
デフォルトの名無しさん :2006/06/03(土) 01:20:32
f (x) = cos (x) - x2 = 0 の根のうち、0 < x < 1 を満たすものを2分法で求める 初期値 a, b が入力でき、 6桁推定された解と関数 f (x) を呼びだした回数を出力する方法を教えてください。
スレ違い
427 :
デフォルトの名無しさん :2006/06/03(土) 23:39:29
428 :
デフォルトの名無しさん :2006/06/04(日) 17:34:57
430 :
デフォルトの名無しさん :2006/06/04(日) 19:21:27
Visual Studio 2003でMFC使ってダイアログ作ってます ダイアログ内のコントロールの初期化は OnInitDialog、OnCreate のいずれで行うものなのでしょうか? ヘルプには下記にように書いてありましたが、使い分けが、いまいちわかりませんでした OnInitDialog このメッセージは、Create 関数、CreateIndirect 関数、 または DoModal 関数が呼び出されている間に、ダイアログ ボックスの 表示直前にダイアログ ボックスに対して送られます。 OnCreate ウィンドウが作成された後で、それが可視状態になる前に、 新しい CWnd オブジェクトはこの呼び出しを受け取ります。 OnCreate は、Create または CreateEx メンバ関数から戻る前に呼び出されます。
ダイアログベースならOnInitDialogを使うのが普通 ダイアログ以外はOnInitDialogは使えない。
>>430 ダイアログ内のコントロールはOnInitDialogでやる。
434 :
デフォルトの名無しさん :2006/06/11(日) 11:23:27
sz−−−−−−−−−−−−−−− Cドライブ検索しても user32.libが蜜からねぇぇl−−−−− どこいったんだー!
PDKにあったぜぇぇl!!
マルチバイトオンリー野郎にUNICODE/マルチバイト兼用コードの書き方を教えて下さい。
_stprintf()を使おうとすると、「warning C4996: '_swprintf' が古い形式として宣言されました。」と怒られます。
要はsprintf()を使いたいのですが、正しくはどうすりゃいいのでしょうか。
VC8EEでtchar.hはインクルードしてあり、プロジェクトの文字セットは取り敢えずUNICODE(デフォルト)にしてあります。
http://www.246.ne.jp/~y-ookubo/program/tips/unicode.html ここを参考にしたのですが…他に良いとこあったら教えて下さい。
その警告は、_stprintf_sを使え、という意味。
>>438 直りました、有難うございます。
この辺を解説したリンクってないすかね。
tchar.hを嫁ってのはカンベン
visual studio 2003 で本にある演習の階乗を計算するプログラムを作ろうとしていて for next文を使うということは分かったんですが、そのあとが全くと言っていいほど分かりません。 どなたかご教授お願いします。
宿題スレへ
for nextって何? nの階乗 int f=1; for(int i=1; i<=n; i++) f *= i ;
444 :
441 :2006/06/11(日) 19:28:10
スレ汚し申し訳ありませんでした 宿題スレ行ってきます
Visual C++ 2005でプログラムをコンパイルしたとき、LIBC.libが無いって怒られるんだけど... VC++2005のインストールフォルダを全部検索したけどLIBC.libが入ってない。 もとから入ってないの?
>>445 無い。
シングルスレッド用のランタイムは無くなった。
447 :
デフォルトの名無しさん :2006/06/12(月) 15:16:32
VC++ 2005 Express Edition をインストールして、C++ の勉強中です。 新しいプロジェクトで、Windows フォームアプリケーションを選択すると、 Form1 という名前で生成されてしまいます。 この Form1 っていう名前を変えたい場合は、どうすればいいのでしょうか? Form1 のプロパティ->デザインに、(Name) っていうのが無いので、どう すればいいのかわかりません。表示される文字列は、表示->Text で変 更できたのですが・・・・。
VC++6なんですが TRUEとtrueはどう違うんでしょうか? ヘルプ見てみたんですがTRUEに関しては JavaのTRUEの説明しかなかったです
trueはC/C++言語のキーワード TRUEはWindowsSDKで#defineされているもの
450 :
448 :2006/06/14(水) 13:52:42
>>449 ありがとうございます
#define TRUE 1;
だったのですね
>>449 Cでは(たとえC99でも)trueはキーワードではない。
VC++.NET2003でMFC使っています。 チェックボックスの見た目をボタンにし、 ONならONの画像 OFFならOFFの画像をボタンに表示したいのですがうまくいきません。 具体的に以下をやってみました。 @チェックボックスのプロパティにあるPush LikeとBitmapをTrueにする ASetCheck関数で値をセット(TRUEorFALSE) BSetBitmapで画像をセット SetCheckが無視されているようなのですが 何か良い方法をご教示願えませんでしょうか?
@チェックボックスのプロパティにあるPush LikeとBitmapをTrueにする ASetCheck関数で値をセット(TRUEorFALSE) ここまでやってみたら問題なく動く
まさか、画像を一種類しか用意していないって落ちか?
455 :
452 :2006/06/16(金) 20:33:11
自己解決しました。 AでTRUEorFALSEをセットせずに GetCheck()で判定するだけでよかったみたいです。 AでTRUEorFALSEをセットするとGetCheck()は常に0となってしまいます。
456 :
デフォルトの名無しさん :2006/06/24(土) 19:31:38
VC++.NETをはじめたばかりの者ですが、charやint等のように CString a; と宣言しても ----------error---------- 'a' : 定義されていない識別子です。 'CString' : 定義されていない識別子です。 ';' が、識別子 'a' の前に必要です。 とエラーが発生します。 他にSYSTEMTIMEなどもすべて同じようなエラーになるのですが、何か足らないものがあるのでしょうか?
>>456 適切なヘッダをincludeしたのか?
D&Dしたフォルダのパスをファイルへ書き込み、 2回目以降実行したときにそのファイルからパスを読み込みたいと考えています。 しかし、以下のコードでは「"C:」までしかファイルに記録されません。 自分で調べた限りではfgetsを使えばスペースや予約文字も関係ないとは思うのですが。 どうかご教授お願いします。 void get_pass(char savefile[],char pass[]) { FILE *file; if((file = fopen(savefile,"r")) == NULL) { fgets (pass, sizeof (pass), stdin); file = fopen (savefile, "w"); printf ("%s" ,pass); fprintf (file,"%s" ,pass); fclose (file); } else { fgets (pass ,sizeof(pass) ,file); fclose (file); } } void main() { char monopass[256]="",filename[]="logpass.txt"; get_pass(filename,monopass); }
そりゃそうだろうよ。
>>458 その場合、sizeof(pass)はsizeof(char*)と等価である。
>>460 ありがとうございます。サイズも外部から渡すようにしたら上手くいきました。
パスのスペル間違っていた。恥ずかしいorz
VC++.NETで開発している初心者です。 フォームを作成してForm1.hというファイルができあがり、そのファイル中にコードを記述しているのですが、 ネットや、この掲示板、参考書を見るかぎり、やってること(書いてる場所)が全く違う気がして疑問に思っているのですが、 VC++.NETで開発する際、実際にコードを打つファイルはForm1.hではなく、別の.cppファイルを作成して それをForm1.h側から参照するようにするのが普通なのでしょうか?
とりあえず本でも買って読め
VC++ Express Editionで、本格的なWindowsプログラミングって できるのでしょうか? やはりダイアログやメニューの作成なんかでは、エディタがないと 厳しいですか?
最初はやりたいことが出来なくて、もどかしいと思うけど テンプレで紹介されてるサイトとか見た方が良いよ。 そのうち何の処理を書いてるのか分かってきて 自分でいろいろ弄ったりできるようになるから。
リンカの設定が悪いのか、外部DLLを読み込むことができないのですが VC++.netで設定を変更するにはどこをいじるのでしょうか
Visual C++ 2005 Express Editionで ASIOドライバ対応ソフトを作りたいです。 どうすればいいですか?
作れば良い
http://www.interq.or.jp/black/minami-m/ ここのdirectXのサンプルプログラムをvisual c++ 2005でビルドしてみたのですがコンパイルまではできたのですが、リンクの段階で
dx_audio.obj : error LNK2019: 未解決の外部シンボル __imp__CoCreateInstance@20 が関数 "int __cdecl AdoInit(void)" (?AdoInit@@YAHXZ) で参照されました。
dx_audio.obj : error LNK2019: 未解決の外部シンボル __imp__CoInitialize@4 が関数 "int __cdecl AdoInit(void)" (?AdoInit@@YAHXZ) で参照されました。
dx_audio.obj : error LNK2019: 未解決の外部シンボル __imp__CoUninitialize@0 が関数 "void __cdecl AdoRelease(void)" (?AdoRelease@@YAXXZ) で参照されました。
win_main.obj : error LNK2019: 未解決の外部シンボル __imp__ShowCursor@4 が関数 _WinMain@16 で参照されました。
win_main.obj : error LNK2019: 未解決の外部シンボル __imp__FindWindowA@8 が関数 _WinMain@16 で参照されました。
というようなエラーが大量にでてきました。解決方法わかりますでしょうか。
スレ違いでしたらごめんなさい。
OLE32.DLL でもリンクしてみるとか
マルチんこ
Microsoft Visual C++ 2005 SDKでMDIアプリケーションを作っているんですが、 ウィンドウサイズの変更時の画面のちらつきをなくすために CS_VREDRAW | CSHREDRAWをけずってみたのですが、 ドキュメントウィンドウを最大化しているとちらついてしまいます。 解決策はありますでしょうか。
Windowsの描画の仕組みを理解して、ちらつかないよう工夫する。
475 :
473 :2006/07/03(月) 12:55:23
ですよね
476 :
デフォルトの名無しさん :2006/07/03(月) 23:18:00
{ CDC myDC; CFont myFont, *oldFont; myFont.DeleteObject(); ・・・@ myDC.DeleteDC(); ・・・A } の@、Aって必要なんですか? CDCやCFontのデストラクタでDelete〜を内部で呼び出したりしてないんですかね・・・ 物の本には、お約束の様に@Aが書かれていて、まあ、書いてるんですがね myFont.DeleteObject(); myFont.CreateFont(); みたいな使い方したいときに、DeleteObjectとかあるのかな・・・と勝手に解釈してたんですが、 実際どうなんでしょう?
477 :
デフォルトの名無しさん :2006/07/03(月) 23:24:47
今まで学校でVisual Studio6.0を使っていたのですが、6.0で作っていたプログラムを引き続き2005で使うことは出来るのでしょうか?
VC+6で一定時間で指定動作を繰り返す常駐プログラムを作っています。 動作の種類が増えてもタイマーを増やしたくないので、何とか自分で 累積経過時間を監視して都度必要な動作を起動したいのですが、 システムフックを使っても自分に関係のあるメッセージが飛んでこないと 何も出来ないので困っています。 タイマーを使わずに実現する良い方法は無いでしょうか?
>>480 仮に個別の動作は1秒単位で指定できればいいとする。
1秒のタイマーを設定し1秒に一回、個別の動作予定時刻かどうか
判定するようにすればタイマーは一個あれば充分と言うことになる。
頭は生きているうちに使おう。
>>481 ありがとうございます。
実はそれも考えてはみました。
しかし当初は1秒単位〜100ミリ秒単位でいいのですが、
将来的には複数の動作を10ミリ秒単位で制御したいので
タイマー無しでOSのメインループから毎回呼び出して
貰うような方法がないかと探しております。
予定時刻でソートして、最も近い時刻までSleepやWaitFor〜 処理が終わったら次の時刻まで〜。 ってやるとか。
484 :
デフォルトの名無しさん :2006/07/05(水) 20:50:50
学校のが6.0で家にあるのが.net 2003なんですが、学校でやった続きを家でやることは出来ますか? これから卒研ではじめる予定です。
WaitableTimerをつくってWaitForするのはどうか
>>483 sleepだとCPU握ったままになるんじゃないかと心配なのですが
そのへんどうなのでしょうか?
MSDNでは「モニターの所有権を失いません」という表現になっていて
どうもよく判りません。
と思っていたら、
>>485 さんのWaitableTimerで検索してみたら精度が
100ns単位という情報がありました。これなら十分使えそうです。
という事は、普通にタイマー使ってもそれほど負担にはならないと
いう事でしょうか。
>>481 さんの方法で問題ないのかも。
いろいろ試してみます。ありがとうございました。
>>484 VC6のプロジェクトを.net2003にするのは多少違いはあるけど大体問題なく動きます。
(一部の標準コントロールでプロパティやメソッドが違ったりしますが)
逆は動かない場合もあります。(.Net Frameworkの機能を使ったりするとダメ)
試すだけなら簡単なので一度やってみると良いですよ。
(*.dswから起動すれば自動でソリューションにしてくれる)
490 :
Timerの質問 :2006/07/06(木) 19:06:22
VS2005でVC++を使っています. 一定時間ごとに画面(グラフを書いています)を書き直すプログラムを 作成中です. あるダイアログのOnCreateでTimerをセットしました. if( ( id = SetTimer(1, 100, NULL)) != 0 ) { // timer起動できたとのコメント表示 -> 表示できることを確認済み } ところがOnTimer()が呼び出されません. OnTimer()の冒頭に, CString ss = "hoge"; this->SetWindowTextA(ss); と書いても,なにも表示されませんので,呼ばれていないのは確かだと思います. 何が考えられるでしょうか? Timerをセットした以降,do-loopなど,windowsからのメッセージを 読まないような処理は入れていません
OnTimerイベントハンドラは、クラスビューから「Windowsメッセージハンドラの追加」で追加した? それくらいしか思いつかないな。
>>489 ありがとうございます。
(・・・実はWin98も視野に入れてました)
でも各スレッドに数10ms単位で実行権を渡してるということは
10ms単位での制御は無理なんですね。
やっぱりWindowsは制御には向いてないか。
>>492 制御っていうか、リアルタイムOSじゃないんだから、そういうときは別のOSを使うべし。
PocketPCなんかは、実行権をがっちり握れるからリアルタイムOSに近いことが出来るはずだよ。
Windowsっていったって、ファミリーはピンキリなんだから、簡単に向いていないとか言うべからず。
ノーマルのCをVisial C++でコンパイルしたいのですがやり方がわかりません。 コマンドプロンプトから起動する簡単な物でいいのですが Visial C++のコンパイラはC++専用ですか? なぜかヘルプがまともに起動しないのでググったのですが分かりません。 どこを参照すれば良いでしょうか?
VC++.Net2003でMFCアプリを作っています。 vectorを使っているところでコンパイルエラーとなってしまいました。 問題を単純化するためにConsoleアプリで試したところ再現しましたので、皆様に問題の解決法を教授賜りたくお願いいたします。 ●ソース #include "stdafx.h" #include <vector> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { vector<char> i; //OK vector<char> j(10); //OK return 0; } class hoge { private: vector<char> ii; //OK vector<char> jj(10); //←この行がエラーとなります。 }; ●表示されるエラーメッセージ k:\... ...l\Console.cpp(20) : error C2059: 構文エラー : '定数' 何か根本的なところで間違っている予感もするのですが、お指摘お願いいたします。
hoge():jj(10){}
>>496 早速のレスありがとうございます。
hoge():jj(10){} とのアドバイスですが、このアドバイスは私にとってはレベルが高いようです。お時間を割いて頂いて大変申し訳ないのですが、もう少し分かりやすくご教授お願いいたします。
>>495 class内の変数を初期化する構文はないので、問題の行は変数の宣言ではなく関数の宣言と見なすことになる。
そう解釈した場合、パラメータリストに定数は置けないのでエラーとなってしまう。
#従って、>496はjjをコンストラクタで初期化せよという指摘。
499 :
490 :2006/07/07(金) 07:15:55
>491 めっせーじハンドらの追加でやっています。 なんでなんだろう。。。
そのウインドウをSpyしたら、WM_TIMER来てる?
501 :
490 :2006/07/07(金) 08:18:47
spyってなんだろう。。。 調べてやってみます
502 :
490 :2006/07/07(金) 12:13:30
付属ソフトのspy++で見てみましたが、メッセージは無いみたいでした。 よく分からないので、ゼロから作り直しました。関数や変数はVC++の 機能を使って改めて作り、関数の中身はもとのプログラムをそのままコピペ しました。つまり、中身は同じはずですが、どういう訳か今度は思い通りに 動きました...結局どこが悪かったのが分からないままです...
コードのDiff取ればわかる。 原因を放置すれば又、ハマる。
>>496 ,498
おかげさまで直りました。スペシャルdクス
ATL+WTLでプログラミングしてます。 HTTP通信まわりを処理するのって、 どのへんのクラスライブラリを使うのが一般的でしょうか?
506 :
デフォルトの名無しさん :2006/07/09(日) 15:19:50
ダイアログに表示するアイコンをLoadIcon()→SetIcon()で自分で設定しました。 このときに、ダイアログの中のチェックボックスのチェックあり/なしで アイコンに別のアイコンをオーバーレイしたいのですがうまくいきません。 オーバーレイ関係を調べるとCImageListがあるようなんですが、これでオーバーレイイメージに設定しても オーバーレイではなくアイコンが完全に変わってしまいます。 さらに戻すことができません。 どうするのがよいのでしょうか。
507 :
デフォルトの名無しさん :2006/07/10(月) 04:52:32
延長キタ━━━━━━(゚∀゚)━━━━━━!
延長30分で10万円になります
タケーよ
510 :
デフォルトの名無しさん :2006/07/10(月) 22:19:18
typedef なんですけど、 typedef [既存型名][型の別名] と調べたらありました。この場合、 typedef enum{ AAA,BBB }CCC; ってどういう意味なんでしょうか?enumは整数列挙型だから、 「整数列挙型をCCCと別名をつけて、さらにAAA、BBBというenum型の変数を 宣言する」ってことでしょうか? ご教授お願いしますm(_ _)m
enum CCC { AAA, BBB }; と同じ意味。
>>510 enum {
AAA, BBB
}
これで、1つの型が表されている。(無名の列挙型)
それをtypedefしてCCCと名付けている。
AAAとBBBは列挙定数。
言い換えればこういうこと。
enum xxx {
AAA, BBB
};
typedef xxx CCC;
511,512さん 即レスありがとうございます。 良く分かりました。 宣言ひとつでも、いろいろな書き方があって難しいですね。 分かりやすいレスで感謝です。
いろいろ書けるのがCの強みだからな。 スタイル論争も烈しいが…
VCに関係ない質問だと回答があるのは初心者が多いからか
C初心者が教えるスレ
waveformatについて説明しているサイト知りませんか?
MSDN
519 :
デフォルトの名無しさん :2006/07/12(水) 00:45:59
教えて下さい。 class AAA{ public: void PPP(); } class BBB : public AAA{ } と定義したあとで、オブジェクトを作成。 class XXX = new BBB(); この時 XXX->PPP(); というような記述は可能なんでしょうか?可能だとしたら、 クラスBBBを宣言する際に、クラスAAAも取り込んでいるというような 感じなのでしょうか。
520 :
デフォルトの名無しさん :2006/07/12(水) 00:50:25
すみません。 class XXX = new BBB(); ではなくて、 BBB* XXX = new BBB(); でした。 宜しくお願いします
>>519-520 Visual C++の質問っぽくないけど
「取り込んでいる」だとオブジェクトコンポジションっぽいけど
これは「派生」ってやつなので、ちとちがう感じ。
もしかして、コンパイラがどう翻訳しているか聞いている?
522 :
デフォルトの名無しさん :2006/07/12(水) 15:46:57
質問です。 ファイルからビットマップを表示させるプログラムを作っています。 LoadImage で HBITMAP を作ってAttachして表示、はできたのですが、 スクロールバーで詰まっています。 スクロールバーを表示/非表示をビットマップの大きさに合わせるにはどうすれば良いでしょうか。 お願いします。
表示/非表示ということは 必要ない時はスクロールバーを出さないようにしたいんだろうか? スクロール自体はできているということだな
ドトネトは対象外ですね?
VC++でドトネトは初心者向きじゃない。
VC++はポトペタできないの?
馬鹿がVCやってもしょうがないと思うんだが
じゃあお前もやるなよ
環境:VC++.net テンプレ:CLR - Windowsフォームアプリケーション 質問させてください。 CSVファイルから取り込んだデータを CheckedListBoxの項目にしようと考えているのですが string str = test; checkedListBox->Items->Add( str, false ); error C2664: 1 番目の引数を 'std::string' から 'System::Object ^' に変換できません。 とエラーが出てしまいます。 String^ str = "test"; ならばエラーは出ませんが変数文字列を項目として設定できません。 String^ や Object^ の 「^」 の意味がわからず手詰まりとなってしまいました。 どうやったら変数文字列をCheckedListBoxに追加できるのでしょうか?
VC++でドトネトは初心者向きじゃない。
533 :
530 :2006/07/12(水) 23:45:14
>>531 なるほど。^に合わせるにはnew演算子系が必要だったんですね。
無事目的を達成できました。
ありがとうございました。
新規作成でWin32dllで作ってしまったのですが、(そうせざるを得ないのですが) その場合でもMFCライブラリって使えますか? <afxwin.h>をincludeすると 「dllMainは既に定義されています」なんて出るし、 Officialにあった解決方法を参考にリンク順序を変えても エラーは消えないですし。 dllでMFCを使うための手順があれば教えていただけないでしょうか。 環境はVC6エンタープライズです。
MFC(dll)
536 :
534 :2006/07/13(木) 15:34:42
>>535 配布されているテンプレートがWin32dllなので
今から変えるわけにはいきません・・・。
MFC(dll)に変更するしか方法はないでしょうか?
MFC(dll)で作ったやつを参考に変更する
538 :
デフォルトの名無しさん :2006/07/13(木) 21:14:47
以下をビルドすると 「error LNK2019;未解決の外部シンボ"public;_thiscall CAAA::(void)"(??0CAAA@@QAE@XZ)が関数_WinMain@16で参照されました。」 と怒られてしまいます。 やりたいことは、AAAというクラスを作って、オブジェクトを作成して、オブジェクトのメソッド(メッセージボックス)を実行することです。 何が悪いかと、いろいろ調べて見たのですが分かりません。 アドバイスお願いします。 #include<windows.h> #include <string> class CAAA { private: public: CAAA(); ~CAAA(); void MsgBox(); }; void CAAA::MsgBox(){ MessageBox(NULL , TEXT("ここでテキストを表示") , TEXT("メッセージボックス") , MB_OK); }; INT WINAPI WinMain(HINSTANCE hinst, HINSTANCE, LPSTR, INT){ CAAA* XXX=new CAAA(); XXX->MsgBox(); return 0; };
539 :
デフォルトの名無しさん :2006/07/13(木) 21:21:44
>>538 コンストラクタ、デストラクタの定義がないよ。
>540さん 即レスありがとうございます。 無事、ビルドが通りました。
もう一度質問させて下さい。519です。 オブジェクトXXXはCBBBというクラスのオブジェクトですが、 CAAAの処理MsgBox()が使えます。 class CBBB : public CAAA { みたいな書き方をすると、クラスAAAの機能を含んだ、 新たなクラス(ここではBBB)を定義することが出来る・・・ ってことで間違っていませんか? そして、このことが、521さんが言ってる「派生」ってことでしょうか? クラスAAAのオブジェクトを作らずに、クラスAAAの機能を使えるって 言うのは、なんか不思議な感じがしますね^^>
543 :
デフォルトの名無しさん :2006/07/13(木) 22:16:49
ちょっと失礼します・・ 当方VC++2005のプログラマ見習い(の見習い)です。 WM_ACTIVATEを使ってウィンドウのアクティブ/非アクティブを判断させようと思ったんですが、 WM_ACTIVATEの中にウィンドウがアクティブかどうかのフラグ処理を書くとWM_PAINTを読み取ってくれません。 どなたかいい方法を教えていただけないでしょうか・・
以下、ソースです。 #include<windows.h> #include <string> class CAAA { private: public: CAAA(); ~CAAA(); void MsgBox(); }; class CBBB : public CAAA { private: public: CBBB(); ~CBBB(); }; CAAA::CAAA() {}; CAAA::~CAAA() {}; CBBB::CBBB() {}; CBBB::~CBBB() {}; void CAAA::MsgBox(){ MessageBox(NULL , TEXT("ここでテキストを表示") , TEXT("メッセージボックス") , MB_OK); }; INT WINAPI WinMain(HINSTANCE hinst, HINSTANCE, LPSTR, INT){ CBBB* XXX=new CBBB(); XXX->MsgBox(); return 0; };
>>542 悪いこといわないから、オブジェクト指向の入門書読め。
『憂鬱なプログラマのためのオブジェクト指向開発講座』とか。
>>543 自分のコードが間違ってるはず。
というわけで問題点を見つけ出して修正するべし。
ブレークポイントや、OutputDebugString など使うと便利かも。
SDKでAfx.hをincludeしたところ WINDOWS.H already includeと警告が出ます。 自分で作ったプログラム中ではWINDOWS.Hはincludeしてないし、 Afx.hも1度しかincludeしていません。 試しにMFC\include配下でwindows.hをincludeしていたところも 全てコメントアウトしましたがエラーは消えません。 windows.hをincludeしてるのはどこなのでしょうか?
あてずっぽうでコメントアウトしまくったんだ。 すごいね
Visual C++ 2005 MFCダイアログベースを使っています。 CEditのエディットボックスから入力された文字列String型を読み取り、 int型へ変換するのに CString moji; int suuzi; edit.GetWindowTextW(moji); swscanf(moji,_T("%d"),&suuzi); と打ったのですが、 warning C4996: 'swscanf' が古い形式として宣言されました。 'swscanf' の宣言を確認してください。 と警告が出ました。 修正点のご指摘お願いします。
CString使うなら普通CStringのメンバ関数使う
551 :
550 :2006/07/14(金) 18:59:53
フォーマットと勘違いした
コンパイラに言われた通りパラメータ確認すりゃいいだろう
CString moji; int a = atoi(moji); double b = atof(moji);
int suuzi = boost::lexical_cast<int>(moji);
swscanf_s
printf(""neko""); のようにprintfで「"」や「%s」等を表示したい場合は どうすればいいか教えていただけないでしょうか?
\" %%
スレ違い
559 :
556 :2006/07/15(土) 13:04:41
printfについてVCスレで質問する馬鹿、答える馬鹿
561 :
556 :2006/07/15(土) 13:18:04
>>557 答えていただいたのに不快な思いをさせて申し訳ないです。
ごめんなさい。
スレ住民のみなさんすいませんでした。
VC6のメニュー→ビルドにある項目の意味を教えてください [ビルド]はプロジェクト中のソースファイル、ヘッダファイルを コンパイルすることですよね? [リビルド]は変更のあったものだけを再コンパイルするんですよね? じゃあ[コンパイル]はなんでしょうか? 現在アクティブなソースファイルのみをコンパイルする?
コンパイルだけじゃ実行ファイルは作成できない。
[ビルド]× [リビルド]× 0点
565 :
562 :2006/07/15(土) 14:34:06
[コンパイル]は合ってるの? 訂正です [ビルド]プロジェクト中の.cpp、.hファイルをコンパイルして リンクする [リビルド]変更のあったファイルだけをコンパイルしてリンクする
.hは単体でコンパイルされないよ。
568 :
565 :2006/07/15(土) 14:54:10
え〜〜 わかんないよ [ビルド].cppファイルをコンパイルする。 そのあと、.hによって依存関係を解決してリンクする [リビルド]変更のあった.cppファイルをコンパイルして リンクする .hはコンパイルされない
無能な解答してんじゃねーよ。黙っとけ。
>>565 およそこんなかんじ。
[ビルド] 変更のあったファイルに関連するものをコンパイルしリンクする。
foo.cppがfoo.hをインクルードしているときにfoo.hを変更すると、foo.cppも
コンパイルされる。
[リビルド] 変更のあるなしにかかわらず、全てを一からコンパイルしリンクする。
571 :
565 :2006/07/15(土) 15:13:02
くっそー [ビルド]プロジェクト中の.hファイルを参照して.cppファイルをコンパイルする コンパイルしてできた.objファイルをリンクして.exeファイルを生成する [リビルド]通常ビルドは変更のあった.cppファイルのみを、依存する.hファイルを 参照してコンパイルし直して.objファイルを作り、再度リンクして.exeファイルを 生成するが、リビルドは.cppファイルの変更に関係なく、全てを再ビルドする
572 :
565 :2006/07/15(土) 15:14:27
>>570 ありがとうございます
ようやっと理解できました
>>570 残念。リビルドは「クリーン時に削除する拡張子」にしたがって
中間ディレクトリからファイルを削除し、ビルドを開始すること。
確かに573は小便くさいw
質問させていただきます。 ネットゲームでのツール(オートログイン、経験値時給表示、キャラ自動操作等) を作成してみたいと考え、C/C++の開発を行おうとおもっています。 そこで、c/c++の統合開発環境として Visual C++ Express Edition を勧めていただき、これから構築しようと 思っているのですが、「ゲーム作成ができない」という表現が、 VCEEについてありました。ゲーム作成とネットゲームのツール作成は 確かに異なりますが、私のやりたいことはVCEEにて可能なのでしょうか。
「ゲーム作成ができない」です
不可能
できないです
>>576 「ゲーム作成ができない」とは一体どこの誰の発言だ?
少なくともMicrosoftは、VCEEでどんなアプリケーションを作るかなどといったことについて、
法的にも技術的にも制限を設けていない。
スルーでお願いします
> オートログイン、経験値時給表示、キャラ自動操作等 やりたいことが糞杉だからな
win2000,VC6でコンソールで制御コードを使いたいのですが 以下のようにやってもうまくいきません #include <cstdio> int main(void) { putchar(0x1b); printf("[7;31m"); printf("あああ"); } あああが赤色で反転表示されるのを期待したのですが Enterキーの下部分に印字されている左矢印のような 文字が表示されて、そのあとに「[7;31mあああ]と表示されます どこがまずいでしょうか?
>>583 NT系のWindowsでは、DOSプログラムしかエスケープシーケンスを使えない。
だから、DOS用のコンパイラを使うか、Windows APIでどうにかするかのどちらかを選べ。
VC6でコンパイラオプションを設定するには どこをいじればよいでしょうか?
そんなに見つけにくいかな? 探さずに聞いてないか?
587 :
585 :2006/07/17(月) 13:31:03
>>586 プロジェクトオプションという項目がそうですか?
つーかヘルプ読めよ
589 :
585 :2006/07/17(月) 14:24:48
めんどくせーだろ
590 :
585 :2006/07/17(月) 14:27:19
氏ねクズ共。
591 :
585 :2006/07/17(月) 14:28:46
ヘルプ読めよ
593 :
585 :2006/07/17(月) 14:41:46
ヘルプって、MSDNとか言う奴ですか?よんだけど判りません。
あれ読んでもわからない奴に、教える自信は俺には無い。
本当に困ってるなら コンソールからオプション指定してコンパイル、 makeファイル書く、 プロジェクトファイルをいじる とかいくらでも方法あるだろ それすらできないやつがコンパイルオプションいじってもしょうがない。
596 :
585 :2006/07/17(月) 17:27:25
(◕∀◕)
597 :
デフォルトの名無しさん :2006/07/18(火) 18:53:32
パソコンの電源を切るにはどのライブラリ使えばいいですか? 教えてください。
599 :
デフォルトの名無しさん :2006/07/18(火) 18:56:41
>598 もう少し詳しくお願いします。 まだVisual C++を買っていないので・・・ 今使っている言語からは切れなさそうなので、 そこからプログラムをコールしようかと思うんですが・・・ ライブラリ名とメソッド名または関数名か何か教えていただければ。
>>599 ExitWindowsEx
あとはMSDN見ろ。
601 :
デフォルトの名無しさん :2006/07/18(火) 19:04:41
>598 >600 すません。ありがとうございました。 なかなか引っかからなかったので申し訳ないです。 これで何とかできそうです。
>>601 電源切るだけなら自分でプログラムを作るまでもないな、そういうツールを作っている香具師が必ずいるはずだ。
#作るにしても、VCである必要は全くないし。
>602 dクス。電源切るプログラムは一応見つけてはいたんですが・・・ 商用利用できるかどうか微妙だったのでとりあえず自分で書きます。
うはぁ、商用利用なのか。ある意味剛毅だな。
電源切るアプリを売るつもりかね
何かの処理が終わったら電源をオフするようなオプションを 付けたいんだろ。何か不思議なことでもあるんかいな。
>まだVisual C++を買っていないので・・・
>急にボールが来たので…
Visual Studio 2003.netの時は普通にコンパイルできたプログラムが、 Visual C++ 2005 Express Edition にしたらコンパイル時に windows.hが見つからないといったコンパイルエラーが出るのですが、 EEではwindows.hをサポートしていないのですか? それと、この問題をEEで解決するにはどうしたらいいですか?教えてください
>>609 書き飽きたが、Platform SDKを入れろ
MFCだったらDDX
>>612 それぞれの仕様調べて自分なりの見解示してみろ。
人に聞いてるだけじゃ進歩ねーぞ。
そのへんの基礎的なことが全然できなくてMFC使ってることに驚き
MFCは初心者にも優しくウィンドウブのプログラミングができるってママが言ってた
MFCのバージョンリソースのバージョン情報は4桁もあるけど普通みんなどこ変えるの? 1.01にしたときは1.0.1.1にしてる?最後の4桁目いらなくない?
major minor build revision
619 :
デフォルトの名無しさん :2006/07/22(土) 11:22:08
あまり基本的なことで恐縮ですが、教えて下さいm(_ _)m main.cpp main.h sub.cpp sub.h の4つのファイルがあったとして、 main.cppはmain.hを、sub.cppはsub.hをそれぞれインクルードしてます。 この状態で、 main.cppでsub.hをインクルードします。 この時、 sub.cppで記述した関数等(ヘッダーで定義した関数の実部?)が使えるんですが、どうもシックリきません。 main.cppから見ると、sub.cppはインクルードしている訳ではないのに、 sub.cppの内容が見えているってことなのでしょうか? 初心者考えでは、 main.cppでsub.cppをインクルードする。すると、 そのsub.cppは、sub.hをインクルードしているので、main.cppからsub.hは 見えている。 と言う風に考えてしまうのですが・・・ どういう理屈なのかご教授お願いしますm(_ _)m
>>619 郵便局の中身を知らなくても、ポストがあれば手紙を届けることができる。相手からも手紙が返って来る。
関数の実態をしらなくとも、ヘッダにあるプロトタイプ宣言があれば、関数を呼び出すことが出来る。戻り値を受け取ることもできる。
621 :
デフォルトの名無しさん :2006/07/22(土) 11:29:14
すみません。 書いた傍から、思ったんですが、 main.cpp に[include main.h]と書くことは、 main.cppにmain.hを含める・・・ではなくて main.hにmain.cppを含める という理屈なのでしょうか? これですと、理解できるのですが・・・
includeはその場所に、ファイルの中身が展開されるだけ。
コンパイラは関数の型が分かれば呼び出しコードを生成できる。 別モジュールにある関数を繋げるのがリンカの仕事。
PeekMessageを使うとCPU使用率が常に100%になるんですが、 これをどうにかする方法ってないんでしょうか? Sleep(10)やGetMessageに変える以外の方法が検索しても出てこないので、 もしわかる方がいらっしゃればよろしくお願いします.
なんで、Sleep(10)やGetMessageじゃだめなのか?
64bit版のtime_t型変数同士で減算した結果が負かどうか調べたいのですが、 普通に0と比較すると必ず負であるという判定になってしまいます。 0をtime_tでキャストしてもダメで、(long)でキャストしたlong型の 変数に代入すれば正常に負の判定が出来ます。 減算前の変数同士でいちいち大小比較するという方法以外で、 キャストもせずに正攻法で判定する方法はないでしょうか?
>>627 ありがとうございます。
しかし減算結果を保持する変数の型もtime_tで、なるべく修正個所を
少なくしたいと考えております。
64bitの開発環境はまだ整備されてないのでしょうか・・・
time_t同志の差の型は、time_tじゃないと思うぞ。
time_t ってただの秒数だと思ったけど 数値の演算や比較ができないってどんな間抜け?
>>630 それが32ビットか64ビットかって話だろ。
time_t a,b,c; a=b-c; if(a<0) { //負の処理 } else { //正の処理 } 詳細省くと上のような処理ではaの符号に関わらず必ず負の処理が 走ってしまいます。 long型のワーク変数にキャストして、そちらで判定するように 誤魔化してしまいましたがそれじゃ64ビットの意味が無いような気も。
例えば1970年から32ビットで表せなくなった未来に於いて、 明日引く今日は高々86400秒でしかないと思うのだが。
>>634 昨日から調べているのですが、何も見つけることが出来ませんでした。
もし良ければもう少し詳しくお教えください。
>>635 まだ暫くは問題ないけど、この先の移行の事とか考えると
なるべく手間を減らせるのが良いかなと・・・
今まで普通に動いていたソースが64bit版のコンパイラで動かなく
なったので、まだ下調べしてるだけの段階なんですけどね。
time_t同士をそのまま比較すればよさそうに思うけど きっと何か深い理由があるんだろうね。
>>633 このコードだけのテストプログラムでもそうなの?
>>639 time_tがunsignedなら警告が出てもいいと思うんだけどね。
しかも、unsignedなら常に正になりそうな気がするし。
>>633 なんでif (b < c)ではだめなの?
大小比較するのにいちいち引き算してるから相当頭悪そう。
比較後に差をつかうんじゃね?
デバッガ使って調べれば1発でわかりそうなもんだが
デバッガってなんですか?
(・3・)最下級人種、不可触賤民のことだNE!
> 64bitの開発環境はまだ整備されてないのでしょうか・・・ デバッガ使えないくせにずいぶん偉そうなこと言ってるな
そもそも aを time_tと宣言しておきながら int型の定数と比較してる 時点で問題ありそうだが・・・ 32bit環境ではtime_tは long int だろけど64bit環境では違うだろうし
>>648 VC++ 2005から、Win32でもtime_tは64bitが標準。
一度使い終わったコードをメモリ上から破棄して、メモリの節約をしたいのですが そういう方法ってありますでしょうか?
>>650 捨てたい部分をDLL化して明示的リンク(LoadLibrary/FreeLibary)すれば同じようなことができると思う。
もっとも、それでどれだけメモリを節約できるかは疑問。ほかにやることはないのか?
>>651 ありがとう、そうしてみます。
他にやる事は沢山あるんですが
一度しか呼び出さないコードがすごく気になっちゃって・・・
>>650 こういうのがいいという話ではないが、似たような御仁がおられると思って。
昔メモリの少ない時代には、subroutine のオーバレイという手法があった。
Macintosh には、リソース(Windows のと似てはいるが)に proc という
種別があってこれに処理させる方法があった。
自分の最初の Windows マシンは 64MB で、今でも application file サ
イズは 1MB を超えると抵抗感がある。
で、651 の方法を考えて始めたのだが、dll を別ファイルというのも面倒で
なんとか application file に同梱できないかと考えて、今やっている方法
は、dll を lzh 圧縮してリソースに入れて、使うときは解凍して呼ぶ。
終わると dll file を破棄。このため lzh 解凍ルーチンを抱えることに
なって、コードをけずってけずってlzh 解凍に 3KB。
んで、jpeg, gif, png, tiff などの解凍? dll もリソースに抱えている
のだが、application file サイズは肥大化して、なんのことか分からなく
なっている。いいことは違うマシンにこの appli を写すときは .exe 一本で
済むこと。因みに、エラーメッセイジ(150KB超)も lzh 圧縮してリソースで
持つようにしたので、.exe をバイナリで見ても見えない。
後、UNICODE 化ではすごい難儀。まだ終わっていない。
Windowsだって馬鹿じゃないから、 スワップアウトが必要になればEXEファイルの部分のメモリだって捨てるよ。 そうなったらその部分は必要になるまでメモリには帰ってこない。 そういう問題じゃないって?すまん。
DOS時代にだってあっただろ。
>>654 アドレス空間の節約をしたいのかもしれない。
オーバーレイなつかすぃな。
Windowsなら
>>651 の言うようにdll化して、
いらなくなったアンロードだろうね。
>>653 リソースにあらかじめ格納しておく方法もあるのか・・・
>>654-657 気分的にexeファイルのメモリ使用量を抑えたかっただけだったりして
(#^ω^)ビキビキ
>>660 無理にやればCStringArray自体は出来るかもしれないが
CStringArrayの要素は別に確保されるので共有できないがそれでもいいのか?
>>661 ええと、「CStringArray自体は出来る」というのは共有出来るということなのでしょうか?
やりたいことは
EXE1で作ったCStringArray変数を、
EXE2で参照出来るようにしたいわけですけど。
言い方が悪かったかもしれん。 CStringArrayのインスタンスは配置newで共有メモリ上に構築できるかもしれないが CStringArray内で確保されるメモリは共有メモリではないし 複数のプロセスから操作すればおかしなことになるし ようするに無理。
>>663 なるほど、無理なのですね。
ありがとうございました。
VC6.0 で作った HOGE.DLL を VB6.0 で作ったアプリから呼んでいます。 administrators 権限では問題なく動くのに、 power users 権限では、 'HOGE.DLL'の読込に失敗しましたみたいなメッセージをアプリが吐いて 終了します。 HOGE.DLL の DllEntry にブレークポイントを仕掛けても、DllEntry がコールされる 前にエラーが発生することから、 HOGE.DLL が依存している DLL のいづれかが power users では動かないんだと思います。 こういう状況で、どの dll がエラーの原因となっているのか特定する方法はありますでしょうか?
そもそもHOGE.DLL自体のアクセス制御は問題ないか?
667 :
665 :2006/07/26(水) 15:12:57
レスありがとうございます。 HOGE.DLL も、HOGE.DLL があるフォルダも、 Power Users で、読み書き実行できるようにしてあります。
VS2005でAfxBeginThread()を使って開始したユーザー インターフェイス スレッドを作ったのですが、正常終了できません。 どなたか、正常に終了する方法を教えてください。 ExitThread(0)とPostQuitMessage(0)では、スレッド生成画面ごと終了 してしまい、AfxEndThread(0)ではASSERT(pThread != AfxGetApp()) でエラーが発生しています。 AfxGetApp()はウォッチでは文字化けして見れないのですが、immedで 見ると確かにpThreadと同じアドレス値になってます。 スレッドを生成した画面からPostThreadMessage()で WM_QUITを送っても エラーにはならないのですがスレッドは終了してくれません。 今のところTerminateThread()でしか停止できないのですが、 それではメモリリークが発生するためなんとか普通に停止させる 方法が知りたいと思っています。 何か使用法が根本的に間違っているのでしょうか?
スレッド生成画面って何よ?
>>669 ダイアログ画面のボタンを押すとAfxBeginThread()で複数のスレッドを
生成する処理をしています。
しかしスレッドは動き出すのですが、正常に終了してくれません。
スレッド内からExitThread(0)を呼び出すと最初のスレッドでダイアログ
が閉じて無限ループになり、PostQuitMessage(0)を呼び出すと全ての
スレッドが終了した後でダイアログ画面も終了してしまいます。
>>670 なんでASSERT(pThread != AfxGetApp())でピンと来ないかな。
どう見たってアプリケーションクラスからExitThread呼んでるでしょ。
ExitThreadを呼ぶのは作成したスレッドからだよ?
C++だとワーカスレッド内で定義したオブジェクトのデストラクタが 呼ばれなくなってもいけないからExitThread()は使わない方が委員で内科医? ワーカスレッドからreturnするだけで充分じゃないかと。 #メインスレッドからExitThread()を呼ぶ間違いも起こり得ないし。
とてつもない馬鹿登場
>>671-672 いえ、それがアプリケーションクラスではなくCWinThreadを継承した
スレッド内で呼んでます。だから困っているんです。
(PostThreadMessage()だけはダイアログから呼んでます)
それから、ワーカスレッドではなくユーザー インターフェイス
スレッドを作っています。
ワーカスレッドでは中断して待たせたりはできないんですよね?
TerminateThread()もダイアログから呼んでました。 これだとスレッドは終了してくれますが、強制中断してスレッドの 後始末をしないらしく、メモリリークが発生します。 SuspendThread()やResumeThread()はまったく問題なく動作するんですが・・・ (こちらももちろんダイアログ側から呼んでます)
>TerminateThread()もダイアログから呼んでました。 ~~ ??
ヒント:PostThreadMessage()
夏休みの成果、モンモウガ多いなwww
680 :
デフォルトの名無しさん :2006/07/27(木) 18:22:12
ウィンドウをクラス化しようと頑張っています。
ttp://techtips.belution.com/ja/vc/0009/ のwndbase.cpp と〜.h を使用して、ビルドした際に、ウィンドウが
表示されるのを目標にしています。以下、ソースです。
[m(_ _)m]の手前までで、オブジェクトwindow を作りましたが、
この後、何を書いて行けばよいのでしょうか?
windowcreate を記述するのは分かるのですが、どこに記述したらいいのか分からず、
皆さんのお力を貸して頂けないでしょうか?
ビルド後にウィンドウが出るよう、アドバイスを宜しくお願いします。
#include <windows.h>
#include "wndbase.h"
INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR szStr,INT iCmdShow)
{
// ウィンドウハンドル
HWND HWnd;
CWndBase* window=new CWndBase();
//m(_ _)m
//window->WndProc;
//delete window;
return 0;
}
682 :
デフォルトの名無しさん :2006/07/27(木) 19:04:17
すみません(T_T) 2chの皆さんの方が教えてくれるような気がして。 ウィンドウをクラス化したいと考えてる人はたくさん いると思いますので、ここに今まで作った方がいて、 何か良いアドバイスを頂けるかと思った次第です。 このサイトの方のソースを必ず使いたいわけではなく、 このソースを使ったほうが早いかなって思いました。 何か良いサイトでもよろしいので、引き続きアドバイス 宜しくお願いします。
作った本人にすごく失礼だと思わないか?
VC++.NET2003です。 MFCのGUIコントロールから派生クラスを作り、 スタティックライブラリにしようと思っています。 描画はGDI+でやろうとしているのですが、 何故かGDI+の方で大量のエラーが出てしまいます。 GDI+を利用するクラスはスタティックライブラリにできないのでしょうか?
>>680 そもそも、C++を使わないでウィンドウを作ることはできるんだよな?
C++のクラスにするということは、そのときのプログラムの動きをクラスの枠組みに乗っけてやるということ。
個々の細かな流れは大して変わらない。
687 :
668 :2006/07/27(木) 21:31:15
出来る限り単純な構成にして、PostThreadMessage()でスレッドの終了が 出来るようになりました。どうもスレッド内で書いていた終了時の処理が 悪かったみたいです。 少しずつ処理を追加して調べてみると、thrdcore.cppの_AfxThreadEntry()を AfxEndThread()で抜ける際にvectorの例外(out_of_range)が発生していました。 自分の処理でvectorは使っていますが、その行ではエラーが起きてないので無関係 だと思ってたのですが、これが原因でしょうか? それとも、AfxBeginThread()の戻り値を使用してスレッドのメンバに直接アクセス してはいけないという決まり事か何かがあるのでしょうか?
>>687 いけなくはないが、複数のスレッドがアクセスする場合
同期してやらないと問題が起きる場合がある。
689 :
デフォルトの名無しさん :2006/07/27(木) 22:14:21
680です。 ウィンドウズをクラス化することが出来ました。 ありがとうございます。 感謝の気持ちとして、ソースを公開したほうが宜しいでしょうか? (大した内容ではないですが><) また、分からないことあったら来ます。
690 :
668 :2006/07/27(木) 22:23:17
>>688 ありがとうございます。
個々のスレッドがアクセスするメンバは別々の実体でそれぞれのExitInstance()内で
deleteしてたのですが、念のためにPreTranslateMessage()でユーザメッセージを
受け取ってから処理するようにしてみます。
(ネットで調べた他の人のソースではメッセージマップ使ってCWinThread::OnQuit()で
処理してるみたいなんですけど、VS2005ではメッセージマップが選択できないんですよね・・・)
691 :
デフォルトの名無しさん :2006/07/28(金) 01:05:35
すみません、Visual Basic6のプログラムをVisual C 2005に移植しなくてはいけません。 どのように書き換えればいいのか、教えてください。ActiveXコントロールモジュールを読み込んで、その中の関数を使ったものです。 サブルーチンの一例は、 Public Function SetSerialNum(ByVal lSerialNum As Long) As Long MG17Motor1.HWSerialNum = lSerialNum MG17Motor1.StartCtrl End Function Private Sub Command1_Click() SetSerialNum (30808366) fPosition = 0 MG17Motor1.SetAbsMovePos CHAN1_ID, Text1 MG17Motor1.MoveAbsolute CHAN1_ID, False End Sub
ヘッダが public: long SetSerialNum(long& lSerialNum); private: afx_msg void OnBnClickedCommand1(void); で、cppが long クラス名::SetSerialNum(long& lSerialNum) { MG17Motor1.HWSerialNum = lSerialNum; MG17Motor1.StartCtrl(); } void クラス名::OnBnClickedCommand1() { SetSerialNum(30808366); fPosition = 0; MG17Motor1.SetAbsMovePos(CHAN1_ID, Text1); MG17Motor1.MoveAbsolute(CHAN1_ID, False); } みたいな感じになると思う。 AcrtiveXコントロールの使い方も変わるだろうが それ以上にVBのフォームとVCのCWnd派生クラスじゃ使い勝手が まったく違うからそっちから調べたほうがいい。
ん? Public Function SetSerialNum(ByVal lSerialNum As Long) As Long で値返して無いじゃん。まあいいけどwww
694 :
691 :2006/07/28(金) 01:38:55
>>692 とりあえず、コピーして貼り付けてビルドすると、MG17Motor1が定義されていない、というエラーが出てきます。
VisualCは全くの初心者なのですが、何かで勉強し直した方がいいですね。
エクスプローラ上の右クリック拡張について教えてください!><
レジストリに追加するだけ
>691 まずはソースを公開してくれよ 部分的にあーだこーだ言われても分からん
リストコントロール(じゃなくてもいいかもしれないけど)のカスタムドロー作る時に NM_CUSTOMDRAWのハンドラ使いますよね。 VC++.NET2003だとリソースエディタからハンドラ作成できるけれど どうしてLPNMCUSTOMDRAWに勝手にキャストされるの? ↓こんな感じに。 void CHoge::OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR); ←これ // TODO : ここにコントロール通知ハンドラ コードを追加します。 *pResult = 0; } LPNMCUSTOMDRAW じゃなくて更に次の LPNMLVCUSTOMDRAW使いたいのにっ!なんで最初からLPNMLVCUSTOMDRAWにキャストしといてくれないの??
ウィザード作った奴に聞けよ。
>>698 別にリストビュー専用じゃないからでしょ。
それくらい自分で直せよ。スケルトン作ってくれるだけでもありがたいと思え。 俺が若い頃は(ry… じいちゃんばあちゃんの気持ちがわかった希ガス。
703 :
691 :2006/07/28(金) 17:32:42
>>692 ,697
目的は単純に、装置制御するプログラムです。
MG17Motor.ocxというActiveXコントローラーが付属されていて、Visual Basic6のサンプルプログラムが付いていただけです。
Visual Baicでは、MG17Motor.ocxをコンポーネンツとして追加して、メインルーチンに
Private Sub Command1_Click()
SetSerialNum (30808366)
fPosition = 0
MG17Motor1.SetAbsMovePos CHAN1_ID, Text1 //Text1 は変数で、この値で装置の状態を変えられます。
MG17Motor1.MoveAbsolute CHAN1_ID, False
End Sub
と書き込み、実行し、フレームに現れるボタンを実行すると問題なく動きます。
僕の用途では、ボタンなど必要なく、コンパイル後、実行するとすぐに命令が執行されるプログラムの方が好ましいのです。
MG17Motor.ocxをどこに読み込むのか?さえ分かりません。
よろしくお願いします。
>>703 VBのままでいいなら、Form_Load()で実行すればいいよ。
VC++に移植したいのなら、OCXのままだと先ず無理だと思った方がいい。
705 :
691 :2006/07/28(金) 17:58:58
>>703 有り難うございます。移植は無理だということですね。それでも構いません。
VB6でForm_Load()の中にコマンドを書き込んで実行するとすぐに動きました。
実はこのプログラムのexeファイルを作り、他のプログラムで動かしたいのです。
試してみたところ、ちゃんと動きますが、exeファイルを実行するたびにFormが出てきてしまいます。
このFormを出さない方法、あるいは、実行後Formを消す方法とかないでしょうか?
よろしくお願いします。
Sub Main()
>>705 VBでOCXを取り込んだOCXなりDLLを作ってそれをVCに組み込めばいいと思う.
708 :
704 :2006/07/28(金) 18:12:41
>>705 なんだ、Formも要らないなら先に書けよ。
それだったら>706のようにMain()に書いちゃえばOK。
つーか、それくらい調べろよって気もするが。
709 :
668 :2006/07/28(金) 22:37:44
>>688 おかげさまで解決しました、ありがとうございました。
各スレッドにユーザメッセージを送信して、スレッドのPreTranslateMessage()で
終了時のメモリ解放処理とPostQuitMessage(0)をするように変更すると、全ての
スレッドが綺麗に終了するようになりました。
メモリ解放処理をスレッドのメソッドにしてダイアログ側から直接呼び出していた
のが悪かったようです。(予想外に大量のメッセージが溜まっていました)
ただ、他の人のソースに良くあるようなPostThreadMessage()でユーザメッセージを
送信した後にSleep(1000)などとタイミング調整のスリープを入れると、その直後の
WaitForSingleObject((*it)->m_hThread,INFINITE)がロックしてしまいます。
単にタイミング調整してるだけだから無くても正常に動くならいいか、と思ってますが
原因が突き止められないのでちょっと不安・・・
itのcontainerとかitとか*itとか、(*it)->m_hThreadを他スレッドで操作してるとか
itのコンテナはスレッドのアドレスを格納してるんですが、コンテナ自体は 各スレッドを呼び出すダイアログ側がprivateで管理しているので同時に複数の 操作は入らないはずなんです。 (*it)が指しているスレッドは、WaitForSingleObject(INFINITE)の後で deleteするまで生きてるので参照にも問題は無いようなんです。 普通は処理の終了待ちで入れているはずのSleep(1000)を入れるとロックして 入れないとWaitForSingleObject(INFINITE)はすぐに帰ってくるので、 何か変(想像と逆)ですよね?
712 :
デフォルトの名無しさん :2006/08/01(火) 21:16:47
ハンドルされていない例外が発生・・・というエラーが出て困っています。 あるクラスを作って、その中にさらにクラスを入れ子にした場合、 この、「ハンドルされていない例外」というのが出てるような気がします。 なぜ、この様なエラーが出るのか?回避の方法は如何様かを ご教授お願いします。 以下、ソースです。 よろしくお願いしますm(_ _)m
713 :
デフォルトの名無しさん :2006/08/01(火) 21:17:29
main.h________________________________________ #include "sub.h" main.cpp______________________________________ #include <windows.h> #include "main.h" INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR szStr,INT iCmdShow) { CSUB* SUBOBJ=new CSUB(); SUBOBJ->RUN(); delete SUBOBJ; return 0; } sub.h_________________________________________ #include "sub2.h" class CSUB { protected: CSUB2* SUB2OBJ; public: CSUB(); ~CSUB(); void RUN(); }; sub.cpp_______________________________________ #include "sub.h" #include <windows.h> CSUB::CSUB(){ } CSUB::~CSUB(){ } void CSUB::RUN(){ MessageBox(NULL, "check01", NULL, MB_OK); SUB2OBJ->XXX(SUB2OBJ->YYY()); MessageBox(NULL, "check03", NULL, MB_OK);
714 :
デフォルトの名無しさん :2006/08/01(火) 21:18:11
sub2.h________________________________________ class CSUB2 { protected: bool ZZZ; public: CSUB2(); ~CSUB2(); void XXX(bool zzz); bool YYY() { return ZZZ; } }; sub.cpp_______________________________________ #include "sub2.h" #include <windows.h> CSUB2::CSUB2(): ZZZ(false) { } CSUB2::~CSUB2() { } void CSUB2::XXX(bool zzz) { MessageBox(NULL, "check02", NULL, MB_OK); }
そりゃ確保されてないSUB2OBJに対してメンバ関数を呼び出して、 しかもそこでメンバ変数に触ってるんだから落ちるだろ。
716 :
デフォルトの名無しさん :2006/08/01(火) 22:18:22
sub.cpp の最後に }; が抜けてました。すみません。 >715さん レスありがとうございます。 レスを元に、今、「メモリ 動的確保」 でぐぐって調べています。 この例での、SUBOBJ を作った段階では、 まだSUB2OBJ が作られていなくて、更にそこにアクセスしようと したからエラーが発生した・・・ということでしょうか? ご面倒とは思いますが、何卒ご教授お願いします。
はい、それはトムです。
SUBOBJはnewしてdeleteしているだろ。 SUB2OBJだってどこか(と言ってもまず間違いなくコンストラクタとデストラクタ)で newとdeleteをしなければならない。 ところで、全部大文字のクラス名・変数名きもい。 あと、main.hの存在意義が無いだろ、それ。 さらに、そもそも動的に確保する必要はあるのか疑問。
複数階層のディレクトリを一発で作れるSHCreateDirectory 相対パス指定するとエラー どうすればいいの?
エラー値を確認。 MSDNで仕様を確認。
>>719 GetFullPathNameはどう?
>718さん レスありがとうございます。 sub.cppを書き直してみました。(下記参照下さい) コンストラクタとデストラクタ(つまり@とA)でnewとdeleteを してみたのですがビルドエラーが出てしまいます。 BCだと無事通ることができました。 何故か分かりませんが、少し自分で調べてみます。 レスをして頂いた方々。ありがとうございます。m(_ _)m #include "sub.h" #include <windows.h> CSUB::CSUB(){ //@CSUB2* SUB2OBJ=new CSUB2(); } CSUB::~CSUB(){ //Adelete SUB2OBJ; } void CSUB::RUN(){ //BCSUB2* SUB2OBJ=new CSUB2(); MessageBox(NULL, "check01", NULL, MB_OK); SUB2OBJ->XXX(SUB2OBJ->YYY()); MessageBox(NULL, "check03", NULL, MB_OK); //Cdelete SUB2OBJ; }
C++を一からやり直せ。
724 :
719 :2006/08/02(水) 00:59:42
>>722 クラス定義みてないけどこれはまずいだろ。
@はコンストラクタのローカル変数で、CSUBのメンバ変数のSUB2OBJじゃないからこのnewはメモリリークしてる
AはCSUBのメンバ変数だけど@のSUB2OBJとは別物で初期状態のままの不定値が入ってるから落ちる
BはCSUB::RUN()関数のローカル変数でCSUBのメンバ変数のSUB2OBJじゃない
CはCSUBのメンバ変数だけどBとは別物だから結果はAと同じ
ってか、上なおしてもこの設計だとCSUB::RUN()をよびだしたらアウト。
なんで全部大文字なんだよ定数かよっ
コボラー?
>725さん 詳しい解説ありがとうございます。 理解できました。愚かな質問で申し訳ございません。 また、教えてくれた方々にも感謝しています。 ありがとうございましたm(_ _)m
>>728 次からは、エラーが出たならエラーメッセージくらい書いてね
>>115 と同じcmd.exeに関するエラーに悩まされてます。
ツール>オプション>実行可能ファイルの設定を見直すといいと分かりましたが
できればエラーの出ない(みなさんの)環境での設定項目を
羅列してもらえないでしょうか?
731 :
nmn :2006/08/03(木) 22:44:43
今年入社した新人です。 質問なんですが、VC++6.0を安く買える方法ないですか? 気合いれて、1万もするVC++6.0の本を買ったんで、 折角だから、家でも勉強したいなと…。
いまさらVC6なんぞ買うな。VC2005EE落として来い。
733 :
nmn :2006/08/03(木) 23:01:18
折角、 商品名 :プログラミングMicrosoft Visual C++6.0 販売価格:9,975円 買ったのに…。 仕事場の開発環境がVC6.0ってだけで即決してしまいました↓↓ やっぱりVC2005ですかね?
その本だとVC6でMFCなんだろうね
735 :
nmn :2006/08/04(金) 00:06:43
>>735 使えません。
さらに言うなら、VC2003などの書籍もさけた方が良いです。混乱の元。
737 :
nmn :2006/08/04(金) 00:21:44
あ゛う…。 やっぱりダメですか…。 どうしたもんだか…。 まずはVC++6.0を勉強しようかな…。 きっと役に立つ…立ちますよね? 何かいいアドバイスいただけたら幸いです。
>>737 ん?業務で使うのはどっち?
業務で使うほうの勉強をしたほうがいいよ。
ざっくり言うと、VC6の知識はVC2005では通用しないものがほとんどだし、逆もまた真だから。
あーごめん、スレ読んでなかった。 業務でVC6使うなら、VC6の本でいいね。 基本部分以外はVC2005じゃ使えないから、なんとかしてVC6を手に入れることだね。 MSDNには入ってるんだっけ?
740 :
nmn :2006/08/04(金) 00:38:29
なるほど…。アドバイス有難うございます。 今の業務で使っているのはVC6の方です。 VC6の方で勉強していきます!! あとはソフトか…。 あ、ちなみに一概には言えないのは承知の上で、 現状でVC6での業務って多いんですかね? 最近はVC2005なんですか?
つーか、VC6ってライセンスは特定個人に与えられるもので、コピー自由だから、 会社に断って家のPCにインストールさせてもらいなよ。
742 :
nmn :2006/08/04(金) 00:42:56
定かではありませんが、たぶんMSDNには入ってないと思われます。 今のプロジェクトの場合、 ライブラリは自分で作ってるとか言っておりました。
743 :
nmn :2006/08/04(金) 00:44:20
コピー自由なんですか? なるほど!有難うございます。 明日会社で聞いてみます。
>>743 会社の人は知らない可能性があるから、もしそうなら、コピーが自由だってことは
EULA.txtに書かれてるって教えてやれ。
会社にひとつのパッケージしかなかったりして・・・
746 :
nmn :2006/08/04(金) 00:56:22
おぉ!知りませんでした! ここで質問してみてよかった! ありがとうございます!!
明日上司に言って規約違反だったことが判明して
>>746 の首が飛ぶに1.dll
VC6の案件は急速に減ってきていますが、公的機関向け制御系を中心に根強い人気を保っています。
>>747 んな適当なこと言ってないで、早く就職したらどうだ?
751 :
デフォルトの名無しさん :2006/08/04(金) 18:03:01
Visual Studio Professinal Editionです。
VC++を学ぼうと思い、猫でもわかるプログラミングからやろう考え一番最初のをコピペしたところ
ttp://www.kumei.ne.jp/c_lang/sdk/sdk_00.htm ←このコードです。
hWnd = CreateWindow(szClassNme,
"猫でもわかるプログラミング",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
この部分の一番したのNULLにエラーがでます。
error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [25]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
どうすればいいでしょうか?.NET2003ではこんなエラーでなかったので困ってます・・・お願いしますm(_ _)m
752 :
デフォルトの名無しさん :2006/08/04(金) 18:04:16
>>751 すいません、事故解決しました。
UNICODEからSJISをデフォルトにすればいいんですね、なんか2005色々めんどくさくなってますね・・・
_T("猫でもわかるプログラミング")
_T()入れずに使いたいんだけどどうすればいいの? なんかマクロ定義しればいい?
だって、そのマクロが_T()じゃないか
>>754 一切UNICODEでコンパイルすることが無ければ付けなければ良いだけの話し
757 :
756 :2006/08/04(金) 20:47:16
ってUNICODEでやりたいときの話かな?ごめん知らない。
いや、UNICODEなんか使いたくないんだけどchar*渡すと怒られるから何だかなーと LPCSTRが、みんなLPCTSTRになっちゃってるんだよね 使いにくいったらありゃしない
BCC DeveloperとVC2005ExpressじゃVCの方がいいのかな?
762 :
デフォルトの名無しさん :2006/08/05(土) 02:28:38
Microsoft Visual C++ 2005 Express Edition 使ってます。
fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory
と出てしまいます。
Microsoft Platform SDKも入っていてその中にwindows.hも入っています。
Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/ このサイトの通りにやってもだめでした。
どなたか分かる人いたらお願いします。
stdio.hがsdtio.hになってたとかいうオチ?
764 :
762 :2006/08/05(土) 03:03:45
>>763 #include <stdio.h>
#include <windows.h>
main(){
}
これでコンパイルかけてもダメです。
765 :
デフォルトの名無しさん :2006/08/05(土) 03:05:10
亀田の八百長の件を初めて知った人に改めて教授(色んなところにコピペしてね) <亀田のカラクリ> 1戦目 デンナロン・シスソバ(タイ) 戦績 0勝2敗 ○ 1回44秒KO 2戦目 プラカルン・ツインズジム(タイ) 戦績 0勝3敗 ○ 1回1分12秒KO ※日本ボクシングコミッション2005年度招聘禁止選手(八百長疑惑) 3戦目 サミン・ツインズジム(タイ) 戦績 0勝4敗 ○ 1回1分48秒KO 4戦目 ダオチャイ・KTジム(タイ) 戦績 0勝5敗 ○ 10回判定 ※日本ボクシングコミッション2006年度招聘禁止選手(八百長疑惑) 5戦目 ノパデッチレック・チュワタナ(タイ) 戦績 0勝0敗 ○ 2回59秒KO 6戦目 ヨードゲン・シンワンチャー(タイ) 戦績 0勝4敗 ○ 1回2分10秒KO 7戦目 サマン・ソー・チャトロン(タイ) 戦績 46勝7敗1分 ○ 1回2分59秒KO ※チャトロンは35歳、3年前に1度引退。復帰後3連敗 8戦目 ワンミーチョック・シンワンチャー(タイ) 戦績 12勝2敗 ○ 3回50秒TKO ※亀田は防衛戦を一度もせずに王座返上。一部のライターや元プロからワンミーチョックの手数が明らかに少なかったと指摘される。 9戦目 ノエル・アランブラッド(ベネズエラ)戦績 21勝4敗1分1無効試合 ○ 7回TKO ※アランブラッドは元WBAミニマム級チャンピオンで亀田(フライ級)とは2階級差 10戦目 カルロス・ボウチャン(メキシコ)戦績 16勝12KO5敗 ○ 6回2分20秒KO ※ローブロー疑惑。試合終了後亀田親父がとんでもない剣幕で相手陣営に怒鳴り込む(ブック破りで切れた?) 11戦目 カルロス・ファハルド(ニカラグア)戦績 15勝10KO6敗1引 ○2回1分28秒TKO ※ファハルドの最終戦は2005年6月17日(1年近くのブランク有り)で、もともとミニマム〜Lフライ級の選手 昨日亀田が1階級下げて(ライトフライ)タイトルマッチを争ったランダエダは元々最軽量のミニマムの選手で 亀田とは実質2階級差。本来は去年の12月で引退予定だった選手。
>>765 こんなところで妄想八百長おつかれさま。
768 :
764 :2006/08/05(土) 04:05:45
>>767 できました!ありがとうございます。
corewin_express.vspropsファイルの修正のところでミスしてました。
どうもありがとうございmasita。
>>759 返事遅くなったけどアリガトン!
昨日は久々に早く寝ちゃって今起きた。
質問させてください。 VC++に興味を持ち、VCEEをインストールしました。 そんで、いざやるぞ!って思ったんですが、インターネット上で VCEEに関する勉強HPが見当たりません。 VC6.0に関するHPはいくつも見つけたのですが、 これは流用ってできませんよね?(ポインタの表記の仕方とかが違うみたいです) どこか、よいHPはありませんでしょうか。
>>770 ただのC/C++コンパイラとして使うのであれば(C++/CLIを使うつもりで無ければ)、
普通のCやC++の入門のWebサイトは使えるぞ。
772 :
770 :2006/08/05(土) 22:40:42
// RO.cpp : メイン プロジェクト ファイルです。 #include "stdafx.h" #include "Form1.h" using namespace RO; [STAThreadAttribute] int main(array<System::String ^> ^args) { // コントロールが作成される前に、Windows XP ビジュアル効果を有効にします Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // メイン ウィンドウを作成して、実行します Application::Run(gcnew Form1()); return 0; }
773 :
770 :2006/08/05(土) 22:44:44
申し訳ありません、途中送信してしまいました。
今、猫さんのHPをみながら、
*****
#include <stdio.h>
int main(void)
{
printf("私の名は粂井です\n");
return 0;
}
****
というコードを記述してみようと思いました。
ところが、VCEEにて新規プロジェクトを作成し、いざやってみようと
思ったら、メインソースファイルが
>>772 のような形になっており、
はてさて、int main{なんたら}のなんたら部分を消してしまってもよいものか
困っています。このような理由で、先ほどのような質問をさせていただいた次第です。
>>772 それはC++/CLIのプログラム。はっきり言うとC++/CLIには
まだ入門向けのWebサイトも本もないし、当分できないであろう。
だって素のC++の上に、更にC++/CLIと.NET Frameworkの知識を積み重ねで要求されるから。
普通のC/C++使ったプログラムを作る気なら、
Win32 コンソールアプリケーション・Win32 アプリケーションでプロジェクト作れよ。
775 :
770 :2006/08/05(土) 23:14:38
私が作ろうとしていたコードがまさにC++/CLIだったわけですね_/ ̄|○ ご指摘ありがとうございました。 ここはひとつ、おっしゃるようにWin32 コンソールアプリケーション・Win32 アプリケーションで プロジェクトをつくり、C/C++に慣れてみようと思います。 ちなみに、Win32 コンソールアプリケーション・Win32 アプリケーションで作成した プロジェクトは、操作はやっぱりコマンドプロンプトのみで、 フォームを作成したりとかはできないですよね?
777 :
770 :2006/08/05(土) 23:30:09
了解です、大佐
778 :
770 :2006/08/05(土) 23:31:24
また、途中送信してしまいました。 いろいろありがとうございました。 猫さんのHPを見て頑張ってみます。
779 :
デフォルトの名無しさん :2006/08/06(日) 20:36:09
マルチメディアキー付きキーボードのMultimedia Keyの発するWM_ってなんですか?
Spy++で調べてみれば?
781 :
sage :2006/08/07(月) 07:31:40
Visual C++.NET の CFormViewで画面とクラスを複数用意し、 画面上にある複数のボタンを押すことにより画面とクラスを切り替え、それぞれ違う処理をしようと思っていますが、 CFormViewのクラスの追加はできましたが、画面とクラスの切り替えがうまくできません。 最初の画面の、ボタンを押されたときの処理にいろいろ打ち込んでいるのですが‥ どなたか参考になるご意見をお願いいたします
追加したクラスの実体をどこか(最初の画面とか)で作ってやって そいつの表示用メソッドを呼んでやればいいよ。 たとえばこんな感じ。 CMyFormView* pMyFormView; pMyFormView = new CMyFormView(this); pMyFormView->ShowWindow(SW_SHOW); クラスを追加するというのは雛型を作っただけ見たいな状態なので、 実際にはどっかのクラスのメンバ変数として用意してやるとか、 ポインタ変数をメンバに定義してnewしてやるとかして実体を作って やんないと何も処理が出来ない。
テキストファイルから内容を読み込み、それを配列に格納する関数を作ろうと思っているのですが、どうも上手くいきません。 #include <iostream.h> #include <fstream.h> #include <conio.h> void FileRead(char *FileName,char *File) { char c; char *file_name = *FileName; int i=0; ifstream MyFile(file_name); while(MyFile.get(c)) { i++; cout << c; *(File+i) = c; } } int main(void) { char File[255]; char *FileName = "test.txt"; FileRead(*FileName,*File); cout << File[0] << endl; getch(); return 0; } どうすればよろしいのでしょうか。ご提示お願いいたします。
>>783 素直に入門書辺りを読み直した方がいいと思うよ。
突っ込みどころだらけで説明する気にもなれないよ。
>>783 C++使えるようになりたいんなら
C言語のポインタの勉強を基本からやりなおせ・・・
C++スレ行った方がいいだろ
788 :
781 :2006/08/07(月) 21:37:32
>>782 さま
ありがとうございます
名前をsageにしている‥僕何やっているんだろ
789 :
デフォルトの名無しさん :2006/08/09(水) 00:53:26
visual studio 2005で、CとWIN32APIで書いてます。 タイトルバー無しのダイアログを表示させたいのですが、背景が灰色ではなく、透明になってしまいます。 ダイアログにあるボタン、テキスト、エディットボックス部分は、背景は透明ではなく、ちゃんと灰色に表示されます。 以下が、ソースコードの一部です。何がおかしいのでしょうか? リソーススクリプト \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ IDD_HISCORE DIALOGEX 0, 25, 119, 86 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN PUSHBUTTON "OK",IDOK,37,69,42,15 CTEXT "あいうえお",IDC_STATIC,24,3,70,8 CTEXT "かきくけこ。",IDC_STATIC,24,12,72,8 EDITTEXT IDC_EDIT1,14,40,91,12 END \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ダイアログの表示する関数 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ DialogBox( (HINSTANCE)GetWindowLong(hWnd , GWL_HINSTANCE) , MAKEINTRESOURCE(IDD_HISCORE), hWnd , DialogProcHiscore ); $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
790 :
デフォルトの名無しさん :2006/08/09(水) 01:42:05
質問 float a = 1.0f; float b = 0.1f; while(1){ a = a / b; } とループさせながらウォッチでaの値を見ていると 1.000e-038#DENとでてくるのですが #DENの意味は何ののですか?
deny
DENMARK
DENDENMUSI
>>790 aの値は増えていくんじゃないのか?
んで、1e308を越えて演算オーバーフローが起きたんじゃないか?
795 :
デフォルトの名無しさん :2006/08/09(水) 12:40:33
Visual Studio 2005 Express Edition は、 Windows Me で動くのでしょうか。
797 :
795 :2006/08/09(水) 12:47:47
798 :
790 :2006/08/11(金) 00:48:10
>>794 a = a / b; じゃなくて
a = a * b; でした
floatの範囲を越えてたみたいですね
と思ったら、ループを続けたら以下の数値が
出てきたのですが
1e-038#DEN
1e-039#DEN
1.00001e-040#DEN
9.99967e-042#DEN
1.00053e-042#DEN
9.94922e-044#DEN
9.80909e-045#DEN
1.4013e-045#DEN
0
floatの範囲外は
>>791 でのDENYで
正しくないということなのかな
denormalized numberやろ。 値が小さすぎて正規化数では表せませんってこと。
800 :
790 :2006/08/13(日) 17:26:58
>>799 denormalized numberでググッたらわかりました
ありがと
ttp://www31.ocn.ne.jp/~yoshio2/vcmemo17-1.html ここのタスクトレイ常駐アプリサンプルをコンパイルしてみたのですが、
「初回の例外が発生しました : 0xC0000005: 場所 0xffffffff を読み込み中にアクセス違反が発生しました。」
というメッセージが終了後に出ます。
けれども出力欄には上記メッセージが出るのですが、
中止とか継続とかの例のダイアログは出ません。
Releaseで実行すると何事も無く終了します。
このアクセス違反メッセージは無視していいのでしょうか?
ちなみに
((CMainWnd*)m_pMainWnd)->Create();
の行をコメントアウトすると消えます。
何かヒントをいただければと思います。よろしくお願いいたします。
Athlon64の自作機
WindowsXP Professional SP2
Visual Studio .NET 2003 Professional
>>801 m_pMainWndがNULLかどうか、デバッグで確認してみようか。
>>802 レスありがとうございます
とりあえず、リークがあったのでCMainWnd::PostNcDestroy()の最後でdelete thisしています。
m_pMainWndがNULLかについては、CTrayIconApp::ExitInstance()を追加して
そこでブレークした限りではNULLでしたが…もっと前でしょうか?
crt0dat.cのvoid __cdecl __crtExitProcess ()の最後の行、ExitProcess(status)の中で発生しているようです…
>>803 >((CMainWnd*)m_pMainWnd)->Create();
の段階でNULLなら、そりゃぁアクセス違反も起きるわなぁ。
まさか、解放した後のポインタを見てないだろうね。
806 :
801 :2006/08/16(水) 15:47:29
>>805 ぃぁそこでNULLだったら盛大にダイアログが出ますから…
それにそこは一つ上でnewしてる直後ですし
終了の最後の段階でアクセス違反が、デバッグ版では出ているのに、
そういうメッセージが出力欄に出るだけで素通りされ、何をどうやっても
止まってくれないんです
一応はアセンブラのウィンドウも覗きましたが、さすがに理解不能で
デバッガが止めてくれない例外というのは何者なのだろうか、と
ぬるぽならともかく、0xffffffffてのがよく解らないな。 ちなみに、WinXPProSP2/VS2005Proだと、例外は発生しなかった。 デバッガが止めないという事は、内部でハンドリングされている訳だし、 気にするな、てことでいいんじゃね?
>>807 なんですとー!?
まあ….NET2003はちょっと怪しいところがありますしねえ
だからって初代はもっと怪しいですが
とりあえずデバッガ公認ということでとりあえず気にしないことにします。
ありがとうございました
809 :
デフォルトの名無しさん :2006/08/17(木) 01:27:36
VS2005です。 メニューからファイル→開く でファイルを参照させて画像ファイルを開いてそれをPictureboxに表示させたいんですが どう書けばいいでしょう・・・メニュー自体は作れたのですが、それを押した時のイベントが初心者なので全然わかりません(TT) 参考になるHPとかでもいいんで教えてくださいー
810 :
809 :2006/08/17(木) 01:28:29
ちなみにMFCのダイアログベースで作っております。
やなこった
812 :
デフォルトの名無しさん :2006/08/17(木) 13:26:40
パンナコッタは旨い
デバッガの表示がおかしくなった。 int*がNULLのはずがfalseってなるし、 ポインタがNULLなのに、<未定義の値>ってなる。 前は、未定義の値なら、そのおかしな数値がそのまま表示されたのに。 やってられん(;´Д`)
814 :
813 :2006/08/18(金) 19:13:36
自己解決しました。VCめ。
代入演算子を下記のようにオーバーロードし、 自己代入を行うと、 オブジェクトは一つなのに 文字列を格納するための動的なメモリ領域が二つ分割り当てられると本にあるのですが、 sDatを一度deleteしてからnewしてるので、そんなことはないと思ってしまうのですが。 どう解釈したらよいのでしょうか……。 よろしくお願いします。 // MyStringクラスの定義 class MyString { char *sDat;// メンバ変数 public: MyString();// コンストラクタ ~MyString();// デストラクタ void operator=(const MyString &mstr);// 代入演算子のオーバーロード }; // 代入演算子のオーバーロード void MyString::operator=(const MyString &mstr) { // 古い文字列を削除。(ここでsDatは消える?) delete [] sDat; // 新しい文字列を格納。 sDat = new char[lstrlen(mstr.sDat) + 1]; lstrcpy(sDat, mstr.sDat);
} int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // オブジェクトを宣言 MyString ms1; // 文字列を代入 ms1 = "Hello"; // 自己代入(これで文字列が二つに?) mc1 = mc1; ... }
領域が二つ分割り当てられるようには見えないが deleteされた領域にアクセスすることになるな
>>818 ちょ、なにサラっとGJしてんの?
ありがとう
突然ですまない 時間が無いんだ Visual C++ 2005 Express Edition ってFramework不要のアプリって作れるのか? 作るときには何か別途でダウンロードとかあるのか?
奇遇なのか俺はきのう同じようなことをしてた。 このサイトを見ながら tp://www7a.biglobe.ne.jp/~lshen/EternalWindows/else/VC%202005.html
そんなどこの誰が書いたのかも分からんページを参考にしないで、 素直にMSDN見ろよ。
MSDNめんどくさい
site:microsoft.com付けてググればいいだけのこと。
829 :
デフォルトの名無しさん :2006/08/21(月) 01:39:55
すいません。過去に同じような質問があったのですが、 プログラムが上手く実行できなかったので質問します。 Win32アプリケーションを作ろうとして、 新規プロジェクトからWin32アプリケーション(コンソールではない。)を設定 test.cpp(Hello,Worldなど超簡単プログラム)を作って コンパイル→実行→思惑通り起動! とここまでは良かったのですが、Visual C++ 6.0を終了させて、 再起動の後、先ほどのtest.cppを開いて実行すると、以下のようなエラーで実行できません LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/test.exe : fatal error LNK1120: 外部参照 1 が未解決です。 ちなみにコンパイルではエラーなしです。 初めにプロジェクトを作るときはどのプログラムでも実行できたのですが、 一度VisualC++を終了させてから再起動してプログラムを起動すると 二度と実行できなくなります。 どうすれば再起動後もプログラムを走らせることができますか?
main と WinMain について調べてみよう。
832 :
デフォルトの名無しさん :2006/08/21(月) 03:18:16
>>830 Visual Studio.Netではなく、Visual C++なので
ソリューションファイル(.sln)が作成されないのですが・・・
>>831 mainはC言語、WinmainはWindowsアプリケーションのエントリーポイントという
ことはわかったのですが、ウェブ上で発見したどのようなWinアプリも
>>829 の症状がでて実行できなかったです。ちゃんとWinmain関数を使ってるのですが・・・
Visual Studio.Netを使わないとWinアプリは作れないということなのでしょうか・・・?
(プロジェクト名).vcproj というファイルは無いのか? それを開けばよし
>>832 VC++6.0までなら、dswかdspを開けばいい。
VC.NETからはdsw->sln、dsp->vcproj等になっている、はず。
ソースだけ渡されたので、とりあえずコンソールアプリとしてビルドされた、
でもmain見つからない、って所か?
835 :
デフォルトの名無しさん :2006/08/21(月) 16:29:38
Microsoft Visual C++ 6.0 を使っているのですが、 エディットボックスをある条件下で「編集不可」にしたいのですが、どうすればできますか?
SetReadOnly
838 :
デフォルトの名無しさん :2006/08/21(月) 16:39:19
>>836 さん
その定数を使う関数も教えて頂けますか?
>>838 "EM_SETREADONLY"でぐぐれば、使用例がある。ちょっとしたことはホント便利になった。
841 :
デフォルトの名無しさん :2006/08/22(火) 00:18:33
visual studio 6.0 Enterprise Editionをインストールしています。 Disc2,Disc3って何に使うかご存知な方おりましたら、 ご教授願います。
843 :
デフォルトの名無しさん :2006/08/22(火) 00:32:18
なんかファイルがいろいろ入ってるってことはわかるんですが・・・。 セットアップファイルのEXEも起動しないですし・・・。
MSに訊け
GDI+使うとき、リソースに入れたbitmapを読み込むのどうすればいいですか? CPaintDC dc; Graphics graphics(dc.m_hDC); Bitmap* bmp = new Bitmap(IDB_BITMAP1); ←これどうにかしたい graphics.DrawImage( bmp, 0, 0 );
VC++.net2003を使用し、Windowsアプリケーションを作成しています。 OSは、WindowsXPです ログインユーザーの違いによりエラーが出てこまっています。 1、管理者権限でログインした場合 ・EXE実行(Releseで作成したもの)すると、正常に動作します。 ・ソース実行(DEBUG)しても正常に動作します。 2、一般ユーザー(制限ユーザー)の場合、 ・EXE(Releseで作成したもの)をクリックしたとたんに "初期化に失敗しました。アプリケーションエラー (0xc0000022)"の Windowsエラーが発生し、起動さえできません。 ・ソース実行でも(DEBUG)、初期化に失敗しましたと出て、 落ちている個所さえ特定出来ません。そもそも、ソースが実行できていない感じです。 DLLの読み込み等で失敗しているのでしょうか? ちなみにWindows2000でも同じ現象が発生しました。 普段開発は、管理者権限で行っていますが、 実際動作させるのは制限ユーザーです。 何が影響しているのか、わかりません。 管理者権限でうまく動作しているのでソース自体には問題がないと思われるのですが。。。 アクセス権限等関係あるのでしょうか? どなたかご存知の方、解決方法を教えてください。
>>847 実際のプログラムだとRenshuGDIPlusってクラスに
Bitmap* m_resourceBitmap;
ってメンバ用意してます。
コンストラクタでリソースからBitmapクラス作ろうとしてるので
さっきの例ではnewしてたのです。
実際RenshuGDIPlusコンストラクタで
HINSTANCE hInst = GetWindowLong( this->m_hWnd, GWL_HINSTANCE );
m_resourceBitmap = new Bitmap( hInst, IDB_BITMAP1 );
ってやったらコンパイラからお母さん許しませんって出ました。orz
>>847 ありがとう、解決しました。
@
m_resourceBitmap = new Bitmap( hInst, (WCHAR*)MAKEINTRESOURCE(IDB_BITMAP1) );
@'
m_resourceBitmap = new Bitmap( hInst, (WCHAR*)IDB_BITMAP1 );
@と@'のどちらでもできました。
>>848 どうせデストラクタでdeleteするのだろう。ならやはりポインタにする必要ない。
普通にコンストラクタの初期化リストで初期化すればいいだけではないか。
>>849 MAKEINTRESOURCEW使えばキャスト不要。
はじめまして 学校でVCを使用する事になったのですが、
>>851 そうですか。
それで何か質問でもおありで?
*(アスタリスク)っていうのはポインタを表す時に使われるみたいですが、 変数に対して左に書くような、本にありました。 例えば、変数aに対して、ポインタは*a。(aの左に書いてる) 勉強していて、この*が変数の右に来ることがあるみたいですが、 どういう意味なのかわかりません。 void RenderObject(void *p_void) { struct Object *p=(struct Object *)p_void; などと本にあって、 ↑この*の 使い方ってどういう意味なのでしょうか? 質の低い質問で申し訳ないですが、よろしくお願いします。
854 :
デフォルトの名無しさん :2006/08/23(水) 22:55:34
?
855さん、即レスありがとうございます。 ぐぐって調べます。m(_ _)m
どう見ても"変数"の右には来ていない。
858 :
855 :2006/08/24(木) 01:03:21
見直したらレスの内容がずれてたかも int *p; とした時、pの型は int * で この*は型がポインタであることを表している んで (struct Object *)p_void はp_voidの型をObjectのポインタにキャスト(型変換)してる
vcと関係ないw
俺の人生もキャストしたいんですが何か?
別に、何も
>>860 static_castしようとしたら面接で落とされ
dynamic_castしたら警察に通報され
やけくそになってreinterpret_castしたら殺された
そんな人生。
SDIのCMainFrameにOnCreateClientをオーバーライドして、 スプリッタウインドウ作り左右にFormViewを配置しました。 左のViewにはボタンコントロールが2つ。 ─────────────────────────── │ ×│ ─────────────────────────── │ │ │ │ │ │ │ ボタン1 │ │ │ │ │ │ ボタン2 │ │ │ │ │ │ | │ │ | │ │ | │ │ | │ ─────────────────────────── ボタンコントロールで右のViewを切り替えたい場合は どうやればいいのでしょうか? スプリッタ使う場合の右のViewを複数作る時点から壁にぶつかってしまいました。
865 :
864 :2006/08/26(土) 03:07:10
AAは次からやめとこう・・・
866 :
デフォルトの名無しさん :2006/08/29(火) 09:10:42
867 :
デフォルトの名無しさん :2006/08/29(火) 11:57:43
質問です。 今日インターンシップの事前研修にいったら「開発はVisualC++を使ってる(結構うろ覚え)」といわれました。 だけどボクのパソコンはmac…本格的なインターンシップは来週からなんですが独学でVisualC++を勉強したいんです。 macでのVisualC++を勉強する環境は無いでしょうか?
macで仮にVC++が動いたとしても exeを実行できないから意味が無い。
VCじゃないと駄目なら何らかの方法でWindowsを動かすしかないわな。
今更始めても遅い、とか酷いことを言ってみる。 macで何かしらプログラム組んでたなら、大丈夫じゃね?
MacならEclipseでjavaとかやっとけば良いような
Winマシンなんて3万もあれば中古でそれなりのがあるじゃん
我が社では一万円以下の中古NotePCを取り扱っております。
マジか!動作確認の為に3万でWin2000マシンかったのにx
875 :
873 :2006/08/29(火) 14:38:27
正直、素人にはお勧めできない。 #知っている人は知っている、車の名前みたいな店名だw
メニューバーを作ろうとすると、リソースヘッダの部分で、 \resource.h() : fatal error RC1004: unexpected end of file found というエラーが出るんですがどうしてでしょうか・・・。
>>876 RC1004 でググろうとか思わないのかい?
878 :
デフォルトの名無しさん :2006/08/29(火) 21:24:21
プログラムでマウスの座標を変化させるにはどうすればよろしいでしょうか。
SetCursorPos
880 :
デフォルトの名無しさん :2006/08/29(火) 23:29:20
SDKは少し分かるのですが、MFCは全くの初心者です。 試しにボタンを押すとメッセージボックスが出るようにしようと 思ってMessageBox()を使ってみたら、エラーが出てコンパイル 出来ません。 少し分かる人に聞いたところ、CWnd::MessageBox が呼び出されている ためとのことですが、SDKの(?)のMessageBox() を呼び出すには どの様に記述すれば良いのでしょうか?
::MessageBox()
>>881 それでいけるんですか。
ありがとうございます。
afxMessageBox()は知っていたのですが、引数が違うし
しっくりこないなと思っていたんです。
MFCやる前にC++勉強した方がいいよ
んーまあMFCやりながらC;;勉強してもいいし
void Draw(void) { //フレームレートを60にする static DWORD NowTime,PrevTime; NowTime = timeGetTime(); if( (NowTime - PrevTime)<1000/60 )return; PrevTime = NowTime; //以下いろんな処理 } int WINAPI WinMain() { //いろんな処理 while(1){ if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) { if(!GetMessage(&msg,NULL,0,0)) break; TranslateMessage(&msg); DispatchMessage(&msg); }else{ Draw(); } } //いろんな処理 }
886 :
デフォルトの名無しさん :2006/08/30(水) 01:14:16
885の続き と、ある書籍にサンプルコードがあったんですが、 PrevTime という変数は初期化もされずに使われています。 また、PrevTime = NowTime としてるんですが、 PrevTime も NowTime もDrawのローカル変数なので、 ループでDrawを呼び出す毎に変数PrevTimeとNowTimeは破棄されるから、 なんの意味もないような感じに見えるのですが・・・ この書き方じゃ、秒間60フレームにするって動作は満たせませんよね? グローバルで宣言しないと期待の動作はしませんよね?
staticについて勉強してくるのがよろしいかと。
static
>887 888 的確なご回答ありがとうございました。
C++/CLI入門 具具ってもなさそう
891 :
デフォルトの名無しさん :2006/08/30(水) 22:25:27
MFCのリストビューを使っています。 リストビューのアイテムをクリックして編集しようとしています。 CListCtrl::EditLabel で編集出来るのは分かっているのですが、 一列目しか編集出来ません。 二列目以降を編集したい場合、エディットボックスを手動で 貼り付けるしかないのでしょうか? その場合、エディットボックスに与えるべきサイズと位置は どのようにして取得すればよいのでしょうか?
>>891 そういうことをやった例がCodeGuruにいくつかある。
但し、高機能すぎて何をやっているのかよく判らない例と低機能で見栄えが悪い例に大別される。
まぁ、丹念に探せばそれなりのが見つかると思う。
893 :
デフォルトの名無しさん :2006/09/02(土) 09:41:22
VC++で、ATMの画面見たくタッチパネル方式で、全画面表示&画面遷移する アプリケーションを作りたいのですが簡単な方法はないでしょうか?
>>893 高速道のSAや駅などにある情報端末の多くが極普通にVC++で作られている。
#只のCGIなのも多いけど。
それらは大抵、マウスの代わりにタッチスクリーンを使っているだけだ。
結論:
作るだけなら普通のアプリを作るのと変わらない。
>>894 ありがとうございます。
タッチパネル方式というのは比喩でして、要は画面遷移をさせたいのです。
今までダイアログベースのアプリケーションしか作ったことなくて
この辺の知見がないのです。イメージとしてはSDIのクライアント領域に
コントロールが並んでいて「進む」ボタンを押すごとに画面がどんどん
切り替わっていくみたいなイメージです。。。
プロパティシートでウィザードにする MFCならCPropertySheet
898 :
デフォルトの名無しさん :2006/09/02(土) 11:07:16
同じソースから静的ライブラリ (libxxx-static.lib)と DLL(libxxx.dll とそのインポートライブラリ libxxx.lib) を生成するとき、それぞれのプロジェクトに同じように ソースファイルを追加しますよね? あるオープンソースのライブラリのソースツリーを 眺めていたら、*.cpp と *.h は静的ライブラリの方にだけ 加えれていて、動的ライブラリは依存関係で静的ライブラリ に依存するように設定してあとはモジュール定義ファイル libxxx.def が一つだけ追加されていたのですが、 このような方法で DLL を生成することができるのでしょうか?
>>898 できる。所詮静的ライブラリはオブジェクトファイルを固めただけのようなもの。
OBJが全く無く、LIBだけでもEXE/DLLは作れる。
901 :
デフォルトの名無しさん :2006/09/02(土) 14:08:09
>>900 マジスカ。
つーことは特に最適化とかを変えるわけじゃなければ、
まず静的なライブラリを作って、それを DLL に
変換できるってことっすか??
マジカヨとおもって
>>898 で言及したライブラリを
ビルドしてみたら、DLL 用のプロジェクト
(これ自体にはモジュール定義ファイル libxxx.def
しか含まれてないけど、静的なライブラリのプロジェクト
に依存してる)からはなんにも生成されませんでした orz
>>895 ShowWindow(SW_HIDE);
ShowWindow(SW_SHOW);
903 :
デフォルトの名無しさん :2006/09/02(土) 18:18:27
.NET2003と2005で、一体ナニが変わったんですか?
もっさり
905 :
デフォルトの名無しさん :2006/09/02(土) 19:54:40
>>904 同じソースを同じ最適化オプションでコンパイルしても
できたアプリを実行すると 2005 の方が遅くなってるのは、
やっぱりマルチスレッド用のランタイムしか提供されて
いないからですか?
以前のでシングルスレッド、マルチスレッド用のランタイム使って調べろ!
908 :
デフォルトの名無しさん :2006/09/02(土) 22:35:00
C:\Documents and Settings\Administrator\デスクトップ\test.txt → C:\\Documents and Settings\\Administrator\\デスクトップ\\test.txt のように変換するAPIみたいなのってありますか? GetSaveFileName関数などで取得したファイルパス名で fopenしたいのですが
ソースに記述するときは、\は\で表せないから\\と記述するだけだから、 配列に入ってるものを変換してやる必要はない。
912 :
911 :2006/09/02(土) 22:44:18
勢いで書いた、今はヌコと遊んでいる
913 :
908 :2006/09/02(土) 23:07:49
ああ、俺の勘違いでしたorz ということは、GetSaveFileNameで取得したファイル名で fopenが失敗するのは、別の原因があるってことでしょうか・・ 俺の脳みそでは他に原因が思いつかないorz
ソース
fopenじゃなくてapi使えば無問題
916 :
908 :2006/09/02(土) 23:19:43
ソースの一部です OPENFILENAME ofn; HANDLE hFile; DWORD dwAccBytes; char buf[MAX_BUF_SIZE]; char szFileName[255]="kakikomi.txt"; char szFile[255]="test"; memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.lpstrFilter = "text(*.txt)\0*.txt\0All files(*.*)\0*.*\0\0"; ofn.lpstrFile = szFileName; ofn.lpstrFileTitle = szFile; ofn.nFilterIndex = 1; ofn.nMaxFile = sizeof(szFileName); ofn.nMaxFileTitle = sizeof(szFile); ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY; ofn.lpstrDefExt = "txt"; ofn.lpstrTitle = "名前を付けて保存"; if(GetSaveFileName(&ofn) == 0) return -1; hFile = CreateFile(szFileName, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); strcpy(buf,szFileName); FILE *fp; fp=fopen(buf,"wb"); if(fp==NULL){ MessageBox(NULL,"ファイル作成失敗",buf,MB_OK); return -1; }
917 :
908 :2006/09/02(土) 23:24:13
>>915 apiというと、WriteFileとかでしょうか
シリアライズで保存したかったのですが
fwriteを利用する方法しか知らないもので・・
なんでCreateFileしてからfopenしてるわけ? 先にCreateFileすると、CloseHandleするまでは、そのファイルを ロックするわけで、後からきたfopenで開けないのは当然の話。
919 :
908 :2006/09/02(土) 23:35:20
>>918 それには気づきませんでした
早速CreateFileをコメントアウトしたら動きました
ありがとうございました!
ネット上のRSSのXMLってInternetReadFileで普通に読めますか?
関係ないけどstrcpyも無駄で気持ち悪い
922 :
908 :2006/09/02(土) 23:43:35
923 :
デフォルトの名無しさん :2006/09/03(日) 04:17:38
日付の差を求めるような関数を書こうと思っているんですが そういった機能が実装されているクラスとかって標準でありますか? 無ければSYSTEMTIME構造体のメンバを比べて 作ろうと思ってます
924 :
923 :2006/09/03(日) 06:33:00
CDiffTimeだかCTimeDiffだか、CTimeの差分用のクラスもあった希ガス。
CTimeSpan
_, ,_ スパーン ( ‘д‘) ⊂彡☆ CTime ===========================)) Span
boost って書くと boost 厨っていわれるからやめとくよ
930 :
926 :2006/09/04(月) 14:39:08
>>928 秀逸な駄洒落THX。
これでもう、忘れないよ。
931 :
デフォルトの名無しさん :2006/09/04(月) 23:51:22
上級者の皆さん MFCの最小プログラムを書いて見たんですがもっと小さく出来るでしょうか? #include <afxwin.h> #define p public class M:p CFrameWnd{p:M(){Create(0,"");}DECLARE_MESSAGE_MAP()};class A:p CWinApp{p:BOOL InitInstance(){M*w=new M;w->ShowWindow(m_nCmdShow);m_pMainWnd=w;return 1;}};BEGIN_MESSAGE_MAP(M,CFrameWnd)END_MESSAGE_MAP();A a;
BOOLをintにすれば1文字減る。
afxwin.hをa.hにリネームする又はコピーする。
aだけでも良かったか。
InitInstanceの中身はこういう風にできると思う。 (m_pMainWnd=new M)->ShowWindow(m_nCmdShow);
classをstructにすればpublicはいらなくなるね。
>>934 リネームですか〜ちょっと反則ぎみな気もしますが一応適応
>>936 それはいけてますね
今のところ241バイト
改行コードを0dのみにするのもアリかもしれませんね
#include <a>
#define p public
class M:p CFrameWnd{p:M(){Create(0,"");}DECLARE_MESSAGE_MAP()};class A:p CWinApp{p:int InitInstance(){(m_pMainWnd=new M)->ShowWindow(m_nCmdShow);return 1;}};BEGIN_MESSAGE_MAP(M,CFrameWnd)END_MESSAGE_MAP();A a;
>>937 !!!素晴らしい 217バイト
#include <a>
struct M:CFrameWnd{M(){Create(0,"");}DECLARE_MESSAGE_MAP()};struct A:CWinApp{int InitInstance(){(m_pMainWnd=new M)->ShowWindow(m_nCmdShow);return 1;}};BEGIN_MESSAGE_MAP(M,CFrameWnd)END_MESSAGE_MAP();A a;
個人的にはCR ('\x0d', '\r')よりはLFの方がいいな。 ところでこういうことはできるか? #define m(p) p##_MESSAGE_MAP struct M:CFrameWnd{M(){Create(0,"");}m(DECLARE)};struct A:CWinApp{int InitInstance(){(m_pMainWnd=new M)->ShowWindow(m_nCmdShow);return 1;}};s(BEGIN)(M,CFrameWnd)s(END)();A a;
CFrameWndから派生させる必要はあるのかな? CFrameWndを直接newするのは?
>940 発想は素晴らしいし、コンパイルも通りますが残念ながらサイズは増えてしまいました 222バイト #include <a.h> #define d(x) x##_MESSAGE_MAP struct M:CFrameWnd{M(){Create(0,"");}d(DECLARE)()};struct A:CWinApp{int InitInstance(){(m_pMainWnd=new M)->ShowWindow(m_nCmdShow);return 1;}};d(BEGIN)(M,CFrameWnd)d(END)();A a;
派生をやめてメッセージマップを削除しました158バイト #include <a.h> struct A:CWinApp{int InitInstance(){((CFrameWnd*)(m_pMainWnd=new CFrameWnd))->Create(0,"");m_pMainWnd->ShowWindow(m_nCmdShow);return 1;}};A a;
警告レベルの設定でC++でも暗黙のintを使えるようにするコンパイラオプションがあった気がする。
>>944 頂きました /W4に変更することで154バイト
#include <a.h>
struct A:CWinApp{InitInstance(){((CFrameWnd*)(m_pMainWnd=new CFrameWnd))->Create(0,"");m_pMainWnd->ShowWindow(m_nCmdShow);return 1;}};A a;
ちょっと修正 153バイト #include <a.h> struct A:CWinApp{InitInstance(){((CFrameWnd*)(m_pMainWnd=new CFrameWnd))->Create(0,0);m_pMainWnd->ShowWindow(m_nCmdShow);return 1;}};A a; すいません、そろそろ仕事に戻ります スレ汚しスイマセンデシタ
CFrameWnd*へのキャストは消せないのか?
>>947 CWndのCreateに、引数2個が無いため無理です
ああ、明日締め切りなのに遊んでしまったww
{((CFrameWnd*)(m_pMainWnd=new CFrameWnd))->Create(0,0);return!m_pMainWnd->ShowWindow(m_nCmdShow);} あとはm_nCmdShowを諦めて、直接5 (SW_SHOW)か何かを指定するくらいしか思いつかない。
これを思いついたが、できるかどうかはわからない。 {return((CFrameWnd*)(m_pMainWnd=new CFrameWnd))->Create(0,0,0x10CF0000);} 0x10CF0000はWS_OVERLAPPEDWINDOW | WS_VISIBLE。
struct A:CWinApp{InitInstance(){return((CFrameWnd*)(m_pMainWnd=new CFrameWnd)) ->Create(0,0,0x10CF0000);}}a; aの部分、エラーはおろか/W4でも警告にならなかった。
>>951 まだやってましたか!大分小さくなりましたね
struct {} a;はC言語の基礎中の基礎ですね
WindowStyleにWS_OVERLAPPEDWINDOW|WS_VISIZBLEもSDKだと基本ですね
showwindowに戻り値があることもすっかり忘れてました
いい勉強になりました
それがC++では、型の宣言と同時に変数や関数の宣言ができなくなっていたような気がしたんだ。
Visual Studio C++ 2005 Express EditionでC/C++の勉強をするとしたら、 お勧めの書籍はありますか?Visual Studioを使うのはこれが初めてです。
本当にC/C++の勉強? MFCとかDirectXとか.NETとかのC++以外の部分じゃなくて? 本当にC++なら「プログラミング言語C++ 第三版」で鉄板。
>>955 レスありがとうございます。
C++の言語部分はおっしゃる書籍を使おうと思っているのですが、
Visual Studio自体の使い方(デバッカなど)で分かりやすい
お勧めがあればなぁ、と。
そこまで初心者なら本じゃなくて学習ソフトでも使ったら?
なるほど学習ソフトですか。調べてみます。Thx。
for の初期化部分で二つ以上の変数を宣言 & 初期化したいのですが。 for 中でしか必要のない変数を for 文のスコープ外で見せたくないので。 for 文の外で宣言してさらにそれをブロックで囲めとかですか?普通。
カンマ
>>960 二つ以上の変数の型が違うのです。
for の中で unsigned 一つと char 一つ使いたいので。
教えてやるんじゃなかった Cスレで聞け
> 普通 適切な変数名をつければ(そしてコードが長ければ適切に関数に分けていけば) for の外で宣言しても混乱なくコードが書けると思いますぜ。 == 外で宣言しても気にしない。 まぁ 「普通」 なんて人によって違ってくるから1つの意見として。
ブロック作ればいいじゃん
GDI+ と、libpngで、PNGファイルを作成しましたが、 圧縮後のファイルサイズを比較したところ、 libpngの方がかなり小さくなります。 libpng は、圧縮レベルを設定できるのですが、 GDI+では、該当するパラメータを見つけられません。 本当は、GDI+で楽をしたいので、 GDI+での圧縮レベルの設定法を教えてください。 ちなみに、テストに使用しているのは、デスクトップを キャプチャした画像です。
>>965 pngの圧縮レベルはサイズに余り影響しないと思うのだけどね。
もしや、GDI+は32ビットカラー、libpngは8ビットカラーなんてことはない?
メタデータが含まれてたりとかな
968 :
965 :2006/09/07(木) 07:45:04
>>966 出来上がったファイルを右クリックしてプロパティで
確認した限りでは、両方とも8ビットカラーと表示されてます。
圧縮後のサイズは1割程度の差がつくようです。
GDI+使用時 45k
libpng使用時 39k
>>967 メタデータは意識していませんでした。
確認してみます。
969 :
デフォルトの名無しさん :2006/09/07(木) 17:23:56
ダイアログベースのソフトを作っています. ボタンやコンボ,picture boxを配置しています. いま,矢印キーを押すと,pictureに表示している内容を変えたいと思っています. OnKeyDown(nChar ,...)で if(nChar == 0x025) hogehoge(); としていますが,これではhogehogeが呼び出されません. ボタンへのフォーカスが動くだけです. どうしたら,hogehogeを呼び出すことができるのでしょうか?
>>969 PreTranslateMessage()で拾ってみたら?
971 :
969 :2006/09/07(木) 18:41:23
できました! ありがとうございました
972 :
デフォルトの名無しさん :2006/09/08(金) 18:39:58
質問させてください Escapeキー→プログラムを終了 Tabキー→ボタンのフォーカス移動 の両立がしたいのですが、うまくいきません 現在、ウィンドウクラスをwc.cbWndExtra = DLGWINDOWEXTRAにして CreateWindowで作ったトップウィンドウにボタンを2個配置しています メッセージループで while (GetMessage(&msg, NULL, 0, 0)) { if(!IsDialogMessage(hWnd,&msg)){ TranslateMessage(&msg); DispatchMessage(&msg); } } このように記述するとフォーカス移動はできますがESCAPEはうまく動かず 逆にisDialogMessageの記述をなくすとESCAPEはOKですが フォーカス移動がダメという状態です メッセージループの書き方が悪いような気がするのですが そもそも作り方自体が変なのでしょうか
猫にでも行ってメッセージループについてが上のほうに書いてあるよ
自分でmsgの中味みりゃいい
975 :
972 :2006/09/08(金) 19:38:26
>>973 ,974
回答ありがとうございます
一応、各関数については調べました
msgの中身の見方というのは良くわからないのですが
while (GetMessage(&msg, NULL, 0, 0)) {
if(msg.message==WM_KEYDOWN){
if(msg.wParam==VK_ESCAPE)
MessageBox(NULL,"vkescape","",MB_OK);
}
if(!IsDialogMessage(hWnd,&msg)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
こういったプログラムを実行してみたところ
VK_ESCAPEの入力自体はあるようです
ちょっと、質問の仕方が下手だったので整理して
もう一度質問質問させてもらいます
976 :
972 :2006/09/08(金) 19:52:58
972のプログラムのhWndは、 猫でもわかるプログラミングののSDK編のイントロダクションのサンプルで wc.cbWndExtraの値を0からDLGWINDOWEXTRAにだけ変更して作成したウィンドウの ウィンドウハンドルです そして CreateWindow( TEXT("BUTTON") , TEXT("ボタン1") , WS_CHILD | WS_VISIBLE | WS_BORDER| WS_TABSTOP|BS_PUSHBUTTON , 0 , 0 , 0 , 0 ,hWnd , (HMENU)100 , hInstance , NULL); こういう感じでボタンを2つ配置しているのですが メインのhWndをダイアログかつ、通常のウィンドウとして 扱うのは変だろうかというのが疑問点です つまり、プログラムとしては リソーススクリプトを作ってそこにボタンを配置して CreateDialogでhWndを親とするダイアログをつくり while (GetMessage(&msg, NULL, 0, 0)) { if(!IsDialogMessage(hWndDialog,&msg)) //←hWndからhWndDialogに TranslateMessage(&msg); DispatchMessage(&msg); } } こういうループにしたほうが良いでしょうか
977 :
972 :2006/09/08(金) 20:19:44
すみません、解決しました^^; メッセージ処理はメッセージループの中でしなければだめと 思い込んでいました while (GetMessage(&msg, NULL, 0, 0)) { if(msg.message==WM_KEYDOWN){ if(msg.wParam==VK_ESCAPE){ PostQuitMessage(0); } } if(!IsDialogMessage(hWnd,&msg)){ TranslateMessage(&msg); DispatchMessage(&msg); } }
978 :
デフォルトの名無しさん :2006/09/08(金) 23:50:51
MFCで同じようなダイアログを複数作ろうと思っています。 共通の処理は一つにまとめたいので、CDialogを継承した 自前のクラスを作り(CMyDialogとします)、このCMyDialogを 継承してそれぞれのダイアログに対応したクラスを作りたいと 考えています。 しかし、クラスウィザードでダイアログに対応したクラスを作ろうと すると、”MFCクラス”しか選べず、自前のクラスは選べません。 この様にCDialogをそのまま使わずに継承してから使いたい 場合はどうすればいいのでしょうか?
どうでもいいけどそのメッセージループやめれ。推奨されてない。
>>978 クラスウィザードで作った後、自前で変えることは可能だが。
>>980 そうなんですか?
クラスウィザードでとりあえずCDialogベースに作っておいて、その後に
手動編集で自前のクラスを継承させてもそのまま使えるのでしょうか?
その場合、編集するのは
Class MyClass : public CDialog
のCDialogを書き換えるだけで良いのでしょうか?
また、その後にクラスウィザードでメッセージ対応させた関数を作っても
そのまま使えるのでしょうか?
982 :
972 :2006/09/09(土) 02:30:55
>>981 他にもいくつか書き換える場所あるよ。メッセージマップとか。
>>981 >while (GetMessage(&msg, NULL, 0, 0)) {
ここじゃね?
エラー発生時に-1を返すとかだっけ?
GetMessageをMSDNで調べてみな。
985 :
972 :2006/09/09(土) 15:46:28
>>984 多分私へのレスですよね?
MSDNにはGetMessageはWM_QUITのときのみ0
エラーが出たときは-1を返すと書いてありました
WEBにあるメッセージループはほとんどwhile(GetMessage)の形式なので
全く気づきませんでした!とても参考になりました
こんな感じに書き直してみました
int getmessage_return_value;
while(TRUE){
Getmessage_return_value=GetMessage(&msg,NULL,0,0);
if(getmessage_return_value!=0 && getmessage_return_value!=-1){
if(msg.message==WM_KEYDOWN&&msg.wParam==VK_ESCAPE)
PostQuitMessage(0);
if(!IsDialogMessage(hWnd,&msg)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else{
break;
}
}
986 :
デフォルトの名無しさん :2006/09/09(土) 23:30:34
プログラムって英語とか数学とか分かってないときついですか? 誰か教えてください
英語 マニュアルを読む際に日本語のものが無いまたは役に立たない場合など 英語のソースにあたることが多いので英語力は無いよりはあった方が有利 数学 基本的には論理的思考が出来れば良い 開発にかかわるプログラムの内容によっては数学の知識や物理の知識が必要
>>986 数学は分野によるのでは?
英語は分かるにこした事はないけど、普通に書く分には簡単な単語が分かれば十分でしょ。
あとプログラム書いてて思ったのは、文章の構成能力というか、
文章を纏めるのが上手い人が書いたプログラムってのは凄く読みやすいと思ったよ。
989 :
デフォルトの名無しさん :2006/09/09(土) 23:54:58
ネタ抜きで俺九九とか割り算までしか出来ないんですけど プログラム組めますか?
計算はCPUがやってくれるから
>>989 ==
>>986 かな?
英語や数学うんぬん言う前に
ひとの意見に耳を傾ける能力も必要だよ
>>989 マジレスすると、計算が苦手でも式さえ考える力があれば
計算系のプログラムもある程度は書けると思うよ。
計算するのはコンピュータだからね。
まぁ要は君の頑張り次第じゃないのかな?
まだ若いのなら今から色々本見るなり、ネットで調べるなりして頑張って勉強するといいよ。
次スレいらないよね?
というより、「プログラミングがやりたい!」って思って 本当に好きなら、誰がなんと言おうが頭が悪かろうがその気持ちを抑えられないでしょ、普通。 おれなんかは、決して頭も良くないし、プログラムもあまり上手くないと思うけど 凄く好きだから今だにやってるし、初めてコンソールで「Hello World!」って出した時なんか 言葉では言い表せない様な衝撃が身体に走ったけどな。好きならそんなもんでしょ?
995 :
デフォルトの名無しさん :2006/09/10(日) 00:26:18
>>988 そうですかー学校でCの学習がはじまるんで
どうなんだろうと思いました。ありがとうございます。
とりあえず、英語は単語程度ならある程度分かるので頑張ってみます
>>991 自分
>>986 です。
>>989 は別の方ですね
996 :
デフォルトの名無しさん :2006/09/10(日) 00:26:54
ここでいう若いんだったらって何歳くらいのことなの?20歳くらい?
始めるのに年齢は関係ないよ やる気の問題 ただ年取ってくると日常の雑務に煩わされて だんだん遊んでる時間なくなってくるけどね
999 :
デフォルトの名無しさん :2006/09/10(日) 00:33:27
プログラムが書けるというのは「○○語がしゃべれるようになる」 「○○語が書けるようになる」「筆が使えるようになる」 というのと同じようなもので、何を書くか、ということとは別問題。
1000 :
デフォルトの名無しさん :2006/09/10(日) 00:36:47
1000ならチンコ切断
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。