VisualC 相談室【8】

このエントリーをはてなブックマークに追加
VisualC++関連の話題を扱うスレッドです。

前スレ
http://pc.2ch.net/test/read.cgi/tech/1017843192/l50
萌えない
     ____
    /∵∴∵∴\
   /∵∴∵∴∵∴\
  /∵∴∴,(・)(・)∴|
  |∵∵/   ○ \|
  |∵ /  三 | 三 |  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |∵ |   __|__  | <  >>1 Visual C って何
   \|   \_/ /  \_________________
     \____/
   ______.ノ       (⌒)
  //::::::::|-、 ,-/::::::ノ ~.レ-r┐
/ /:::::::::::|  /:::::ノ__ | .| ト、
| /:::::::::::::::| 〈 ̄   `-Lλ_レ′
レ::::::::::::::::::|/::: ̄`ー‐---‐′
関連スレ
C Builder相談室 Part3
http://pc.2ch.net/test/read.cgi/tech/1016065855/
5デフォルトの名無しさん:02/05/27 21:21
VC++スーパービギナー編買え
>>5
そんなもの買うな!
俺がおまえらのためにVC++の本を執筆してやる!
7デフォルトの名無しさん:02/05/27 21:58
「小学生に1から教える Visual C++.NET」児童教育シリーズ
熊谷 紳助 (著) 翔泳社 ISBN: 4156215470
そんな本があるのか、鬱だ
>>7
おまえは無い。あっても言うな。
>>7
紀伊国屋で見かけたが、分厚いハードカバーだぞ。
読むのも大変だが、小学生じゃ持つだけでも大変だ。
>>8以外信じないってば。
>>10
マジメに小学生までプログラミング人工が広がっていくことが鬱でしょうがない
割れ小学生は、実際使ってる。
数年後には義務教育にCプログラミングが導入
そりゃー、ない。
16うんこまんこ:02/05/27 22:58
C言語でゲームを作ろうと思うんだけど
ウィンドウに線を引いたり色を塗ったりする方法がわかりません。
どうしたらいい?
c言語だけじゃ出来ません
18うんこまんこ:02/05/27 23:01
VCで出来ないの?
>>16
LineTo
20うんこまんこ:02/05/27 23:33
>>19
ヘッダーは?
windows.h
22うんこまんこ:02/05/27 23:45
>>21
どうもありがとう
23うんこまんこ:02/05/27 23:50
USBに繋いだコントローラを使ってゲームを作りたいんだけど
どうしたらいい?
>>23
DirectInput。
調べてもわかんなかったらここで質問して。
鬱だ氏のう DirectX 2
http://pc.2ch.net/test/read.cgi/tech/997101556/
25デフォルトの名無しさん:02/05/27 23:57
ダイレクトX?
VCとダイレクトXって同じなの?
26デフォルトの名無しさん:02/05/27 23:58
って言うかダイレクトXって何?
27デフォルトの名無しさん:02/05/27 23:59
あ、25と26は俺です。
28デフォルトの名無しさん:02/05/28 02:55
あらかじめ設定されたピクセル値のbmpファイルだけしか読み込めないようにするには
BITMAPINFOHEADER使えば良いのかな?

その際にFileDialog使っちゃダメそうだな。自分で作れと。
意味不明
30仕様書無しさん (O_O)/:02/05/28 06:48
そうやって、
やる気のある人と、やる気の無い人を一緒くたにするのは素人の証拠。
何ひとつ作り出せない人は、憎しみだけを作り出し、
憎しみしか作り出せない人間は、他人の生産性までをもとことん下げる。
やる気がある人間はその限りではない。
31デフォルトの名無しさん:02/05/28 06:55
HSPスレかと思ったYO!
Visual C相談室になってから一気にレヴェルが下がっていませんか?
33仕様書無しさん (O_O)V:02/05/28 07:08
>>28
ListViewです。>FileDialog
LPITEMIDLIST取れます。>FileDialog
牡丹桜花イベントあるはず。>FileDialog
34Operaテスト:02/05/28 07:08
自分の生産性が低いのを人のせいにしたがってる人がいますね(・_・)
35OperaテeテXテg:02/05/28 07:09
ばけばけ?
36仕様書無しさん (O_O)V:02/05/28 07:09
却下(W
37仕様書無しさん:02/05/28 07:47
>>28
そういう事する時はJava使え
38デフォルトの名無しさん:02/05/28 11:19
_UNICODEでコンパイルすると__FUNCTION__が使えなくなります?(VS.NETにて)
39デフォルトの名無しさん:02/05/29 22:01
前スレでも質問したんですが、レスが無かったものでもう一度。
VC++.NET standardにはC++ Language Referenceの日本語版は
付いていないのでしょうか。
explicitやtypename検索しても英語しか出てこないもので。
それとも、設定が変で出てこないだけでしょうか?
MSDNのトピックの設定が日に日に可笑しくなっていき、現在では全て同じになって
しまいましたが、どうすりゃ良いんでしょう?これ。
41デフォルトの名無しさん:02/05/29 23:07
ドラッグアンドドロプしたいのです。
それでコントロールのプロパティでドラッグアンドドロップを許可したのに、クラスウィザードのメッセージ一覧に出てくれないのです。
どうやるですか?
>>41 クラス情報タブのメッセージフィルタを「ウインドウ」に設定。
>>40
次のMSDNを待って、届いたらインストールしなさい。
4441:02/05/30 11:15
メッセージフィルタを「ウィンドウ」に設定したくても、
灰色になってて設定できませんでした。
厨房向けのソフトでむりやり変更したら、VC++が落ちました。痛いです。
ダイアログアプリだからダメなのでしょうか?
>>44
あきらめて自力で
>>40
ああ、設定が狂ってくるという意味ね。
楽しそうで良いではないかと思ったよ。
47デフォルトの名無しさん:02/05/30 13:06
ツールバーに大きめのテキストボックス埋め込みたいんですが、どうすればいいですか?
48デフォルトの名無しさん:02/05/30 13:19
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数:105420人 発行日:2002/05/020

どもども、ちょっぴりワキガのひろゆきですー。
いやぁ、もうすぐですねー、谷澤動物病院の裁判の判決ですー。。。

おいらはいつものとおり、
「投稿者がわからないので勝手に削除は出来ない」
「勝手に削除したら投稿者に訴えられてしまうかも知れないから削除は出来ない」
との主張を繰り返してきたんですけど、裁判官てば実に冷ややかな目でおいらを見るんですよー。。。
その上、
「削除出来ないんじゃなくてするつもりがないんじゃないですか?」
「悪質な書き込みをむしろ売り物にしてるんじゃないですか?」
「発信者を特定出来るようにようにしてから屁理屈を語ったらどうですか?」
なんて嘲りの笑みを浮かべながら言うんですよー。。。
本当に憎らしい奴ですー、、うぅうぅ、、

ところで、谷澤動物病院てば、おいらのことを訴えてから客が2割も減ってしまったそうですー。。。
おいらのことを訴えると被害が余計に拡大するってことですね。。。えへへ。。。

んじゃ!
VC++ でコンパイルするときに、
MFCを使用すると、
(プリコンパイルヘッダを使用すると?
 よくわからないけど。)

#include "stdafx.h"

までの全ソースコードを無視するらしいのですが、
どうしてでしょうか?
移植を行うときなどにとても不便ではないかと思うのですが……。
>>49
#include "stdafx.h"
を先頭に置けばいいやん
5149:02/05/30 22:22
>>50

「移植」のとき等に不便だと思うわけです。
別の環境で書いたソースコードを再利用するときに、ファイルにいちいち #include "stdafx.h" を付け加えなければならないわけですよね?
あと、開発したソースコードを別の環境でも再利用するとしたら、"srdafx.h" のないところに移すわけだから、#include "stdafx.h" を削除しなければなりませんよね?
(たとえ関連クラスがMFCを使用していないものだとしても……。)

と思ったわけですが、どうでしょう……。
>51
別の環境で書いたものを使う時には、プリコンパイルヘッダを使わないようにする。
別の環境に持っていく時は、空のstdafx.hでも作っとけ。
53 :02/05/31 16:49
VCに直接関係ないのですが、
VCを入れたら、IEなどでエラーが発生した場合、
デバックが始まってしまうのですが、これを行わないようにするにはどうしたらよいのでしょうか?
>>53 ツール→オプション→デバッグ→ジャストインタイムデバッグ
55 :02/05/31 16:55
>54
サンキュー!!!

しかし、チェック外したけど駄目でした・・・。ふぅー。
デバッグして、サイト運営者に報告してやれば、そのうち
でなくなるぞ。
>>51
PCHを使わなければいいだけでは…?
>>53
IEのインターネットオプション>詳細設定>スクリプトのデバッグがどうたら
59デフォルトの名無しさん:02/06/01 08:22
他スレ(MFCの方)でちょっと関連する話が出てたのですが、スレ違いみたい
なんでこっちで質問します。

mfc42.dllを使用するかMFCのスタティックライブラリを使用するかは選択
できるみたいですが、Cのランタイム?のmsvcrt.dllの扱いっていうのは
どうなのでしょうか?
作成した実行ファイルの中をダンプしてみるとmsvcrt.dllという文字列
が存在するので使われているようなのですが、外部DLLに完全に依存しない
実行ファイルというのは作成できるのでしょうか?
もしかしたら、msvcrt.dllが存在しない32bitWindows環境は存在しない
から気にしなくてもいいとか?
扱い(VC6)
プロジェクト→設定→C/C++→使用するランタイムライブラリ
で選択できる。

> 外部DLLに完全に依存しない実行ファイルというのは作成できるのでしょうか?

kernel32.dllは必ず使うことになるから、OSが提供するDLLを含めるかどうかでその
答えは変わる。mfcのdllやmsvcrtのdllはOS提供ではないと言っていいと思う。
6159:02/06/01 11:10
>>60
失礼、書き方が悪かったですね。
「VC++6.0提供の外部DLLに依存しない...」に訂正。
レス、ありがとう。
62デフォルトの名無しさん:02/06/01 12:52
教えてもらえるか全く未知数なんだけど、相談に乗ってください。
VBで「Dim WithEvents obj???? 〜」って宣言すると、COMコンポーネントの
イベントを受け取れるじゃないですか。
このコンポーネントをVCで動かそうとしています。
VBで出来る事がVCで出来ないわけがないと思っていましたが、いわゆる
インタフェイスクラス側のインプリメントは簡単に出来るんですが、
イベントハンドラ側がうまく実装できません。
タイプライブラリを指定して同コンポーネントのクラスを自動生成させた
のですが、ヘッダファイル上でプロトタイプを確認すると、「引数の型が
あいまいでメンバを実装できません」みたいな表示がされて、イベント
ハンドラが加えられていません。ここでひとつ質問。

1、vテーブルが存在するものとしてviatual宣言の上メンバ関数を書き加えて
意味があるのでしょうか。

そこからイベントをキャッチする場合、

2、生成されたクラスを派生させて、イベント割り当て関数をオーバーライド
すれば、イベントをキャッチできるのでしょうか?

インタフェイス側のクラスはCoRegisterClassObject関数でハンドシェイク
出来ましたが、イベントハンドラ側は「クラスがない」といった風なエラー
が発生します。

3、COMコンポーネントの設計の問題でしょうか?それともクライアント側の
コーディングの問題でしょうか?それとも他に?

COMコンポーネント側もある程度ソースレベルでの融通が効きます。
以上3点の解決について知恵をいただければと思います。
よろしくお願いします。
63デフォルトの名無しさん:02/06/02 01:54
 今までおもにJava使ってきたんですけど、都合によりVC++を使うことになりました。
そこで,MFCを勉強していたんですが、Win32 APIをほとんど知らないせいか
まったくわけがわかりません。
 そこで、VC++で利用できるよいGUIのクラスライブラリがあったら教えていただけないでしょうか?
できれば、Win32 APIの知識がなくても理解できて、Javaのクラスライブラリに似ているのがいいのですが。
MFCしか・・・
Managed C++にすれば?
APIを知らずに書けるツールキットでマトモなのは
QTやGtkとかあるけど、全然Javaっぽくないし。
俺はMFCから入ったけど初めのうちはWin32APIの知識って無くても
できるんじゃ・・・
>>66
メソッドなどがほぼそのままAPIをラップしただけなので
MFCの知識≒APIの知識となる
>>67
いや、だからWin32API自体使ったこと無くても
MFCメンバ関数使えばできるだろうと。
というか>>63はWin32APIやMFCというよりWindowsプログラミングが
わからないんじゃ?
Win32APIやMFCはリファレンス読めば使えるわけだから。
6963:02/06/02 03:10
たくさんのレスありがとうございます。
UNIXでCの通信系プログラムを経験した後、Javaにうつったので
Windowsプログラミングの経験はまったくありません。
やっぱり覚悟を決めてWindowsプログラミングの基礎から勉強するしかなさそうですね。

しかしMFCってすごく使いにくいように思うんですけど、慣れると使いやすいんですかね。
お仕着せのはお気楽にできるが、
色々こったものを作ろうとすると、MFCの枠からはみ出た
コードを書かなければいけなくなる。
71デフォルトの名無しさん:02/06/02 10:05
IDC_RADIO1というIDでラジオボックスを作っているのですが、
これを操作するためには例えば
RADIOBOXというクラスで
RADIOBOX radiobox1,radiobox2
としたradiobox1というものが必要だと思うのですが、これがソースのどこを捜しても見当たらないのです。
ラジオボックスの操作方法等でアドバイスください。
7263:02/06/02 10:30
Class Wizardでメンバ変数タグをクリックして変数の追加じゃだめですか?

俺もここらへんでずいぶん悩みました。へたにリソースエデイタで
コントロール追加するよりコードで追加したほうが早そうなきがするんですが
皆さんはどうされてますか?
73デフォルトの名無しさん:02/06/02 10:49
VC++で何を作ればいいですか?
74デフォルトの名無しさん:02/06/02 10:52
作りたいものがありません。
プログラムがしたいのです
>>74
自分で作るものぐらい自分で考えれや……
しかたない、とりあえず練習問題がある入門書を買って
練習問題解きまくれ。
7649:02/06/02 12:18
>>52 >>57
対処法はわかるのですが、なんでこのような仕様にしたのかなーと思いまして。何か深い理由があるのかと。
とはいえ、アドバイスありがとうございました。
>>72
ラジオボタンだと先頭の1個しか変数作らせてくれないという罠
(だから2個目以降は手作業でコピペ)。

ちなみにわざわざ変数を作らなくても、IDを使って
GetDlgItem(IDC_RADIOBUTTON1)->ほげほげ
とかで何とかなる。
>何か深い理由があるのかと。
それ以前に取り込んだヘッダの仕様が変わって、
#defineされた定数値が変更になったりすると矛盾が生じるから
79デフォルトの名無しさん:02/06/02 13:42
VS.NET での話なのですがWM_TIMERとかのメッセージ処理をGUI的(ClassWizard的)に
管理するにはどうしたらよいのでしょう?
いまは良く分からんのでMESSAGE_MAPに直書き・・・
80デフォルトの名無しさん:02/06/02 14:07
Visual C++でデータベースアプリを作るとしたら何を使うのが一般的でしょうか?
やっぱりADO?参考になる資料が見つからなくて困ってます。
80
*.mdb+ADOのときはATLオブジェクトウィザード(データアクセス)で生成させた
コードをそのまま書き換えて使えると思います。
(DAOの方が速いらしいのでまだ使ってますが。)
82デフォルトの名無しさん:02/06/03 00:14
変更できるサイズがあらかじめ決まっている
ダイアログとかツールバーってありますよね。
VCのドッキングウィンドウとか。
あれはいったいどうやって作っているんでしょうか。
ツールバーの状態(ドッキング位置など)をファイルに保存するには
どうすれば良いのでしょうか。
>>83
GetWindowRect
WritePrivatePrifileString
or WriteFile
>>84
それだと復元時に親ウィンドウが移動してるとツールバーの位置がずれませんか。
あとツールバーのフローティング状態、表示/非表示の状態も
保存しなければならないと思うのですが。
8683:02/06/03 13:01
CControlBarのメンバ関数を使う。
座標はクライアント座標になっていると思うので、大丈夫と思う。
>>84,86の方法はツールバーごとにAPIまたはメンバ関数を呼び出す
ものですが、CFrameWnd::SaveBarStateのように
一度呼び出しただけでウィンドウに使われている複数のツールバーを
取得するにはどうすればよいのでしょうか?
CFrameWnd::SaveBarStateを使う
任意のファイルに保存したいってゆってるべや
>>86
GetWindowRectはスクリーン座標だよ
ヴァカばっか。

>>82
WM_GETMINMAXINFO
9262:02/06/03 18:40
ATL COM コンポーネントのイベント取得についておうかがいをたてたもの
ですが、方法がわかりました。
ありがとうございました。
9383:02/06/03 18:43
GetWindowRectで座標を保存し、DockControlBarにその座標を与えてドッキングを
復元しようとすると、例えば以下のように2つのツールバーが二段になってるとき、

--------------------
| バー2
--------------------
| バー1
--------------------

バー1→バー2の順で保存すると、バー1→バー2の順で復元したときに
二段に復元されません。
なぜなら、バー1を復元しようとしたときにはまだバー2が存在していないため、
バー1は一段目へドッキングされてしまうからです。
>>83 CDockState っていうのはどうよ?
CDockStateのソース見たらかなりいろんなこと保存してる。
GetWindowRectやIsFloatingどころの話じゃないよ……
96デフォルトの名無しさん:02/06/04 11:09
CStringの偽物のようなクラスを作っていて、
CStringと同じように、
"operator const TCHAR*() const;"というオペレータにて、
クラスの内容(文字列)を返すようにしています。

 大抵、目的の動作をするようになったのですが、

CLieString csData;
csData="Mona";
sprintf( "data=[%s]", csData.operator const TCHAR*() ); /*これは行けます*/
sprintf( "data=[%s]", csData );  /*これは駄目です*/

 というコードだけ、%sが正しく変換されません。
sprintfが、クラス内のバッファをアクセスするための
方法について、教えて頂けると嬉しいです。
CStringのソース見れば?
printf系は可変長引数(引数に型無)だから、キャストを明示しないと(const xxx *)に
変換されない。

蛇足
sprintf()はASCII or MBCSだから(TCHAR *)でなく(char *)
UNICODEを使うときはswprintf()
TCHARのときは_stprintf();
9983:02/06/04 11:48
CDockStateのm_arrBarInfo内にコントロールバーの情報が入ってて、
この配列のサイズ及びインデックスがバーの数及びドッキングの順番になると思い
ツールバーが2つドッキングされたウィンドウでm_arrBarInfo.GetSizeを
実行してみるとサイズが7。
あとの5つは何バーなんだ(;´Д`)
ツールバー2個+ステータスバーの分で計3。しかしまだ4つも謎のバーが。
10196:02/06/04 12:00
>97
 元々、殆どCStringと変わらない仕様でしたので、
CStringを参考にしながら作っていました。
ただ、非MFCなので、それ自体の派生に出来ませんでしたが。

>98
 TCHARは、(私の環境では)charに変換されているはずです。
とはいえ、自信が無かったのでconst char*にしてみましたが、
やっぱりダメでした。

 printfの引数が形無しなのが根元にあることは分かっているのですが、
その形無し引数に対して、クラスの実態を書いた場合、
クラスのデータメンバの始めが送られたりするのかな・・と邪推しています。
任意のファイルに保存したいなら一時的にCWinAppの
m_pszProfileName<−名前違うかも
を書き換えちゃえば? たしかこれを見てるんだよね。
101
文字列クラス stringClassObject("hogehoge");
に対して
sprintf(buff, "%s", (const char *)stringClassObject );
と書くのは仕方の無いことと思われ。

MFCが使えないの環境ならSTLのstringクラスを使うべきでは?車輪の再発明すぎ。
実習か何かで文字列クラスを作っているなら別だが・・・。
>>101
CStringのソースと見比べれば、何でCStringで出来て、自作のクラスで出来ないかわかるはず。
可変長の引数渡しの仕組み知ってればの話だけど。
10596:02/06/04 12:21
>103
単に文字列を扱うだけだと、stringにしたのですが、
CStringやstringに無いメソッドを色々追加しなければならなかったので、
勉強も兼ねて自作していた次第です。

 その後、sprintfの引数を取っている所で止めてみたのですが、
やはり入力クラスそのもののアドレスが行っている感じがする事と、
CStringのデータメンバは文字列ポインタ1つだけだという事と、
自作クラスの方は、現時点で3個のデータメンバを持つ事まで確認出来ましたので、
その情報から、CStringが如何にして、
printfに直渡しをしているのか?というのを知れればと思います。
10696:02/06/04 12:24
>>104
 随分長くアセンブラ屋だったので、
C(C++)に関しては素人です。
勉強を兼ねてエディタを作ってるんですが、
無限アンドゥってどうやって実装するんですか?
>>107
リスト構造で操作を記録
10996:02/06/04 12:50
一度MFC使用プロジェクトを作って、
CString csTemp;
long lSize = sizeof( csTemp );

 とすると、4bytesとなりました。

非MFC環境と、MFC環境の両方で、

class CTest
{
 char *m_pchData;
}
-----
CTest csTest;
long lSize = sizeof( csTest );

 とすると、8bytes となってしまいました。

クラスの先頭=データメンバ先頭という考え方?でも、
何故自前のクラスに 4bytes が付加されてしまうのか疑問に思い、
とりあえず、CTestとCStringの相違点として、

CString側
~CString();
-------------------
CTest側
virtual CTest();

 となっていましたので、とりあえず"virtual"を外してみた所、
sizeof CTest も4bytes になりました。

 printfの問題は、多分これで正しくでるようにはなりますが、
何も分からない状態でやった為に、技術的後ろ盾が無く、
単に"超危険なコード"と化しているように思います。(^^;
11083:02/06/04 15:54
えー、一人でごちゃごちゃやってますが…
新しく作ったCDockState派生クラスに、CDockStateと
その中で使われてるプライベートクラスCControlBarInfoの
ソースを参考にiniファイル読み書き用
メンバ関数を追加することで一応できました。
読み書きはPrivateProfile系APIでやってるので、これを
レジストリAPIに変えたレジストリ読み書き用関数も用意すれば
バーの状態の保存先をファイル/レジストリに切り替えられるクラスが
できてなかなか満足です。
いろいろレスくれたおまえらにありがとうと言いたい。
小一時間言い続けたい。
111sage:02/06/04 16:04
VC++で使えるJTableみたいなものはありませんか?
C#、C++雑談スレッド
http://pc.2ch.net/test/read.cgi/prog/1023178697/  
114デフォルトの名無しさん:02/06/05 06:57
メニューアイテムでアクセラレータキーもいっしょに書いてある場合、
(hogehoge\tCtrl+H みたいに)
SetDefaultItemすると、表示がおかしくなってしまうんですが
どうしたらいいでしょうか?
115デフォルトの名無しさん:02/06/05 07:00
すいません、オーナードロー使ってたんで、
その関係かもしれないです。
116デフォルトの名無しさん:02/06/05 10:16
for (i=a=b=0;i<100;i++){}
この場合iの初期価値はいくらになるの?
>>116
なんでそういう疑問をもったか、そのあたりの説明をききたい。
118116:02/06/05 10:40
>>117
cのコードの移植してるから。

なんかどうも多重ループになるっぽいんだけど。
cじゃあこういう書き方普通なの?訳分からん。
119116:02/06/05 10:53
んー、なんかi=0と一緒の結果になるみたいだなあ。
i=0と等価なのかな?違うのかな?等価ならなんで
こんな書きかたしてるんだろ。意味あるのかなあ。
120116:02/06/05 10:57
分かった!
i=0;
a=0;
b=0;
と同じ意味なのか!

違ってたら突っ込みキボン。
i = a = b = 0 → i = (a = ( b = 0))と等価
122デフォルトの名無しさん:02/06/05 11:08
すいませ〜ん。
MFC使ってリストビューにファイルをドラッグ&ドロップしたいのですが
わかりません。方法教をえてください。または、それについて書いてあるHP等教えてください。
123デフォルトの名無しさん:02/06/05 11:21
124ゆう ◆7WEVo9uA :02/06/06 01:11
>>122
俺も前めちゃ困った。
おれはCListCtrlを派生して
OnDropFilesにコードを実装してる。
間違ってたら修正求む。
俺はOLEドラッグ&ドロップ用のCOleDropTarget派生クラスを作っておいて、
ダイアログのOnInitDoalog()やViewのOnInitialUpdate()で
m_DropTarget.Register(this);
とかやるとD&D可能になるようにしてる。
126デフォルトの名無しさん:02/06/07 08:08
ATL3.0なんですが、QueryInterfaceをフックしたいので、
COM_MAPにCOM_INTERFACE_ENTRY_FUNCマクロで
フック用スタティック関数を登録したのですが、
全然反映されません。
というかCOM_INTERFACE_ENTRY_XXXの実体である
static const _ATL_INTMAP_ENTRY _entries[]が
どんなにCOM_INTERFACE_ENTRY_XXX追加しても変わらない、
固定されたままなのです。どなたか助言ください。
一応確認は、↓のコードを書いてブレークポイントで見てます。
const _ATL_INTMAP_ENTRY* a = _GetEntries();
a++;
a++;
127126:02/06/07 08:14
すいません、解決しました。
お騒がせしました。
128デフォルトの名無しさん:02/06/09 22:01
飛ばされました。
VC++でプログラミングしているのですが、
ActiveXを登録・削除する方法がまったくわかりません。
わかる方はおられますでしょうか?
regsvr32 xxx.dll
regsvr32 /u xxx.dll
130デフォルトの名無しさん:02/06/09 22:15
いえ、ocxのほうです。
それから、プログラム上で登録したいのですが…。
regsvr32、ソースあるだろ。
ocxだって、dllの別名にすぎないんだし。
132デフォルトの名無しさん:02/06/09 22:24
これって結局fixされたんですか?

http://japan.cnet.com/Enterprise/News/2002/Item/020215-3.html?il
133デフォルトの名無しさん:02/06/10 02:19
ヘッダーのなかで、
extern float *my_allocf();
のように宣言されていて、
mainの中で以下のように使用されているのですが、、
rr = my_allocf(n_split);

で、Cのプログラムでは、ちゃんと動いたんですが、
VC++(ダイアログベース)に組み込んだとたん、このようなかんじで使用していた関数が全てエラーを吐くようになったんです。
エラーは、
「関数が不正な1個の実引数をともなって呼び出されました。」
と出ます。とにかく全ての関数に出ます。
なにがいけないのでしょう?

----------------------
さらに、別の関数でも、
float t05(n) ←n定義されていない識別子です。
int n;     ←関数の定義が間違っています。
{ }
のように使用されている関数では、上記右のようにエラーが出ます。これは、.hでは宣言されていません。
ひとの作ったプログラムなので、わけがわかりません。
Cではうごいたんですが、、、助けてください。

134デフォルトの名無しさん:02/06/10 02:37
float t05(n)
int n; ←予期せぬEOFがハケーンされました。
{}
こんなのも出る始末。Cプログラムでは、
メインとなる.c
ヘッダーファイル.h
インクルードされている 関数の書いてある.c
の3つで、
それらを忠実にインクルードして、メインとなる.c中のmainの内容を
ダイアログのOnButton(){ ココ }にコピペしたのですが、、
なにがおかしいのでしょう?

宣言などは、Dlg.cppの一番上。
main以外のものは、OnButtonの直前にコピペ。
としました。
135ノーマット:02/06/10 02:43
すいません。課題頑張ってる中のモノです。
チョット分からないので教えて下さい。

円周率って、#define PI 3.14って感じで与えないとダメなんでしょうか?
元々定数で用意されてますか?
float t05(int n)
{}
に直すヨロシ

extern float *my_allocf();
と宣言されてるのも
extern float *my_allocf(int n);
に直す

あと #include "..." を
extern "C" {
}
で囲む。

いくらなんでもこぴぺだけで動くと思わないほうがいいとおもう
137デフォルトの名無しさん:02/06/10 02:46
>>136
ありがとうございます。。
とりあえずやってみます。
>>135 math.h で M_PI が定義されている、って書こうと思ったけど、
VC では M_PI は見つからなかった。gcc にはあった。
139デフォルトの名無しさん:02/06/10 03:03
>>136
すみません、 それは、ヘッダーファイルの中において、
extern "C" {
#include "..."
#include "..."
#include "..."
  :
}
とするということでしょうか?
それとも、.cなどにあるexternにも全てに行うのでしょうか?
140ノーマット:02/06/10 03:25
>>138
じゃ、自前で定義しておきます。
ありがとうございました。
141139:02/06/10 03:25
netで少し調べて、なんとか、コンパイル通るところまでは いけました。
ありがとうございました!!♪
142デフォルトの名無しさん:02/06/10 21:02
どうしても詰まっていた事があったので、お伺いしたいのですが。

MDIのプログラムで、ダイアログをDoModal命令で表示したのですが、
実行時にダイアログを動かすと親ウインドウから外に出てしまいます。
設定でチャイルドにもしてみたのですが、そうすると画面が固まってしまって・・

親ウインドウ内にダイアログを完全に閉じ込める方法はないでしょうか。
何でそんなことをしたいのか理由を書いてみ?
144デフォルトの名無しさん:02/06/10 21:18
VC++のエディタで::や.や->を使ったときに出るメンバの表示が
できなくなっちゃったんですがどうすれば直りますでしょうか?
>>144
VCを終了させてから、プロジェクト内の 拡張子ncb のファイルを消してみる

おれは、これでばっちり直ったけどなぁ。原因はいまだ不明。
>>144
私の辞書には2通りの過去スレメモがある。
できた方で報告よろしく。

1,一旦VCを終了させ、 clwファイルを削除してからそのプロジェクトを
再度開き、 ClassWizardを起動して内部情報を再構築。

2,ワークスペースに表示されなくなったクラスのヘッダファイル(****.h)を
メモ帳か何かで開いて内容を書き替えずに保存する(つまりファイルのタイムスタンプを変える)。
すると消えたクラスが復活する。(clwファイルは消さない方がいいような気がする)
147146:02/06/10 22:01
おっと、レス中に145さんの書き込みが…。
あっしの方は違う気がしてきたぜ(゚∀。)アヒャヒャ スマナイ
148145:02/06/10 22:13
>>146 も十分試す価値あり。
どちらもやってみることをおすすめしますです。



俺のときはMFCとSDKの関数が全部出てこなくなって激しく鬱・・・。
必死に検索したらでてきたYO!
149144:02/06/10 22:32
ncb削除をやったところ直りました!ありがとうございました!
>>145さん,>>146さんの解決法は永久保存します!
>>142
フォームビューにすれ
と使いもしないで言ってみるテスト。
>>135
VC7では
#define _USE_MATH_DEFINES
#include<math.h>
やれば使える。
152151:02/06/10 23:23
M_PIね
132 :デフォルトの名無しさん :02/06/09 22:24
これって結局fixされたんですか?

http://japan.cnet.com/Enterprise/News/2002/Item/020215-3.html?il
154デフォルトの名無しさん:02/06/10 23:33
ソースから実行するときなんですけど、
一度実行して、そのままソースには手をつけずに
再度実行した時に、全cppをコンパイルしてしまいます。
昨日までは問題なくできていただけに原因が全く解らないです。
誰か解る方がいましたら教えて下さい。
>>154
HDDに住む子人さんは、時々ソースのバグを修正したりします。
156154:02/06/10 23:59
>>155 子人さんというのがよく解らないのですけどどういう意味なんですか?
ただ、今は時々じゃなくて毎回手をつけていないソースもコンパイルしてしまいます。
・間違ってリビルドを選択している
・自分でも気がつかないうちにソースを触ってしまっている
158154:02/06/11 00:20
>>157 実行時にはctrl+F5でしていますから
リビルドにはなっていないと思います。
実行の方も何回かやっていますけど、うまくいかないです。
ソースの方も気をつけて実行していますけど、
駄目です。
アウトプットの所ににも
”スキップ中... (関連する変更は検出されませんでした)”
とでてきますし、ソース自体には変更はないと思うのですけど。
>>154
俺も昔そうなったことがある。
で、全ファイルのタイムスタンプを、タイムスタンプ変更ツールで、変更した
ら正常になった。なんかの拍子に、ファイルのタイムスタンプが矛盾した状態
になったのかも。
160154:02/06/11 00:57
直りました。皆さんありがとうございました。
>>159 ご指摘通り時間の関係でした。
パソコン本体の時間がなぜか80年になっていたので
ソースとの時間の矛盾が原因でした。
1つ勉強になりました。


161こまった君:02/06/11 09:01
データを読み込んで、グラフを描画するようにしているんですが、
データが長いと、ピクチャがいっぱいになってしまいますよね。
で、今は、端までいくと、また一から白紙にして描画するようにしているんですが、
それだと、過去のが見れないですよね。
で、いっぱいまで行ったら、スクロールバーでぐりぐりと戻れるようにするにはどうすればいいでしょうか?
↓こんな感じです。
┏━━━━━━━━━━━┓
┃                ┃
┃                ┃←グラフを描画
┃                ┃
┣┳━━┳┳━━━━━┳┫
┗┻━━┻┻━━━━━┻┛←スクロールバー

でなおかつ、このグラフから、クリック&ドラグでデータ範囲を指定→なんらかの形でプログラムに送るなんてことはできるでしょうか?

>>161
「スクロールバーのコントロール張ればいいだけじゃん」
と思ってしまうのだけど…
163デフォルトの名無しさん:02/06/11 12:22
プロファイリングのやり方を教えていただけないでしょうか。
一応、設定で「プロファイルを行う」にチェックは入れているのですが、
どうやって結果を見るのかわかりません。
あれこれ検索もかけてみたのですが、
どうやって結果を見るのか結局調べがつきませんでした。

簡単な説明で構いません。
宜しくお願いします。
あげげ!!
>>163
検索不足。まず、チェック自体がたぶん入ってないよ。ここの2番目、サイトに感謝して見てきなされ。
http://www.google.com/search?num=20&hl=ja&q=%83v%83%8D%83t%83@%83C%83%8B%81@VC&lr=lang_ja

あとはビルド>プロファイル。結果は実行終了後、デバッグウィンドウに出力される。
166163:02/06/11 17:14
>165
すみません、出来ました。
ありがとうございます。
お手数おかけしました。
167デフォルトの名無しさん:02/06/11 19:13
BCCだったら問題なくコソパイルできるのに
VC++だと

hellowin.obj : error LNK2001: 外部シンボル "__imp__PlaySoundA@12" は未解決です
Debug/HELLOWIN.exe : fatal error LNK1120: 外部参照 1 が未解決です。

とエラーがでてしまうのですが。なぜ?
winmm.lib
プロジェクトの設定でオブジェクト/ライブラリモジュールにwinmm.libを追加。
170デフォルトの名無しさん:02/06/11 19:23
>>168
それがどうなのですか?
わかりません。教えてください。おながいします
171デフォルトの名無しさん:02/06/11 19:23
>>169
ありがとうございますた。
被ってたが役には立ったか・・というかライブラリの追加の仕方もシランのか。
173デフォルトの名無しさん:02/06/11 19:32
ヽ(`Д´)ノ ウワァァァン
追加の仕方わからないよ
174デフォルトの名無しさん:02/06/11 19:42
BCCで作成した.exeファイルを実行するとちゃんとウインドウ表示されるのにVC++で
作成したexeファイル実行しても何も表示されないのですが。
でもCTRL+ALT+DELを押すと実行されているのです。
終了しようとすると応答なしとか言われるし。なぜですか?
ソース貼らないとダメっすか?
おまえの書いたソースがbccに依存しまくっているだけ
いや、他人が書いたBCCのソースだろう。絶対。
177デフォルトの名無しさん:02/06/11 19:46
漏れは「プログラミングWindows95」とかいう糞分厚い本に載ってるソースを書いてる
だけなのですが。しかもその本ではVC++を使用しているとか書いてあるし。
178デフォルトの名無しさん:02/06/11 19:48
たぶん、写し間違い
>>173
MSDN
リンカ オプションの設定
181デフォルトの名無しさん:02/06/11 19:51
95とMeではWindowsプログラミングに違いはないですよね?
イパーイある
ソースは載ってるけどVCの設定については詳しく書いてないからね
184デフォルトの名無しさん:02/06/11 19:54
>>182
Σ(゚д゚lll)エッ!?マジッスカ?
それじゃ、漏れが勉強してる本は意味ないの?
今はそれの第五版がでとるよ。
186デフォルトの名無しさん:02/06/11 20:01
でもとりあえずBCCでは問題ないのにVC++でできないってことは
僕は間違えてないと思うんですけどね…
VC++のセテーイがわるいのかな?
ソースどっかに晒せ。

#ソース晒し用に、freeなSourceForgeアカとか取ったりして・・
188デフォルトの名無しさん:02/06/11 20:21
#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "HelloWin" ;
HWND hwnd ;
MSG msg ;
WNDCLASSEX wndclass ;

wndclass.cbSize =sizeof(wndclass);
wndclass.style =CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc =WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszClassName = szAppName ;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION) ;

RegisterClassEx (&wndclass) ;

hwnd = CreateWindow (szAppName,
"The Hello Program",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);

ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
189デフォルトの名無しさん:02/06/11 20:23
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;

switch (iMsg)
{
case WM_CREATE :
PlaySound ("hellowin.wav",NULL, SND_FILENAME | SND_ASYNC) ;
return 0;

case WM_PAINT :
hdc = BeginPaint (hwnd, &ps) ;

GetClientRect (hwnd, &rect) ;

DrawText (hdc, "Hello, Windows Me!",-1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

EndPaint (hwnd, &ps) ;
return 0 ;

case WM_DESTROY :
PostQuitMessage (0);
return 0;
}

return DefWindowProc (hwnd, iMsg,wParam, lParam) ;
}
人の話を聞かない奴がいるな
>>186
つーか、一番疑わしいのがあんた自身。
間違えて無いというのなら、打ち込み終わった後に一切エラーでなかったか?
あぁ、最初に載ってるプログラムだね
ウチじゃ普通に動くが?
194デフォルトの名無しさん:02/06/11 20:30
>>190
すみません。でも余り長くないので。
>>191
エラーは一切出ません。
>>189
wndclass.lpszMenuName
を設定し忘れてる
つーか構造体使うときははじめにZeroMemoryしる!

RegisterClassExもCreateWindowもGetMessageもエラーチェックしてないし。
んなもん応答無しになって当然だ。
196デフォルトの名無しさん:02/06/11 20:38
>>195
すみません…
僕が馬鹿ですた。
>wndclass.lpszMenuName
。を設定し忘れてる

まさにこれです。
きちんと動きました。
しかし、それ以外にも指摘していただいてますが
もう間違ってないと思います。
エラーチェックとかよく分からないのですが。
確かあの本に
「本中ではエラーチェックは省くけど本当はちゃんとやってね」的
文章があったと思われ。
198デフォルトの名無しさん:02/06/11 20:51
分かりますた。
ありがとうございますた
199デフォルトの名無しさん:02/06/12 13:01
独自のファイルフォーマット作って、
リード/ライト出来るよう作ったんですけど。
全てのデータがシ−ケンシャルアクセスだけど
WriteFile/ReadFileで主にアクセスする単位はDWORD程度。
これって効率悪いですか?
メモリは食うけど、一端メモリ上でデータ列を構築して
一気にアクセスした方がいいですか?
ファイルサイズは1M〜500KBぐらいです。
200デフォルトの名無しさん:02/06/12 13:10
>>199
WriteFile/ReadFile効率はよく知らないけど、
1Mの程度のサイズなら、オンメモリで処理しても
いいんじゃない?
ファイルマッピング使えば?
202デフォルトの名無しさん:02/06/12 15:39
既出orFAQかもしれませんが、
ListViewコントロールで行全体をハイライト(選択反転)にする
方法で、オーナー描画を使う方法はMSDNに載っていますが、
それ以外にもっと簡単な方法はないのでしょうか?

どこかのstyleのオプションでできたような記憶があるのです。
VBとかVCLだと簡単にできるんだろうけどなぁ
いいこと言った
>>202
LVS_EX_FULLROWSELECT じゃないの?
検索で一発で出てきたよん。
http://hp.vector.co.jp/authors/VA016117/listview.html
>>204 さんくす

いや、調べても出てこなかったんだよ。
せめてMSDNで「ListView AND 行全体」ぐらいでヒットして欲しかった。
日本語版MSDNでも英語ページだからな<ListViewコントロール拡張スタイル
207199:02/06/12 20:01
>>200-201
ファイルマッピングで組み直しました。
ありがとうございました。
208こまった君:02/06/12 23:44
以前、スクロールバーのことで質問したものです。
スクロールの入れ方はわかったんですが、
ピクチャとの関連付けのやり方がわかりません。
スクロールバー関数によって、取得したスクロールの現在位置をピクチャに反映するんでしょうか。。。
ピクチャに描画する関数と、スクロールバーの関数が別々なのに、
そんなことできますか??

どこかに説明しているページなどありませんか??
やりたいことは、
ピクチャに画面に表示しきれないぐらいのながーいグラフを描画して、
スクロールバーによって、移動させながら後で見るということがしたいのですが、、
>>208
スクロールバーの分解能とピクチャの分解能を合わせてスクロールバーの変化で現在位置を
取得してピクチャの描画範囲を設定してあげるって感じじゃないの?
210こまった君:02/06/13 00:16
>>209
すみません。
えーと、ちょっと説明させていただきマスト、
↓ここで、最初のスクロールバーの位置を設定してます。で、
BOOL C●●Dlg::OnInitDialog()
{
//スクロールバーのイニシャル設定
CScrollBar* s=(CScrollBar*)GetDlgItem(IDC_SCROLLBAR1);
s->SetScrollRange(0,255);
s->SetScrolPos(0);
return TRUE;
}
そして、
void CMyadDlg::OnButton5()
{  } の中で、ピクチャに描画されるようになっているわけです。
その後に、
void CMyadDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{  } という関数がくるわけですが、ボタン5で描画されたグラフをスクロールするたびに描画するのは大変時間がかかります。
描画されたグラフを覚えておいて、スクロールによって、再描画っていう風にはできませんか?

仮想的なピクチャの幅を0〜1024ピクセルの大きさに設定して、
最初実際に画面に表示されるのは、【0〜200ピクセル/1024ピクセル】
スクロールによって、仮想的なピクチャのうち200-400の部分を表示する。とか、そういったことはできないでしょうか??駄文すみません。
そのためのCompatibleDC,そのためのBitBltダ?
212こまった君:02/06/13 13:41
>>211
ありがとうございます。
仰ってる意味がよくわかりませんが、ちょっと調べてみます。

もう一つ質問です。
プログラムを実行すると、
子ウインドウが表示され、そこにグラフを描画するようにしたのですが、
子ウインドウは立ち上がるんですが、向こうが透けたようになって一向に描画されずに(というか描画されるべきウインドウもきちんと描画されず、処理が追い付いていないようなかんじ)、
プロセスが修了してしまいます。
リソース不足などのときになるような症状です。
これでは、グラフを見ることすらできません。
処理→描画のコード自体は間違っていないはずなんですが、、

また、プログラム実行中に×をクリックして修了しようとすると、
このプログラムは応答していませんとなりますが、これで普通なんでしょうか?
お前はホントにこまった君だな(藁
向こうが透けたようになって一向に描画されずに、というのは
お前が組んだ描画ロジックが全く機能していないからだ。
どっかからクライアント描画のちゃんとしたサンプルを探してきて勉強してくるように。
214こまった君:02/06/14 01:08
>>213
了解です。クライアント描画ですね。
その線でもうすこし勉強してみます。。
教えて君すまそです。
しかし、こうも右も左も分からないと、ちょっとしたヒントが非常に助かります。
では、胃ってきます。
215デフォルトの名無しさん:02/06/17 21:42
前から作ってみたいと思ってたのですが
一度しか見ることのできない画像を作成するソフトって
作ること可能なんでしょうか?
一度見たらレジストリあたりに記録して
二度目以降のプレビューを防いで。
そこで気になってるのはPrintScreenを
使用できないようにすることってできませんか?
これが無理ならこのソフト作ろうとすること自体が
間違いなので。。
というかもう既にそんなソフトあったりしますか?
調べてみたのですがわからなくて書き込みました。
よろしくお願いしますl。
不可能。
絵を再現するデータが存在する限り、どこかに抜け道はある。
勿論、暗号と同じで極端に解読が難しいという物なら出来るだろうけど、
確実に1度しか見れないようにするのは不可能。
217デフォルトの名無しさん:02/06/17 22:03
>>216
レスありがとうございます。
そうですね、
キージェネとか存在することが証明ですね。
言い換えると、、
解読が並に難しくて且つ、
そんなにメジャーにならなくて、
公にクラックされることがなければ
ある程度目的通りの物は作ること可能ですか?
わかりにくい分ですみません。
いけますか?


意味なくageちゃいました、
ごめんなさい。
>>215
一度見たら消しちゃう。
PrintScreen対策としては、OpenClipboardしっぱなしにして独占。
>>219
その程度じゃ簡単に対策できちゃうから無意味。
221デフォルトの名無しさん:02/06/17 23:38
テキストファイルに個人コード(4桁)日付(yyyyMMdd)時間(hhmm)と
連続で保存さているところから、
コンボボックスに個人コード、リストボックスに日付がデータとしてあって
2つのIDを使って日付をとってくる方法がわからないので、
教えていただきたいです
Priority上げて全部ひったくるとか。
>>221
わけわかめ。IDって?
4桁の数字だろ
>2つのIDを使って日付をとってくる

何処の日付をとってくる?
このスレは、>>221を読解するスレになりました。

えー、まずtxtで保存してあるデータファイルに、4桁の個人コードと
日付(yyyyMMdd)、時間(hhmm)が連続して書き込まれているらしい。

そして個人コード(コンボボックス)、日付(リストボックス)の項目がある
らしいのだが、ここにあるデータがファイルのものなのか、それとも別の
何かなのか、我々には解明できなかった。時間の項目が無いのも不可思議だ。

次に……出た!謎の2つのID!!ID第一の候補として個人コードが
挙げられるが、では2つ目は?直前に出た日付の事だろうか?
しかし、この2つのIDは日付をとるのに使われるらしい。では時間のこと?
おお、なんというどんでん返し!!つか分かんねぇよ(゚∀。)アヒャヒャヒャヒャ
227デフォルトの名無しさん:02/06/18 02:06
エディットボックスのよこに、スピンボタンを加えました.
最初はうまくうごいたんです。
で、
メンバ変数に変数を加えて、そのあとm_spn1.SetRange( , );などで範囲と初期値を
設定したんですが、
メンバ変数などを加える時になにかへんなところをおしてしまったのか、、エラーが
でて、というか、コンパイルビルドは通り、実行すると、
なにも反応なし、
デバッグモードでひらくと、
もういっちばん最初で、
00000001 ???
error: シンボル"this"が見つかりません
というエラーがでて、一番最初の00000001を矢印がさしています。
もうわけがわかりません。
spinボタンを消して、元通りにしてもどうにもなりません。
なにがいけないのでしょう?
ちなみにバックアップをとっていないのです。
こうなったらおわりですか?
>>227がんがれ。
230227:02/06/18 06:09
一からやってみて、どこがおかしいのか、突き止めました。

スピンボタン追加→数値の自動表示・自動関連付け・右端にチェック
これだけならうまくタブオーダー一つ前のeditを操作できたのですが、
次、スピンボタンにメンバ変数spn1を追加して、初期値&レンジを設定しようと、
次の■のように追加したのですが、
OnInitDialog(){
(中略)
// TODO:特別な初期化を行うときはこの場所に追加してくだちい
■ m_spn1.SetRange(1,9);
■ m_spn1.SetPos(5);
return TRUE; }
そうしたとたん、ビルド後アプリがまったく立ち上がらなくなってしまうんです。
ちゃんと本の通りやったんですがね、、、
231227:02/06/18 06:36
というか、どうやら
ヘッダーファイル内に、
CSpinButtonCtrl m_spn1;
CSpinButtonCtrl m_spn2;
がのこってると、だめみたいです。消すとアプリも起動します。
このままじゃ初期値等が設定できません。
どうしよ。。
232デフォルトの名無しさん:02/06/18 07:31
テキストファイルに個人コード(4桁)日付(yyyyMMdd)時間(hhmm)と連続で保存さているところから、個人コードをコンボボックスに表示して日付をリストボックスに表示します。データは構造体で持っています。

同じ個人コードは表示しないようにするための比較方法を教えていただきたいです。
うまく取得できた個人コードから日付をとってくる方法もわからないので教えていただきたいです。
つぎに個人コードと日付(個人コード)の2つのデータ(ID)から時間を取ってくる方法を教えてください。

私が作ったものではテキストファイルから個人コードは読み込めたのですが、
同じ個人コードが混じってしまっているので省きたいです。
ちなみにソースも記載したほうがよろしいのでしょうか?
233227:02/06/18 07:31
新規作成でダイアログベースで同じやり方で作ってみたらちゃんとレンジ&初期値設定できましたよ。
なんでかなー。もうなきそうです。
234227:02/06/18 07:48
CSpinButtonCtrl m_spn1;
この宣言をOninitDialog()内から、
cppの一番上(なんもないところ、まじ最初)に持って行ったらできました。なんで?どうして?つーか、こんなんしていいの?
というか、原因がわからないので、非常にすっきりしません。
どなたか、なんかアドバイスください。
>>227
・m_spn1が実際のスピンボタンコントロールに関連付けられていない
・CSpinButtonCtrl m_spn1; の位置については、「スコープ」という言葉がある
236デフォルトの名無しさん:02/06/18 15:03
popen並に簡単に使えるAPIないですか?
>>236
MessageBeepが簡単に使えます
238:02/06/18 15:18
質問があります。
よろしくお願いします。
クライアント領域にツールバーを作成したのですが、
それにコントロールと同じようにツールチップを割り当てると
うまくいかず、全て同じツールチップになってしまいます。
この解決策を知っている方がいたら情報いただけないでしょうか?
239助けて下さい!:02/06/18 15:42
waveファイルに信号処理(FIR)をかけて別のwaveファイルに出力するプログラム
は出来てるんですが、wavに書き出す前に試聴出来るようスピーカから音が出る
ようにしたいんです。出来上がったwaveファイルの再生については組めるんですが
全然解りません。どんな些細なヒントでもいいので教えていただけないでしょうか?
239
waveOutWrite()あたりを検索してくれ。

再生データがバッファ1つに収まる範囲なら大して手間かからんと思う。
無限再生なんかで、システム側からwaveOutProcをよばれて、データを切れ目
なく供給する部分が結構低レベルで面倒。高レベルのAPI使ったほうが楽。
241239:02/06/18 18:05
>240
ありがとうございます。WAVEFORMATEX?なんて使おうとしてました。
さっそくやってみます。
242239:02/06/18 18:06
あ、どちらにせよこの構造体は必要なんだ…。
>>232
まだよくわからん、まさかネタ?(w
内部データのIDと外部ファイルのIDを比較して一致した時だけ
何かしらのの時刻を取ってきて何かしらの領域に格納するの?

取り敢えず入出力をハッキリせえよ。脳内で語りすぎ(w
244232:02/06/18 21:32
>>232
232です。
IDはコントロールIDのことです。説明不足でした。
ちなみにデータ例は
45672002061810001800
12342002060209001725
45672002052909002200
こんな感じです。
表示上では
個人コードが4567
日付が2002/06/18
時間1が10:00
時間2が18:00
個人コードと日付から時間をとってきたいのです。
ちなみに同じ個人コードある場合は
エディットボックスには
2002/05/29
2002/06/18
と2つ表示させいです。
お前みたいに仕様をはっきり説明できないやつは何やっても無駄。
>>244
>>245じゃないけどホントにわからん(w

>45672002061810001800
>12342002060209001725
>45672002052909002200

これ自体が何を表してるのかはわかったけどさ、

>個人コードと日付から時間をとってきたいのです。

これの意味がわからん。
例えば上の例なら4567というIDをもったデータが1行目と3行目にあるわけだけど
単にIDの部分を比較して、データが重複してるかどうかを判断したいの?
それなら行毎の先頭4バイトを読み込んでstrcmpで比較していくだけだと思うけど。
247232:02/06/18 22:04
個人コードと日付が合致するものの日付を取得して
時間1、時間2をそれぞれをSetWindowText()でエディットに表示させるのが
最終目的です。

1.初期処理でテキストファイルからすべての個人コードを
コンボボックスに挿入。(同じ個人コードは表示しない)
2.コンボボックスから個人コードを選択し、
個人コードに対する日付をリストボックスに表示させる。
3.最後にリストボックスから日付を選択して、
時間1、時間2をエディットに表示させる。

以上です。これでわかってもらえなかったら諦めます…
データ列: personal_code date time
と言う構造で、 personal_codeとdateからtimeを取得したいってこと?
>>247
とりあえず、インターフェース(コンボボックス、リストボックス)と
ロジックを分離して考えよう。
>>247
個人コードと日付が合致って

45672002061810001800 の

456720020618 ここまでの事?

で、日付は

45672002061810001800 の

20020618 で 時間1、2は

10001800 でOK?

で、これデータ自体がテキストファイルになっていて
それを読み込んで構造体に格納するまでは作ってあるって事?
要は何処まで進んでるのかがわからないんだけど(w
251232:02/06/18 22:18
ちなみに個人コード、日付、時間1、時間2は構造体にしています。
typedef struct tagData
{
long lCode;//個人コード
long lDate;//日付
short nTime_1;//時間1
short nTime_2;//時間2
} Date;
こんな感じです。
>>247
ますはそれぞれ構成する要素を別々の配列に格納しておいて、

個人コードをコンボボックスへ追加する際には既にコンボボックス内に同じデータが
あったらはねるって感じでいれてく。

日付は現在選択されている個人コードと一致するコードを配列内から検索して
一致したらその位置の日付を追加していく。

時間は現在選択されてる個人コードと日付データが一致した位置の時間データを
それぞれエディットボックスに表示してやる。

こんな感じかい?
説明の下手さにイライラしてきた。寝る。
254232:02/06/18 22:51
>>252
そのとおりです。
うまく説明していただいてありがとうございます。

日付をとってくるときって
GetWindowText()で個人コードをとってきてやればいいのでしょうか?
どうもわかりません。
>>254
生API使いですか?
MFC使ったほうが楽じゃないですか?
>>254
それで良いんじゃない?
それかコンボボックスへ登録したインデックス順に別の配列へ
IDそのものを入れておいても良いと思うけど。
>>254
>>256の続き。

あとコンボボックスならGetCurSel()とGetLBText()でなんとかなるんじゃないかな。
258デフォルトの名無しさん:02/06/19 00:27
VC++でもプリンタ設定でもモード選択が多岐に渡る場合、凸の形をしたページ
が重なっているダイアログが出てきて凸の上の部分でページを選択させるよう
になっているが、あの様なプログラムをVC++で書く時はどうすればいいの?
一般に紹介されているダイアログだと単層構造のものしかできない。
>>258
タブコントロール
>>258
プロパティシート、プロパティページを調べれ
261258:02/06/19 00:39
どうもです。助かりました。
262デフォルトの名無しさん :02/06/19 01:51
Win2000でメモリ書きかえるときってGetWindowThreadProcessIdと
OpenProcessとWrite/ReadProcessMemoryだけで可能ですか?
マルチ死ね
代入文だけで可能です
265デフォルトの名無しさん:02/06/21 11:31
あげ
266デフォルトの名無しさん:02/06/21 14:11
子ウインドウを作る方針でやろうとしたのですが、(↓のような方法で)
if( GetDescendantWindow(ID_CHILD1) == NULL ) {
CWnd* s_window = new CWnd;
pv_window -> Create( NULL, "子ウインドウ",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
CRect( p_left, p_top, p_right, p_bottom ), this, ID_CHILD1 );
CDC* smallDC;
samllDC = s_window-> GetDC();
・・
元のダイアログウインドウより大きくはできないですよね.
元のダイアログウインドウと無関係にぐりぐり移動させられるウインドウを生成する方法はどうやればいいんでしょう?

#あらかじめ作ってあるリソース(ダイアログウインドウ)を呼び出す関数などはあるんでしょうか?
267デフォルトの名無しさん:02/06/21 14:12
↑の変数名ひとつ間違えてます。
s_windowのところ。質問の本質ではないですが、一応。。
>>266
リソースで作ってあるダイアログを表示したいなら
そのダイアログをCDialogに結び付けて表示元のウィンドウクラスで
そのダイアログのメンバ変数(例えばm_Dlg)作ってm_Dlg.ShowWindow( SW_SHOW )で
出るんじゃない?ダイアログクラスのコンストラクタでcreateする必要が
あったような無かったような・・・・。
269デフォルトの名無しさん:02/06/22 17:25
プログレスバーの中に “58%” などといった文字列を、一部の色を反転させて表示する場合、
どのようなインプリメントをするのがスマートなんでしょうか?

メモリDCに文字列を書いて BitBltで合成することで、それらしいものを作ってみましたが、
Codeguruなどを見てみると、クリッピングリージョンを駆使したものが紹介されていました。

BitBltのパフォーマンスは環境に大きく左右され、負荷も大きいと聞いたんで、やっぱ
クリッピングリージョンを使った方一般的なんでしょうか...?
>負荷も大きいと聞いたんで
いつの時代の話だ(ワラ
271デフォルトの名無しさん:02/06/24 14:07
>>268
ダイアログのメンバ変数を作る方法がわからないんですが..
>>271
リソースエディタでダイアログ作ってそのダイアログを右クリックしてクラスウィザードで
CDialogに結び付けてあげる。
273デフォルトの名無しさん:02/06/24 22:45
Visual c++.Net使ってて、アイコンリソースを追加(インポート)したいのですが、なんだかうまくいきません。
(リソースの追加をしても何にも起こりません。)
VCの右側のリソースビューのところには、(赤い×印つきで)ほかのエディタで開く、という奇妙なものが表示されています。
しかも、クリックしても何にも起こりません。
今のところ、リソーススクリプトをメモ帳なりで編集して無理やりインポートしているのですが、どうしたらいいのでしょう?
あと、これ関連でアイコンリソースのリソースIDが変更できません。
これまた、どうしたらいいでしょう?
>>273
VC6しか知らないのだが、リソースビューのツリーのアイコンのところを右クリックできない?
275273:02/06/25 00:11
>>274
そう、今までVC6使ってたから、そのつもりでやったら、できんのよ。
誰か、情報キボンヌ。
276デフォルトの名無しさん:02/06/25 01:33
DLLエクスポートの序数を自分で管理するには
普通DEFファイルを用いると思うんですが
あるVC++のプロジェクトでは、DEFファイルが無いのに
序数を任意の数にしているみたいなんです。
何かやり方があるんでしょうか?
>>276
リンカの/EXPORTオプション?
278276:02/06/25 04:40
>>277
ごめんなさい、
自分の勘違いでした。
279デフォルトの名無しさん:02/06/25 10:43
IEにGoogleツールバーのようなものを取り付けるプログラムを
作成したいのだが、サンプル載ってるページはありませんか?
>>279
Googleで検索すれば見つかります。
281デフォルトの名無しさん:02/06/25 21:28
#pragma pack( [ [ { push | pop}, ] [ identifier, ] ] [ n] )

これの意味が理解できずにMSDNライブラリで調べてみたところ、

>この構文を使うと、プログラムの別の構成要素が pack プラグマでパッキングした
>別の配置を指定しているときに、プログラムの構成要素を単一の翻訳単位にまとめることができます。
>push を使うと、その時点のパッキングの値が記憶されます。

この場合、パッキングというのは、ある構造体などをnバイトに収めるように
するということなのでしょうか?
28270:02/06/25 22:18
>>281
とりあえず...
> #pragma pack(n) を使い、n に 1、2、4、8、16 を指定すると、構造
> 体の 2 番目以降のメンバはメンバの型のサイズと n バイト境界の小さ
> な方に置かれます。
だけ覚えておけばいい。あとの構文は必要なった時に使えばいい。

それでもわからなければ「パディング」とか「アライメント」とかの言葉
をぐぐってみそ。

それでもわからなければ、まだ pack なんて必要ないんだよ。無視しとき
な。
>>281
お前には移植考慮無しのpack(1)がお似合いだ。
284デフォルトの名無しさん:02/06/27 17:51
ドラッグでエリアを選択するような機能を作っていますが、
void CPainDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if(nFlags == MK_LBUTTON)
{
CClientDC DC(this);
DC.SelectStockObject(NULL_BRUSH);
DC.Rectangle(m_from.x,m_from.y,point.x,point.y);
・・・
こんなかんじで、マウスのドラッグに合わせて長方形を描画してるんですが、
これだと、通過した位置まで全部に長方形が描かれてしまいます。
あくまでプレビューで長方形の位置を見ながらそこには描かず、最終的にOnLButtonUpした地点までの長方形のみを描きたいのですが、どうすればよいのでしょうか?

中を塗りつぶすというのは下の絵が消えてしまうので無しです。
>>284
DrawFocusRect
286厨房:02/06/27 18:00
C言語をフリーのソフトでコンパイルするのない?
>>286
gccで検索しろ。
288デフォルトの名無しさん:02/06/27 18:11
スタックを使わずに逆ポーランド電卓作りたいんですが
switchやfor程度で作れる単純なソースお願いできないですか?
ちなみに自分で作ってみたら、
#include<stdio.h>
#include<stdlib.h>

int main()
{
char data[100];
int suuji = 0;

printf("逆ポーランド記法による計算をします\n");
printf("\n");
printf("計算したい数字を入力してください->");

scanf("%s", data[suuji]);

switch(data[suuji])
{
default:
break;
case '+':
data[suuji] = data[suuji] + data[suuji];
break;
case '-':
data[suuji] = data[suuji] - data[suuji];
break;
case '*':
data[suuji] = data[suuji] * data[suuji];
break;
case '/':
data[suuji] = data[suuji] / data[suuji];
break;
}

suuji = atoi(data);

printf("\n");
printf("合計は%dです\n", data[suuji]);

return 0;
}
余裕でエラーでした。
289284:02/06/27 18:29
>>285さんありがとうございました!!できそうです。
で、move内で以下のようにしていますが、
・・・
SetRect( move_rect, m_from.x, m_from.y, point.x, point.y );//新しい位置情報を取得
CClientDC DC(this);
DC.SelectStockObject( NULL_BRUSH );

DC.DrawFocusRect( move_rect_last );//前回の場所に描画指示して消す!
DC.DrawFocusRect( move_rect );//新しいのを描画
SetRect( move_rect_last, m_from.x, m_from.y, point.x, point.y );前回の位置情報を記憶
・・・
DrawFocusRectは同じ位置にもう一度描画すれば消せるとのことで、やってみているんですが、消えないんです。
どこがおかしいのでしょうか?
>>288
まず、スタックを使わない理由を聞かせてくれまいか。
291デフォルトの名無しさん:02/06/27 18:57
>>290さん
簡単に言うとスタックがまだわからないからです・・・
色々調べてみてスタック使えばすぐにできるようなんですが
範囲外なので不必要なんです。
で、かわりの配列でなんとかしたいわけです。
配列をスタックとして扱っているだけでわ・・

数値をdataに積んでいるでねーし、
演算子も、スタックから取り出しているわけでもねーし、、
>>288
感動的なまでに無茶苦茶ですね・・・
スタック以前に基礎からやり直したほうがよくないですか?
294デフォルトの名無しさん:02/06/27 19:22
基礎からというよりその基礎を今やってる最中なんですが・・・
>>294
勘で書かずにわからない部分やあやしい部分は参考書を見て書きましょう。
296284:02/06/27 19:28
|_・)ソォーッ
>>289はいかがなものでしょう?
>>296
後は自力で
298284:02/06/27 19:34
ヒー
299288:02/06/27 19:35
その通りですね・・・
グラフィック専攻なので1冊も参考書買ってませんでした。
明日にでも買って見てみようかと思います。
300デフォルトの名無しさん:02/06/27 21:45
CDC* pDC=p->GetDC();
CRect r; //ピクチャの領域サイズをrに取得
p->GetClientRect(&r);//ピクチャの領域サイズをrに取得
とした場合、
r.leftとr.top
は常に0ということなんでしょうか??
 /(0 , 0)
┏━━━━━━━━ウインドウ━━━┓
┃   /(r.lft , r.top)
┃  ┌──────────┐
┃  │     ピクチャエリア 
┃  │
┃  │ですよね?で、r.left=0だとすると、
┃  │
 ←→ この部分
ピクチャエリアの始点の間隔はどのようにあらわされるのでしょう?
301デフォルトの名無しさん:02/06/27 23:20
今度シリアル受信専用のアプリケーションを作る予定なのですが、
相手側が不定期に送信してくる場合、受信側ではタイマなどで定期的に
受信するようなスレッドを常に起動しておくような形で良いんでしょうか?
またその場合送信データを受信バッファで受け取った際、
[STX]データ[ETX][STX]データの途中・・・ ← ここまでしか取れないような
状況になりそうな気がするのですが、その場合データの成形は
アプリケーション側でやってあげなければいけないんでしょうか?
大麻などで定期的に受信っていうか
スレッドでずっと受信用にreadfileで待っておく。そんでなんか受信したらどっかにバッファリングして
メッセージで本スレッドに通知してまたすぐreadfile。そういうずっとreadfileするスレッドをつくっておきます。
>>302
成る程ですね。
要は受信割り込みの代わりをスレッドにやらせるって感じですか。
ありがとうございました、やってみます。
あ、聞き忘れましたが、

[STX]データ[ETX][STX]データの途中・・・ ← ここまでしか取れないような
状況になりそうな気がするのですが、その場合データの成形は
アプリケーション側でやってあげなければいけないんでしょうか?

これに関してはどういった感じでしょうか?
>[STX]データ[ETX][STX]データの途中・・・ ← ここまでしか取れないような
>状況になりそうな気がするのですが、その場合データの成形は

ええ。なりますよ。

短時間ならスレッドで処理してもいいし、
アプリの方で電文として完結するところで切り出しても良いんじゃないですか?
>>300
GetClientRect(&r1); ClientToScreen(&r1); GetWindowRect(&r2);
とでもして、r1とr2の差分を取ってみ。
あと、変な言葉を発明せずに素直にクライアント領域と呼べ。

>>289
move_rect_leftをメンバ変数かstatic変数にしる。
>>305
やはりなりますか・・・わかりました。
ありがとうございます。色々聞いてしまって申し訳ありませんでした。
308306:02/06/27 23:50
>300
考えてみりゃ GetWindowRect(&r1); で十分だな。
>289
move_rect_last の間違いだな。
>306
もう寝な。
309デフォルトの名無しさん:02/06/28 02:11
すみません、うまく伝わらなかったみたいです。
┏(0,0)←スクリーン座標で━━スクリーン(モニター)━━━━┓

┃   /(0 , 0)←クライアント座標において
┃  ┏━━━━━━━━ウインドウ━━━┓
┃  ┃   /(r.lft , r.top)
┃  ┃  ┌──────────┐
┃  ┃  │     ピクチャエリア 
┃  ┃  │
┃  ┃  │クライアント座標から見たピクチャの始点座標の位置を
┃  ┃  │ 知りたかったわけです。
     ←→ この部分
という意味でした。
>>309
やっぱりよくわからん。ピクチャエリアって何?
クライアント領域のことを言ってるなら>>306だし、
ウィンドウに貼りつけたコントロールなら>>308
いずれにせよ、両方ともスクリーン座標に直して
引き算すりゃ答えは出るだろ。
311デフォルトの名無しさん:02/06/28 02:28
+−−−−−−−−−−−−−−−−+
|myapli.exe             _□×|
+−−−−−−−−−−−−−−−−+
|ファイル 編集 ・・・             |
+−−−−−−−−−−−−−−−−+
|                        |
|                        |
|                        |←クライアントエリア
|                        |
|                        |
+−−−−−−−−−−−−−−−−+
312デフォルトの名無しさん:02/06/28 03:06
>>310
ピクチャエリアと書いているものは、
CWnd* h = GetDlgItem( IDC_PICT1 ) ;//ピクチャ1
CDC* pDC = h -> GetDC() ;
CRect rect_pict1 ; //ピクチャの領域サイズをrect_pict1に取得
などという場合のピクチャのことなんです。
ここで、目的は、
【マウスをクリックした位置が、ピクチャ1のどの位置であるかを取得したい。】ということだったんですが、

この場合、マウスの位置は、
void CPainDlg::OnLButtonDown(UINT nFlags, CPoint point)
の中で、( point.x, point.y )によって取得すると、クライアント領域からの位置になっていて、
それがピクチャのどのぐらいの位置?というのを知るために、
クライアント内でのピクチャの左端の座標、 =(つまり上図の差分部分)
を知る必要があったんです。
>>312
んだからGetWindowRectとかで何とかすればよいのではないのか。
VC++でASSERTを使うときに,しなくてはけない事を教えてください(ヘッダーをインクルードするとか)。
CRTDBG.H?
_ASSERT と、アンダーバーが必要。
>>312
ClientToScreen(&point);
GetDlgItem(IDC_HOGE)->ScreenToClient(&point);
317デフォルトの名無しさん:02/06/29 00:53
Aと言うクラスからBというクラス内のマルチスレッド用関数をスレッド起動する事は可能ですか?
実行すると一応動くのですがスレッド終了時にメモリリークがなんたら〜といったメッセージが
アウトプットに表示されてしまいます。原因としては何が考えられるでしょうか?
メモリリークがなんたら〜 が起きているから。
319デフォルトの名無しさん:02/06/29 01:24
A::func()
{
B.beginethread();
}
ですか?
320デフォルトの名無しさん:02/06/29 02:45
プログラム初心者なんですが
クラスのオブジェクトを必要に応じて順次作っていくにはどうすればいいのでしょうか?
321デフォルトの名無しさん:02/06/29 02:48
newしてください。
322デフォルトの名無しさん:02/06/29 04:29
Windows2000Sp2+VisualC++6.0で、
ATLCOMウィザードで空のプロジェクトを作って
コンパイルするとTLBファイルが生成されます。
それをOLE/COMオブジェクトビューアで見ると
アクセス違反でプロセスが落ちるんですよ。
元からある他のTLBだと大丈夫です。
何が問題なんでしょうか?
レジストリが壊れてとか?
>>322
> アクセス違反でプロセスが落ちるんですよ。
> 何が問題なんでしょうか?
アクセス違反だろ。
324323:02/06/29 07:02
意地悪言わないでよ。
つーかレジストリが怪しいよな、やっぱ。
は〜再インストはイヤだぁ〜。
325デフォルトの名無しさん:02/06/29 12:50
>>319
A:Func
{
B myB;

AfxBeginThread( myB::Func, &myB, THREAD_PRIORITY_NORMAL );
}

って感じです。
>>325
それじゃA::Funcを抜ける時にmyBがあぼーんされる。
newで作ってどっかに大事にしまっておけ。
>>326
ああすいません、間違えました(汗

B myB;

はAのヘッダにメンバ変数として登録してあります。
クラスのメンバ関数をスレッド関数にして問題があるかどうかわからないが
普通はスレッドは普通の関数にすると思う。

329デフォルトの名無しさん:02/06/29 14:20
同じクラスの他のオブジェクトのメンバをメンバ関数で使いたいときは
どうすればいいですか?
CFoo a,b;

aのメソッドでbのデータメンバを変更するって事ですか?
331デフォルトの名無しさん:02/06/29 15:03
CFooというのがわかりませんが
そんな感じです
332デフォルトの名無しさん:02/06/29 16:47
class CFoo{
    func(CFoo *p){
        p->・・・    //←ここで好きなように使う
    }    
}

main()
{
    CFoo a,b;
    
    a.func(&b);
}
とか。
333デフォルトの名無しさん:02/06/29 17:57
C#を購入しました。
64MBのメモリでは厳しそうなのでバルクの128MBメモリも購入しました。
PCにメモリを挿したのに認識しません。
それどころか起動しません。
メモリの規格はあっています。(多分)
バルクってのがマズかったですかね?

とりあえず64MBのメモリで諦めます。
メモリ不足でPCが逝ったら僕も逝きます。
334デフォルトの名無しさん:02/06/29 18:28
ふーん
>>333
つーか強引にVCに話を繋げるなよ・・・・・・(w
336デフォルトの名無しさん:02/06/29 18:49
>>332
なるほど、ポインタを使うんですか
ありがとうございます
337デフォルトの名無しさん:02/06/29 19:02
>>332
・・・はメンバ関数でも大丈夫でしょうか?
>337
パブリックなメンバなら関数でもデータでもダイジョウブだけど。
ちなみに設計としてはかなりヤバイでしょ。こういうのをチカラワザと言います。
339デフォルトの名無しさん:02/06/29 20:04
C#でウィンドウ表示するだけのプログラムを作ったんですが
それだけで100MB以上のメモリを消費しています。
(VisualStdio + 作ったプログラム)

死ぬほど遅いです。
マジで逝きそうです。
何とかしてください。

ところでC#って.Netのプログラムしか作れないんですか?
普通のプログラム作るにはVC6.0を使えってことですか?
メモリを増設して、CPUを強化すればいいじゃん。
C#スレ行け
CでHello, World表示するだけのプログラムがでかすぎるって
大昔に叫んでたやつがいたな。
343デフォルトの名無しさん:02/06/30 00:42
>>338
なるほど、、、いまクラスの勉強しようとおもって
行列のクラスをつくってるんですよ(死ぬほど適当ですが)
そこで行列同士の掛け算をするときにオブジェクトをオブジェクトで呼び出せたらと思ったんですが
そういう関数はメンバにしないほうがいいのでしょうか、、、
>>343
スレ違いやね。このスレじゃなくて、C++相談室で取り扱う話題だ。
まあ姉妹スレのよしみで答えてやるけど、掛け算をやりたいんなら、
その行列クラス用のoperator*()をオーバーロードするのが定石。
誰からも認められる、operator*()の正当なオーバーロードのやり方は、
Effective C++ と More Effective C++ を買って読めば分かる。買え。
345 :02/06/30 02:14
>>344
ここはVC専門すれだったのですか、、、いま気づきました、、申し訳ない

、、、なるほど、そういうことやるのに適したのがあるのですか
今度見てみます

配布されているDLLを利用したWinコンソールアプリをVC++で作っています。
DLLのAPIが、呼ぶたびにstdoutに文字を吐きまくってうざったく、
それを黙らせたいのですがつまってしまいました。。

APIを呼ぶ時だけstdoutをコンソール以外(できれば"nul")につないで、
処理が戻ってきた時(自分がメッセージを吐きたい時)にstdoutとコンソールを
つなげなおせばよいかなと考えました。
とりあえずfreopenを使ってstdoutを別ファイルにつないでみたのですが、、
stdoutをコンソールにつなぎ直す方法がわかりませんでした。(苦笑

「自分のメッセージはstderrに出力」以外にうまい方法はありませんか?
kage.dll方式で、Console系APIを
つぶしてしまえ。
>>347
kage.dllって2ちゃんねるブラウザのやつですよね。
でも調べてみてもコンソール関係の情報を見つけられませんでした。。
申し訳ないのですけど、ぐぐる用キーワードかURLあたりだけでも教えて頂けませんか?
349デフォルトの名無しさん:02/07/01 21:24
アプリ終了時にAafxBeginThread()等で起動したマルチスレッドを終了させたい場合は
特になにもしなくてもいいんでしょうか?たまにkernel32でエラーが起こりましたといった
メッセージが表示されたりするんですが別の問題ですか?
WaitFor*Object(s)で待機せよ
>>346
GetStdHandleで保存
SetStdHandleでNULLでどうだ?
>349
スレッド自信がループから抜け、関数としてリターンさせる。
そのためにはメインスレッドからイベントオブジェクトをシグナルさせてやる。
スレッド側は>350の言うような方法で終了イベントやその他のイベントを待つことができる
>>350
>>352
なるほど、ありがとうございます・・・と言いたい所なんですが正直難しそうですね(^^;
今HELPを見てみたんですが良くわかりませんでした。
それっぽい説明のあるHPなどがありましたら教えていただけませんか?
スレッドに終了イベント(volatileのフラグでもイベントでも)を送って、
受け取ったスレッドは自殺。

んで、メインスレッドでシグナル状態になるまで待機
(スレッドハンドルにWaitForSingleObjectとか)
356kaz:02/07/02 12:54
はじめまして、VCの初心者なんですが、プッシュボタンやコンボボックスをプログラムの
起動中に無効化(グレーアウト)にするにはどうしたらいいでしょうか??
MSDN探してても見つからなくて・・・
6.0ならリソースエディタで対象のボタンなどの
コントロール上で右クリック->プロパティで
無効化、みたいなチェックボックスなかったっけ?
ちょっと記憶があいまい。。

またはEnableWindow()かな。
358kaz:02/07/02 16:02
ありがとうございます!!ですけど、EnableWindowで普通の無効化はうまくいきそうですが、
ボタンを押されて処理の途中、ボタンを使い手に触らせないという意味での無効化は
どうやらできないようです.
ボタンが押されて、OnButton関数が始まります。OnButtonの最初で無効化を使用します。
それからOnButton内で処理が始まります.処理には待機中の状態があって、ボタンの見た目
は無効化されていても、待機中の状態の時に無効化されているボタンをさわるとまた処理後、
最初から処理を開始してしまうのです.どうにかならないでしょうか??
>>358
PeekMessage()調べてみてYO!
>>359 VB厨どっかいけ >>358 BeginWaitCursor, EndWaitCursor あたりをキーに探せ。 MFCつかってるならCWaitCursor でもいいけどね。
361359:02/07/02 17:24
>>360
VB使ったことないのに・・・(´・ω・`)トホホ

BeginWaitCursor()(EnableWindow()でも良いけど)を呼び出す前に
さらにイベントがPOSTされたらどうすれば良いでしょうか?
ボタンを連射した時とかね。
BeginWaitCursor()が呼び出されるまで「絶対に」POSTされないって
言い切れる?
やれるもんならやってみろ。

peekmessage自前でするアプリでおかしな動きをしないのは見たことないが。

スワップがりがりのノートや異常に重いアプリを動かしてるような環境なら
二度ポストされるかもね。
そのときは、二度処理するのがイベント駆動アプリとしては正しい姿だろう。

363kaz:02/07/02 20:15
みなさん、いろいろアドバイスありがとうございます!!
とりあえず、いろいろ勉強してみて試してみます。また問題があれば
また、後ほど、、
364359:02/07/02 20:30
>>362
>やれるもんならやってみろ。
よくやってますが。

>peekmessage自前でするアプリでおかしな動きをしないのは見たことないが。
ハァ?何でおかしくなるの?普通のAPIだよ?
メッセージキューを扱うのが特別だと思ってるの?
CでAPIのみ使ってプログラミングしたことある?

>そのときは、二度処理するのがイベント駆動アプリとしては正しい姿だろう。
マジデスカッ!! 前提覆すなよっ!
・・・あんたがプロのプログラマじゃなかったら許す。

365デフォルトの名無しさん:02/07/02 20:39
Aと言うプロジェクトで作ったMFCからの(コントロール)派生クラスを、
新しく作ったBのプロジェクトで使おうと思ったのですが、ダイアログエディタで
ダイアログへコントロールを置いてそのコントロールをクラスウィザードで
メンバ変数に結び付けようかと思ったらそのクラスが選択できませんでした。
クラスビューではクラスとして認識されているのですが何か他にやらなければ
ならない事があるのでしょうか?
366デフォルトの名無しさん:02/07/02 23:46
スピンボタン付きのエディットボックスで,
m_spn3.SetRange(2000,2020);
m_spn3.SetPos(2002);
のように西暦を指定しているのですが,
どうしても2,002と表示され,2扱いになります.
このような症例に覚えのある方はいらっしゃいますか?
ちなみに,エディットボックスの定義で,
CほげDlg::CほげDlg(CWnd* pParent /*=NULL*/)
: CDialog(CほげDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyadDlg)
m_edit1 = _T("");
m_val1 = 0;
m_edit2 = _T("2002");
・・・のようにしていますが,,,
これが原因??でもなんで2,000なんてなるんだろう...たすけてください.
>>366
スピンのスタイルをみれ。
>>362
(゜д゜;)ポカーン・・・
369デフォルトの名無しさん:02/07/03 01:34
WindowsXP VisualC++6.0professionalです。
ファイルをコンパイルすると以下のようなエラーが出てしまいました。
error LNK2001: 外部シンボル "__CrtDbgReport" は未解決です
fatal error LNK1120: 外部参照 1 が未解決です。
色々コメントアウトしたりしてifstreamの部分が問題だということが
分かったのですが、なにかおかしなところがあるのでしょうか?。

std::ifstream in_file(path, std::ios::in|std::ios::binary);
// open失敗
if(in_file.bad()) return false;
//ファイル形式のチェック
char identifer[3];
in_file.read(identifer, 3);
if(strcmp(buffer, identifer) != 0)
eturn false;
in_file.close();
// close失敗
if(in_file.bad()) return false;
return true;

またios::nocreateをこのように入れようとすると
>std::ifstream in_file(path, std::ios::in|std::ios::binary|std::ios::nocreate);
error C2039: 'nocreate' : 'basic_ios<char,struct std::char_traits<char> >' のメンバではありません。
となってしまいます。何かおかしな部分があるのでしょうか?
ios::inとios::binaryは全く問題無いようです。
どうかよろしくお願いします。
TVITEMのpszTextメンバはconstじゃないんですが、
一時変数やconst文字列をキャストして渡すのはダメなんでしょうか?

MSDNには編集されると書いてあるようなのですが、
スタック変数を渡しても文字列が破損される気配がないので、
内部でコピーが作成されているのかなと思うのですが。

実際のところ、どうなのでしょうか?
>>370
SetするのもGetするのも同じ構造体を使う都合上、非constになっているだけと思われ。
漏れはいつもconst_castして突っ込んでいるけど、心配ならコピーして渡すよろし。
372デフォルトの名無しさん:02/07/03 17:09
>>367
ありがとうございました.解決しました!!
どうしてあんな機能がデフォルトでついてるのかと思いました..
>どうしてあんな機能がデフォルトでついてるのかと思いました..
それがMSぢゃないですか・・と言ってみるテスト
374デフォルトの名無しさん:02/07/03 18:23
すみません,
GetTotalSecondsの逆を教えていただけますか?

CTime→ GetTotalSeconds → 総秒
総秒 → [    ?     ] →CTime
>>374
GetTotalSeconds()って、CTimeSpanのメンバ関数やん。
376374:02/07/03 18:33
>>375
そうですね,でもCtimeから差を求めて,CTimeSpanに代入して,
CTime tm1;
CTimeSpan tsp1;
long ttm;
tts = tsp1.GetTotalSeconds(); //で総秒をゲットできる
のように総秒数を求めることができますよね??
この逆に,
long time_sum;//秒数
などから,
Ctime tm2;とかに変換する方法はありますか?
377デフォルトの名無しさん:02/07/03 18:46
>>376
CTime( time_t time );
コンストラクタに↑こんなのがあるから、time_sumをそのままぶち込めばOKなんじゃない?
1970年1月1日を基点にした時刻になるよ。

(「時間の間隔」を「時刻」に変換するってのがよく分からんけど)
>>376
値を入れるだけなら普通に代入できるけど、
CTimeは
「0時間0分0秒」から始まってるわけじゃない。
379あい:02/07/03 18:49
携帯のデータを破壊するウイルスさがしてます。
380533:02/07/03 21:12
教えてください。
Explorerの右クリックメニューに項目を追加し、処理を割り当てたいのですが
やり方が分かりません。

HKEY_CLASS_ROOT\*\shellで別アプリを起動するしか無いのでしょうか?
これしか方法が無いとした場合、モーダル起動?(モーダルダイアログ表示時の
親子関係の様な物)は可能でしょうか?

具体的には、Explorerでファイルの右クリックメニューに「メモ帳で編集」的な
項目を追加し、そのメモ帳が終了するまで起動元のExplorerを操作できなくしたい。
と考えています。(実際は「メモ帳」部分が独自処理になります)

分かりにくくて申し訳ありませんがよろしくお願いします。

381デフォルトの名無しさん:02/07/03 21:24
Visual C++で使える正規表現ライブラリに心当たりありませんか?
GNUのやつをコンパイルしようとしてもうまくいかないのです....
rubyとか、perとか、Pythonとかのを流用すればいいやん。
384374:02/07/03 23:12
現在求めていることは,
CTime jikan1(2000, 1, 1, 12, 0, 0);
で,2000年01月01日12時00分00秒に設定したとして,
2000年01月01日12時00分00秒から300000秒後の日付を知りたいということなんです.

ctime()を使うとすると,
struct tm *jikan2;という形ですよね?

そもそもどうして
CTime jikan1(2000, 1, 1, 12, 0, 0);
struct tm *jikan2;
などを時間を計算する複数の方法があるのが意味がわかりません.これらは互換性はないんでしょうか?
>>384
プログラミング暦何日(または何時間)くらいですか?
386374:02/07/03 23:37
>>385
( ゚д゚)ポカーン
>>384
ヘルプでCTimeのところを読んでみなよ。
時刻に時間を足せるって書いてあるじゃん。
>>386
> などを時間を計算する複数の方法があるのが意味がわかりません.

この発言はそう思われても仕方ないと思われ
389デフォルトの名無しさん:02/07/03 23:42
>>384
jikan += CTimeSpan( 0, 0, 0, 30000 )
390374:02/07/03 23:55
みなさんありがとうございます.
弱冠プログラム暦3ヶ月の新まいでう.
ご回答ありがとうございました.
392デフォルトの名無しさん:02/07/04 01:09
やむを得ない事情から、とあるdll内にあるコールバック関数を使っています。

ところが、この呼ばれたコールバック関数から、クライアント側の関数や変数を
操作しなければならないという、いかんともしがたい窮地に追い込まれています(´Д⊂

dllのソースはあるのですが、大幅な変更をしてはいけないという…。
なにか良い知恵がありましたら、どうかお授け下さいませ…。
>>392
たしか、DLLとEXEで共通の変数にアクセスする方法はあるよ。
おれは、もう寝なきゃならないから、がんばって検索してください。
>>392
グローバル変数のようにアクセスする方法は知らないので
EXE内の関数を呼んで変数のアドレスをゲットしよう!
と言っておく
395392:02/07/04 01:33
お二人とも、さっそくのレスありがとうございます(*´Д`)
>>393
#pragma data_seg(".shared")
やや、これですね!やた、変数はどうにかなりそうです。
>>394
えっとえっと…dllからexeの関数を呼ぶ方法が……。
393さんの方法を使うとしても、関数などのポインタを直接渡すのは、
アドレス空間が違うから無意味ですよね…。クライアントのウィンドウハンドルだけ
共有して、SetWindowLongとかに埋めておく、みたいな感じで宜しいのでしょうか?
>>395
普通に関数のポインタ渡せない?
ふつー、dllはexeと同じアドレス空間に配置されると思うが。
398392:02/07/04 02:08
>>396 >>397
レスありがとうございます。

あー、あたしってば情けない(´・ω・`)
どうも挙動がおかしいと思ったら、グローバルフック用のdllだった
みたいです…ううう、みなさん、ほんますんませんです(*/ω/)

今大急ぎで適当なdll作ってやってみたら、皆さん仰るとおりなんの問題もなく
上手く行きました。(蛇足ながら一応グローバル&&GetWindowLong版の方も成功しました)

夜遅くにお騒がせしてすいませんです。重ね重ね皆様に感謝です。
358がMFCのMLにポストしたね。
ここはどうやら役に立てなかった模様、残念
>>358はマルチスレッドでなんとかならんのかね?
MFCのMLを見る限りではpostmessageの勉強をするということで決着したみたいだな。
402kaz(358):02/07/04 21:25
すいません。別にこっちが役に立たなかったわけじゃないです。
ただ、API使ったこと無かったんで、今更、MFCで教えてくださいとは
書きづらかっただけです。ほんとすみません。
403デフォルトの名無しさん:02/07/04 22:10
windows上のvisual applicationの開発では
visual c++とc++ builderのどちらが素早く開発しやすいですか?
>>403
慣れてる方。
405デフォルトの名無しさん:02/07/04 22:35
どちらも初めての場合は?>>404
安い方。
お金を貯める時間が短くてすむ
407デフォルトの名無しさん:02/07/04 22:42
もう持っていたら?>>406
>>407
インストール時間が短い方。
インストール済みなら起動が早いほう。
VC++のスレで聞くことが間違ってるという指摘はあえてしないのか?
>>407
だったら、両方入れてちょっと使って見りゃいいじゃん。
いいかげんウザイから、もう来るな、ぼけ。
411デフォルトの名無しさん:02/07/04 23:25
このスレには
両方使って開発した経験のある人はいないということでOK?
>>411
はいはい、OK だよ。どうでもいいから、氏んでてくれ。
413デフォルトの名無しさん:02/07/05 00:10
APIベース(自分でwin main作る)プログラムでMFCも使うこと出来ますか?
たとえばinclude何々とかすれば使えますか。
ファイルダイアログ とか CString とか 便利なもんで。
なにとぞ御教授おねがいします。
すいません、これどういう意味ですか?

x>0?y:0
415デフォルトの名無しさん:02/07/05 00:16
z=x>0?y:0で 
x > 0 なら z = y
x > 0 では無いなら z = 0

ちがったっけ?
if(x>0){z=y;}else{z=0;}
ってことですね?
ありがとうございました。

MSDNに載って無いのなんでなんだろう。
417デフォルトの名無しさん:02/07/05 00:23
>>414 おねがいします
三項演算子で検索汁
419414=416:02/07/05 00:24
>>417
?
420デフォルトの名無しさん:02/07/05 00:25
まちがえました >>413 です 質問しにきたのに、質問答えちゃいましたよもう。
421414=416:02/07/05 00:27
みなさんどうもありがとうございました。
>>413
出来る。
afx.hじゃなく、ウィンドウを使うときは、AfxWinInitするとよし。
423デフォルトの名無しさん:02/07/05 00:32
>>422 御教授ありがとうございます。 ではまた
424デフォルトの名無しさん:02/07/05 02:24
VC6なんですが、以下がコンパイルできません。
class Base {};
class A : public Base {};
class B : public Base {};

bool b = true;
Base* p = (b)? new A : new B;

「AはBに変換できません」というようなエラーメッセージがでます。if文使えばまあ
いいんですが、1行で収めたいんです…。
なんとかならんもんでしょうか? ちなみにgccではコンパイルできました。
ベースのデストラクタをvirtualにしる!
426425:02/07/05 02:39
いや、違う。
VCの参考演算子のバグか?
427425:02/07/05 02:52
いや、違う。
2項目と3項目は変換できないといけないようだ。
428425:02/07/05 03:05
いや、違う。
まてよ・・・
いや、違う。
もしかして・・・
static_cast<Base*>(new A) : static_cast<Base*>(new B);に汁
Base* p = (b)? static_cast<Base*>(new A) : static_cast<Base*>(new B);
長!
規格じゃ3項演算子の3項目から2項目への変換があるか、
または同じ型でなければコンパイルできないはず。

A* p = (b) ? new A : newB;

この例を見れば分かるでしょ
432425:02/07/05 07:18
いや、違う。
おそらく・・・
いや、違う。
そうか!
















いや、違う。
433デフォルトの名無しさん:02/07/05 09:51
VisualCじゃない質問ばっかり
C++じゃん
434424:02/07/05 15:53
gccではコンパイルできたのでVC特有の動作かと思ったんですが、
>>431
をみて納得しました。たしかにコンパイルできませんね。
あたりまえですが、gccでもこれはダメでした。
Base* p = (b)? new A : new B;
がgccでコンパイルできるのはgccが三項演算子の解釈を拡張しているんでしょう。
みなさんありがとうございました。
435なつかしの関数電卓:02/07/05 15:55
VC++ コンパイル時オプション指定パラメータのドキュメント探してます。
MSDNは高くて持っていないので、その他で乗っているもの探しています。
どうしても再帰でプログラム書かなければならないので、
スタックを多くしたいのです。
cl /?
437デフォルトの名無しさん :02/07/05 21:57
さっき間違えてC++で訊いてしまったらこちらへ誘導されました。
自分まだ林氏のスーパービギナー編を一通りやっただけのペーペー初心者です。
今、エディットボックス3つと四則演算ボタンを配置しただけの簡単な電卓を作ろうとしていて、
@ed1と2に値を入力
A「+」とか「-」とかを押す
Bed3に答え(浮動小数点型)が表示
という風にしたいのですが、
出だしはCString ssでは駄目なのかとか、
またm_ed1を1項、2を2項と定義付けるにはどう記述するのかからして分りません。
ヘルプや言語リファレンス本で調べてもいまいち・・(あまりに初歩だから載ってない?)。
学校の一室にしかソフトが入ってないので(自前で買うには高い)直接いじれる日時が限られてるし・・どなたか教えて頂けないでしょうか。
438437:02/07/05 22:10
あ、ここもVC++とはチョト違うんですね・・すいません気をつけます(汗
計算する為のトリガが「+」や「−」なんだから、まずキーをアプリケーションで
受け取るためにはどうすればいいのか考えよう&ネットで調べてみよう。
エディットボックスの読み書きはスーパービギナー編にも載ってたはず。
MSDNのCEditのクラスメンバを調べてもいいし。
440デフォルトの名無しさん:02/07/07 09:48
今までFORTRANを使用していて最近VCを始めたんですけど
VCでクラス内でのグローバル変数ではなくプロジェクト内の
すべてのクラスからアクセスできるグローバル変数は
どこでどのようにして宣言すればいいのでしょうか?

基本的なことで申し訳ありませんがよろしくお願いします。
>>431
> 規格じゃ3項演算子の3項目から2項目への変換があるか、
> または同じ型でなければコンパイルできないはず。
何でそう言う制約が必要なんだろ ?
A *p = (b) ? new A : new B;
がダメなのは、b = FALSE の時に A *p = new B; となるからダメなのはわかる
けど
Base *p = b ? new A : new B;
なら、Base *p = new A; と Base *p = new B; なんだから別に問題ないと思う
けど。不思議じゃ...。
>>441
A *p = ( (b) ? new A : new B );
443441:02/07/07 10:54
>>442
何が言いたい ? A *p = ( (b) ? new A : new B ); がダメなのはわかっ
てるぞ。
444デフォルトの名無しさん:02/07/07 11:01
厨房の香り漂う...
あー、すまそ。Base*でもいいよ。
括弧内が先に評価されてそこで返値が決定される必要がある。
446441:02/07/07 11:14
>>445
あ〜〜〜、なるほど言われてみりゃ 括弧内 の評価が終わった時に一応
返値の型決めないといけないからか...。これぐらいなら共通の型を見つ
けるのも難しくないだろうけど多重継承バリバリだとコンパイラも大変だ
わな。サンクス、一つ勉強になったよ。
>>440
変数、定数専用のcppとhを用意して必要なクラスでincludeすれば良いべ。
448デフォルトの名無しさん:02/07/07 14:23
>>447
>変数、定数専用のcppとhを用意して必要なクラスでincludeすれば良いべ。
ということは

class GlobalVal
を作ってメンバ変数にグローバルで扱いたい変数を定義するということですか?
その場合cppには特にメソッドをいれなくてもいいんですよね?
とりあえず存在だけしていればいいということですか?

なんか質問ばかりですみません。
クラスはいらない。

実装.c
int global_val;

使用者.c
extern int global_val;

これでOK
450440:02/07/07 14:36
ん? 考えてて思ったんですが、
グローバル変数を格納するクラスを作ってもどこでインスタンスを作るかに
よってグローバルに扱えないことないですか?

たとえば今、それぞれ4つのcppとhファイルがあるんですけど
それらすべてで扱いたいグローバル変数を格納したクラスのインスタンスは
どこで生成すればいいですか?

結局インスタンスを生成したソースの中でしか使えないってことでは・・・。

どうなんでしょう?
よろしくお願いしますm(_ _)m
451440:02/07/07 14:38
すいません、かぶってしまいました。
449さん回答どうもありがとうございます。

もう一度試してみます(^^)
Visual C++ .NET Standardで作ったものって配布可能でしょうか?

MSのサイトを探してみたのですが、特にNGという情報が載って
いなかったので。
>>452
NGだったらStandardなんて名前は付けないと思う・・・
>>453
ありがとうございます。

・6.0Std.よりも安い
・コンパイラの最適化も省かれている

ので、もしかしたらと思っていたのです。今から買ってこようかな。
商用不可。BorlandのPersonalと同じ
>>451
>>449さんの言ってる事に>>447のを加えると、

実装.c
int global_val;

実装.h
extern int global_val;

使用者.c
#include "実装.h"

って感じ。グローバルのものは全部一括して.cと.hに突っ込んじゃう。
457452:02/07/07 21:52
>>455

ぐぅ、商用不可でしたか。
キャッシュバックキャンペーンもあるし、かみさんに内緒でPro.を
買おうかな。C♯もさわってみたいし。
糞シェア作って公開するんじゃねぇ
459452:02/07/07 23:08
C++.netのPro相当のエディションがあればなあ…

>>458
期待に添えないのですが、シェアウェアを作る予定はないのです。
いらねぇソフトやるよ
http://pc.2ch.net/test/read.cgi/software/1025311611/

このスレの24がVS.NET Proパッケージを\5kで譲ってくれるらしい。
461デフォルトの名無しさん:02/07/08 23:35
関連付けの修復ってできませんか?
再インスコするしかないのかな...
>>461
変更する前に、元の関連付けを退避させておくしかないんじゃない?
463461:02/07/08 23:43
>>462 あ、VisualStudio(VC6ですが)の関連付けです。
464デフォルトの名無しさん:02/07/09 11:16
画面モードの変更について質問です。
GetDeviceCaps(GetDC(NULL),VREFRESH)でリフレッシュレート
が取得できますが、NTのみとMSDNにかいてあります。
それ以外のOSでは戻り値は不定なんでしょうか?

後、アプリ終了時にWM_DESTROYメッセージが送られてきたところで
ChangeDisplaySettings(&old_dev_mode, 0)を呼び出して
画面モードを変更しているのですが失敗してしまいます。

何かご存知の方おられましたら教えてください。
465デフォルトの名無しさん:02/07/10 05:59
VisualCスレとVisualC++スレがあるんだが
こちらは主にSDKを扱っているということなのだろうか
>>465
向こうはMFC専用だから、こっちはそれ以外と思ってた。
Win32APIスレは別にあるけど。
>>465
ここがVC++の本流スレ。(スレ立てた人が ++をつけるの忘れただけ)

「VisualC++(MFC限定)相談室」はタイトルどおりMFC限定です。
「初心者にVisual C++を教えるスレ」は最初はネタスレだった(w
今では初心者スレとして機能しているが。
VC++でSTL使うとやたらと警告が出ます。
具体的には
c:\program files\microsoft visual studio\vc98\include\xtree(120) : warning C4786:
'std::_Tree<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,
std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::set<std
::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::
basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<
std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Kfn,st
d::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,st
d::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> >
> >' : 識別子が '255' 文字に切り捨てられました (debug 情報内)。
c:\program files\microsoft visual studio\vc98\include\set(33) : コンパイルさ
れたクラスのテンプレートのインスタンス化 'std::_Tree<std::basic_string<char,std::char_traits<ch
ar>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::all
ocator<char> >,std::set<std::basic_string<char,std::char_traits<char>,std::alloca
tor<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocato
r<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::all
ocator<char> > > >::_Kfn,std::less<std::basic_string<char,std::char_traits<char>,
std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<c
har>,std::allocator<char> > > >' の参照を確認してください
d:\develop\aaa\aaadlg.h(61) : コンパイルされたクラスのテンプレートのインスタンス化 'std::se
t<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<
std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::alloc
ator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >' の
参照を確認してください

となります。なんですかこれ??
469デフォルトの名無しさん:02/07/11 09:17
アゲます。↑よろ。
>>468
STLを#includeしてる直前にpragma入れろ

#pragma warning(disable:4786)
471デフォルトの名無しさん:02/07/11 09:25
>470
ありがとうございます。
この警告は無視しても良いって事ですよね?
472デフォルトの名無しさん:02/07/11 12:03
WTLの質問です。
class MyTool :
 public CWindowImpl<MyTool, CToolBarCtrl>
{
public:
 DECLARE_WND_SUPERCLASS(NULL, CToolBarCtrl::GetWndClassName())
 BEGIN_MSG_MAP(MyTool)
 END_MSG_MAP()
};

としたクラスを使っているのですが、破棄したときに
CWindowImplRootクラスのデストラクタのassertに引っかかってしまいます。
たとえば、CWindowImpl<MyTool, CAxWindow>のように、他のクラスから継承した場合は
引っかからないのですが、どうしたらいいでしょうか?
473デフォルトの名無しさん:02/07/11 14:50
VC++のリソースエディタでビットマップを編集しているのですが、
透明色の設定の仕方が分かりません。
どうやったら良いんでしょうか?
474デフォルトの名無しさん:02/07/11 15:27
VisualStudioで書いたダイアログベースプログラムは、
同じくVisualStudioのインストールされたPCでないと起動しないんですか?

これを回避するには、MFCやめてSDKかなんかで書くしかないんでしょうか?
>>473
リソースエディタはアイコンじゃないと透明色は使えないよ。
>>474
>同じくVisualStudioのインストールされたPCでないと起動しないんですか?

そんなことないよ。

477474:02/07/11 15:34
>>476
早速の回答ありがとうございます。
僕の作ったダイアログベースのアプリケーションが、
VSのインストールされたPCでないと起動しないんですが、
なにが問題だと考えられますか?
なにか特殊なファイルをつかっちまってるんでしょうか?
>>477
MFC以外のことが原因なのでは?
MFC使うとMFC42.DLLが必要になるけど、
Win98以降のOSなら、標準で入ってるし。
使ってるはず。
静的リンクとか言うオプションがあるはず。それにしる
480474:02/07/11 15:51
”静的リンク”というやつですね。
それは新規作成時にセティーングするものでしょうか。
よくわかりませんが、ちょっと調べてみます。ありがとうございます。

VS入ってないと使えないなんて、あふぉみたいなアプリケーションですからね。とほほ。
ツールバーを右揃えで作りたいのですが、うまい実現方無いでしょうか?
現在、サブクラス化してWM_SIZEメッセージでインデントを挿入しているのですが、
コレだとリサイズの時に激しくちらついてしまいます。
>>480
MFC42.DLLは再頒布可能だよ。
スタティックリンクはProfessionalおよびEnterprise Editionsじゃないとサポートされてない。

それより、デバッグ版なんじゃね?
MFC42D.DLLとかDがくっついてる。
こっちは再頒布不可ね。
483デフォルトの名無しさん:02/07/11 17:59
マルチスレッドのプログラムで「使用するランタイムライブラリ」
のとこにあるマルチスレッドとマルチスレッド(dll)ってどうちがうのですか?

dllつくるときはマルチスレッド(dll)のほうかとおもてたら、新規プロジェクト
でWin32 DLL を選択したときデフォルトでただのマルチスレッドになってて
あれ?とおもたのです。
MSVCRTを使用するか、libcmtを使用するかの切り替え
485デフォルトの名無しさん:02/07/11 19:06
VisualC.NETのクラスビューの質問なんですが。
一つのソリューションで作ってるプログラムの
バージョン(具体的には1.0と1.1)の
プロジェクトを管理してるのですが。
クラスビューの1.1の方の関数、例えばMoveTaskTray()を
ダブルクリックすると
1.0の方のMoveTaskTrayにジャンプしてしまいます。
また、関数によってはちゃんと1.1に飛べる場合もあります。
どうしたらいいのでしょうか?
また、同じ関数を二階ダブルクリックすると
一度目は1.0,二度目は1.1へとジャンプする場合もあります。
.ncbファイルと.clwファイルを削除すると
クラスビューを再構築できると聞き、やってみたのですが
直らなかったです。
よろしくお願いします。

補足です。
1.1のMoveTaskTrayにジャンプしたい場合
1.1の.cppが開いている場合
ちゃんと飛べるようです。
逆に開いてなければ
1.0と1.1どちらへジャンプするかランダムです。
よろしくお願いします。
487デフォルトの名無しさん:02/07/11 21:26
AppWizardを使い、基本クラスをCFormViewにしてプロジェクトを
作りました。ボタンを張り付けてそのBN_CLICKEDのメッセージを
CMainFrameのほうで取りたいんだけどうまくいきません。

ClassWizardのメッセージマップでクラス名の
プルダウンボックスにCMainFrameを指定して関数を追加したけど
そこを通ってくれないみたい。
なんで?

何がしたいかっていうとCFormView上のボタンを押したときに
アプリケーションを終了させたいのでCMainFrameの
DestroyWindow()を呼びたいの。

他にいい方法ってあります?
>>487
フォーム側でボタンメッセージを受け取ったらそこで
AfxGetMainWnd()->SendMessge( WM_CLOSE );
で駄目かい?
SetTimerで発生するイベントは、
他の関数内を実行している時でも
割り込み的にSetTimerの関数が実行されるのでしょうか?
それとも、実行中の関数から抜けるまで
プールされるのでしょうか?
どなたかご教授お願い致します。
490487:02/07/11 23:34
>>488
できました。
ありがとうございます。

AfxGetMainWnd()なんて知らなかった・・。
>>489
いろんなところに質問してないで、自分で試したほうが早いと思われる。
最後の引数に関数ポインタを指定すればその関数が直接実行される。
NULLなら WM_TIMER が飛んでくる。
>>489
割り込み処理はしないよ。
実行中の関数が終了するまでは、
メッセージは保留状態。
493デフォルトの名無しさん:02/07/12 02:44
コモンダイアログの質問なんですが、GetOpenFileNameやGetSaveFileNameで出てくるファイルダイアログのリストビューの形式を変えるにはどうしたらいいのでしょうか?
デフォルトはLVS_LISTになっているので、これを最初からLVS_REPORTに変えておきたいのですが。
ウィンドウスタイルを直接変更してもファイルリストが正しく更新されないため表示がおかしくなるだけでした。
494デフォルトの名無しさん:02/07/12 15:20
SDKでのリストビューのサブアイテムの編集ができません。
何か知っている方おられましたら、教えてください。
自前でedit貼り付けてください。
>>492
本当にありがとうございます。
497449:02/07/13 00:32
以前グローバル変数について質問したものです。
こちらで回答を頂いて早速試したところうまくいきました。
しかし、自分で作ったクラス(ここではCBlockというクラスを生成しました。)
をグローバルに扱うことができずにいます。

今は
実装.cpp
int totBlk;
CBlock blk[10];

とし、
使用者.cpp
extern totBlk;
extern blk[10];
:   :
:   :
blk[totBlk]=CBlock();

としていますがコンストラクタを呼ぶ時に
使用者.cpp内ではblkがCBlockのクラスであることを認識していない
というコンパイルエラーがでます。

そこで
extern blk[10]; → extern CBlock blk[10];
と明示してやると今度はそのアプリ(現在はRhinocerosというCADソフトのプラグインを製作中)が強制終了
されてしまいます。

web等で調べてこのようにしたのですが何か文法的な間違いを犯しているでしょうか?
理由をご存知の方がいらっしゃったらどうかアドバイスを頂けないでしょうか?
よろしくお願いいたします。

それでは失礼します。
498NDR:02/07/13 00:34
>>494
一列目のやつならそのままでもOKだけど、2列目以降の場合はeditをCreateWindowして貼り付けないと
どうしようもない。
自分で頑張ってコントロールをこさえよう。

MFCだったらこのあたり結構楽にできて再利用できるんだけど(w。
WTLの方が再利用性高いです
500NDR:02/07/13 00:57
>>499
いゃん。

まぁ、ウィンドウクラスを作ってしまえば良いわけですが。
再利用と言う点では、コンポーネント化が徹底しているVCLが最強。
VCLじゃ、クライアントから親クラスを変更したり出来ないので、
柔軟な取り回しができん。
503デフォルトの名無しさん:02/07/14 19:52
ステータスバーを表示領域を変更しようと思って
indicators[]を変更した後、CMainFrame::OnCreate()に

int iPart[2] = {50, -1};
m_wndStatusBar.GetStatusBarCtrl().SetParts(2, iPart);

を書いたんだけどうまくいきません。
SetParts()はどこで呼び出せいいのでしょう?
504NDR:02/07/14 21:14
>>503
???
んなまどろっこしい方法使わなくても

m_wndStatusBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_NORMAL,50);
m_wndStatusBar.SetPaneInfo(1,ID_SEPARATOR,SBPS_STRETCH,0);

を使えばいいのに…
505503:02/07/14 22:09
>>504
おっしゃるとおりのやり方でできました。
どうもです。
506デフォルトの名無しさん:02/07/17 10:39
507デフォルトの名無しさん:02/07/17 20:10
VisualStudioのワークスペース、プロジェクトとは何ですか?
実はいまウイザードとか使わずにソースとヘッダを追加して
プログラムを書き始めたいのですが、
1.ワークスペースを作る
2.ファイルを追加する
3.書く
の順番で良いですか?
>>507
プロジェクト1個でexeとかdllとかが1個作れる。
ワークスペースにはプロジェクトを1個以上入れて、まとめて管理できる。
まあ、普通はプロジェクトが1個だけ入ったワークスペースを作って、
そこでお仕事すればよいと思われ。
どうもです。
510デフォルトの名無しさん:02/07/18 11:48
キャスト演算子をオーバーライドすると
クラスビューで$S1()とかいう名前になってしまいます。
書き方がまずくてそうなってしまうのですか?
operator T*();

U::operator T*()
{
}
みたいに書いてます。
>>510
そういうもの。
クラスビューはC++を全部知ってるわけではない。
自分を信じれ。
サンクス!
513デフォルトの名無しさん:02/07/18 18:39
xmlをC++で読んだり書き込んだりする方法が
詳しく書いてあるHPor書籍など教えてくれませんか?
今日仕事中5時間捜したが↓くらいしか見つからず…
ttp://www.cqpub.co.jp/hanbai/books/18601.htm
あとこの本使えますか?
514デフォルトの名無しさん:02/07/18 18:44
VC++でoo4oが使いたいのですが、どこかに解説されているHPありませんでしょうか?
Oracle
>>515
さんくす
517デフォルトの名無しさん:02/07/18 20:12
VC++でShift-JISからUnicode(UTF-8)に文字列を変換するにはどうしたらいいのですか?
MultibyteToWideCharはWin95でうまく動かないので…。
#include "stdafx.h"
#include "oracl.h"

int main(int argc, char* argv[])
{
ODatabase odb("ExampleDB","scott","tiger");

return 0;
}

コンパイルもできて実行もできるのですが、なぜかつながりません。
どこが悪いのでしょうか?
95でも、utf-16への変換はうまくいくだろ。
なら、utf-16<->utf8の変換くらい自分でも書けるだろ。
520518:02/07/18 20:21
OStartup()が必要みたいです。
でも、例外エラーがでちゃいました。うーん。
521デフォルトの名無しさん:02/07/18 20:42
>>519
やっぱそっちの方がいい?
ちょっと効率悪いかなって思ったんで。
522517:02/07/18 21:25
ってどうやったらいいんですか?
523518:02/07/18 21:30
#include "stdafx.h"
#include "oracl.h"

int main(int argc, char* argv[])
{
OStartup();
ODatabase odb("ExampleDB","scott","tiger"); //ここで例外発生
OShutdown();
return 0;
}

なんで?
Oracleクライアントが複数バージョン入ってるからかなー
7,8,8i



524デフォルトの名無しさん:02/07/18 21:38
.netが主流になろうとしている今、あえてMFCを勉強
されているのはどのような理由があるのでしょうか?
スレ違いかもしれませんが、ぜひ教えて頂けないでしょうか。
525518:02/07/18 21:47
>>524
いえ、MFCというわけではないです。C++でoo4oが使いたいなと。
526518:02/07/18 21:48
>>524
あ!
自分あてじゃないくて、ALLに対してですね。誤解しました。すまそ。
527517:02/07/18 21:58
なんどやってもメモ帳で保存したものとバイナリが微妙にちがってきます。
何かおかしなところがあったら教えてください。

変換元:buf
変換後:ret


wchar_t wszBuf[LEN];
MultiByteToWideChar(CP_ACP,0,buf,100,wszBuf,LEN);
char *r;
unsigned short *p;

for(p =(unsigned short *)&wszBuf, r = ret; *p != '\0'; p++){
if(*p<=0x7F){
*(r++)=(char)*p;
}else if(*p>= 0x80 && *p<=0x7FF){
*(r++)=(*p%0x40)|0xC0;
*(r++)=(*p&0x3F)|0x80;
}else{
*(r++)=(*p%0x1000)|0xE0;
*(r++)=((*p&0xFC0)%0x40)|0x80;
*(r++)=(*p&0x3F)|0x80;
}
}
*r = '\0';
メモ帳はBOMもutl8に混ぜると聞いたことがあるが、
それではないのか?
.NETは主流にはなり得ないが。
>*(r++)=(*p%0x40)|0xC0;
>*(r++)=(*p&0x3F)|0x80;
*p & 0x3f と *p % 0x40 は同じ値になるような気がする。
>>527
何故ビットシフトを使わないの????
532517:02/07/18 23:11
ほかのDLL使うことで解決しました。
どうもでした。
533NDR:02/07/18 23:13
>>517
W95でUNICODE→UTF8の変換は上手く逝かないよ。
MSDNにも載ってた。

…というよりnkf使って解決済みかYO(w。
534517:02/07/18 23:20
DLL使おうと思ったけど、>>531さんのいうとおり、ビットシフト使ってみた。
とりあえずバイナリが一致するようになったのでいけたかなって感じです。
まだわからないけど…。

*(r++)=(*p>>6)|0xC0
*(r++)=(*p&0x3F)|0x80;
}else{
*(r++)=(*p>>12)|0xE0;
*(r++)=((*p&0xFC0)>>6)|0x80;
*(r++)=(*p&0x3F)|0x80;
535デフォルトの名無しさん:02/07/18 23:55
>>529 .NETは主流にはなり得ないが。
へ?ということは結局C++へ回帰しちゃうんですか?
536 :02/07/18 23:55
ちょっと教えてほしいんですが。
MFCを使わずにダイアログのアプリを作ろうとしたら、ダイアログのリソースIDを"IDL_DLG"のように""でくくらないとうまく動きません。
どぼして?
MAKEINTRESOURCE
>>536
resource.hかなんか作って
#define IDL_DLG 100 //適当
これをrcとソースと両方でincludeした上で >537
539 :02/07/19 11:16
ハンドルとリソースIDってなんで分ける必要があるんでしょう。
どっちも一意の値ならひとつでいいのでは?
ハンドルはWinAPI、リソースIDはMFCのフレームワーク内での識別子なのでは?
ATOMもGUIDも一意の値ですが、何か?
542 :02/07/19 12:11
>>540
でもフレームワーク使わなくても、リソースIDは存在するよ。
ハンドルはウインドウズに管理されているオブジェクトの識別子
リソースはモジュールの中に保存してある、ローカル資源で、
リソースIDはその識別子。
リソースIDでリソースを特定して、そこからウインドウズで扱える形式のデータに
変換したりすることで、実際に使えるようになる。

メモリにロードされたプログラムのプロセスハンドルと、
ディスクに保存されたファイルのファイル名みたいな関係。
544 :02/07/19 12:31
なるほど、なんとなくわかったよ。
ありがとう。
1 :デフォルトの名無しさん :02/06/02 10:53
c言語でWindowsプログラムがしたいです
でも何を作っていいかわかりません。
アドバイスお願いします

25 :デフォルトの名無しさん :02/07/06 21:44
http://www.sci.toyama-u.ac.jp/~iwao/Scheme/scheme.html
546(,,・Д・):02/07/19 18:57
すいません!VCでよく言われるスレッドってなんですか?(,,・Д・)
できれば使い方を教えてください!教えて君ですいません。
ユーザーインターフェースはボタンやら描画やらで常に忙しい。
だが重たい処理もやらなければならないとしよう。
重たい処理もユーザーインターフェースと一緒にやると画面が固まったりする。
どうすればいいか?
バックグラウンドで処理をしてくれるヤシが居ればいい。
そうするとユーザーインターフェースは自分の処理に専念できる。
その裏で動いてくれるヤシ、それがスレッドだ

548デフォルトの名無しさん:02/07/20 00:50
age
549デフォルトの名無しさん:02/07/26 07:39
すみません、VC++のSDKで、かちゅーしゃのように画面を三分割するには
どうすれば良いのですか。
550デフォルトの名無しさん:02/07/26 07:55
WinSockを使えるように、Visual Studio.NET(Visual C++)に設定したいんですが・・・
どうすりゃいいのか、さっぱり。
551デフォルトの名無しさん:02/07/26 09:59
MDIのアプリケーションを作っているのですが、
新規に子ウィンドウを開いたときに 「アクティブにならない」
というようなことって可能でしょうか?
(マウスでクリックしたときはアクティブになるようにしたい)


CREATESTRUCT構造体のstyleでWS_DISABLED
とか設定しちゃうとそれ以降アクティブにすることも出来ない・・・

どなたか、お願いします。m(__)m
552デフォルトの名無しさん:02/07/26 10:03
別ファイルで作ったクラス
MyClassをドキュメントクラスで宣言しようとします。

ドキュメントクラスのヘッダファイルで
:pubric
MyClass* NewClass;
と宣言して
Viewクラス内で
GetDocument()->NewClass->(メンバ関数);
とやるとメモリ関連のエラーが出てしまいます。

ドキュメントクラス内で宣言したクラスのメンバにアクセスする方法を教えてください。
553デフォルトの名無しさん:02/07/26 10:35
CListCtrlで1行に複数行いれたいのですが、
やり方ありますか?
>>549
質問の意図がよくわからんが、
http://www.kumei.ne.jp/c_lang/sdk2/sdk_117.htm
みたいなことか?

>>550
#include <winsock2.h>//またはwindock.hね
#pragma comment(lib, "wsock32.lib")//リンクライブラリの指定
をソースに埋め込め。

>>552
わかってると思うけどpublicな。MyClass* NewClassだとポインタの
宣言で実体はまだ生成されてない。*をなくして
MyClass NewClass;
GetDocument()->NewClass.(メンバ関数);
にするかnew汁。っつーかC++を学べ!

>>553
意味がよくわからん。行の挿入か?
555デフォルトの名無しさん:02/07/26 18:31
C + SDKでダイアログベース。
テキストボックスの背景色を変えるには?
文字はSetWindowTextで設定できました、だけど。
556555:02/07/26 18:32
>文字はSetWindowTextで設定できました、だけど。
設定じゃなくて表示だった。
リッチエディットコントロールなら
EM_SETBKGNDCOLOR
があるべ。
558555:02/07/26 19:39
ただのエディットコントロールなんです。
559555:02/07/26 20:25
リッチエディットコントロールだったとして、
EM_SETBKGNDCOLORは、このメッセージを受け取ったときに処理するのか
それともSendMessageするってことですか?
561ハイバンド名無し:02/07/27 02:54
こんちは、ちと相談です。

現在、ビットマップを読みこんである処理をしたのち、表示および保存を
行う、というプログラムを作成したいのです。そこで「猫でもわかる〜」さんのページに
近いものがあったためパク…いや参考にしているのですが、ビットマップというか
外部ファイルの読込保存自体が初めてです。

GetOpenFileNameでダイアログ作成とユーザーの選んだファイルのアドレスをOPENFILENAME構造体に取得、
CreateFileでファイルの雛型?の作成、
ReadFileで実際にビット列を読みこんだバッファの先頭アドレス取得、
みたいな流れで大筋はあってますか?

とまあ、そちらは置いておいて、こちらが本題なのですがReadFileで取得したバッファ内のビット列を
R[x][y],G[x][y],B[x][y]という様に扱いやすい形に落としこみたいんですが、
具体的にどうすればいいのでしょうか?

先頭から8ビットずつずらしながらその8ビットを配列に入れていく、という形に
なると思うのですが…VCに直接関係の無い質問で恐縮っす。
562ハイバンド名無し:02/07/27 03:00
ちなみに
ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_170.htm
具体的にはこの項を参照してます…。
563ハイバンド名無し:02/07/27 03:59
どうやらストリームなる概念が必要なのですね。
恥ずかしい事に初耳な概念でした。

もしかして
for (y=0;y<SizeV;y++)
for (x=0;x<SizeH;x++)
for (ch=0;ch<3;ch++)
*szBuffer >> bitmap[ch][x][y];

みたいな感じの記述でいけるのでしょうか?
(´-`).。oO(大いなる勘違をいしてそうだな…)
http://isweb18.infoseek.co.jp/computer/gmusoft/doc/bmp.html
ビットマップファイルの構造を学習すべし。
566デフォルトの名無しさん:02/07/27 09:52
サービスプログラムを作成中なんですが、
サービスからダイアログを表示することって出来ますでしょうか?

ログオン状態であれば、MFCアプリケーション(DLL)経由で
画面上にダイアログを表示できましたが、
(デスクトップとの対話を許可する、という設定が必要)
非ログオン状態ではなにも表示されませんでした。
(ログオンした瞬間に画面に出てくる)

MessageBoxを使えば非ログオン状態でも画面にメッセージを
出せるのは分かったのですが、見た目のカスタマイズに
限界があるので、独自のダイアログを表示したいのですが・・・。
参考になるような情報をどなたかご教示下さい。
よろしくお願いします。
567ハイバンド名無し:02/07/27 10:49
>>564
いやぁ、お恥ずかしいばかりです…。
出きればその勘違い部分を指摘してほしいんですが、恐らく
それを指摘するのも馬鹿馬鹿しいほどの根本的な勘違いなんでしょうね。
まあ、おまえ勘違いしてるぞ、って指摘だけでも助かりました。

>>565
おお、これは?熟読してみます。
おふたかたありがとうございます。
568デフォルトの名無しさん:02/08/22 00:51
ははぁ〜ん、さてはみんな初心者スレかWin32APIスレに流れて
このスレの存在を忘れてるな?
569デフォルトの名無しさん:02/08/22 00:57
DAT落ちかと思ってますた。
570デフォルトの名無しさん:02/08/22 12:05
VC++ Standard Edition 4.0で作ったプログラムを友人に渡すと
MFC40D.DLLがありませんといわれます。
そのDLLを渡してsystemにいれてもらってもいわれます。

何が原因でエラーになっているんでしょうか?
MFC40D.DLLって何してるDLLなんでしょう???
571デフォルトの名無しさん:02/08/22 12:09
>>570
ビルドがデバッグバージョンじゃないでしょか?
リリースビルドならMFC40.DLL に相当するものだと思う。
デバッグ版は配布しちゃダメだよ
573デフォルトの名無しさん:02/08/22 13:14
>>571
そうです。デバッグバージョンです。
Standard Editionだとリリースモードでビルトできないです^^;

たいしたプログラムでないのですが、ちょっと友人にやってもらいたいのですが、
なにかいい方法はないのでしょうか?
それになんでsystemに用意しておいても見つからないと言われるのでしょう??

574デフォルトの名無しさん:02/08/22 13:26
>>573
なぜリリースビルドできないのかよくわかりませんが、
それを解決する方が先決な気がします。

>572の通り、MFCx0d.dll は再配布できないですしね。
まあ、一番確実なのは、テスト環境にもVC++を入れてもらう(w
>>573
MSVCRTD.DLLも入れてみたら? あんまりおおっぴらに配っちゃダメよ。
VCも売り物だからね。高い金払ったEnterpriseEditionなんかと一緒だと、商売上困る。

それと、MFCはあきらめて、フリーのライブラリを探すなり、自作するなり、
SDKだけで作るなりすればこんなことに煩わされずに済むよ。
スタンダードだってリリースビルドできるだろ。
>>576
そうだった。勘違いしてた。
できないのはMFCのスタティックリンクだった。
578_:02/08/22 15:10
Emacsのc-macro-expandコマンドのようなマクロ展開を
VCで見るにはどうすればいいしょうか?
579デフォルトの名無しさん:02/08/27 21:47
ある関数を、呼び出し個所によって、インライン展開/非展開 を明示的に
指定したいのですが、どうすれば良いんでしょか?(VC6)
580デフォルトの名無しさん:02/08/27 21:56
店でVC++5エンタープライズが1万円で売っていました。
今ならVC++.netを買いだと思いますがどうでしょうか。
でも.netのプロフェッショナル版は高いからなー、学生
じゃないし学生の知り合いもいないからアカデミックは買えないし
>>579
inline void hoge_inline(){
  // なんかする
}

void hoge(){
  hoge_inline();
}
582gessi:02/08/27 22:46
VC code編集中にメッセージボックスの書き込みが多いので
ALT+M とかで Messagebox(NULL,"","",NULL) をすぐペーストできると
ありがたいんですが,可能ですかね.

あと数行まとめて選択して,ALT+/ とかで全部コメント化は可?
583579:02/08/27 22:55
>>581
それは知ってるんですが。

void hoge_inline(){
 // なんかする
}

void hoge(){
 ...
 hoge_inline(); //ここはインライン展開させる
 ...
 hoge_inline(); //ここはインライン展開しない
 ...
}

みたいに、呼び出し側でインライン展開/非展開を制御できませんか?
という質問です。
>>582
マクロで VBA(?)書いて、カスタマイズ→キーボードの“マクロ”で、
キーボードに、その機能を割り振れば可能。

Sub TemplateMsgBox()
'DESCRIPTION: メッセージボックステンプレート
 ActiveDocument.Selection = "Messagebox(NULL,"""","""",NULL)"
End Sub

選択範囲のコメント化はサンプルマクロに入ってるよ。
>>583
ちげーよ。

inline void hoge_inline(){
 // なんかする
}

void hoge(){
 hoge_inline();
}

void hoge(){
 ...
 hoge_inline(); //ここはインライン展開させる
 ...
 hoge(); //ここはインライン展開しない
 ...
}
って意味。
586gessi:02/08/27 23:16
>584

さんきゅ やてみる
587579:02/08/27 23:29
>>585
あ、なるほど。関数名で分けるしかないんですね。THANX。
588デフォルトの名無しさん:02/08/28 13:40
XPでVC6++起動して不具合おこすのは漏れだけですか?(´д⊂
再インスコしてそれでもダメならOSを2000とかに汁
590デフォルトの名無しさん:02/08/28 19:37
例外処理 (初回) は ww1.exe (KERNEL32.DLL) にあります: 0xC0000005: Access Violation。

こういわれたら何を直せばいいんですかね.
591ふぁんふぁん大佐:02/08/28 19:43
暫くこのスレに住みつきますのでヨロシクです。
>>590
変数の初期化とか実体の無いクラスにアクセスしてみたりとか。
>>590 とりあえずステップ実行してみるとか
594デフォルトの名無しさん:02/08/28 21:49
やてみます
595デフォルトの名無しさん:02/08/29 03:37
VC++の入門書を探しているのですが、良い本を選ぶ自信がありません。
良い本を紹介してもらえないでしょうか。

ちなみに、C、C++の知識はあります。

それと『はじめてのVC++6.0』技術評論社を半分読みました。
この本は、プログラム例で使われているクラスや関数の説明が、
詳しくされていないために、汎用性のある知識が得られないと思ったのでやめました。
596ふぁんふぁん大佐@:02/08/29 03:43
>>595
こらこら最後までやりなさい
>ちなみに、C、C++の知識はあります。

だったらなぜ今更入門書が欲しいんだ?
そもそも、知識があるってどの程度だ?
598:02/08/29 03:43
>595
上級者の方々にどう言われるか分かりませんが、
私は
著者 山本 信雄
タイトル プログラミング学習シリーズ VisualC++
というのをオススメします。
三巻構成で、
1巻:SDK
2巻:Classについて(C++知ってるならいらないかも,でも全くいらないとはいえないかも)
3巻:MFC解説

全部やれば基礎は固まると思います。
私はこれ使いました。
599:02/08/29 03:44
>595
あっ、↑はVC++=MFC
として話しを進めました。
どうでもいいが、専門書はなんでMFCのかいせつしかしないんだ?
APIなどかぞえるぐらいしかない
>>600
んじゃー、API数えてください。
非公開の者だけでも3桁あったような。

>>595 詳しくされていないために、汎用性のある知識が得られないと思ったのでやめました。
「ぼくちゃん置いてけぼりにされて寂しい」
って事なら、あんたは向いてないからそろそろ人生をシャットダウンすべき。
分からないことは調べる癖を付けろ。
602ふぁんふぁん大佐@:02/08/29 03:51
APIの方が実は簡単なんだわな・・
設計がしっかりしてないとどうしようもなくなるが
603デフォルトの名無しさん:02/08/29 03:52
>>600
MS からAPI本はたくさんでてると思うが・・・・
604デフォルトの名無しさん:02/08/29 03:52
レスどうもです。

>>597
C、C++の文法の知識はあります。
VC++の入門書を読みたい理由は、
ウインドウズでGUIプログラミングをやりたいからです。

>>598
どうもです。その本を探してみますね。




>>604
他のプラットフォームでの経験は?

入門本が欲しいわけ?
それとも、関数の解説が網羅されてるリファレンスが欲しいわけ?

前者なら投げ出した本をやり遂げろ。
後者ならMSDNをオンラインで見てくるか、プログラミングWindowsをそろえるべし。
606デフォルトの名無しさん:02/08/29 10:48
>604
「猫でもわかるプログラミング」で検索かけれ。
本買う必要なくなってくる。
VC++で複数人数でひとつのソフトを作るにはどのようにしたらよいでしょうか?
608:02/08/29 11:12
>606
その方法って(猫)よく聞くけど、
他の言語で一通り分かってる人なら
そうかもしれないけど、
C++一本の人が
あれを見ながらスキルをあげていくっていうのは
実際効率悪いことこの上ないと思いますよ。
ネットで勉強できるなら本なんて一冊も
買わなくていいと思いますし。。
609みなしごハッチ:02/08/29 11:49
スズメバチ駆除 ビーバスターズ
 http://ww41.tiki.ne.jp./~mikihiro9649/
610デフォルトの名無しさん:02/08/29 11:58
>>608
同意。
猫はわかってる人がサンプル集として使うのが正解。
チュートリアルには向かないと思う。
CSocketやCAsyncSocketについて詳しく解説している本はありませんか?
612デフォルトの名無しさん:02/08/30 00:03
Visual C++.NETに関する質問です。
作ったアプリケーションを実行すると、
下のような説明がこれひとつだけじゃなくて、
もっといっぱいダァーっと出るのですが・・・

'CppWin32.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルが読み込まれていません。

DLLファイルが読み込まれるのは、まぁ誰だって理解できますよ。

問題はシンボルです!

シンボルってなんすか?普通、読み込まれないものなんですか?
逆にどういう時に読み込まれるものなんですか?
613梅宮の辰ちゃん:02/08/30 00:13
シンボルッ、シンボルッ!男のシンボルゥ〜♪
ListBoxの各行に画像を貼り付けるにはどうしたらいいんですか?
>>612
MSのサイトからデバッグシンボルを落としてきて
インストールすれば表示が消える。
616デフォルトの名無しさん:02/08/30 00:44
>>615
そういう問題じゃないってば( ´ー`)y-~~

シンボルってなんすか?普通、読み込まれないものなんですか?
逆にどういう時に読み込まれるものなんですか?
>>616
キミには必要のないものだから知らなくていい。
618梅宮の辰ちゃん:02/08/30 00:55
誰も俺のグレートなミュージックが
分かるものがいないのか、、、
悲しいぞ、なぁ松方よ
>>616
答えてやるから消えてくれ

>シンボルってなんすか?
クラックやデバッグを助けるための目印
具体的にはデバッグ中にAPI名が分かるようになる

>普通、読み込まれないものなんですか?
あれば勝手に読み込む

>逆にどういう時に読み込まれるものなんですか?
あれば勝手に読み込む
CDialogに描画したいとき、どんなほうほうがありますか
>>614
CListCtrlか。CImageListをセットできるみたいですが、表示できるのは CWinApp::LoadIcon で
取得したアイコンなんですね。32x32のjpeg画像を表示することはできないんでしょうか。
622デフォルトの名無しさん:02/08/30 03:29
>>621
IDR_XXXを動的に生成できるか?ということか?俺は知らんけど。
なぁみんな、落ち着いて問題点を整理して質問しようじゃないか。
624621:02/08/30 03:36
ほんとですね、、すみません。
625621:02/08/30 04:10
とりあえず近いものがみつかりました。::LoadIcon() はいろいろな方法で読み込めるので大丈夫そうかな、、
ttp://www.mindcracker.com/mindcracker/c_cafe/tree/load_tree_images.asp
>>620
OnPaint(WM_PAINT)でもためしてみたら
>>614
オーナー描画・オーナードロー・WM_DRAWITEMとかで調べてみ
>>627
ありがとうございます。
また質問なんですが、jpegを扱うには、MFCのCImageクラスを利用すればいいのでしょうか?
>>628
CImageListのこと?
アイコンかビットマップしか使えないような気がする。

jpeg使うなら IPicture で楽に使えるケースもある。
www.codeguru.com/bitmap/index.shtml にいってみたら
630デフォルトの名無しさん:02/09/01 07:58
初心者ですが
VisualC++関連でおすすめの本はありますか?
Cはわかります
C++は勉強中です

2ちゃんねるブラウザつくりたいです

よろしくおねがいします。
631デフォルトの名無しさん:02/09/01 09:17
632:02/09/01 09:21
>630
おい、お前過去ログ読んでから質問してるよな?
たった、30さかのぼるだけじゃないの?
つまり↓こういうことだ。

>595
>598
>599
>604
>605
>606
>608
>610

過去ログの見やすい2chブラウザ作ってちょうだいね。
Microsoft Visual C++ .NETで、VC++の本にのってたコード

int APIENTRY WinMain(……)
{ MSG msg;
 :
 :
 :
 return msg.wParam;}

一応動きはするのですが、
[ 'return' : 'WPARAM' から 'int' に変換しました。データが失われて〜]
と、警告が出てくるのですが、何故でしょうか?
634:02/09/01 09:29
>633
>[ 'return' : 'WPARAM' から 'int' に変換しました。データが失われて〜
   ↑
これが原因だろ?
WPARAMからintに変換したからだよ。
WPARAMとはなにかよく考えてみればわかるよ。
int a=1;
long b=2;
b=a;//可能
a=b;//データが失われて〜
635:02/09/01 09:37
>634
ちょっと今手空いてるし、
せっかくだから調べ方を教えてあげるよ。
まず、VCのコードの中にどこでもいいから「WPARAM」って書いて
マウスを合わせてちょっと待ってみる。
すると「typedef UINT_PTR WPARAM」って出るでしょ?
じゃ次は「UINT_PTR」て書いて同じ事してみよう。
「typedef unsigned int UINT_PTR」って出たでしょ?
つまりあなたが>634でしたのは
int型の返り値なのにunsigned intを返したわけで、
int a=10;
unsigned int b=10;
a=b;//←これはデータが欠ける
というわけ。
暇だから細かめに言ってみたよ。
わかった?
>>634-635
何か、随分参考になりました。ありがとうございます。
理由は、よく解ったんですが、
何でそういう物を返すことに、なってるんでしょうか?
637:02/09/01 10:23
>636
おれSDKよくわかってないけど、
今本開いて確認したら、
俺のも return msg.wParam;
になってるみたい。
気になったのでVCで
Win32アプリケーション
で自動で作成したコード見てみたら
retrun (int)msg.wParam;
てな具合にキャストしてあった。

なんでかと言われるとわからんが、
とりあえずint にキャストしとけば問題ないよ。
638630:02/09/01 20:07
それ
よさそうだなとおもってたけど
やっぱそれか
639デフォルトの名無しさん:02/09/01 22:42
#include <windows.h>

の下に必ず

#include <stdio.h>と書いてしまう俺は馬鹿ですか?
>>639
#if defined(WIN32)
#include "windows.h"
#endif

ついでにこうしとけ(w
>>631
ありがとうございました!
>>635
>マウスを合わせてちょっと待ってみる。

これっていつまで待っても一向に表示されない時があるよね。どうしてだYO!
643デフォルトの名無しさん:02/09/02 11:38
VC++6.0のインテリセンスについて質問です。

STLの std::vector<CFoo*> クラスをpublicで継承したクラス CFoos があるとして、
iteratorを使ってすべての要素にアクセスするとします。
CFoos::iterator i;
などのように宣言した i についてインテリセンスは働くのでしょうか?
例えば i->... などのようにCFooクラスの要素にアクセスしようとしてもメンバが表示されないんですが…

>>642
>マウスを合わせてちょっと待ってみる。
俺は気が短いのでさっさとF12押しますw
>>643
働かない
645デフォルトの名無しさん:02/09/03 01:37
つまらない質問ですがよろしいでしょうか?
クラスウィザードでメンバ変数編集してOK押すと
毎回「class wizardはファイル名なんたら.tmpをなんたら.cppへ変更できません。
このファイル名を手動で変更するとデータの損失を防ぐことができます。
しかし、いくつかの変更は失われる可能性があります。」って出て
cppファイルがなくなっちゃうのです。で、いちいちtempからコピーしてきてるのですが。
何でこんなエラーがでるのでしょうか。
ちなみに、WinXPでVC6.0でサービスパック5もあててます。
おながいします。
646デフォルトの名無しさん:02/09/04 00:03
crypt 使いたいのですが、どのライブラリにあるんでしょうか?
すいません。オブジェクト指向ってナンですか?
100文字以内でお願いします
>>647
おまえの頭では理解できない代物。
>646
UFC-crypt
で探してみそ。
アメリカ(うろ覚え)のサイトから落とすとヤバイらし
いけど、、
mktrip に同梱されてる模様。
651デフォルトの名無しさん :02/09/04 02:38
>>647
レゴダイヤブロック
飛行機で城がつくれれば君もきっと認められるよ
652デフォルトの名無しさん:02/09/04 04:19
相変わらず初歩的なプログラムしかかけないや、、
クラスを自作して簡易データベースを作成中でっす、、
653デフォルトの名無しさん:02/09/04 05:03
DLLを使って解凍するプログラムを書いてます。
関連付けを設定して、
書庫をダブルクリックした場合、
コマンドラインに
ショートファイルネーム(あってるかな?)がついて
exeが起動されるのはわかるのですが、
ショートファイルネームからロングファイルネームに
変換するいい手はありませんか?
exeからは起動元パスが、
C:\Directoryt1\File.txt から起動したら
C:\Direc~~1\File.txt
のように見えてしまい困っています。
どうすればいいでしょうか?
655653:02/09/04 06:53
>654
ありがとうございます。
言われたバびょの近所に
GetLongPathName
というのも見つけました。
これでいけそうです。
以前ショートファイルネームから
ロングファイルネームへの変換はできないと
聞いていたので、こういう関数はないと思ってました。
ありがとうございます。
656デフォルトの名無しさん:02/09/04 11:47
久々にプログラム組んでみたらウィンドウのメニューバーが表示されなくなった。
あれってWNDCLASSのlpszMenuNameに作ったメニューのID指定するだけだったよな?
他のサンプルと見比べたりMSDN見たりしてもわからない・・・。
何でメニュー表示されないかわかる香具師求む。
>>656
MAKEINTRESOURCE マクロ
658657:02/09/04 13:26
あれ? 関係ないかも
659デフォルトの名無しさん:02/09/04 13:59
めっちゃ関係無いよ・・・・(´д⊂
>>659
あきらめてCreateWindowのHMENU指定して
(´-`).。oO(つーか、あきらめたのは俺か…)
661デフォルトの名無しさん:02/09/04 15:30
昔作ったファイルならメニューつき、
新規に作るとメニュー無し・・・。

何を忘れてるんだ(;´Д`)
ソースコードはほぼ一緒なのに(´д⊂
MAKEINTRESOURCEだって。
diffしる!
664fu:02/09/05 01:45
例外処理 (初回) は ww1.exe (KERNEL32.DLL) にあります: 0xC0000005: Access Violation。
ってのが下記の nn=UpdateWindow( hWnd);で発生するんですが何が悪いんでしょうか.
ちなみに nn の返り値は1で正常終了なんですけどね.
//ウィンドウの生成
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{hInst = hInstance;
hWnd = CreateWindow(szClassName,"for debug:",
WS_OVERLAPPEDWINDOW|CS_DBLCLKS,0,0,30,30,NULL,NULL, hInstance,NULL);
if (!hWnd)
return FALSE;
ShowWindow( hWnd, nCmdShow );
int nn;
nn=UpdateWindow( hWnd);
>>664
単に、UpdateWindowところで起こっただけで、
原因はWM_CREATEハンドラの中とか?
VC++6で、Outlookの設定をいじるプログラムを作りたいのですが、
レジストリをいじらないとだめですよね?

 特にPOPやSMTPの設定の場所を探しているのですが、レジストリに
見つけられません。

HKEY_CURRENT_USER\Identities\[適当な番号]\Software
\Microsoft\Outlook Express

あたりがニアピンかな・・と探してるのですが・・・どなたか知恵を貸して
ください
お前がいじりたいのは、
Outlookの設定なのか、Outlook Expressの設定なのかと小一時間
>>666
他のアプリのレジストリをいじるのはイクナイ!!
669656:02/09/05 14:43
WNDCLASSw;
w.cbClsExtra= w.cbWndExtra= 0;
w.hbrBackground= (HBRUSH)GetStockObject( WHITE_BRUSH );
w.hCursor= LoadCursor( NULL, IDC_ARROW );
w.hIcon= LoadIcon( NULL, IDI_APPLICATION );
w.hInstance= hInstance;
w.lpfnWndProc= WndProc;
w.lpszClassName= "lpszClassName";
w.lpszMenuName= MAKEINTRESOURCE("IDR_MENU1");
w.style= CS_HREDRAW | CS_VREDRAW;
RegisterClass( &w );
HWNDhWnd= CreateWindow( "lpszClassName", "てすつ", WS_OVERLAPPEDWINDOW, 0, 0, 300, 150, NULL, NULL, hInstance, NULL );
何か間違ってますか?(´д⊂
ネタだと信じたい。
> w.lpszMenuName= MAKEINTRESOURCE("IDR_MENU1");
そらメニュー表示されないわな
"lpszClassName"というクラス名も微妙にイヤだな。
673656:02/09/05 16:18
(;´Д`)人 ごめんなさいごめんなさいごめんn(
マジです。つかレス前に自分で気づきますた。

でも
w.lpszMenuName = "IDR_MENU1";
とか書けなかったっけ?(´д` ;)
これで無理ぽかったからMAKEINTRESOURCE("略になったんだが(´д⊂
仮に IDR_MENU1 がメニュー名なら
w.lpszMenuName = "IDR_MENU1";
でも メニューIDなら
w.lpszMenuName = IDR_MENU1;

後者は整数値をポインタ型に代入することになるので
通常は MAKEINTRESOURCEマクロを使って型変換する。
675デフォルトの名無しさん:02/09/06 01:29
.netでMFC使って作ったら
mfc70.dll と
msvcr70.dll
が起動するのに最低限必要と聞いたのですが、
当然.VC.NETインストしたら入ってると
思うのですが、
このdllは一般ユーザーが
入手するのはどの機会なんでしょうか?
例えばIE6と一緒にインストされる、とか
そういう情報です。
ご存知の方よろしくお願いします。
.NET FrameworkのRuntimeかSDKをいれないとダメ
677675:02/09/06 02:30
>676
>.NET FrameworkのRuntime
っていったら
普通のユーザーはWindowsUpdateですよね。
必要動作環境がえらく大げさになりますね。
めんどくさ。。
情報ありがとうございました。
>>676は勘違いしてない?
managedの話じゃないから.NET Framework再頒布パッケージ(またはSDK)
は関係ないよ。
>>678
それ以外にMSからは配布されてない。
ランタイムパックとかでvectorに登録する人物も現れてない

って意味で言ったんだが。
いやだから.NET FrameworkのRuntimeかSDK入れてもmfc70.dllは
インストールされないから意味ないってことなんだけど。

ぐぐれば配布してる人は現れてる。
なんで自分で配布せぇへんの?
アプリケーションやデスクトップに作ったショートカットを
実行させるためのショートカットキーを自分のアプリに割り当てたいんですが、
そういうAPIってありますか?
>>682
IShellLink::SetHotkey
684デフォルトの名無しさん:02/09/09 04:17
ダイアログのことでお聞きしたいんですが、
ダイアログをDoModalしたら、
一番若いタブオーダーのエディットボックスの
文字列が選択された状態で表示されるので
気持ち悪いです。
例えばタブオーダー1がパスを表示する
エディットボックスで、DoModalされた時に
文字列が入ってる場合、
開くと文字列が反転して表示されます。
こういう時の
解決方法はどうすればいいでしょうか?
とりあえずOKボタン(IDOK)を
OnInitDialog()でSetForcusしてみましたが、
全然的外れでした。
685名無しサンプリング@48kHz:02/09/09 04:37
レジストリ操作で質問なのですが…
SHGetValue()
でキーの文字列を取得しようとしているんですが
一回目は成功するんですが、2つ目のキーの取得に
失敗してしまいます。原因さっぱりわかりません。
何かご存知方、いらっしゃいませんでしょうか?
686684:02/09/09 04:44
>685
Return Values
Returns ERROR_SUCCESS if successful, or a nonzero error code defined in Winerror.h otherwise. You can use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to retrieve a generic description of the error.
↑エラーコードからわかるんじゃない?
>>684
タブオーダーを変える。
またはOnInitDialogでSetFocusしてFALSEをreturnする。
688684:02/09/09 05:58
>687
ありがとうございます。
無事解決しました。
どこで見たのかと思ってたら
自動で作成されたコメント文に書いてあったんですね。
助かりました。
689デフォルトの名無しさん:02/09/09 11:42
こんにちは。WM_KEYDOWNについて質問させてください。

ドロップダウン式のコンボボックスをサブクラス化しました。
(ちゃんとCOMBOのCHILDのHWNDをとっています)
コンボボックスから1つ選ぶか書き込むかして、その後ENTERを押したら次の動作に移るようにしたいのですが
システムキー(VK_TAB, VK_RETURN, VK_ESC)だけはWM_KEYDOWNにメッセージを送ってくれません。

調べたところシステムキーは別の方法で監視しなければならない様子。
ですがどのサイトを見てもMFC(すいません。MFCについてはよくわからないのですが)らしきもので
コードを打っています。
非MFCではVK_RETURNなどは監視できないのでしょうか。
メッセージ待ちのプログラムのため、GetKeyStateはなるべく使いたくないのですが

//IPコンボのサブProc
LRESULT CALLBACK SubIPComboProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
switch(message){
case WM_KEYDOWN:
return 0L;//ここにF9で印をつけてデバッグモードで起動。確かめました
case WM_CHAR:
return 0L;
}
return (CallWindowProc((long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long))IPComboProc, hWnd, message, wParam, lParam));
}
それらのキーは、ダイアログボックスに逝ってると思われ
691689:02/09/09 15:39
>>690
お返事ありがとうございます。
SPY++を使って調べたところ、リターンを押すたび

ダイアログボックスには
WM_COMMAND wNotifyCode=1


コンボボックスの子供ウインドウであるEDITボックスには
WM_KEYDOWN wParam=VK_RETURN

が流れているようです。
でも何故かEDITに流れるWM_KEYDOWNを捕まえられません。
(色々なサイトを見る限り、やはりシステムキーは普通には捕まえられないもよう)

WM_COMMAND wNotifyCode=1
を捕まえて処理しようかとも考えたのですが、本質を調べるかぎり
あまりよろしい方法では無いように思えました。
最後の手段として考慮しておきます。

なんとかEDITに流れるWM_KEYDOWNを捕まえられないものでしょうか…
>>691
  case WM_GETDLGCODE:
    return DLGC_WANTALLKEYS;
693デフォルトの名無しさん:02/09/09 19:44
void Test(LPCTSTR);
こういう関数があったとして、
CString cs="Test文字列";
Test(cs);
引数にCString型を直接渡すのはいけないのでしょうか?
Test((LPCTSTR)cs);
とすべきでしょうか?
かなり前に直接CString型を渡すと
operatorが呼ばれないから、とか聞いた覚えがあるのですが、
昔の話しなのでどこで見たのかわからなく、忘れてしまったので困ってます。
つまり
Test(cs);
これは駄目でしょうか?
> Test(cs);
> これは駄目でしょうか?

OK。
695694:02/09/09 19:47
>694
あっそうなんですか、
今までLPCTSTRに渡す時は欠かさず
キャストしてました。
全部修正しなくちゃ。。
ありがとうございました。
696693:02/09/09 19:48
>695
すみません、名前間違えました。
>695は私です。
明示的にキャストしているのをわざわざ
直す必要も無いがする
698LPCTSTRへのキャスト:02/09/09 20:54
ただし、CString::Format()や printf系みたいな可変引数リストをとる関数に
CStringを渡すときは明示的な LPCTSTRキャストが必要、とMSDNにあるね。
699デフォルトの名無しさん:02/09/10 16:47
テキストエディタっぽいものを作りたいのですが、
アドバイスお願いします。

編集画面で、スペースや、タブ、改行、EOFなんかを見えるように
記号で表示する機能を、なるべく少ない労力で実装するには、
どうするのが良いでしょう?
何か参考になりそうなことがあれば、お教えください。
>>699
EDITコントロール使うの?
それとも自分で全部作るの?
MFC使うの?

いや、700とりたかっただけなんだがな
>>700
うーん。MFCは使おうと思うんですが、
(リッチ)エディットコントロールは使って可能であれば、
使いたいです。
というか、何から調べていけばいいのやら、
わからないという状態です。
これを実現しているソフトって、
普通は、全部自前で処理しているんですかね?
702700:02/09/10 17:35
>701
ヽ(´ー`)ノ 700トレタウレシーナ
>>702
ヽ(´ー`)ノオメデトウ
というか、RichTextコントロールの後ろの親ウィンドウに、
描画するとそれっぽく見える気がするけど、
それでいいのかしら?
704700:02/09/10 18:18
>>703
ヽ(´ー`)ノ ワーイ、アリガトウ
わかんないからここでもいってみたら
http://www.codeguru.com/editctrl/index.shtml
http://www.codeguru.com/richedit/index.shtml

>というか、RichTextコントロールの後ろの親ウィンドウに、
>描画するとそれっぽく見える気がするけど、
http://www.codeguru.com/richedit/Overlay.shtml
にてるね(多分、よくみてないし)
>>704
サンキュ。
でも、スマヌ。
やってみたら普通にRichEditコントロールに描画できました。
>>705
         ./;;;;;;;;;;;;;;;;;;;;∧;;;;;;;;;/>;;;;;;;;;;;;;;、;;;;iヽ.
         ./;;;;;;;;;;;;;;;;;;;;;;;;;/ i;;;;;;;/´ \;;;;;;;;;;;;;;|;;;ヽ.
 |l ====   /;;;;;;;;;;;;;;;∧;;;;/′ !;;;;/.‐''~,;;'\|,, \;;;;;;;;;ヽ.
 i| ,,,,     // /;;;;/  |;/,,,~ 'V  i|゜   .|l .゙'>;; ヽ;i、
 .|! '''''==  /  .i;;;;ノ ;´″ .)      ゙\,,,ノ"  .|.] .|;;;l
   =||=!!;;,   /;;/ .゙'-=-"           .i ゙,,ノ;;;;;
    |i "   /´|      .,,,.--''''“゙゙゙~i、    「´;;;;;;;;;;
  ||      ヽ,.|    r'"゙`      .゙i、  /;;;;;;;;;;;;;;;
  .l|,/ll .//     ゙|   .|         ヽ,,/´;;;;;;;;;;;;;;;;;
  ||/ ヽ="      `\,,,,,|       ._,,/;;;;;;;;;;;;;;;;;;;;;;;
   ii          :|;;;;\ .._,,,.--イ'''゙゙`/、;;;;;;;;;;;;;;;;;;;;;
   |レ='''"       .|;;;;;;;; ̄;;;;;;;;,/..!、,/:::|''\;;;;;;;;;;;;;;;;;
  <<    o Oo   |;;;;;;;;;;;;;;;;;ノ i:::::゙゙゙:::::::::|  \;;;;;;;;;;;
   ゙''====  ●   |;;;;;;;;;;;;/ |::::::::::::::::::::|   \;;;;;;;

http://techtips.belution.com/ja/vc/0012/
上記にあるサンプルを組み込んでビルドすると、
 'SPI_GETFOREGROUNDLOCKTIMEOUT' : 定義されていない識別子です。
と言うエラーメッセージが出ます。

#include "WINUSER.H"を追加してビルドしても改善されません。
WINVERの値を調べたところ0x0400となっていたので、これが原因だと
思っています。

以上までの背景から下記のどちらかを行いたいのですが、どのように
すればいいのでしょうか?
 1.WINVERの値を0x0500以上に変更する。
 2.その他の方法で上記エラーメッセージを回避する。
開発環境はWinMe+VC6です。
ハァ?

> 1.WINVERの値を0x0500以上に変更する。
> 2.その他の方法で上記エラーメッセージを回避する。

試してみればいいじゃん
>708
どのように試せばいいのかよくわからなかったので、、、
#defineWINVER 0x0500
#include "WINUSER.H"
こうしても
ソース中の
int a = WINVER;
の値は0x0400となってしまいました。
710707:02/09/10 21:08
もう少し詳しい情報を
1.VC6++の新規作成でMFCを使用したダイアログベースのアプリを
 作成中。
2.707のサンプルを組み込んだのは"CxxxxDlg"
3.#define WINVER 0x0500を試したのも"CxxxxDlg"
4.int a = WINVER;を試したのはOnInitDialog関数内
以上のような状況です。
_WIN32_WINNT
プロジェクトの設定かstdafx.hの戦闘で定義しろ
713707:02/09/10 21:48
>712
これで上手くいきました。
どうもありがとう。
714デフォルトの名無しさん:02/09/11 22:00
コンボボックス自体の高さ(展開時の高さではない)って変えられないのでしょうか?

これでは変わらない↓
SetWindowPos( hCombo, NULL, 0, 0, x, y, SWP_NOMOVE | SWP_NOOWNERZORDER );

エディットコントロール(ID=1001)の高さ変えてもだめですた...
715デフォルトの名無しさん:02/09/12 02:59
VC++で、Web上のファイルのタイムスタンプを取得するのはどうやるんですか?
httpで公開されているファイルなら、ヘッダの
Last-Modifiedでも見なさい。
>>714
フォントの高さに合わせられるんじゃないの?
それか、オーナードロー。
>>714
っていうか何でそんなことしたいのか理解できねえ。
719デフォルトの名無しさん:02/09/12 09:10
Win32API質問箱にも書いたのですがレスがつかないので、
こちらにも書かせてもらいます。

スレッドを使うLIBをDLLから間接的に呼び出しているのですが、
クライアントが終了すると、(DLL_PROCESS_DETACHに制御が移る前に)
LIBのスレッドがクリーンナップを経ずに強制終了してしまいます。

クライアント ==> DLL ==> LIB
DLL in
LIB in
クライアント in
クライアント out <<-- ここでLIBのスレッドが強制終了
LIB out
DLL out

スレッドを使っているLIBを安全にDLLから呼び出す方法はありますか?

もう一つ、クライアントでMFCを使っていると、LIBで確保しているメモリの
誤リーク検出をして、非常に鬱陶しいので、こっちもお願いします。
>>719
そのLIBには作ったスレッドを終了させる関数は用意されていないの?
LIB作ったやつに聞いたほうがいいと思うけど
721699:02/09/14 01:17
>>699です。
再描画が必要になるつど、表示している文字の位置を全て計算しなおして、
デバイスコンテキストを取ってクライアント領域に描画していく方法では、
重すぎてダメでした。
もし、似たようなことを実現しているソースをご存知の方は、
お教えください。
今の方法を効率化していくしかないでしょうか?
>>721
もう少し詳しく何をやっているか書いた方がアドバイスしやすいと思われ。
その説明じゃ内部処理が重いのか描画が重いのかすら分からん。
>>721
emacsもvimもsakuraもソース公開されてるぞ
724699:02/09/14 02:10
>>722
すみません...
コントロールはリッチエディットコントロールを使っています。
描画自体は、単純なドットとかで試しているので
重くはないと思います。
(別にスペースなどのキー入力を取って、
一字ずつ描画したりもしてみましたが、こちらは軽いです。)
リッチテキストコントロールのGetCharPosで、
文字位置を取得して全て描画するようにしているのですが、
多分これがまずいと思います。
配列に文字の座標を記録して、
必要のある分だけ配列に記録した座標を変更する
という方法を試そうかと思っているのですが、
どうも、発想から間違えている気がして相談しました。
スペースなどのフォントを自作して、その部分だけ、
入れ替えて誤魔化すとかできないかなとかも考えているのですが。
うーん...
>>723
ありがとうございます。探してみます。
え?リッチエディット使ってるのか?
>>723で紹介したのは全部自前で作ってる奴だ。
726699:02/09/14 02:43
>>725
いえ。参考になります。
楽だと思ってリッチエディットで始めたのですが、
コントロールの機能自体と自作部分とで二重に描画することに
なるし、融通が利かなくて全然楽じゃないので、
中途半端に既存のコントロールを利用するより、
初めから作った方が良いかもしれません。

ちょっと、自分のサイトを更新するのが面倒で
ツールを作ろうと思っただけなのですが、
ますます面倒な深みにはまってる次第です...
727722:02/09/14 02:45
>>724
俺もクライアント領域に自分で描画してやってるのかと思ったぞ。
リッチエディットでどこまでできるかは知らんけど、最終的に本格的なものを
考えているのならコントロールに頼らずに作るしかないと思われ。
728699:02/09/14 02:53
>>727
紛らわしい書き方で、すみませんでした。
リッチエディットだと、
大きいファイルを読むと辛そうとか、不都合が多そうなので、
自作の線で行ってみます。
お二人とも、ありがとうございました。
>>728
まぁ、挫折しない程度にほどほどに。
ソースが簡単でわかりやすいエディタといったらUranusがある
たしかNoahの作者が作ってたものだとおもうから、検索してさがして。
ものすごく小さい(バイナリもそうだけど、ソースが)ので、
最初に見るのには良いと思う。
Microsoft Visual C++ .NET(スタンダード)で、

int _tmain(int argc, _TCHAR* argv[])
{
unsigned char a;
a = 130;
printf("%d\n", a);
return 0;
}

のプログラムでprintfの前でブレイクして a の値を
デバッガで表示させると、0 ってでる。
printfの実行結果はもちろん、130。
a の値が 60 とか、200だとデバッガでもちゃんと表示される。
なんでやねん!!!
>>730
まあ落ち着け
>730
混合モードでどうなってるか見てみたら?
a = 200んとき;
00411C80 mov byte ptr [a],0C8h
a = 130んとき;
00411C80 mov byte ptr [a],82h
で、これ実行するまえは両方共ごみがはいってて
この行実行後、a = 130 んときは、ローカル変数の
ウィンドウが 0 って変わる。200んときは200。
おそらく、デバッガの表示だけのバグかと思うんやけど、
どう実装したら、こんな不思議なバグが盛り込めるんだ?
こんな変なの俺のんだけ?
マイクロソフト サポート技術情報 - JP452156
[VC70] 符号なし char型変数に代入された値 130 がデバッガで正しく表示されない

この資料は以下の製品について記述したものです。
・Microsoft Visual C++ .NET Standard

【現象】
例)
int _tmain(int argc, _TCHAR* argv[])
{
 unsigned char a;
 a = 130;
 printf("%d\n", a);
 return 0;
}
このようなプログラムで printfの前でブレイクし、a の値をデバッガで
表示させると、0 と表示されます。printfの実行結果は "130"です。
a の値が 60 や、200 など 130以外だとデバッガでもきちんとひょうじされます。

【状況】
マイクロソフトでは、この問題をこの資料の冒頭に記載したマイクロソフト製品の問題として認識しています。
Q456479 : Visual C++ .NET デバッガの表示問題に関する修正プログラム
ダウンロード サイズ: 312kB

この修正プログラムによって、MSVC++.NETのデバッガで符号なし char型
変数に代入された値 130 がデバッガで正しく表示されないという問題が修正
されます。今すぐダウンロードして、130が表示されるようにしてください。
【注意事項】
 但し、上のパッチを投入しても131は正しく表示されません。
 131を表示させるには Q456480 を参照してください。

笑)
どーやら 0x81〜0x9f の範囲やとあかんみたい。
で、ウォッチウィンドウの中で
(WORD)a
とかすると、ちゃんと130で表示される。
ますます、どーゆー実装してるか謎だな、VC++.NET
> どーやら 0x81〜0x9f の範囲やとあかんみたい。
ShiftJISで…対応する文字がない範囲だなぁ。
をぉ、なるほど。たしかにデバッガは対応する文字も表示するなぁ。
で、対応する文字がなかったら、値もなかったことにするのか(ーー#
int使うべきところでcharを使うのがどうかしている。
unsigned char でなく,BYTEを使いなさいってこった
>739
730のコードは、単に分かりやすいようにサンプル示しただけ。
もしや、整数はすべてintって思い込んでる?

>740
BYTEなんて標準の型やないねんから、使うかどうかは、その時しだいだろ。
それに、BYTEでも結果はいっしょだぞ。

どーせ、突っ込むなら、>737のような、鋭い突っ込みを。
>>741
> もしや、整数はすべてintって思い込んでる?

なぜこんなレスをするのかわからん。
743デフォルトの名無しさん:02/09/14 23:40
VisualStudio.NetでコンパイルしたらDX8.0aのサンプル(チュートリアルの三角形がくるくるまわるやつ)が正常に動きませんが、VC++6.0でコンパイルすると正常に動きます。なぜですか?
744743:02/09/15 00:21
8.1のをlib/includeディレクトリに移したら直りました。どうも。
745デフォルトの名無しさん:02/09/15 00:36
VCで質問です。
デバッガ上で関数からリターンするときに戻り値を無理矢理trueからfalseにしたりできますか?
746デフォルトの名無しさん:02/09/15 00:38
>>745
できるっす
>>745
関数から戻った直後にクイックウォッチにある戻り値を書き換える
(整数なら)eaxを書き換える

お好きにどうぞ
>746-747
ありがとう
mciSendCommand使ってMIDI再生してるんですけど
音量とテンポなどをかえるにはどうすればいいんですか?

MCIは各種のストリームメディアを統一的に扱うためのインターフェースなので
それぞれでの細かい制御はできない。やるんなら低レベルオーディオAPI使うか
DirectMusicを使え。低レベルオーディオならmidiOutOpenあたりでぐぐってみれ。
テンポなら変えられるぞ
BOOLとboolの違いとは…
753デフォルトの名無しさん:02/09/15 16:26
>>752
BOOL たぶん4バイト
bool たぶん1バイト
>>753
出直せ
755bloom:02/09/15 16:39
756デフォルトの名無しさん:02/09/15 16:40
BOOLってCでも使えるようにWindows.h辺りが勝手に定義してる
だけじゃなかったっけ?(適当)
>>756
Cでも使えるように、という意図かどうかは知らないけど、
そんな感じ
別スレにて同じ質問をしたのですがまったくレスがつかなかったので
申し訳ないのですがこちらでも質問させてください。

StyleXPのようなソフトを作成しようとしております。
そこで手始めとしてシステムファイルの置き換えを行おうとしているのですが
OSのシステムファイル保護が働いてしまい、うまくいきません。
OSはWinXP Proで開発環境はVC++.NETです。

今まで試してみたのは、Administratorでログオンした後レジストリの
HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon に
SFCDisable を追加して DWORD値を 1 にした後

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce に
置き換えたいシステムファイルをコピーする実行ファイルを記述してから
再起動を行ったのですがやはり元のファイルに戻されてしまいます。

どのような手順を踏めばシステムファイルを置き換えることができるのでしょうか?
dllcache内のファイルを先に置き換える
760699:02/09/16 00:24
>>729
レス遅くなりましたが、ありがとうございます。
まだ画面表示部分しかとりかかってませんが、
自前で処理する方がかえって楽なようです。
実はC++歴が一ヶ月程度なので、いい練習にもなりそうな気配です。
761デフォルトの名無しさん:02/09/16 19:06
VC++6.0のnamespaceにバグがあると思うんですが、どう言う条件で露呈するんでしょうか?

後、.NETでは直っているのでしょうか?
762デフォルトの名無しさん:02/09/16 20:30
入門者なのですが

winAPI関数を利用して、YES NOクイズを作る。

Messageboxをつかって作るとあるのですが

どう造ればいいのかわかりません
おしえてくれませんか?
>>762
いや。
764:02/09/16 21:28
>762
>winAPI関数を利用して、YES NOクイズを作る。
>Messageboxをつかって作るとあるのですが
どこで見たか知らんけどあるというからには
あるんだろう。
書いてある通りやってみたら?

int iRet=MessageBox("君可愛い?","質問",MBICONSOP MBYESNO);
if(iRet==IDYES)
   MessageBox("付き合ってください!!");
else
MessageBox("・・・・・・");

こんな感じなのかなぁ。


>>759
レスありがとうございます。
試しに RunOnce に
dllcache と System32 のファイルを置き換えるバッチファイルを登録してみたのですが
書き換わってくれませんでした。
どうやら思った以上に難しそうです...
>>765
system/readonly/hiddenを解除したか?
>>761
friend 演算子の振る舞いがおかしかったりする時があったような。
SP 当てたら直ったような。
768デフォルトの名無しさん:02/09/16 23:16
VC6sp5 のデバッガで $S〜 っていう変数が突然出現するんですが、何ですか?
>>766さん
各属性を解除してみたところdllcacheは無事に置き換えができました。
しかし肝心のSystem32のファイルが使用中ファイルになってしまっているようで
上書きコピーができませんでした。
ただ、やり方はわかりましたので色々なページを参考にしてこれからやっていこうと思います。
どうもありがとうございました。
>768
operator
771デフォルトの名無しさん:02/09/20 02:12
VC++6.0Proでプロファイラを使いたいんですが、使えません。
プロジェクト設定>リンク>一般>の所にある「プロファイルを行う」
のチェックボックスをチェックチェックしても、OKボタンを押した瞬間に
「プロファイルを行う」の文字列が「インクリメンタルリンクを行う」に
変化してしまいます。

そのままビルドしても、プロファイラを使おうとしたら「プロファイラを行う設定でビルドされてません云々」
となってしまいます。
772デフォルトの名無しさん:02/09/20 04:00
>>771
確かコンパイルオプションのところに /profile を追加すればできたと思います。

便乗して質問なんですがVC++.netでプロファイラはどうしたら使えますか?
>>771
マウスで選択するのを諦めてホットキー(Alt+E)を押せばいい
>>771 VC6のバグ
775デフォルトの名無しさん:02/09/20 16:45
VisualC++ 6.0 です。
自作スタティックリンクライブラリ(クラスライブラリになります)を作成して、
それを他から使うということをやろうとしてます。
ワークスペースの新規作成のときに「Win32 Static Library」を選んでやってます。

作成する自作クラスを Aとして、さらにそのAが内部で使う自作クラスをBとします。
当然 A.cpp B.cpp そして A.h B.h を作りますが、作成されるのは A.lib ですよね。

そしてライブラリを使用する側は A.lib A.h B.h をプロジェクトに入れる
ことになると思いますけど、ヘッダを一緒のファイルに書いたりってのはダメですか?
一つの *.lib に対して *.h が二つってのが何かスマートじゃない気がするんです。
>>775
べつにいいんじゃないの。(1つでも2つでも)
C.hを作ってそのなかに
 #include "A.h"
 #include "B.h"
って、書いて使うときはC.hだけインクルードするでもいいけど
>>775
A.hでB.hをincludeすれば良いんじゃないのかと…。
778デフォルトの名無しさん:02/09/20 17:05
>>776-777
あぁ〜すみません言葉足らずでした。
>>777のように書いてるから、ライブラリ使う側は
A.hだけインクルードすればいいんです。

「使う側のプロジェクトに、二つのヘッダーファイルを用意させる」
というあたりがちょっと気になってるんです。
俺はあまり経験ないから変なこと気になってるだけで、
普通そんなもんだよ、ということならそれはそれでいいんです。
>>778
ヘッダーファイル自体はプロジェクトに追加する必要は無い。
780775:02/09/20 17:55
>>779
あぁ気付きませんでした。ビルドするとき同一ディレクトリに
入れてあればいいんですね。では気にせずこのままやります。
答えてくれた方々、どうもありがとうでした。
781デフォルトの名無しさん:02/09/20 18:44
ダイアログベースでファイラーみたいなものを作ってます。
それで、CListViewコントロール(レポート形式)にある項目を、ドラッグ元に出来るように
したいのですが、どのような手順が必要でしょうか?
libname.h

#include "a.h"
#include "b.h"
783781:02/09/20 21:47
それらしいものをみつけました…が、リストビューのLVN_BEGINDRAGで
記述して見ましたが、だめでした。

CSharedFile sf(GMEM_MOVEABLE|GMEM_ZEROINIT);

DROPFILES df;
df.pFiles = sizeof(DROPFILES);
df.pt.x = 0; df.pt.y = 0; df.fNC = FALSE; df.fWide = FALSE;
sf.Write(&df,sizeof(DROPFILES));

sf.Write("\0",1);
char path[_MAX_PATH];
strcpy(path,"C:\\test.file");
sf.Write(path,strlen(path)+1);

sf.Write("\0",1);
HGLOBAL hMem = sf.Detach();

COleDataSource *pSource= new COleDataSource;
pSource->CacheGlobalData( CF_HDROP , hMem);
DROPEFFECT result = pSource->DoDragDrop();

delete pSource;
784デフォルトの名無しさん:02/09/20 22:02
リストビューにラストオペレーションしたいのですが、やり方を知っている方がいたら教えてください。
よろしくお願いします。
785784:02/09/20 22:52
すみません。誰もわからないのでしょうか?
>>784
ラストオペレーション???
その操作をしたら、アプリが強制終了する・・・とか?
リ ス ト ビ ュ ー 最 後 の 作 戦
>>787
カコイイ!!
DestroyWindow(hwndListView);
>>787
主語が違うので、意味が全然違う
791デフォルトの名無しさん:02/09/21 10:02
struct {
 char a1;
 char a2;
 char a3;
 char a4;
 int  i;
}



struct {
 char a1;
 int  i;
 char a2;
 char a3;
 char a4;
};

ではメモリのとられ方が違いますが、やはり意図的に上の方を書いたほうがいいのでせうか?
>>791
> ではメモリのとられ方が違いますが、やはり意図的に上の方を書いたほ
> うがいいのでせうか?

やりたいことによる。
793791:02/09/21 10:20
>>792
下の方を意図的に使う理由ってあるのでしょうか?
(´-`).。oO(なんで char a1,a2,a3,a4; て書かないんだろう…)
(´-`).。oO(なんで配列つかわないんだろう…)
796791:02/09/21 10:33
>>794
あくまでも質問の意図をわかりやすくするため

>>795
あくまでも質問の意図をわかりやすくするため
>>793
ファイル上のデータがそう言う配置になっていて、直接読み書きしたい時
等。まあ、パディング等のいやらしい問題があるので、VC なら
#pragma pack() を使う必要があるかも。

プログラム中でしか使わないなら、下の方を積極的に使う理由はないと思
う。
>>796
(´-`).。oO(なんで >>794, >>795 って書かないんだろう…)
799デフォルトの名無しさん:02/09/21 10:42
バッファローマンまではまだいいが、サンシャインマンはどう見ても人間じゃないと思うのだが。
どうだろう、みんな
今だ!800番ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
                  ∧∧       (´⌒(´
            ⊂(゚Д゚ )≡≡≡(´⌒;;;≡≡≡
        ⊆⊂´ ̄ ⊂ソ  (´⌒(´⌒;;
           ̄ ̄ ̄   ズザーーーーーッ
今だ!801番ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
                  ∧∧       (´⌒(´
            ⊂(゚Д゚ )≡≡≡(´⌒;;;≡≡≡
        ⊆⊂´ ̄ ⊂ソ  (´⌒(´⌒;;
           ̄ ̄ ̄   ズザーーーーーッ
>791
下の方を意図的に使う理由を強引に考えれば、
「ちょうどintにあたる部分が4Byte境界にあって、1バスサイクル得する可
能性がある場合。」
かな?
ただこんなこと気にしてC使うんだったら、アセンブリ言語使った方が簡単。
実質、下を使う理由は無いと考えていいと思う。
> 「ちょうどintにあたる部分が4Byte境界にあって、1バスサイクル得する可
> 能性がある場合。」

でもVCのデフォルトのままならどちらも4Byte境界にあるわな。
意図的に半端な境界に置かない限り。
>803
うそです。
805802:02/09/21 23:15
俺は >803 の言うとおり、4Byte境界にしか配置されない。
ホントのところはどうなのかな。
802は間違いかも。
806デフォルトの名無しさん:02/09/22 06:48
MFCを利用したソフトをVC.NET Proで
スタティックリンクしてexeを作成したいのですが出来ません。
確認したいのですがスタティックリンクするとmfc70.dllとmsvcr70.dll、無しで
VC.NETで作成されたソフトが動くんですよね?他のdll使わなければ。
ソリューションエクスプローラで該当のプロジェクトを右クリック->プロパティを
開いて、全般->MFCの仕様の項目で
「スタティックライブラリでMFCを使用する」
を選択しているのですが、それでコンパイルしても実行側PCで
前述の二つのDLLを要求され起動できません。
どこが間違っているのでしょうか?
それともスタティックリンクというもの自体をなにか勘違いしているのでしょうか?
ほんと困り果てています、ご指摘お願いします。
>>802-805
VC++ では、構造体のアライメントは「いずれかのメンバの最大のアライ
メント要件に合わせる」となっているから、普通に使っている限りは a1
は4バイト境界に配置される。更にディフォルトでは、最大7バイトま
でのパディングを行うから、下の例では a1 の後ろに3バイトのパディ
ングが追加されて、i も4バイト境界に置かれるので、>>802 のような
ことは起こらない。ただし、#pragram pack(1) とか、コンパイラオプ
ションの /Zp とかを使って、かつポインタをキャストしてわざと変な
ところに配置すれば >>802 のような事を起こすことは可能。
>>806
実行側がWin95とか。
809806:02/09/22 15:37
>808
いや、そんなことはないです。
困ってます。。
デバッグ側だけ設定して実行してるのがリリース側とか。
>>809
実行側がMacとか。
812806:02/09/22 22:59
>810-811
やっぱり設定あってますよね。
プロジェクトの設定ダイアログの
プレビュー撮って来ました。
見てもらえませんか?
http://www.geocities.co.jp/SiliconValley-Oakland/1693/a.jpg

これでビルドしたら起動側でmfc70.dllいらないはずですよね?
↓が上のプレビューの設定のままビルドしたやつです。
もしよかったら起動だけでいいので試していただけませんか?
Win2k上で試しましたがやはりmfc70.dllを要求され起動できませんでした。
http://www.geocities.co.jp/SiliconValley-Oakland/1693/test.lzh
なんでなんだろう。。
813811:02/09/22 23:10
俺に対してのレスでも有るのか、、
ちょっとびっくり。
話は変わってexeを直接実行するのは、ちょっと抵抗あるんじゃないかな?
>>812
DependencyViewer で覗いた感じ、
MSTFUNC12.DLL (CBrowseForDirectory とか COutFile なるクラスが入ってる模様)
にリンクされてて、そのDLLがmfc70.dllを必要としているようだが。
815806:02/09/22 23:24
>813
すみません、あまり深い意味はないです。
確かにそうですね、exeは怖いですものね。
でもこうするしか方法が思いつかなかったんですよ。
プレビュー見ていただいて解決することが
一番の望みなのですが。
私自信あまりテストしていただける人、環境がないので
なにか勘違いしてるかもしれません。
一応弁護しておくとexeですが悪意のあるコードは
書いてないです。
よろしければ、、お願いいたします。
不可でもなにか確認事項などあれば
アドバイスいただければ幸いです。
816806:02/09/22 23:25
>814
目からうろこが落ちたかのような衝撃を受けています。
確認してきます!
817806:02/09/22 23:52
>816
確かにMstFunc12.DLLが作成する際の
設定がスタティックリンクになってませんでした。
そこで>812のプレビューと同じように
変更し、リビルドしたのですが、
結果は変わりませんでした。
絶対これだと思って喜んでいたので残念です。
ちなみにMstFunc12.DLLをスタティックリンクに変更した際、
/MDオプションをつけろ、とエラーが発生したので
つけました。
ほんとなんでなんでしょう。
まず実行側の環境書こうよ。
あ、すまん2kでも動かないのか
Wizardで作ったスケルトン(コードは変えない)を、今回と同じ設定でビルドして動かしては?
それが動かなければ設定に原因があるし、それが動けばコードに原因があるってことで。
821806:02/09/23 02:55
>820
そうですね、そういう方法思いつかなかったです。
今やってみたのですが、
1.ダイアログアプリ単体をスタティックリンク
成功(mfc70.DLL無しで起動)
2.自作したDLL(MstFunc12.dll)と暗黙のリンク
失敗(起動側でmfc70.dllを要求される)
でした。
MstFunc12.DLLの方の設定は使う側と同じで
MFCの使用欄は「スタティックライブラリでMFCを使用する」
が選択しています。
よくわかってませんがスタティックリンクする設定に変更すると
/MDオプションをつけろ、という警告が出たので/MDオプションを付けるよう変更しました。
MstFunc12.DLLは自作したよく使う関数、クラスなどをエクスポートしています。
SHBrowseForFolderなどをラップしたクラスなどです。
なぜMstFunc12.DLLはMFCライブラリとスタティックリンクする設定に
なっているのにいざ使用するときになるとmfc70.dlllを要求されるのでしょうか?
逆にどんなコードを書けばスタティックリンクしてるのにmfc70.dllを要求されるのでしょうか?
心当たりでも構いません、みなさまよろしくお願いします。
MSDNのMFC DLLより(VC6だけど)

メ モ MFC を共有 DLL またはスタティック ライブラリのどちらで使用するかは、
[プロジェクト設定] ダイアログ ボックスの [一般] タブで設定します。
ただし、拡張 DLL は、MFC の共有 DLL バージョンで使用するように設計されています。
このため、拡張 DLL に対しては、この設定を変更しないでください。

MSDNより/MDは「DLL使いますよ」というコンパイラオプションだから、そのDLLが原因だろうね。
その自作DLLはMFC拡張DLLかな?これもMSDNよりDLLを使うように設計されてるから、
設定でスタティックリンクにしても「DLLを使え(/MDをつけろ)」と怒られたのでは。
結果的に/MDをつけてビルドしたからDLLを要求されて当然、と。
824806:02/09/23 03:50
>822-833
わかりやすい解説ありがとうございました。
私のレベルではすんなり納得できる内容ではありませんが、
つまりはMFC拡張DLLの場合はスタティックリンクできない、
というふうに理解しておきます。
回避方法としては、MFC拡張DLLとして作られた
今のDLLを通常DLLとして作成しなおすことで
回避できそうなのでそっち方面で作業を進めていきたいと思います。
非常に助かりました。
ありがとうございました。
825806:02/09/23 08:06
様々なアドバイスくださった方々ありがとうございました。
たった今mfc70.dllなしで起動できました!
今まで出来なかった原因は
>822-823さんの言われていたとおりで
>824に書いたとおりMFC拡張DLLから
通常DLLに変更したら無事解決しました。
ありがとうございました!
826デフォルトの名無しさん:02/09/23 09:34
無効領域が発生してWM_PAINTがキューに入れられた後、WndProcにWM_PAINTが送られる前に、
VaidateRectで無効領域をすべて有効化したとしたら、WM_PAINTはWndProcに送られずに、キューから削除されるのでしょうか?
827 :02/09/23 09:39
>>826
WM_PAINTはキューに入るわけではないので、そのような動作はしない。
828826:02/09/23 09:47
>>827
ProgramingWindowsによればWM_PAINTはメッセージキューに送られると書いてありますが。
WM_PAINTは来る。
830826:02/09/23 10:11
>>829
すみません。できれば内部的な動作も教えていただけるとありがたいのですが。
831NONAME:02/09/23 10:14
来るんじゃないの?
つーか実験しる。
WM_PAINTだけはキュー内での処理がちょっと特殊だから
>>827は勘違いしていたとか。
>>830
WM_PAINTで描画した内容が更新リージョン内であれば反映されるけど、
更新リージョンが存在しないので、結果が表示に反映されないだけ。
834 :02/09/23 10:42
自前のコントロールのスタイル設定を標準と同じように
WS_〜といっしょに指定したいのですが、
どのビットを割り当てても良いのかさっぱりわかりません。
どこかに資料内でしょうか
836デフォルトの名無しさん:02/09/23 18:46
ツリービューコントロールのどの項目が選択(クリック)されたか
知る方法がわからなくて困ってます
WM_NOTIFYやTreeView_HitTestあたりを調べてみましたが、うまくいきません
どなたか教えてください
VC6.0,SDKです
837826:02/09/23 18:47
みなさん、返答ありがとうございます。
もうひとつだけ聞いてもいいでしょうか?

WM_ERASEBKGNDは、無効領域ができてWM_PAINTがWndProcに送られる前にWndProcに送られますが、
このメッセージはキューに入れられるのでしょうか?
それともWM_PAINTが送られるときに発生して送られるのでしょうか。
知っている方がいたら教えてください。よろしこ。
838826:02/09/23 19:47
追加質問です。

UpdateWindowはキューにWM_PAINTがあるかどうか見て、あるときにWndProcに送るのでしょうか。
それとも無効矩形があるかどうかで判定し、あるときはWM_PAINTを送る。メッセージキューにあるWM_PAINTは無効矩形がなくなったのでOSによって消される。
どちらが正しいのでしょうか。それともほかの動きをしているのでしょうか。
知っている方がいたら教えてください。お願いします。
何かがあれば模しなければWM_PAINTと無効領域を登録する
更新領域が無くなってもWM_PAINTは破棄されない。
>>836
項目が選択されたというイベントを取りたいならTVN_SELCHANGED
今なにが選択されているか知りたいならTreeView_GetSelection
>>835
下位16ビット。
>>837
BeginPaintの中からSendMessageされる。
>>841
ありがとう!
>>840
レスサンクスです!早速やってみます
自分で作ったライブラリ(*.lib)を使うとき、いちいちプロジェク
ト作るたびに追加するのが面倒です。
プロジェクトの新規作成のときにデフォルトで自分のライブラリを
参照するようにできませんか?
#pragma comment(lib,〜)
を*.hに書けばいいような
847デフォルトの名無しさん:02/09/28 03:48
画像処理でHough変換のプログラムがうまくかけません
助けてください
で?そのレスだけでどうしろと?
マルチなので放置して。
850デフォルトの名無しさん:02/09/28 11:16
今回managed C++でwindowsアプリケーションを作成しているのですが、
Formが起動する前に、DOS窓が開いてしまいます。
このDOS窓が開かないようにするにはどのようにすればよいのでしょうか?
851デフォルトの名無しさん:02/10/12 15:21
DLLの中にCStringなどのクラスを内部で使用している
クラスを作成しました。
動作環境としてCStringなどのクラスを使用することは
何らかの制限がかかるのでしょうか?
つまりめんどくさいなどの理由で用意されているクラスを
多様しないの方がいいのか?という疑問です。
また、作成時スタティックリンク、ダイナミックリンク
どちらにしても動作環境は変らないのでしょうか?
作成したDLLを使用する際、VBで使うことも考えているのですが、
CStringとか使ったらVBで使えないようなイメージがあります。
そういうこと解説しているページ、その他アドバイスなどいただけませんか?
よろしくお願いします。
環境はVC.NETです。
よろしくお願いします。
まじめに聞いてるつもりなの?
853851:02/10/12 22:29
>852
いたって真面目なのでご教授いただけないでしょうか?
よろしくお願いします。
854851:02/10/13 00:35
どうやら初心者スレへ移動した方がよさそうなので
移動します。
板汚しすみませんでした。
質問が多すぎる。答えるのが面倒。だからだ。
856デフォルトの名無しさん:02/10/13 17:04
ダイアログベースのプログラムで、右クリックしたときに
ポップアップメニューを表示させたいんですけど、
チェックボックスとかはClassWizardで見る限り
右クリックのメッセージを受け取ることが出来ませんよね?
こんなときは、どうしたら右クリックでポップアップメニューを表示できるようになるんでしょうか?
857デフォルトの名無しさん:02/10/13 18:45
>>856
体調が悪いのですが答えさせていただきます。
WM_RBUTTONDOWNのメッセージの処理から呼び出せばすむだけかと。
858856:02/10/13 19:06
>857
体調が悪い中申し訳ありません。

それはつまり、ダイアログクラスに送られた
WM_RBUTTONDOWNのメッセージを監視すると言う事ですよね?
ですが、その方法ですとアクティブなチェックボックスの
上で右クリックをしてもメッセージがダイアログクラスに送られませんよね?
チェックボックスに関連したポップアップメニューを表示させたいと思っていますので、
アクティブなチェックボックスの上で右クリックした時に
WM_RBUTTONDOWNのメッセージをどこでもいいので受け取る方法を
教えていただけないでしょうか?
>>858
MFCは知らないんだけど、チェックボックスをサブクラス化して
そのメッセージを処理すれば?
ちなみに俺ならWM_CONTEXTMENUを使う。
860856:02/10/13 19:29
>859
ありがとうございます。解決しました。
WM_CONTEXTMENUの存在を知りませんでした。
もう少しよく調べてから質問するようにします。
CButtonの派生クラスでWM_CONTEXTMENUを処理。
ActiveXコントロールで、ウインドウを作成するコントロールを作るにはどうしたらよいのでしょうか。
Webブラウザ上でそのコントロールを起動し、ブラウザとは別に新たなウインドウを作成し、その中で自分で作成したプログラム結果を表示したいので、よろしくお願いします。
もちろん、開発環境はVisualC++6.0です。
よろしくお願いします。
863デフォルトの名無しさん:02/10/13 21:30
>>862
どうしたらいいってウィンドウを作ればいいじゃないか。
なにが聞きたいのかがわからん。
864862:02/10/13 21:44
すみません。もう少し詳しく書きますね。
ActiveXコントロールウイザードで作成されたサンプルプログラムでウインドウを作成するにはどうすればよいのでしょうか。
私は、MFCを用いてコンストラクタでウインドウを作成する自作クラスを作成したのです。
それを外部変数で定義すると、コンパイルはできるのですが、リンク作業で英語のエラーメッセージが発生するのです。
そのため、そのコントロールが動きません。
メッセージマップ:ON_WM_CREATE( )を新たに定義して、その関数内で自作クラスを定義しようしても、MSDNライブラリで定められている関数:afx_msg int OnCreate( LPCREATESTRUCT );の引数をどのように与えればよいのかがわかりません。
どのように作成すればよいのか、考え方を教えていただきたいのです。
>>864
すなおにDelphiつかえよ
>リンク作業で英語のエラーメッセージが発生するのです。
マ板の歴史のなかで、具体的なエラーメッセージを出せなかった
香具師がマトモだった例は少ない。
867864:02/10/13 22:09
だせないんです。許してください。
想像でいいのでアドバイスお願いします。
>>867 偽者氏ねよ
869デフォルトの名無しさん:02/10/13 22:30
>>868 = 862
まあまあ、キミがエラーメッセージを出さないから変な偽者がでるんだろ。
870デフォルトの名無しさん:02/10/14 02:27
1つのプロジェクトでCとC++両方のコードを同時に使用ってできるんでしょうか?
>>870
できます。
>871
ありがとうございました。
もうちょっと方法を調べてみることにします。
どこで聞けばよいのかまよったのですが。
office製品についてくる OLE Controlのライセンスって
どうなっているんでしょうか
office製品を持っていないユーザに再配布出来るものでしょうか?
英文へのポインタでもかまいませんので心当たりがあれば情報をお願いします。
874デフォルトの名無しさん:02/10/14 15:07
質問
かちゅうしゃの 右下の書き込みがあるところは、なんですか
テキストボックスでしょうか
>>874
ぼくのかちゅうしゃは上下2分割になっているので、右下がどれを指しているのか
わかりませぬ。
spy++でも使えば何か分かるんじゃないですか?
876デフォルトの名無しさん:02/10/14 17:29
Create で作ったウインドウのメニューに印刷とかファイル保存とかをつける方法を
お願いします。
877デフォルトの名無しさん:02/10/14 17:35
>>876
AppendMenu
878876:02/10/14 17:46
>877
早速ありがとう、調べてみます。
ダイアログボックスを作る時、以下の様にして作成してるんですが
DialogBox(NULL,MAKEINTRESOURCE(ABOUT_DLG),hWnd,(DLGPROC)AboutDlgProc);

呼ばれた先の関数にパラメータを1つ増やして(FlgData *FlgIni)以下のようにしているのですが、
LRESULT CALLBACK OptionDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp,FlgData *FlgIni){

DialogBoxの呼び出し側でこのパラメータを渡すのってどうやるのでしょうか?

DialogBox(NULL,MAKEINTRESOURCE(ABOUT_DLG),hWnd,
 (DLGPROC)AboutDlgProc(
  〜,
  〜,
  〜,
  &FlgIni,
 )
);
こんな感じで呼び出すとは思うのですが指定するパラメータがどうもわかりません。(汗
880879:02/10/14 20:46
すいませんOptionDlgProcとAboutDlgProcを間違えました・・。
本筋とは関係ないので気にしないでください。m(__)m
881879:02/10/14 21:07
DialogBoxParamを使って出来るようなりました。
お騒がせしました。m(_ _)m
882デフォルトの名無しさん:02/10/18 00:42
DialogBoxにスタティックテキストを貼り付けているのですが、
プログラムでテキストプロパティを変更する方法が分かりません。
(可視、無効などが設定できるところ)
SendMessage()でやるんでしょうか?
883デフォルトの名無しさん:02/10/18 00:46
日本語のアプリがあって、ダイアログリソース IDC_DIALOG1があったとします。

IDC_DIALOG1をコピーして ID変えずに「言語:英語(ニュートラル?)」な
ダイアログリソースを用意しておけば、日本語以外の環境で実行したとき、
勝手にそっちが使われるんでしょうか?
>>882
( `Д) <EnableWindow()/ShowWindow()
/(ヘ つ )ヘ 

おいおい、可視・無効にしたいんじゃなくて、そのプロパティウィンドウで
文字列を設定する方法がわからないって言ってるんだろ?

>>882
[キャプション]に入力する。
887883:02/10/18 01:09
>>885 おぉ。サンクスコ。
888882:02/10/18 01:09
>884
うわ・・・こんなに簡単だったんですか!
ありがとうございます。

ついでに質問ですが、ダイアログにフォーカスが移ったときに、
アクセラレーターが使えなくなっちゃうのですが、どうすれば
使えるようになるのでしょうか?
開発環境はWin32SDKです。
889885:02/10/18 01:31
>>883
日本語版もあったので載せとくね。
http://support.microsoft.com/default.aspx?scid=kb;ja;JP169483
>888
モードレスダイアログ使う。
サービスパック5をDLして実行したんですが,セットアップに使ったファイルを削除しても大丈夫でしょうか?
892デフォルトの名無しさん:02/10/18 23:05
ライブラリのリンクで困っています。

DLL で動的にリンク、DLL を用いないで静的にリンクをライブラリ毎に
設定することは可能でしょうか?

具体的には、boost の regex 関係のライブラリは静的にリンクし、MFC など
一般的なライブラリは動的にリンクしたいと考えています。

環境は Visual Studio .NET です。
893デフォルトの名無しさん:02/10/18 23:15
>>892
無理です。
みんな.netか。
さみしいな。
寂しいな…VC6から乗り換えるほどの魅力ってそんなにあるのかね?
まあ、VC6 の template 不備には不満が残る。
>>891
消しても実行には問題ありませんが、再セットアップ時に再ダウンロードする必要があります。
('-`).。oO(なんで char a1,a2,a3,a4; て書かないんだろう…)
>>898
独り言ですか?
つーかそんな変数名はつけるな。
900891:02/10/27 16:02
>>897
サンクス
もうとっくに削除してしまいましたが
すごい基本的なこと聞いて申し訳ないのですが・・・
VC++ではフォームの継承はできないんでしょうか?BorlandC++では
できたんですが・・・。C#ではできるらしいんですが、VC++ではひょっとして
できない?
902煽り:02/10/27 17:06
Borland C++Builder ではできたかも知れないが
Borland C++ では素ではできないと思われ
Borland C++ で実現したならその方法で VC++ でもできるかと
903デフォルトの名無しさん:02/10/28 16:04
VC++で日本語のアプリを作成し、
英語対応するためにダイアログリソースの複製を
英語(U.S.)などで作るとすごく縦長になりますが、
これを日本語と同じような高さにするよい方法があれば
教えていただけないでしょうか?

以下の理由で、英語のダイアログリソースを一つ一つ編集して
高さを調整するという方法は避けたいのです。
 ・英語化するダイアログが多数ある
   →やたらと時間がかかる
 ・右下に表示される座標の値が日/英で違う値になる
   →メンテが困難

よろしくお願いします。
>>903
フォント変えてみそ
903ではないが、英語のダイアログって、フォント何にしとけば良いの?
906903:02/10/28 23:26
>>902
ありがとうございます。

フォントをArialからMS Sans Serifにかえてサイズを
2ポイントくらい小さくしたら
リソースエディタ上では日本語と同じくらいの
レイアウトになるのですが
実際にビルドして英語OSで動かすと
やっぱり縦長になってしまうのです。
907903=906:02/10/28 23:28
すみません、誤爆です。
>>902 ではなく >>904 です
>>906
MS PGothicにしてみたらどお?
手でリソースファイルを直さないとダメだけど,これならほぼ同じかと。
909デフォルトの名無しさん:02/10/29 16:12
あるアプリのダイアログ CBarDialog を書いています。

struct Foo { int x; int y; int z; }; があって、その集合 std::vector<Foo> source; を
CBarDialog内に保持しているのですが、このベクタの内容をダイアログ上のCListCtrl
(か何か)に表示しているとき、画面表示とベクタの内容の同期をとるのに一番綺麗な
方法はどんなのでしょうか? vectorでなくて、MFCのコレクションを使うようにコー
ドを書き換えることは多分可能です。

教えてください。
OwnerData、OwnerDrawする。
同期の必要はない
>>910
OwnerDataでgoogleしてもほとんどhitしないのですが・・
なにか参考になるページへのポインタをいただけませんでしょうか...
>>911
何で OwnerData だけ検索して出ないって諦めるわけ?
913903=906:02/10/30 11:31
>>908
ありがとうございます。
MS Pゴシックでもダメでした。
ダイアログエディタ上は同じように見えるけど、
英語OSで起動すると縦長になってしまいました。


で、結局いろいろやってみて
Lucida Console
が日本語と一番近いと思われる
レイアウトになったので、これに決めました。

今いじってるアプリは初回起動時に
OSデフォルトのフォントが設定されるようになっており、
ユーザーによるフォントの変更も可能なので
とりあえずはこの内容で問題なさそうです。

みなさん、ありがとうございました。
91415ヶ月いまだ若葉マーク:02/10/30 11:48
質問があってまいりました。

他のアプリケーションの持っている変数に値を入れる、もしくは
手に入れることは可能でしょうか?(前者だけでいいです)

読み込み元 : ダイアログベース
他のアプリ : MDIのフレーム式

ぜひともよろしくお願い致ししますm(__)m
915デフォルトの名無しさん:02/10/30 12:09
VC6 (WIn98SE) でコンソールアプリを動かす時、マウスカーソルがコンソールに
奪われてしまって難儀しているのですが、回避する方法はありますか?
916 ◆i.HARPeeuc :02/10/30 12:16
>>914
WriteProcessMemory() で他プロセスのメモリを書くけど、普通どのメモリ領域が
目的の変数なのかわからないし、「他のアプリ」 の仕様がわからないなら何も
できないよ。
「他のアプリ」 も自分の作ってるプログラムなら、DDE とかウィンドウメッセージ
とかで通信した方が安全。
>>913
「MS Pゴシック」(日本語)じゃなくて「MS PGothic」(英語)で
やってみた?

これだとダイアログエディタ上では同じには見えなくなるが
動かすと一緒だったりすると思うのだが…

まぁ解決したようならいいか。
918デフォルトの名無しさん:02/10/31 01:33
>912
厨房だから
919913:02/10/31 17:57
>>917
今やってみましたが、そのフォントはフォント選択コンボでは表示されなかったです。
rc ファイルを直接編集で指定するのでしょうか?
920デフォルトの名無しさん:02/10/31 21:15
質問です。

スタティックリンクライブラリを3つ(A.lib, B.lib, C.lib)と作って
C.lib (リンク)→ B.lib (リンク) → A.libという構造をとったら
『warning LNK4006 〜はB.lib(〜.obj)で定義されています。2 つ目以降の定義は無視されます。』
というリンク警告が発生してしまいます。

リンク警告を消す方法を教えてください。
同 じ 定 義 を 消 せ
922デフォルトの名無しさん:02/11/01 12:56
>>921
920のレスだと思うんですが、回答ありがとうございます。

920の質問、言葉が足りなかったみたいなので補足します。

VC6で発生せず、VC7で発生するバージョン固有の問題です。

A.lib, B.lib, C.libのリンクは、全てライブラリで外部プロジェクトから参照を簡単にするためのヘッダーファイルを
用意し、#pragma comment(lib,〜)とライブラリに使われている全てヘッダーファイルをインクルードしています。
(ヘッダーの先頭に#pragma onceもつけてあります。)

他プロジェクトから使用するときには、ライブラリで用意したヘッダーファイルをインクルードしています。

今回の場合、A.libで作ったクラス(又は関数)をB.libでもC.libでも使っています。

#pragma onceを使っている以上、同じヘッダーファイルを何度インクルードしても、同じ定義が2重定義になるはずが
ないのですが...。
リンカーは直接(.obj)ファイルを参照しているため、「2重定義」と警告を出しているみたいです。

MSDNで書かれている対処方法も一通り試しています。
(MSDNの記述と状況を判断する限り、深刻な問題でもないようなので、気分の問題なのかもしれません。)

コンパイル警告なら#pragma warning(disable:〜)で警告を無視できるのに、リンク警告は警告を無視する方法すら判らないのです。

もちろん、警告を無視するのでなく、警告をなくすほうがベターなのですが。
>922
チミはpragma onceの効能も、libの意味合いも判っていないものと思われる。
・libはdllと違い、所詮はobjが集まっただけのようなものである。
・pragma onceが有効なのは、1翻訳単位である。
よって、複数の翻訳単位の間では、当然定義は多重になりうる。
翻訳って古い言葉だよね。
わかりにくいから使うのはやめてほしい。
知識人ぶってるだけ。
>>924
( ´,_ゝ`)フーン

>>922
どこかで同名の実体が複数作られてるはずだ。絶対。

ヘッダー内に書いていいのは一般的に、型や関数の宣言 (プロトタイプ)
か、inline 化できる定義だけなんだけど、それ以外のもの書いてないよな?

#pragma once は、同じファイルに対して同じヘッダーを 2 回以上読み込む
のを抑止するだけで、書いてある内容を 2 回以上コンパイルさせない機能
ではない。
926デフォルトの名無しさん:02/11/01 19:06
>923,925
回答レスありがとうございます。

確かに#pragma onceは1個のオブジェクトファイル作った時点で
無効になってしまいますね。

>>923
「スタティックリンクライブラリがオブジェクトファイルの集まり」
ということを忘れてました。

>>925
■A.libを参照しているB.libを作った時点で、A.libとB.libの両方に
同名の実体が出来て、A.libをC.libで使ったもんだから警告になった
のでしょうね。(エラー内容を見ると、そんな感じですので)
■確認してみたところ、ヘッダーファイルに指摘されたようなメンバー
関数・関数宣言をしているところは無いですね。
PS)インライン化している関数はなぜか警告が出ないんですよね。

現状と回答の結果を考慮すると、今のままでも問題ないかなぁ〜。
927デフォルトの名無しさん:02/11/01 19:13
*

この演算子ってなんて読むの?
>>927
スレ違い。
こめ
>>919
そだよー。って最初に言ったじゃんw
中身は単なるテキストだからメモ帳なりでエディットしる。
931デフォルトの名無しさん:02/11/01 22:20
コールバック関数のRasDialFunc1()で、メンバ変数/関数を参照する方法はあるのでしょうか?
RasDialFunc1()はstaticで宣言してます。
>>931
何のメンバか知らないけど、RasDialFunc1() を friend にして、アクセスしたい
インスタンスの参照かポインタをグローバルに置けばいいんじゃない?
RasDialFunc1() の定義をいじれないなら、代理のラップ関数でも。
933デフォルトの名無しさん:02/11/02 15:45
VC6で
#define TBL_SIZE 100
と定義したコードを書いていて、
数学関数が必要になったので、
#include <math.h>
と付け加えたら「TBL_SIZEが再定義されています」
と警告が出るようになった。
math.hを検索してもTBL_SIZEなんて無いし、ヘルプで
見てもTBL_SIZEなんてないし、なんでだろう?

#include <math.h>
の行を消したら警告が出なくなるので、
これが原因であることは間違いないと思う。
>>933
以下コードで再現せず。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define TBL_SIZE 100
int main()
{
char buf[TBL_SIZE];
fgets(buf, sizeof(buf), stdin);
printf("%f\n", sin(atof(buf)));
getchar();
return 0;
}

あなたがおかしいと思っているところ以外の場所に問題があると思われ。
935デフォルトの名無しさん:02/11/02 16:08
>>934
リビルドしたら出なくなりました。
おさわがせしました。
936デフォルトの名無しさん:02/11/03 20:23
ActiveXコントロールと普通のコントロールの違いを教えてください。
例えば、ActiveXコントロールのListViewというのはSysListView32に比べて
どういう利点や欠点があるのですか?
937デフォルトの名無しさん:02/11/04 02:05
VC++.NETなんですが、
C++用のドキュメント自動生成 ツール付いてないのでしょうか?
(c#はあったと思ったんですけど)
VC++勉強しはじめたけど、慣れるのが大変。
おまいらよくこんなもん使えるな。頭が痛くなってくる。
>>938
バファリンないしタイレノールが足りないだけです。
940デフォルトの名無しさん:02/11/06 11:22
>>937
VC.netの単体製品は判らないけどVS.netではVCに限り、機能限定ながらC#と同じ
ドキュメント自動生成ツール『XMLドキュメント』が使えるよ。
C#のようにコメント作成の補助はなく、全て手動で記述しないと駄目だけど...。
[ツール]-[Webページのビルドコメント]で実行。
.hファイル内で、コメントをつけるといいみたい。

// <summary>ベースクラス</summary>
// <remarks>ベースクラスの解説</remarks>
class CBase {};

// <summary>派生クラス</summary>
// <remarks>派生クラスの解説</remarks>
class CDerive : CBase {
// <summary>メソッド1</summary>
// <param name="arg">引数1</param>
// <returns>戻り値</returns>
// <remarks>メソッドの説明</remarks>
int Func(int arg);
};
941デフォルトの名無しさん:02/11/06 12:29
>>936
正確ではないけど、こんな感じかな?
☆通常コントロール
    Windowsが用意したGUI部品。
    種類が少ない。(グリッドコントロール等は無い。)
☆ActiveXコントロール
    標準コントロールを使いやすくしたもの。それ以外のものも多数ある。
    種類が豊富。
    メーカーが提供する独自ActiveXコントロールなどもある。
    言語非依存。(COMに準拠してる言語。VB,VC等)
    MSDNヘルプで日本語のヘルプがついている可能性が高い。
     (VBでの使い方だが、基本的な使い方はVCも一緒)
    レジストリに登録されていないと使えない。
     (Win95,WinNTだと、標準でインストールされているActiveXは少なく
     自分でインストールしなくてはいけない場合が多々ある)
    通常コントロールより重たい。
    通常コントロールで出来て、ActiveXだと出来ない処理があるときがある。
ListViewとSysListView32は比べたことはないので、自分で調べてください。
ActiveXになっている場合、大体は標準コントロールより使いやすいはずです。
>>941
> 言語非依存。(COMに準拠してる言語。VB,VC等)
「COM に準拠」 を 「非依存」 と呼んでいいかは疑問。

> MSDNヘルプで日本語のヘルプがついている可能性が高い。
具体的に何のコントロールを指してる?
それは ActiveX に対して一概に通用する?

> 通常コントロールで出来て、ActiveXだと出来ない処理があるときがある。
これって何の処理?
943デフォルトの名無しさん:02/11/06 13:52
一回コピーしてから,visual c++にテキスト文書のプログラムを貼り付けると,
インテンドが、そろってしまってみにくくなるのですが,元のインテンドにするにはどうしたらいいですか?
>>943
> 一回コピーしてから,visual c++にテキスト文書のプログラムを貼り付けると
意味曖昧。
>>943
Cygwinでも入れてidentでもかければ?
オプション細かく設定しないとなかなかお望みの結果にはならんだろうけど。
946デフォルトの名無しさん:02/11/06 18:30
>>942
こまかいツッコミですね。
前もって「正確ではないけど」と書いておいたんだけど...

>言語非依存〜
ピュアJava以外でWindowsでGUI開発できるメジャーな開発ツールなら、ほぼ大丈夫だと
思って非依存と書いたけど、まぁJavaの例もあるし正確にはCOM準拠なんで書き足して
おいた。はじめから「COM準拠の言語」なんて書くと難しく感じるんで。

>MSDN〜
ListBox等のコモンコントロールやシェル系のコントロールのヘルプ。
VB6のヘルプと、VCでAPIのCreateWindowで作成する場合に調べるヘルプと比べてみて。
CreateWindowからリンクでたどってみると日本語のヘルプなんて全然無いから。
あとActiveXだからといって日本語で書かれているというわけではない。
古くからあり、よく使われそうなActiveXは日本語化されていることが多いってこと。

>通常コントロールで〜
標準コントロールをラッピングしたActiveXは、全ての操作が公開されているとは
限らないってこと。SysInfoというActiveXは、システム情報を簡単に取得できるけど、
ほんとに欲しい情報はAPIから直接入手する場合が多い。
947942:02/11/06 19:00
>>946
コモンコントロールのラッパーの事言ってたわけね。
了解。納得した。

でも、ActiveX はコモンコントロールのラップの為にあるわけじゃない。
なのに、いきなり SysListView32 をラッパーと決め付けて、コモンコントロール
との対比をするのはどうかと思うよ。
コモンコントロールとそのラッパーの対比だと、明記してるならともかくね。

あの説明だと ActiveX について誤解を招くよ。
少なくとも漏れは誤解した。
948デフォルトの名無しさん:02/11/07 05:26
MSDNを2002年1月以降のやつにアップデートしたら
VCでF1検索出来なくなりましたがそういうもんなんですか?
>>948
2002/01 版が無いから何とも言えないけど、ツールのオプションのヘルプシステムは
どうなってる?
関係ないかもしんないけど
2002年1月以降のMSDNには
.Net 専用と書いてあったような気が。。。
VC6は2001年10月版までだよ。
2002年1月は.NET。書いてある。
話しそれるけど
2001年10月版はリンク切れが激しくない?
俺は2001年4月版を使ってる。
953948:02/11/08 00:56
ありがとうございました。
おとなしく2001年版使っときます。
俺のマシンに入ってるのは
>November 2001 Edition
だな…
それはSDKじゃないかと…
あ、MSDNってSDKとは別にアップデートできる物なのか。
いつもSDKごと入れ替えてたから知らんかった…
有料だがな
958デフォルトの名無しさん:02/11/09 15:38
次期VS.NETについて
http://www.zdnet.co.jp/news/0211/09/nebt_08.html

>C++コンパイラは、ISOが6年前に設定した標準に初めて大部分準拠する。
>MicrosoftはC++コンパイラについて同標準に90%準拠済みだとしていたが、
>新版では98%近い準拠になる。
次スレの季節。
漏れには立てられない。

次こそはスレタイ 「Visual C++ 相談室」 にしてくれよ。
つーかここって必要とされてるのかな。
初心者用VCスレもあるしWin32APIスレもあるしMFCスレもあるしATLスレもあるし
>>959
新スレ

VisualC++ 相談室【9】
http://pc3.2ch.net/test/read.cgi/tech/1036897197/l50
962小人:02/11/10 22:34
ダレモイナイ…
963小人:02/11/10 22:35
1000getスルナライマノウチ…
964小人:02/11/10 22:35
ランタンタン♪
965小人:02/11/10 22:35
ランタンタンタン♪
966小人:02/11/10 22:36
|д゚)……………
967小人:02/11/10 22:37
2重カキコモ ナンノソノ
968小人:02/11/10 22:37
ランタンタンタン♪ ランタンタンタン♪
969小人:02/11/10 22:38
ランタンタン♪ ランタンタン♪
970小人:02/11/10 22:38
今だ!970番ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
                  ∧∧       (´⌒(´
            ⊂(゚Д゚ )≡≡≡(´⌒;;;≡≡≡
        ⊆⊂´ ̄ ⊂ソ  (´⌒(´⌒;;
           ̄ ̄ ̄   ズザーーーーーッ
971小人:02/11/10 22:39
。。。
972小人:02/11/10 22:40
ランタンタンタン♪
973小人:02/11/10 22:40
マダマダサキハトオイ…
974小人:02/11/10 22:41
フー…
975小人:02/11/10 22:41
|д゚)……………
976小人:02/11/10 22:42
ランタンタン♪ランタンタンタンタン♪
977小人:02/11/10 22:43
ランタンタンタンタンタン♪ ランタンタンタン♪
978小人:02/11/10 22:43
(;´Д`)……………
979小人:02/11/10 22:44
ランタンタンタンタン♪ ランタンタンタンタン♪

  ランタンタンタンタン♪  ランタンタンタンタン♪
980小人:02/11/10 22:46
今だ!980番ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
                  ∧∧       (´⌒(´
            ⊂(゚Д゚ )≡≡≡(´⌒;;;≡≡≡
        ⊆⊂´ ̄ ⊂ソ  (´⌒(´⌒;;
           ̄ ̄ ̄   ズザーーーーーッ
981小人:02/11/10 23:00
|д゚)
982小人:02/11/10 23:00
ランタンタンタン♪

  ランタンタンタン♪
983小人:02/11/11 00:11
ランタンタン♪
984小人:02/11/11 00:11
ランタンタンタンタン♪
985小人:02/11/11 00:58
ランタンタン♪
986小人:02/11/11 00:59
ランタンタン♪ ランタンタンタンタン♪
987小人:02/11/11 00:59
|д゚)…
988小人:02/11/11 00:59
ランタンタン♪ランタンタンタン♪
989小人:02/11/11 01:03
モウスコシ…
990小人:02/11/11 01:03
今だ!990番ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
                  ∧∧       (´⌒(´
            ⊂(゚Д゚ )≡≡≡(´⌒;;;≡≡≡
        ⊆⊂´ ̄ ⊂ソ  (´⌒(´⌒;;
           ̄ ̄ ̄   ズザーーーーーッ
991小人:02/11/11 01:03
991
992小人:02/11/11 01:05
ランタンタンタン♪
993小人:02/11/11 01:05
ランタンタンタンタンタンタン♪
994小人:02/11/11 01:05
994ゲットズザー。
995小人:02/11/11 01:06
・・・
996小人:02/11/11 01:06
|д゚) sage
997小人:02/11/11 01:06
997.
998小人:02/11/11 01:07
|ー゚)…
999小人:02/11/11 01:07
....
1000小人:02/11/11 01:07
               ┌┐                                ●●●
    人          ││                              ●\  ●\
   ノ二\  ナ ゝゝ   V                 ●●●        ●\     ●\
     /   / 乙 つ  O               ●\   ●\      ●\       ●\
                  ●●●        ●\     ●\    ●\       ●\
                 ●\   ●\      ●\      ●\    ●\        ●\
       ●●\     ●\     ●\    ●\       ●\   ●\        ●\
        ●\    ●\      ●\    ●\       ●\    ●\       ●\
        ●\    ●\      ●\    ●\      ●\    ●\     ●\
       ●\    ●\       ●\    ●\      ●\      ●\    ●\
       ●\    ●\      ●\    ●\     ●\        ●●● \
      ●\     ●\      ●\      ●\   ●\           \\
      ●\     ●\     ●\        ●●● \
     ●\      ●\   ●\           \\\
     ●\        ●●● \                              ┌┐ ┌┐
    ●\          \\\      ┣━┳┃┃      ┃          ││ ││
   ●●●\                      ┃   ┃┃┃ ┣┓ ━╋ ━╋  V   V
   \\\\                     ┛     ━┛ ┃   ┏┫ ┏┫  O  O
                     (´´
     /■\    )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。