5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

VisualC 相談室【8】

1 :いさましいおsageの女の子:02/05/27 20:30
VisualC++関連の話題を扱うスレッドです。

前スレ
http://pc.2ch.net/test/read.cgi/tech/1017843192/l50

2 :デフォルトの名無しさん:02/05/27 20:31
萌えない

3 :デフォルトの名無しさん:02/05/27 20:38
     ____
    /∵∴∵∴\
   /∵∴∵∴∵∴\
  /∵∴∴,(・)(・)∴|
  |∵∵/   ○ \|
  |∵ /  三 | 三 |  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |∵ |   __|__  | <  >>1 Visual C って何
   \|   \_/ /  \_________________
     \____/
   ______.ノ       (⌒)
  //::::::::|-、 ,-/::::::ノ ~.レ-r┐
/ /:::::::::::|  /:::::ノ__ | .| ト、
| /:::::::::::::::| 〈 ̄   `-Lλ_レ′
レ::::::::::::::::::|/::: ̄`ー‐---‐′


4 :デフォルトの名無しさん:02/05/27 20:39
関連スレ
C Builder相談室 Part3
http://pc.2ch.net/test/read.cgi/tech/1016065855/

5 :デフォルトの名無しさん:02/05/27 21:21
VC++スーパービギナー編買え

6 :デフォルトの名無しさん:02/05/27 21:48
>>5
そんなもの買うな!
俺がおまえらのためにVC++の本を執筆してやる!

7 :デフォルトの名無しさん:02/05/27 21:58
「小学生に1から教える Visual C++.NET」児童教育シリーズ
熊谷 紳助 (著) 翔泳社 ISBN: 4156215470

8 :デフォルトの名無しさん:02/05/27 22:04
そんな本があるのか、鬱だ

9 :デフォルトの名無しさん:02/05/27 22:07
>>7
おまえは無い。あっても言うな。

10 :デフォルトの名無しさん:02/05/27 22:12
>>7
紀伊国屋で見かけたが、分厚いハードカバーだぞ。
読むのも大変だが、小学生じゃ持つだけでも大変だ。

11 :デフォルトの名無しさん:02/05/27 22:15
>>8以外信じないってば。

12 :デフォルトの名無しさん:02/05/27 22:16
>>10
マジメに小学生までプログラミング人工が広がっていくことが鬱でしょうがない

13 :デフォルトの名無しさん:02/05/27 22:22
割れ小学生は、実際使ってる。

14 :デフォルトの名無しさん:02/05/27 22:30
数年後には義務教育にCプログラミングが導入

15 :デフォルトの名無しさん:02/05/27 22:34
そりゃー、ない。

16 :うんこまんこ:02/05/27 22:58
C言語でゲームを作ろうと思うんだけど
ウィンドウに線を引いたり色を塗ったりする方法がわかりません。
どうしたらいい?

17 :デフォルトの名無しさん:02/05/27 23:00
c言語だけじゃ出来ません

18 :うんこまんこ:02/05/27 23:01
VCで出来ないの?

19 :デフォルトの名無しさん:02/05/27 23:07
>>16
LineTo

20 :うんこまんこ:02/05/27 23:33
>>19
ヘッダーは?

21 :デフォルトの名無しさん:02/05/27 23:42
windows.h

22 :うんこまんこ:02/05/27 23:45
>>21
どうもありがとう

23 :うんこまんこ:02/05/27 23:50
USBに繋いだコントローラを使ってゲームを作りたいんだけど
どうしたらいい?

24 :デフォルトの名無しさん:02/05/27 23:53
>>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使っちゃダメそうだな。自分で作れと。

29 :デフォルトの名無しさん:02/05/28 03:16
意味不明

30 :仕様書無しさん (O_O)/:02/05/28 06:48
そうやって、
やる気のある人と、やる気の無い人を一緒くたにするのは素人の証拠。
何ひとつ作り出せない人は、憎しみだけを作り出し、
憎しみしか作り出せない人間は、他人の生産性までをもとことん下げる。
やる気がある人間はその限りではない。

31 :デフォルトの名無しさん:02/05/28 06:55
HSPスレかと思ったYO!

32 :デフォルトの名無しさん:02/05/28 07:04
Visual C相談室になってから一気にレヴェルが下がっていませんか?

33 :仕様書無しさん (O_O)V:02/05/28 07:08
>>28
ListViewです。>FileDialog
LPITEMIDLIST取れます。>FileDialog
牡丹桜花イベントあるはず。>FileDialog

34 :Operaテスト:02/05/28 07:08
自分の生産性が低いのを人のせいにしたがってる人がいますね(・_・)

35 :Operaテ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検索しても英語しか出てこないもので。
それとも、設定が変で出てこないだけでしょうか?

40 :デフォルトの名無しさん:02/05/29 23:02
MSDNのトピックの設定が日に日に可笑しくなっていき、現在では全て同じになって
しまいましたが、どうすりゃ良いんでしょう?これ。

41 :デフォルトの名無しさん:02/05/29 23:07
ドラッグアンドドロプしたいのです。
それでコントロールのプロパティでドラッグアンドドロップを許可したのに、クラスウィザードのメッセージ一覧に出てくれないのです。
どうやるですか?

42 :デフォルトの名無しさん:02/05/29 23:19
>>41 クラス情報タブのメッセージフィルタを「ウインドウ」に設定。

43 :デフォルトの名無しさん:02/05/30 00:02
>>40
次のMSDNを待って、届いたらインストールしなさい。


44 :41:02/05/30 11:15
メッセージフィルタを「ウィンドウ」に設定したくても、
灰色になってて設定できませんでした。
厨房向けのソフトでむりやり変更したら、VC++が落ちました。痛いです。
ダイアログアプリだからダメなのでしょうか?

45 :デフォルトの名無しさん:02/05/30 11:24
>>44
あきらめて自力で

46 :デフォルトの名無しさん:02/05/30 12:30
>>40
ああ、設定が狂ってくるという意味ね。
楽しそうで良いではないかと思ったよ。

47 :デフォルトの名無しさん:02/05/30 13:06
ツールバーに大きめのテキストボックス埋め込みたいんですが、どうすればいいですか?

48 :デフォルトの名無しさん:02/05/30 13:19
======2==C==H======================================================

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

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

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

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

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

んじゃ!

49 :デフォルトの名無しさん:02/05/30 18:52
VC++ でコンパイルするときに、
MFCを使用すると、
(プリコンパイルヘッダを使用すると?
 よくわからないけど。)

#include "stdafx.h"

までの全ソースコードを無視するらしいのですが、
どうしてでしょうか?
移植を行うときなどにとても不便ではないかと思うのですが……。

50 :デフォルトの名無しさん:02/05/30 20:03
>>49
#include "stdafx.h"
を先頭に置けばいいやん

51 :49:02/05/30 22:22
>>50

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

と思ったわけですが、どうでしょう……。

52 :デフォルトの名無しさん:02/05/30 22:46
>51
別の環境で書いたものを使う時には、プリコンパイルヘッダを使わないようにする。
別の環境に持っていく時は、空のstdafx.hでも作っとけ。

53 : :02/05/31 16:49
VCに直接関係ないのですが、
VCを入れたら、IEなどでエラーが発生した場合、
デバックが始まってしまうのですが、これを行わないようにするにはどうしたらよいのでしょうか?

54 :デフォルトの名無しさん:02/05/31 16:55
>>53 ツール→オプション→デバッグ→ジャストインタイムデバッグ

55 : :02/05/31 16:55
>54
サンキュー!!!

しかし、チェック外したけど駄目でした・・・。ふぅー。

56 :デフォルトの名無しさん:02/05/31 18:32
デバッグして、サイト運営者に報告してやれば、そのうち
でなくなるぞ。

57 :デフォルトの名無しさん:02/06/01 00:47
>>51
PCHを使わなければいいだけでは…?

58 :デフォルトの名無しさん:02/06/01 01:00
>>53
IEのインターネットオプション>詳細設定>スクリプトのデバッグがどうたら

59 :デフォルトの名無しさん:02/06/01 08:22
他スレ(MFCの方)でちょっと関連する話が出てたのですが、スレ違いみたい
なんでこっちで質問します。

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


60 :デフォルトの名無しさん:02/06/01 10:34
扱い(VC6)
プロジェクト→設定→C/C++→使用するランタイムライブラリ
で選択できる。

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

kernel32.dllは必ず使うことになるから、OSが提供するDLLを含めるかどうかでその
答えは変わる。mfcのdllやmsvcrtのdllはOS提供ではないと言っていいと思う。


61 :59: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のクラスライブラリに似ているのがいいのですが。


64 :デフォルトの名無しさん:02/06/02 01:59
MFCしか・・・

65 :デフォルトの名無しさん:02/06/02 02:08
Managed C++にすれば?
APIを知らずに書けるツールキットでマトモなのは
QTやGtkとかあるけど、全然Javaっぽくないし。

66 :デフォルトの名無しさん:02/06/02 02:10
俺はMFCから入ったけど初めのうちはWin32APIの知識って無くても
できるんじゃ・・・

67 :デフォルトの名無しさん:02/06/02 02:23
>>66
メソッドなどがほぼそのままAPIをラップしただけなので
MFCの知識≒APIの知識となる

68 :デフォルトの名無しさん:02/06/02 02:31
>>67
いや、だからWin32API自体使ったこと無くても
MFCメンバ関数使えばできるだろうと。
というか>>63はWin32APIやMFCというよりWindowsプログラミングが
わからないんじゃ?
Win32APIやMFCはリファレンス読めば使えるわけだから。


69 :63:02/06/02 03:10
たくさんのレスありがとうございます。
UNIXでCの通信系プログラムを経験した後、Javaにうつったので
Windowsプログラミングの経験はまったくありません。
やっぱり覚悟を決めてWindowsプログラミングの基礎から勉強するしかなさそうですね。

しかしMFCってすごく使いにくいように思うんですけど、慣れると使いやすいんですかね。

70 :デフォルトの名無しさん:02/06/02 04:11
お仕着せのはお気楽にできるが、
色々こったものを作ろうとすると、MFCの枠からはみ出た
コードを書かなければいけなくなる。


71 :デフォルトの名無しさん:02/06/02 10:05
IDC_RADIO1というIDでラジオボックスを作っているのですが、
これを操作するためには例えば
RADIOBOXというクラスで
RADIOBOX radiobox1,radiobox2
としたradiobox1というものが必要だと思うのですが、これがソースのどこを捜しても見当たらないのです。
ラジオボックスの操作方法等でアドバイスください。

72 :63:02/06/02 10:30
Class Wizardでメンバ変数タグをクリックして変数の追加じゃだめですか?

俺もここらへんでずいぶん悩みました。へたにリソースエデイタで
コントロール追加するよりコードで追加したほうが早そうなきがするんですが
皆さんはどうされてますか?

73 :デフォルトの名無しさん:02/06/02 10:49
VC++で何を作ればいいですか?

74 :デフォルトの名無しさん:02/06/02 10:52
作りたいものがありません。
プログラムがしたいのです

75 :デフォルトの名無しさん:02/06/02 10:55
>>74
自分で作るものぐらい自分で考えれや……
しかたない、とりあえず練習問題がある入門書を買って
練習問題解きまくれ。

76 :49:02/06/02 12:18
>>52 >>57
対処法はわかるのですが、なんでこのような仕様にしたのかなーと思いまして。何か深い理由があるのかと。
とはいえ、アドバイスありがとうございました。

77 :デフォルトの名無しさん:02/06/02 12:48
>>72
ラジオボタンだと先頭の1個しか変数作らせてくれないという罠
(だから2個目以降は手作業でコピペ)。

ちなみにわざわざ変数を作らなくても、IDを使って
GetDlgItem(IDC_RADIOBUTTON1)->ほげほげ
とかで何とかなる。


78 :デフォルトの名無しさん:02/06/02 12:55
>何か深い理由があるのかと。
それ以前に取り込んだヘッダの仕様が変わって、
#defineされた定数値が変更になったりすると矛盾が生じるから

79 :デフォルトの名無しさん:02/06/02 13:42
VS.NET での話なのですがWM_TIMERとかのメッセージ処理をGUI的(ClassWizard的)に
管理するにはどうしたらよいのでしょう?
いまは良く分からんのでMESSAGE_MAPに直書き・・・

80 :デフォルトの名無しさん:02/06/02 14:07
Visual C++でデータベースアプリを作るとしたら何を使うのが一般的でしょうか?
やっぱりADO?参考になる資料が見つからなくて困ってます。

81 :デフォルトの名無しさん:02/06/02 14:25
80
*.mdb+ADOのときはATLオブジェクトウィザード(データアクセス)で生成させた
コードをそのまま書き換えて使えると思います。
(DAOの方が速いらしいのでまだ使ってますが。)

82 :デフォルトの名無しさん:02/06/03 00:14
変更できるサイズがあらかじめ決まっている
ダイアログとかツールバーってありますよね。
VCのドッキングウィンドウとか。
あれはいったいどうやって作っているんでしょうか。

83 :デフォルトの名無しさん:02/06/03 00:43
ツールバーの状態(ドッキング位置など)をファイルに保存するには
どうすれば良いのでしょうか。


84 :デフォルトの名無しさん:02/06/03 01:41
>>83
GetWindowRect
WritePrivatePrifileString
or WriteFile

85 :デフォルトの名無しさん:02/06/03 11:40
>>84
それだと復元時に親ウィンドウが移動してるとツールバーの位置がずれませんか。
あとツールバーのフローティング状態、表示/非表示の状態も
保存しなければならないと思うのですが。


86 :83:02/06/03 13:01
CControlBarのメンバ関数を使う。
座標はクライアント座標になっていると思うので、大丈夫と思う。

87 :デフォルトの名無しさん:02/06/03 13:22
>>84,86の方法はツールバーごとにAPIまたはメンバ関数を呼び出す
ものですが、CFrameWnd::SaveBarStateのように
一度呼び出しただけでウィンドウに使われている複数のツールバーを
取得するにはどうすればよいのでしょうか?


88 :デフォルトの名無しさん:02/06/03 13:58
CFrameWnd::SaveBarStateを使う

89 :デフォルトの名無しさん:02/06/03 14:00
任意のファイルに保存したいってゆってるべや

90 :デフォルトの名無しさん:02/06/03 14:11
>>86
GetWindowRectはスクリーン座標だよ

91 :デフォルトの名無しさん:02/06/03 14:48
ヴァカばっか。

>>82
WM_GETMINMAXINFO

92 :62:02/06/03 18:40
ATL COM コンポーネントのイベント取得についておうかがいをたてたもの
ですが、方法がわかりました。
ありがとうございました。

93 :83:02/06/03 18:43
GetWindowRectで座標を保存し、DockControlBarにその座標を与えてドッキングを
復元しようとすると、例えば以下のように2つのツールバーが二段になってるとき、

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

バー1→バー2の順で保存すると、バー1→バー2の順で復元したときに
二段に復元されません。
なぜなら、バー1を復元しようとしたときにはまだバー2が存在していないため、
バー1は一段目へドッキングされてしまうからです。

94 :デフォルトの名無しさん:02/06/03 19:09
>>83 CDockState っていうのはどうよ?

95 :デフォルトの名無しさん:02/06/03 22:58
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が、クラス内のバッファをアクセスするための
方法について、教えて頂けると嬉しいです。


97 :デフォルトの名無しさん:02/06/04 11:40
CStringのソース見れば?

98 :デフォルトの名無しさん:02/06/04 11:47
printf系は可変長引数(引数に型無)だから、キャストを明示しないと(const xxx *)に
変換されない。

蛇足
sprintf()はASCII or MBCSだから(TCHAR *)でなく(char *)
UNICODEを使うときはswprintf()
TCHARのときは_stprintf();


99 :83:02/06/04 11:48
CDockStateのm_arrBarInfo内にコントロールバーの情報が入ってて、
この配列のサイズ及びインデックスがバーの数及びドッキングの順番になると思い
ツールバーが2つドッキングされたウィンドウでm_arrBarInfo.GetSizeを
実行してみるとサイズが7。
あとの5つは何バーなんだ(;´Д`)

100 :デフォルトの名無しさん:02/06/04 11:51
ツールバー2個+ステータスバーの分で計3。しかしまだ4つも謎のバーが。

101 :96:02/06/04 12:00
>97
 元々、殆どCStringと変わらない仕様でしたので、
CStringを参考にしながら作っていました。
ただ、非MFCなので、それ自体の派生に出来ませんでしたが。

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

 printfの引数が形無しなのが根元にあることは分かっているのですが、
その形無し引数に対して、クラスの実態を書いた場合、
クラスのデータメンバの始めが送られたりするのかな・・と邪推しています。

102 :デフォルトの名無しさん:02/06/04 12:02
任意のファイルに保存したいなら一時的にCWinAppの
m_pszProfileName<−名前違うかも
を書き換えちゃえば? たしかこれを見てるんだよね。

103 :デフォルトの名無しさん:02/06/04 12:12
101
文字列クラス stringClassObject("hogehoge");
に対して
sprintf(buff, "%s", (const char *)stringClassObject );
と書くのは仕方の無いことと思われ。

MFCが使えないの環境ならSTLのstringクラスを使うべきでは?車輪の再発明すぎ。
実習か何かで文字列クラスを作っているなら別だが・・・。

104 :デフォルトの名無しさん:02/06/04 12:16
>>101
CStringのソースと見比べれば、何でCStringで出来て、自作のクラスで出来ないかわかるはず。
可変長の引数渡しの仕組み知ってればの話だけど。

105 :96:02/06/04 12:21
>103
単に文字列を扱うだけだと、stringにしたのですが、
CStringやstringに無いメソッドを色々追加しなければならなかったので、
勉強も兼ねて自作していた次第です。

 その後、sprintfの引数を取っている所で止めてみたのですが、
やはり入力クラスそのもののアドレスが行っている感じがする事と、
CStringのデータメンバは文字列ポインタ1つだけだという事と、
自作クラスの方は、現時点で3個のデータメンバを持つ事まで確認出来ましたので、
その情報から、CStringが如何にして、
printfに直渡しをしているのか?というのを知れればと思います。

106 :96:02/06/04 12:24
>>104
 随分長くアセンブラ屋だったので、
C(C++)に関しては素人です。

107 :デフォルトの名無しさん:02/06/04 12:41
勉強を兼ねてエディタを作ってるんですが、
無限アンドゥってどうやって実装するんですか?


108 :デフォルトの名無しさん:02/06/04 12:45
>>107
リスト構造で操作を記録

109 :96: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の問題は、多分これで正しくでるようにはなりますが、
何も分からない状態でやった為に、技術的後ろ盾が無く、
単に"超危険なコード"と化しているように思います。(^^;

110 :83:02/06/04 15:54
えー、一人でごちゃごちゃやってますが…
新しく作ったCDockState派生クラスに、CDockStateと
その中で使われてるプライベートクラスCControlBarInfoの
ソースを参考にiniファイル読み書き用
メンバ関数を追加することで一応できました。
読み書きはPrivateProfile系APIでやってるので、これを
レジストリAPIに変えたレジストリ読み書き用関数も用意すれば
バーの状態の保存先をファイル/レジストリに切り替えられるクラスが
できてなかなか満足です。
いろいろレスくれたおまえらにありがとうと言いたい。
小一時間言い続けたい。

111 :sage:02/06/04 16:04
VC++で使えるJTableみたいなものはありませんか?

112 :デフォルトの名無しさん:02/06/04 16:06


113 :デフォルトの名無しさん:02/06/04 17:20
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の初期価値はいくらになるの?

117 :デフォルトの名無しさん:02/06/05 10:35
>>116
なんでそういう疑問をもったか、そのあたりの説明をききたい。

118 :116:02/06/05 10:40
>>117
cのコードの移植してるから。

なんかどうも多重ループになるっぽいんだけど。
cじゃあこういう書き方普通なの?訳分からん。

119 :116:02/06/05 10:53
んー、なんかi=0と一緒の結果になるみたいだなあ。
i=0と等価なのかな?違うのかな?等価ならなんで
こんな書きかたしてるんだろ。意味あるのかなあ。

120 :116:02/06/05 10:57
分かった!
i=0;
a=0;
b=0;
と同じ意味なのか!

違ってたら突っ込みキボン。

121 :デフォルトの名無しさん:02/06/05 11:01
i = a = b = 0 → i = (a = ( b = 0))と等価

122 :デフォルトの名無しさん:02/06/05 11:08
すいませ〜ん。
MFC使ってリストビューにファイルをドラッグ&ドロップしたいのですが
わかりません。方法教をえてください。または、それについて書いてあるHP等教えてください。

123 :デフォルトの名無しさん:02/06/05 11:21
http://216.242.20.51/wi/pa/

124 :ゆう ◆7WEVo9uA :02/06/06 01:11
>>122
俺も前めちゃ困った。
おれはCListCtrlを派生して
OnDropFilesにコードを実装してる。
間違ってたら修正求む。

125 :デフォルトの名無しさん:02/06/06 01:38
俺は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++;

127 :126:02/06/07 08:14
すいません、解決しました。
お騒がせしました。

128 :デフォルトの名無しさん:02/06/09 22:01
飛ばされました。
VC++でプログラミングしているのですが、
ActiveXを登録・削除する方法がまったくわかりません。
わかる方はおられますでしょうか?


129 :デフォルトの名無しさん:02/06/09 22:06
regsvr32 xxx.dll
regsvr32 /u xxx.dll

130 :デフォルトの名無しさん:02/06/09 22:15
いえ、ocxのほうです。
それから、プログラム上で登録したいのですが…。

131 :デフォルトの名無しさん:02/06/09 22:18
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って感じで与えないとダメなんでしょうか?
元々定数で用意されてますか?


136 :デフォルトの名無しさん:02/06/10 02:43
float t05(int n)
{}
に直すヨロシ

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

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

いくらなんでもこぴぺだけで動くと思わないほうがいいとおもう


137 :デフォルトの名無しさん:02/06/10 02:46
>>136
ありがとうございます。。
とりあえずやってみます。

138 :デフォルトの名無しさん:02/06/10 02:50
>>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
じゃ、自前で定義しておきます。
ありがとうございました。


141 :139:02/06/10 03:25
netで少し調べて、なんとか、コンパイル通るところまでは いけました。
ありがとうございました!!♪

142 :デフォルトの名無しさん:02/06/10 21:02
どうしても詰まっていた事があったので、お伺いしたいのですが。

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

親ウインドウ内にダイアログを完全に閉じ込める方法はないでしょうか。


143 :デフォルトの名無しさん:02/06/10 21:10
何でそんなことをしたいのか理由を書いてみ?

144 :デフォルトの名無しさん:02/06/10 21:18
VC++のエディタで::や.や->を使ったときに出るメンバの表示が
できなくなっちゃったんですがどうすれば直りますでしょうか?


145 :デフォルトの名無しさん:02/06/10 21:57
>>144
VCを終了させてから、プロジェクト内の 拡張子ncb のファイルを消してみる

おれは、これでばっちり直ったけどなぁ。原因はいまだ不明。

146 :デフォルトの名無しさん:02/06/10 22:00
>>144
私の辞書には2通りの過去スレメモがある。
できた方で報告よろしく。

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

2,ワークスペースに表示されなくなったクラスのヘッダファイル(****.h)を
メモ帳か何かで開いて内容を書き替えずに保存する(つまりファイルのタイムスタンプを変える)。
すると消えたクラスが復活する。(clwファイルは消さない方がいいような気がする)

147 :146:02/06/10 22:01
おっと、レス中に145さんの書き込みが…。
あっしの方は違う気がしてきたぜ(゚∀。)アヒャヒャ スマナイ

148 :145:02/06/10 22:13
>>146 も十分試す価値あり。
どちらもやってみることをおすすめしますです。



俺のときはMFCとSDKの関数が全部出てこなくなって激しく鬱・・・。
必死に検索したらでてきたYO!

149 :144:02/06/10 22:32
ncb削除をやったところ直りました!ありがとうございました!
>>145さん,>>146さんの解決法は永久保存します!

150 :デフォルトの名無しさん:02/06/10 22:55
>>142
フォームビューにすれ
と使いもしないで言ってみるテスト。

151 :デフォルトの名無しさん:02/06/10 23:22
>>135
VC7では
#define _USE_MATH_DEFINES
#include<math.h>
やれば使える。

152 :151:02/06/10 23:23
M_PIね

153 :デフォルトの名無しさん:02/06/10 23:27
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をコンパイルしてしまいます。
昨日までは問題なくできていただけに原因が全く解らないです。
誰か解る方がいましたら教えて下さい。

155 :デフォルトの名無しさん:02/06/10 23:38
>>154
HDDに住む子人さんは、時々ソースのバグを修正したりします。

156 :154:02/06/10 23:59
>>155 子人さんというのがよく解らないのですけどどういう意味なんですか?
ただ、今は時々じゃなくて毎回手をつけていないソースもコンパイルしてしまいます。


157 :デフォルトの名無しさん:02/06/11 00:03
・間違ってリビルドを選択している
・自分でも気がつかないうちにソースを触ってしまっている

158 :154:02/06/11 00:20
>>157 実行時にはctrl+F5でしていますから
リビルドにはなっていないと思います。
実行の方も何回かやっていますけど、うまくいかないです。
ソースの方も気をつけて実行していますけど、
駄目です。
アウトプットの所ににも
”スキップ中... (関連する変更は検出されませんでした)”
とでてきますし、ソース自体には変更はないと思うのですけど。


159 :デフォルトの名無しさん:02/06/11 00:21
>>154
俺も昔そうなったことがある。
で、全ファイルのタイムスタンプを、タイムスタンプ変更ツールで、変更した
ら正常になった。なんかの拍子に、ファイルのタイムスタンプが矛盾した状態
になったのかも。

160 :154:02/06/11 00:57
直りました。皆さんありがとうございました。
>>159 ご指摘通り時間の関係でした。
パソコン本体の時間がなぜか80年になっていたので
ソースとの時間の矛盾が原因でした。
1つ勉強になりました。




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

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



162 :デフォルトの名無しさん:02/06/11 12:06
>>161
「スクロールバーのコントロール張ればいいだけじゃん」
と思ってしまうのだけど…

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

簡単な説明で構いません。
宜しくお願いします。

164 :デフォルトの名無しさん:02/06/11 15:05
あげげ!!

165 :デフォルトの名無しさん:02/06/11 15:46
>>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

あとはビルド>プロファイル。結果は実行終了後、デバッグウィンドウに出力される。

166 :163: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 が未解決です。

とエラーがでてしまうのですが。なぜ?

168 :デフォルトの名無しさん:02/06/11 19:21
winmm.lib

169 :デフォルトの名無しさん:02/06/11 19:23
プロジェクトの設定でオブジェクト/ライブラリモジュールにwinmm.libを追加。

170 :デフォルトの名無しさん:02/06/11 19:23
>>168
それがどうなのですか?
わかりません。教えてください。おながいします

171 :デフォルトの名無しさん:02/06/11 19:23
>>169
ありがとうございますた。

172 :デフォルトの名無しさん:02/06/11 19:26
被ってたが役には立ったか・・というかライブラリの追加の仕方もシランのか。

173 :デフォルトの名無しさん:02/06/11 19:32
ヽ(`Д´)ノ ウワァァァン
追加の仕方わからないよ

174 :デフォルトの名無しさん:02/06/11 19:42
BCCで作成した.exeファイルを実行するとちゃんとウインドウ表示されるのにVC++で
作成したexeファイル実行しても何も表示されないのですが。
でもCTRL+ALT+DELを押すと実行されているのです。
終了しようとすると応答なしとか言われるし。なぜですか?
ソース貼らないとダメっすか?

175 :デフォルトの名無しさん:02/06/11 19:44
おまえの書いたソースがbccに依存しまくっているだけ

176 :デフォルトの名無しさん:02/06/11 19:45
いや、他人が書いたBCCのソースだろう。絶対。

177 :デフォルトの名無しさん:02/06/11 19:46
漏れは「プログラミングWindows95」とかいう糞分厚い本に載ってるソースを書いてる
だけなのですが。しかもその本ではVC++を使用しているとか書いてあるし。

178 :デフォルトの名無しさん:02/06/11 19:48
ちなみにこれです
ttp://www.ascii.co.jp/pb/book1/shinkan/detail/1322774.html


179 :デフォルトの名無しさん:02/06/11 19:49
たぶん、写し間違い

180 :デフォルトの名無しさん:02/06/11 19:49
>>173
MSDN
リンカ オプションの設定

181 :デフォルトの名無しさん:02/06/11 19:51
95とMeではWindowsプログラミングに違いはないですよね?

182 :デフォルトの名無しさん:02/06/11 19:52
イパーイある

183 :デフォルトの名無しさん:02/06/11 19:54
ソースは載ってるけどVCの設定については詳しく書いてないからね

184 :デフォルトの名無しさん:02/06/11 19:54
>>182
Σ(゚д゚lll)エッ!?マジッスカ?
それじゃ、漏れが勉強してる本は意味ないの?

185 :デフォルトの名無しさん:02/06/11 19:56
今はそれの第五版がでとるよ。


186 :デフォルトの名無しさん:02/06/11 20:01
でもとりあえずBCCでは問題ないのにVC++でできないってことは
僕は間違えてないと思うんですけどね…
VC++のセテーイがわるいのかな?

187 :デフォルトの名無しさん:02/06/11 20:12
ソースどっかに晒せ。

#ソース晒し用に、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) ;
}


190 :デフォルトの名無しさん:02/06/11 20:24
人の話を聞かない奴がいるな

191 :デフォルトの名無しさん:02/06/11 20:25
>>186
つーか、一番疑わしいのがあんた自身。
間違えて無いというのなら、打ち込み終わった後に一切エラーでなかったか?

192 :デフォルトの名無しさん:02/06/11 20:26
あぁ、最初に載ってるプログラムだね

193 :デフォルトの名無しさん:02/06/11 20:28
ウチじゃ普通に動くが?

194 :デフォルトの名無しさん:02/06/11 20:30
>>190
すみません。でも余り長くないので。
>>191
エラーは一切出ません。


195 :デフォルトの名無しさん:02/06/11 20:32
>>189
wndclass.lpszMenuName
を設定し忘れてる
つーか構造体使うときははじめにZeroMemoryしる!

RegisterClassExもCreateWindowもGetMessageもエラーチェックしてないし。
んなもん応答無しになって当然だ。

196 :デフォルトの名無しさん:02/06/11 20:38
>>195
すみません…
僕が馬鹿ですた。
>wndclass.lpszMenuName
。を設定し忘れてる

まさにこれです。
きちんと動きました。
しかし、それ以外にも指摘していただいてますが
もう間違ってないと思います。
エラーチェックとかよく分からないのですが。

197 :デフォルトの名無しさん:02/06/11 20:40
確かあの本に
「本中ではエラーチェックは省くけど本当はちゃんとやってね」的
文章があったと思われ。

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の程度のサイズなら、オンメモリで処理しても
いいんじゃない?

201 :デフォルトの名無しさん:02/06/12 13:19
ファイルマッピング使えば?

202 :デフォルトの名無しさん:02/06/12 15:39
既出orFAQかもしれませんが、
ListViewコントロールで行全体をハイライト(選択反転)にする
方法で、オーナー描画を使う方法はMSDNに載っていますが、
それ以外にもっと簡単な方法はないのでしょうか?

どこかのstyleのオプションでできたような記憶があるのです。
VBとかVCLだと簡単にできるんだろうけどなぁ

203 :デフォルトの名無しさん:02/06/12 15:40
いいこと言った

204 :デフォルトの名無しさん:02/06/12 15:45
>>202
LVS_EX_FULLROWSELECT じゃないの?
検索で一発で出てきたよん。
http://hp.vector.co.jp/authors/VA016117/listview.html

205 :デフォルトの名無しさん:02/06/12 15:58
>>204 さんくす

いや、調べても出てこなかったんだよ。
せめてMSDNで「ListView AND 行全体」ぐらいでヒットして欲しかった。

206 :デフォルトの名無しさん:02/06/12 16:02
日本語版MSDNでも英語ページだからな<ListViewコントロール拡張スタイル

207 :199:02/06/12 20:01
>>200-201
ファイルマッピングで組み直しました。
ありがとうございました。

208 :こまった君:02/06/12 23:44
以前、スクロールバーのことで質問したものです。
スクロールの入れ方はわかったんですが、
ピクチャとの関連付けのやり方がわかりません。
スクロールバー関数によって、取得したスクロールの現在位置をピクチャに反映するんでしょうか。。。
ピクチャに描画する関数と、スクロールバーの関数が別々なのに、
そんなことできますか??

どこかに説明しているページなどありませんか??
やりたいことは、
ピクチャに画面に表示しきれないぐらいのながーいグラフを描画して、
スクロールバーによって、移動させながら後で見るということがしたいのですが、、


209 :デフォルトの名無しさん:02/06/12 23:53
>>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の部分を表示する。とか、そういったことはできないでしょうか??駄文すみません。


211 :デフォルトの名無しさん:02/06/13 06:11
そのためのCompatibleDC,そのためのBitBltダ

212 :こまった君:02/06/13 13:41
>>211
ありがとうございます。
仰ってる意味がよくわかりませんが、ちょっと調べてみます。

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

また、プログラム実行中に×をクリックして修了しようとすると、
このプログラムは応答していませんとなりますが、これで普通なんでしょうか?

213 :デフォルトの名無しさん:02/06/13 15:13
お前はホントにこまった君だな(藁
向こうが透けたようになって一向に描画されずに、というのは
お前が組んだ描画ロジックが全く機能していないからだ。
どっかからクライアント描画のちゃんとしたサンプルを探してきて勉強してくるように。

214 :こまった君:02/06/14 01:08
>>213
了解です。クライアント描画ですね。
その線でもうすこし勉強してみます。。
教えて君すまそです。
しかし、こうも右も左も分からないと、ちょっとしたヒントが非常に助かります。
では、胃ってきます。

215 :デフォルトの名無しさん:02/06/17 21:42
前から作ってみたいと思ってたのですが
一度しか見ることのできない画像を作成するソフトって
作ること可能なんでしょうか?
一度見たらレジストリあたりに記録して
二度目以降のプレビューを防いで。
そこで気になってるのはPrintScreenを
使用できないようにすることってできませんか?
これが無理ならこのソフト作ろうとすること自体が
間違いなので。。
というかもう既にそんなソフトあったりしますか?
調べてみたのですがわからなくて書き込みました。
よろしくお願いしますl。

216 :デフォルトの名無しさん:02/06/17 21:48
不可能。
絵を再現するデータが存在する限り、どこかに抜け道はある。
勿論、暗号と同じで極端に解読が難しいという物なら出来るだろうけど、
確実に1度しか見れないようにするのは不可能。

217 :デフォルトの名無しさん:02/06/17 22:03
>>216
レスありがとうございます。
そうですね、
キージェネとか存在することが証明ですね。
言い換えると、、
解読が並に難しくて且つ、
そんなにメジャーにならなくて、
公にクラックされることがなければ
ある程度目的通りの物は作ること可能ですか?
わかりにくい分ですみません。
いけますか?



218 :デフォルトの名無しさん:02/06/17 22:03

意味なくageちゃいました、
ごめんなさい。

219 :デフォルトの名無しさん:02/06/17 23:19
>>215
一度見たら消しちゃう。
PrintScreen対策としては、OpenClipboardしっぱなしにして独占。

220 :デフォルトの名無しさん:02/06/17 23:20
>>219
その程度じゃ簡単に対策できちゃうから無意味。

221 :デフォルトの名無しさん:02/06/17 23:38
テキストファイルに個人コード(4桁)日付(yyyyMMdd)時間(hhmm)と
連続で保存さているところから、
コンボボックスに個人コード、リストボックスに日付がデータとしてあって
2つのIDを使って日付をとってくる方法がわからないので、
教えていただきたいです

222 :デフォルトの名無しさん:02/06/17 23:58
Priority上げて全部ひったくるとか。

223 :デフォルトの名無しさん:02/06/18 00:03
>>221
わけわかめ。IDって?

224 :デフォルトの名無しさん:02/06/18 00:11
4桁の数字だろ

225 :デフォルトの名無しさん:02/06/18 00:16
>2つのIDを使って日付をとってくる

何処の日付をとってくる?

226 :デフォルトの名無しさん:02/06/18 01:58
このスレは、>>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ボタンを消して、元通りにしてもどうにもなりません。
なにがいけないのでしょう?
ちなみにバックアップをとっていないのです。
こうなったらおわりですか?


228 :デフォルトの名無しさん:02/06/18 03:07
>>221
http://forums.belution.com/ja/vc/000/073/39.shtml

229 :デフォルトの名無しさん:02/06/18 04:12
>>227がんがれ。

230 :227:02/06/18 06:09
一からやってみて、どこがおかしいのか、突き止めました。

スピンボタン追加→数値の自動表示・自動関連付け・右端にチェック
これだけならうまくタブオーダー一つ前のeditを操作できたのですが、
次、スピンボタンにメンバ変数spn1を追加して、初期値&レンジを設定しようと、
次の■のように追加したのですが、
OnInitDialog(){
(中略)
// TODO:特別な初期化を行うときはこの場所に追加してくだちい
■ m_spn1.SetRange(1,9);
■ m_spn1.SetPos(5);
return TRUE; }
そうしたとたん、ビルド後アプリがまったく立ち上がらなくなってしまうんです。
ちゃんと本の通りやったんですがね、、、

231 :227:02/06/18 06:36
というか、どうやら
ヘッダーファイル内に、
CSpinButtonCtrl m_spn1;
CSpinButtonCtrl m_spn2;
がのこってると、だめみたいです。消すとアプリも起動します。
このままじゃ初期値等が設定できません。
どうしよ。。

232 :デフォルトの名無しさん:02/06/18 07:31
テキストファイルに個人コード(4桁)日付(yyyyMMdd)時間(hhmm)と連続で保存さているところから、個人コードをコンボボックスに表示して日付をリストボックスに表示します。データは構造体で持っています。

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

私が作ったものではテキストファイルから個人コードは読み込めたのですが、
同じ個人コードが混じってしまっているので省きたいです。
ちなみにソースも記載したほうがよろしいのでしょうか?

233 :227:02/06/18 07:31
新規作成でダイアログベースで同じやり方で作ってみたらちゃんとレンジ&初期値設定できましたよ。
なんでかなー。もうなきそうです。

234 :227:02/06/18 07:48
CSpinButtonCtrl m_spn1;
この宣言をOninitDialog()内から、
cppの一番上(なんもないところ、まじ最初)に持って行ったらできました。なんで?どうして?つーか、こんなんしていいの?
というか、原因がわからないので、非常にすっきりしません。
どなたか、なんかアドバイスください。

235 :デフォルトの名無しさん:02/06/18 13:56
>>227
・m_spn1が実際のスピンボタンコントロールに関連付けられていない
・CSpinButtonCtrl m_spn1; の位置については、「スコープ」という言葉がある

236 :デフォルトの名無しさん:02/06/18 15:03
popen並に簡単に使えるAPIないですか?

237 :デフォルトの名無しさん:02/06/18 15:06
>>236
MessageBeepが簡単に使えます

238 ::02/06/18 15:18
質問があります。
よろしくお願いします。
クライアント領域にツールバーを作成したのですが、
それにコントロールと同じようにツールチップを割り当てると
うまくいかず、全て同じツールチップになってしまいます。
この解決策を知っている方がいたら情報いただけないでしょうか?


239 :助けて下さい!:02/06/18 15:42
waveファイルに信号処理(FIR)をかけて別のwaveファイルに出力するプログラム
は出来てるんですが、wavに書き出す前に試聴出来るようスピーカから音が出る
ようにしたいんです。出来上がったwaveファイルの再生については組めるんですが
全然解りません。どんな些細なヒントでもいいので教えていただけないでしょうか?


240 :デフォルトの名無しさん:02/06/18 17:27
239
waveOutWrite()あたりを検索してくれ。

再生データがバッファ1つに収まる範囲なら大して手間かからんと思う。
無限再生なんかで、システム側からwaveOutProcをよばれて、データを切れ目
なく供給する部分が結構低レベルで面倒。高レベルのAPI使ったほうが楽。


241 :239:02/06/18 18:05
>240
ありがとうございます。WAVEFORMATEX?なんて使おうとしてました。
さっそくやってみます。

242 :239:02/06/18 18:06
あ、どちらにせよこの構造体は必要なんだ…。

243 :デフォルトの名無しさん:02/06/18 20:46
>>232
まだよくわからん、まさかネタ?(w
内部データのIDと外部ファイルのIDを比較して一致した時だけ
何かしらのの時刻を取ってきて何かしらの領域に格納するの?

取り敢えず入出力をハッキリせえよ。脳内で語りすぎ(w

244 :232: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つ表示させいです。

245 :デフォルトの名無しさん:02/06/18 21:41
お前みたいに仕様をはっきり説明できないやつは何やっても無駄。


246 :デフォルトの名無しさん:02/06/18 21:49
>>244
>>245じゃないけどホントにわからん(w

>45672002061810001800
>12342002060209001725
>45672002052909002200

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

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

これの意味がわからん。
例えば上の例なら4567というIDをもったデータが1行目と3行目にあるわけだけど
単にIDの部分を比較して、データが重複してるかどうかを判断したいの?
それなら行毎の先頭4バイトを読み込んでstrcmpで比較していくだけだと思うけど。

247 :232:02/06/18 22:04
個人コードと日付が合致するものの日付を取得して
時間1、時間2をそれぞれをSetWindowText()でエディットに表示させるのが
最終目的です。

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

以上です。これでわかってもらえなかったら諦めます…

248 :デフォルトの名無しさん:02/06/18 22:05
データ列: personal_code date time
と言う構造で、 personal_codeとdateからtimeを取得したいってこと?

249 :デフォルトの名無しさん:02/06/18 22:07
>>247
とりあえず、インターフェース(コンボボックス、リストボックス)と
ロジックを分離して考えよう。


250 :デフォルトの名無しさん:02/06/18 22:15
>>247
個人コードと日付が合致って

45672002061810001800 の

456720020618 ここまでの事?

で、日付は

45672002061810001800 の

20020618 で 時間1、2は

10001800 でOK?

で、これデータ自体がテキストファイルになっていて
それを読み込んで構造体に格納するまでは作ってあるって事?
要は何処まで進んでるのかがわからないんだけど(w

251 :232:02/06/18 22:18
ちなみに個人コード、日付、時間1、時間2は構造体にしています。
typedef struct tagData
{
long lCode;//個人コード
long lDate;//日付
short nTime_1;//時間1
short nTime_2;//時間2
} Date;
こんな感じです。

252 :デフォルトの名無しさん:02/06/18 22:22
>>247
ますはそれぞれ構成する要素を別々の配列に格納しておいて、

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

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

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

こんな感じかい?

253 :デフォルトの名無しさん:02/06/18 22:23
説明の下手さにイライラしてきた。寝る。

254 :232:02/06/18 22:51
>>252
そのとおりです。
うまく説明していただいてありがとうございます。

日付をとってくるときって
GetWindowText()で個人コードをとってきてやればいいのでしょうか?
どうもわかりません。

255 :デフォルトの名無しさん:02/06/18 23:05
>>254
生API使いですか?
MFC使ったほうが楽じゃないですか?

256 :デフォルトの名無しさん:02/06/18 23:09
>>254
それで良いんじゃない?
それかコンボボックスへ登録したインデックス順に別の配列へ
IDそのものを入れておいても良いと思うけど。

257 :デフォルトの名無しさん:02/06/18 23:11
>>254
>>256の続き。

あとコンボボックスならGetCurSel()とGetLBText()でなんとかなるんじゃないかな。

258 :デフォルトの名無しさん:02/06/19 00:27
VC++でもプリンタ設定でもモード選択が多岐に渡る場合、凸の形をしたページ
が重なっているダイアログが出てきて凸の上の部分でページを選択させるよう
になっているが、あの様なプログラムをVC++で書く時はどうすればいいの?
一般に紹介されているダイアログだと単層構造のものしかできない。

259 :デフォルトの名無しさん:02/06/19 00:30
>>258
タブコントロール

260 :デフォルトの名無しさん:02/06/19 00:34
>>258
プロパティシート、プロパティページを調べれ

261 :258:02/06/19 00:39
どうもです。助かりました。

262 :デフォルトの名無しさん :02/06/19 01:51
Win2000でメモリ書きかえるときってGetWindowThreadProcessIdと
OpenProcessとWrite/ReadProcessMemoryだけで可能ですか?


263 :デフォルトの名無しさん:02/06/19 01:52
マルチ死ね

264 :デフォルトの名無しさん:02/06/19 02:07
代入文だけで可能です

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のところ。質問の本質ではないですが、一応。。

268 :デフォルトの名無しさん:02/06/21 21:27
>>266
リソースで作ってあるダイアログを表示したいなら
そのダイアログをCDialogに結び付けて表示元のウィンドウクラスで
そのダイアログのメンバ変数(例えばm_Dlg)作ってm_Dlg.ShowWindow( SW_SHOW )で
出るんじゃない?ダイアログクラスのコンストラクタでcreateする必要が
あったような無かったような・・・・。

269 :デフォルトの名無しさん:02/06/22 17:25
プログレスバーの中に “58%” などといった文字列を、一部の色を反転させて表示する場合、
どのようなインプリメントをするのがスマートなんでしょうか?

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

BitBltのパフォーマンスは環境に大きく左右され、負荷も大きいと聞いたんで、やっぱ
クリッピングリージョンを使った方一般的なんでしょうか...?

270 :デフォルトの名無しさん:02/06/22 17:38
>負荷も大きいと聞いたんで
いつの時代の話だ(ワラ

271 :デフォルトの名無しさん:02/06/24 14:07
>>268
ダイアログのメンバ変数を作る方法がわからないんですが..

272 :デフォルトの名無しさん:02/06/24 21:10
>>271
リソースエディタでダイアログ作ってそのダイアログを右クリックしてクラスウィザードで
CDialogに結び付けてあげる。

273 :デフォルトの名無しさん:02/06/24 22:45
Visual c++.Net使ってて、アイコンリソースを追加(インポート)したいのですが、なんだかうまくいきません。
(リソースの追加をしても何にも起こりません。)
VCの右側のリソースビューのところには、(赤い×印つきで)ほかのエディタで開く、という奇妙なものが表示されています。
しかも、クリックしても何にも起こりません。
今のところ、リソーススクリプトをメモ帳なりで編集して無理やりインポートしているのですが、どうしたらいいのでしょう?
あと、これ関連でアイコンリソースのリソースIDが変更できません。
これまた、どうしたらいいでしょう?

274 :デフォルトの名無しさん:02/06/24 23:57
>>273
VC6しか知らないのだが、リソースビューのツリーのアイコンのところを右クリックできない?

275 :273:02/06/25 00:11
>>274
そう、今までVC6使ってたから、そのつもりでやったら、できんのよ。
誰か、情報キボンヌ。

276 :デフォルトの名無しさん:02/06/25 01:33
DLLエクスポートの序数を自分で管理するには
普通DEFファイルを用いると思うんですが
あるVC++のプロジェクトでは、DEFファイルが無いのに
序数を任意の数にしているみたいなんです。
何かやり方があるんでしょうか?

277 :デフォルトの名無しさん:02/06/25 02:06
>>276
リンカの/EXPORTオプション?

278 :276:02/06/25 04:40
>>277
ごめんなさい、
自分の勘違いでした。

279 :デフォルトの名無しさん:02/06/25 10:43
IEにGoogleツールバーのようなものを取り付けるプログラムを
作成したいのだが、サンプル載ってるページはありませんか?

280 :デフォルトの名無しさん:02/06/25 12:50
>>279
Googleで検索すれば見つかります。

281 :デフォルトの名無しさん:02/06/25 21:28
#pragma pack( [ [ { push | pop}, ] [ identifier, ] ] [ n] )

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

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

この場合、パッキングというのは、ある構造体などをnバイトに収めるように
するということなのでしょうか?

282 :70:02/06/25 22:18
>>281
とりあえず...
> #pragma pack(n) を使い、n に 1、2、4、8、16 を指定すると、構造
> 体の 2 番目以降のメンバはメンバの型のサイズと n バイト境界の小さ
> な方に置かれます。
だけ覚えておけばいい。あとの構文は必要なった時に使えばいい。

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

それでもわからなければ、まだ pack なんて必要ないんだよ。無視しとき
な。

283 :デフォルトの名無しさん:02/06/25 22:31
>>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した地点までの長方形のみを描きたいのですが、どうすればよいのでしょうか?

中を塗りつぶすというのは下の絵が消えてしまうので無しです。

285 :デフォルトの名無しさん:02/06/27 17:55
>>284
DrawFocusRect

286 :厨房:02/06/27 18:00
C言語をフリーのソフトでコンパイルするのない?

287 :デフォルトの名無しさん:02/06/27 18:01
>>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;
}
余裕でエラーでした。

289 :284: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は同じ位置にもう一度描画すれば消せるとのことで、やってみているんですが、消えないんです。
どこがおかしいのでしょうか?

290 :デフォルトの名無しさん:02/06/27 18:50
>>288
まず、スタックを使わない理由を聞かせてくれまいか。

291 :デフォルトの名無しさん:02/06/27 18:57
>>290さん
簡単に言うとスタックがまだわからないからです・・・
色々調べてみてスタック使えばすぐにできるようなんですが
範囲外なので不必要なんです。
で、かわりの配列でなんとかしたいわけです。

292 :デフォルトの名無しさん:02/06/27 19:10
配列をスタックとして扱っているだけでわ・・

数値をdataに積んでいるでねーし、
演算子も、スタックから取り出しているわけでもねーし、、

293 :デフォルトの名無しさん:02/06/27 19:13
>>288
感動的なまでに無茶苦茶ですね・・・
スタック以前に基礎からやり直したほうがよくないですか?

294 :デフォルトの名無しさん:02/06/27 19:22
基礎からというよりその基礎を今やってる最中なんですが・・・

295 :デフォルトの名無しさん:02/06/27 19:26
>>294
勘で書かずにわからない部分やあやしい部分は参考書を見て書きましょう。

296 :284:02/06/27 19:28
|_・)ソォーッ
>>289はいかがなものでしょう?

297 :デフォルトの名無しさん:02/06/27 19:32
>>296
後は自力で

298 :284:02/06/27 19:34
ヒー

299 :288: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]データの途中・・・ ← ここまでしか取れないような
状況になりそうな気がするのですが、その場合データの成形は
アプリケーション側でやってあげなければいけないんでしょうか?

302 :デフォルトの名無しさん:02/06/27 23:25
大麻などで定期的に受信っていうか
スレッドでずっと受信用にreadfileで待っておく。そんでなんか受信したらどっかにバッファリングして
メッセージで本スレッドに通知してまたすぐreadfile。そういうずっとreadfileするスレッドをつくっておきます。


303 :デフォルトの名無しさん:02/06/27 23:30
>>302
成る程ですね。
要は受信割り込みの代わりをスレッドにやらせるって感じですか。
ありがとうございました、やってみます。

304 :デフォルトの名無しさん:02/06/27 23:33
あ、聞き忘れましたが、

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

これに関してはどういった感じでしょうか?

305 :デフォルトの名無しさん:02/06/27 23:39
>[STX]データ[ETX][STX]データの途中・・・ ← ここまでしか取れないような
>状況になりそうな気がするのですが、その場合データの成形は

ええ。なりますよ。

短時間ならスレッドで処理してもいいし、
アプリの方で電文として完結するところで切り出しても良いんじゃないですか?


306 :デフォルトの名無しさん:02/06/27 23:46
>>300
GetClientRect(&r1); ClientToScreen(&r1); GetWindowRect(&r2);
とでもして、r1とr2の差分を取ってみ。
あと、変な言葉を発明せずに素直にクライアント領域と呼べ。

>>289
move_rect_leftをメンバ変数かstatic変数にしる。

307 :デフォルトの名無しさん:02/06/27 23:48
>>305
やはりなりますか・・・わかりました。
ありがとうございます。色々聞いてしまって申し訳ありませんでした。

308 :306: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)
┃  ┃  ┌──────────┐
┃  ┃  │     ピクチャエリア 
┃  ┃  │
┃  ┃  │クライアント座標から見たピクチャの始点座標の位置を
┃  ┃  │ 知りたかったわけです。
     ←→ この部分
という意味でした。

310 :デフォルトの名無しさん:02/06/28 02:18
>>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 )によって取得すると、クライアント領域からの位置になっていて、
それがピクチャのどのぐらいの位置?というのを知るために、
クライアント内でのピクチャの左端の座標、 =(つまり上図の差分部分)
を知る必要があったんです。


313 :デフォルトの名無しさん:02/06/28 08:39
>>312
んだからGetWindowRectとかで何とかすればよいのではないのか。

314 :デフォルトの名無しさん:02/06/28 17:16
VC++でASSERTを使うときに,しなくてはけない事を教えてください(ヘッダーをインクルードするとか)。

315 :デフォルトの名無しさん:02/06/28 19:44
CRTDBG.H?
_ASSERT と、アンダーバーが必要。

316 :デフォルトの名無しさん:02/06/28 23:10
>>312
ClientToScreen(&point);
GetDlgItem(IDC_HOGE)->ScreenToClient(&point);

317 :デフォルトの名無しさん:02/06/29 00:53
Aと言うクラスからBというクラス内のマルチスレッド用関数をスレッド起動する事は可能ですか?
実行すると一応動くのですがスレッド終了時にメモリリークがなんたら〜といったメッセージが
アウトプットに表示されてしまいます。原因としては何が考えられるでしょうか?

318 :デフォルトの名無しさん:02/06/29 00:57
メモリリークがなんたら〜 が起きているから。

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だと大丈夫です。
何が問題なんでしょうか?
レジストリが壊れてとか?

323 :デフォルトの名無しさん:02/06/29 06:01
>>322
> アクセス違反でプロセスが落ちるんですよ。
> 何が問題なんでしょうか?
アクセス違反だろ。


324 :323:02/06/29 07:02
意地悪言わないでよ。
つーかレジストリが怪しいよな、やっぱ。
は〜再インストはイヤだぁ〜。

325 :デフォルトの名無しさん:02/06/29 12:50
>>319
A:Func
{
B myB;

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

って感じです。

326 :デフォルトの名無しさん:02/06/29 12:57
>>325
それじゃA::Funcを抜ける時にmyBがあぼーんされる。
newで作ってどっかに大事にしまっておけ。

327 :デフォルトの名無しさん:02/06/29 13:06
>>326
ああすいません、間違えました(汗

B myB;

はAのヘッダにメンバ変数として登録してあります。

328 :デフォルトの名無しさん:02/06/29 14:14
クラスのメンバ関数をスレッド関数にして問題があるかどうかわからないが
普通はスレッドは普通の関数にすると思う。



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


330 :デフォルトの名無しさん:02/06/29 14:29
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
ふーん

335 :デフォルトの名無しさん:02/06/29 18:35
>>333
つーか強引にVCに話を繋げるなよ・・・・・・(w

336 :デフォルトの名無しさん:02/06/29 18:49
>>332
なるほど、ポインタを使うんですか
ありがとうございます


337 :デフォルトの名無しさん:02/06/29 19:02
>>332
・・・はメンバ関数でも大丈夫でしょうか?

338 :デフォルトの名無しさん:02/06/29 19:26
>337
パブリックなメンバなら関数でもデータでもダイジョウブだけど。
ちなみに設計としてはかなりヤバイでしょ。こういうのをチカラワザと言います。


339 :デフォルトの名無しさん:02/06/29 20:04
C#でウィンドウ表示するだけのプログラムを作ったんですが
それだけで100MB以上のメモリを消費しています。
(VisualStdio + 作ったプログラム)

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

ところでC#って.Netのプログラムしか作れないんですか?
普通のプログラム作るにはVC6.0を使えってことですか?


340 :デフォルトの名無しさん:02/06/29 20:21
メモリを増設して、CPUを強化すればいいじゃん。

341 :デフォルトの名無しさん:02/06/29 20:51
C#スレ行け

342 :デフォルトの名無しさん:02/06/29 23:42
CでHello, World表示するだけのプログラムがでかすぎるって
大昔に叫んでたやつがいたな。


343 :デフォルトの名無しさん:02/06/30 00:42
>>338
なるほど、、、いまクラスの勉強しようとおもって
行列のクラスをつくってるんですよ(死ぬほど適当ですが)
そこで行列同士の掛け算をするときにオブジェクトをオブジェクトで呼び出せたらと思ったんですが
そういう関数はメンバにしないほうがいいのでしょうか、、、


344 :デフォルトの名無しさん:02/06/30 01:25
>>343
スレ違いやね。このスレじゃなくて、C++相談室で取り扱う話題だ。
まあ姉妹スレのよしみで答えてやるけど、掛け算をやりたいんなら、
その行列クラス用のoperator*()をオーバーロードするのが定石。
誰からも認められる、operator*()の正当なオーバーロードのやり方は、
Effective C++ と More Effective C++ を買って読めば分かる。買え。

345 : :02/06/30 02:14
>>344
ここはVC専門すれだったのですか、、、いま気づきました、、申し訳ない

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



346 :デフォルトの名無しさん:02/06/30 17:44
配布されているDLLを利用したWinコンソールアプリをVC++で作っています。
DLLのAPIが、呼ぶたびにstdoutに文字を吐きまくってうざったく、
それを黙らせたいのですがつまってしまいました。。

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

「自分のメッセージはstderrに出力」以外にうまい方法はありませんか?

347 :デフォルトの名無しさん:02/06/30 19:27
kage.dll方式で、Console系APIを
つぶしてしまえ。

348 :デフォルトの名無しさん:02/06/30 20:19
>>347
kage.dllって2ちゃんねるブラウザのやつですよね。
でも調べてみてもコンソール関係の情報を見つけられませんでした。。
申し訳ないのですけど、ぐぐる用キーワードかURLあたりだけでも教えて頂けませんか?

349 :デフォルトの名無しさん:02/07/01 21:24
アプリ終了時にAafxBeginThread()等で起動したマルチスレッドを終了させたい場合は
特になにもしなくてもいいんでしょうか?たまにkernel32でエラーが起こりましたといった
メッセージが表示されたりするんですが別の問題ですか?

350 :デフォルトの名無しさん:02/07/01 21:31
WaitFor*Object(s)で待機せよ

351 :デフォルトの名無しさん:02/07/01 21:34
>>346
GetStdHandleで保存
SetStdHandleでNULLでどうだ?

352 :デフォルトの名無しさん:02/07/01 21:41
>349
スレッド自信がループから抜け、関数としてリターンさせる。
そのためにはメインスレッドからイベントオブジェクトをシグナルさせてやる。
スレッド側は>350の言うような方法で終了イベントやその他のイベントを待つことができる


353 :デフォルトの名無しさん:02/07/01 22:00
>>350
>>352
なるほど、ありがとうございます・・・と言いたい所なんですが正直難しそうですね(^^;
今HELPを見てみたんですが良くわかりませんでした。
それっぽい説明のあるHPなどがありましたら教えていただけませんか?

354 :デフォルトの名無しさん:02/07/01 22:07
スレッドに終了イベント(volatileのフラグでもイベントでも)を送って、
受け取ったスレッドは自殺。

んで、メインスレッドでシグナル状態になるまで待機
(スレッドハンドルにWaitForSingleObjectとか)

355 :デフォルトの名無しさん:02/07/01 22:11
MSDNのサンプルmtrecalc
http://msdn.microsoft.com/code/default.asp?URL=/code/sample.asp?url=/MSDN-FILES/026/001/503/msdncompositedoc.xml

356 :kaz:02/07/02 12:54
はじめまして、VCの初心者なんですが、プッシュボタンやコンボボックスをプログラムの
起動中に無効化(グレーアウト)にするにはどうしたらいいでしょうか??
MSDN探してても見つからなくて・・・

357 :デフォルトの名無しさん:02/07/02 13:43
6.0ならリソースエディタで対象のボタンなどの
コントロール上で右クリック->プロパティで
無効化、みたいなチェックボックスなかったっけ?
ちょっと記憶があいまい。。

またはEnableWindow()かな。

358 :kaz:02/07/02 16:02
ありがとうございます!!ですけど、EnableWindowで普通の無効化はうまくいきそうですが、
ボタンを押されて処理の途中、ボタンを使い手に触らせないという意味での無効化は
どうやらできないようです.
ボタンが押されて、OnButton関数が始まります。OnButtonの最初で無効化を使用します。
それからOnButton内で処理が始まります.処理には待機中の状態があって、ボタンの見た目
は無効化されていても、待機中の状態の時に無効化されているボタンをさわるとまた処理後、
最初から処理を開始してしまうのです.どうにかならないでしょうか??

359 :デフォルトの名無しさん:02/07/02 16:06
>>358
PeekMessage()調べてみてYO!


360 :デフォルトの名無しさん:02/07/02 17:04
>>359 VB厨どっかいけ >>358 BeginWaitCursor, EndWaitCursor あたりをキーに探せ。 MFCつかってるならCWaitCursor でもいいけどね。

361 :359:02/07/02 17:24
>>360
VB使ったことないのに・・・(´・ω・`)トホホ

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


362 :デフォルトの名無しさん:02/07/02 20:04
やれるもんならやってみろ。

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

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



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

364 :359: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なんてなるんだろう...たすけてください.

367 :デフォルトの名無しさん:02/07/02 23:53
>>366
スピンのスタイルをみれ。

368 :デフォルトの名無しさん:02/07/03 01:28
>>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は全く問題無いようです。
どうかよろしくお願いします。

370 :デフォルトの名無しさん:02/07/03 01:42
TVITEMのpszTextメンバはconstじゃないんですが、
一時変数やconst文字列をキャストして渡すのはダメなんでしょうか?

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

実際のところ、どうなのでしょうか?

371 :デフォルトの名無しさん:02/07/03 01:50
>>370
SetするのもGetするのも同じ構造体を使う都合上、非constになっているだけと思われ。
漏れはいつもconst_castして突っ込んでいるけど、心配ならコピーして渡すよろし。

372 :デフォルトの名無しさん:02/07/03 17:09
>>367
ありがとうございました.解決しました!!
どうしてあんな機能がデフォルトでついてるのかと思いました..

373 :デフォルトの名無しさん:02/07/03 17:50
>どうしてあんな機能がデフォルトでついてるのかと思いました..
それがMSぢゃないですか・・と言ってみるテスト

374 :デフォルトの名無しさん:02/07/03 18:23
すみません,
GetTotalSecondsの逆を教えていただけますか?

CTime→ GetTotalSeconds → 総秒
総秒 → [    ?     ] →CTime

375 :デフォルトの名無しさん:02/07/03 18:26
>>374
GetTotalSeconds()って、CTimeSpanのメンバ関数やん。

376 :374: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日を基点にした時刻になるよ。

(「時間の間隔」を「時刻」に変換するってのがよく分からんけど)


378 :デフォルトの名無しさん:02/07/03 18:47
>>376
値を入れるだけなら普通に代入できるけど、
CTimeは
「0時間0分0秒」から始まってるわけじゃない。

379 :あい:02/07/03 18:49
携帯のデータを破壊するウイルスさがしてます。


380 :533:02/07/03 21:12
教えてください。
Explorerの右クリックメニューに項目を追加し、処理を割り当てたいのですが
やり方が分かりません。

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

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

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



381 :デフォルトの名無しさん:02/07/03 21:24
Visual C++で使える正規表現ライブラリに心当たりありませんか?
GNUのやつをコンパイルしようとしてもうまくいかないのです....

382 :デフォルトの名無しさん:02/07/03 21:37
rubyとか、perとか、Pythonとかのを流用すればいいやん。

383 :デフォルトの名無しさん:02/07/03 21:40
>>381
boostのregex。
http://www.boost.org/
使い方。
http://www.s34.co.jp/cpptechdoc/article/regexpp/


384 :374: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;
などを時間を計算する複数の方法があるのが意味がわかりません.これらは互換性はないんでしょうか?

385 :デフォルトの名無しさん:02/07/03 23:16
>>384
プログラミング暦何日(または何時間)くらいですか?

386 :374:02/07/03 23:37
>>385
( ゚д゚)ポカーン

387 :デフォルトの名無しさん:02/07/03 23:39
>>384
ヘルプでCTimeのところを読んでみなよ。
時刻に時間を足せるって書いてあるじゃん。

388 :デフォルトの名無しさん:02/07/03 23:41
>>386
> などを時間を計算する複数の方法があるのが意味がわかりません.

この発言はそう思われても仕方ないと思われ

389 :デフォルトの名無しさん:02/07/03 23:42
>>384
jikan += CTimeSpan( 0, 0, 0, 30000 )

390 :374:02/07/03 23:55
みなさんありがとうございます.
弱冠プログラム暦3ヶ月の新まいでう.
ご回答ありがとうございました.

391 :デフォルトの名無しさん:02/07/04 00:10
>>381
http://www.hi-ho.ne.jp/babaq/bregexp.html

392 :デフォルトの名無しさん:02/07/04 01:09
やむを得ない事情から、とあるdll内にあるコールバック関数を使っています。

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

dllのソースはあるのですが、大幅な変更をしてはいけないという…。
なにか良い知恵がありましたら、どうかお授け下さいませ…。

393 :デフォルトの名無しさん:02/07/04 01:12
>>392
たしか、DLLとEXEで共通の変数にアクセスする方法はあるよ。
おれは、もう寝なきゃならないから、がんばって検索してください。

394 :デフォルトの名無しさん:02/07/04 01:20
>>392
グローバル変数のようにアクセスする方法は知らないので
EXE内の関数を呼んで変数のアドレスをゲットしよう!
と言っておく

395 :392:02/07/04 01:33
お二人とも、さっそくのレスありがとうございます(*´Д`)
>>393
#pragma data_seg(".shared")
やや、これですね!やた、変数はどうにかなりそうです。
>>394
えっとえっと…dllからexeの関数を呼ぶ方法が……。
393さんの方法を使うとしても、関数などのポインタを直接渡すのは、
アドレス空間が違うから無意味ですよね…。クライアントのウィンドウハンドルだけ
共有して、SetWindowLongとかに埋めておく、みたいな感じで宜しいのでしょうか?

396 :デフォルトの名無しさん:02/07/04 01:47
>>395
普通に関数のポインタ渡せない?

397 :デフォルトの名無しさん:02/07/04 01:50
ふつー、dllはexeと同じアドレス空間に配置されると思うが。

398 :392:02/07/04 02:08
>>396 >>397
レスありがとうございます。

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

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

夜遅くにお騒がせしてすいませんです。重ね重ね皆様に感謝です。

399 :デフォルトの名無しさん:02/07/04 12:39
358がMFCのMLにポストしたね。
ここはどうやら役に立てなかった模様、残念

400 :デフォルトの名無しさん:02/07/04 20:58
>>358はマルチスレッドでなんとかならんのかね?

401 :デフォルトの名無しさん:02/07/04 21:09
MFCのMLを見る限りではpostmessageの勉強をするということで決着したみたいだな。

402 :kaz(358):02/07/04 21:25
すいません。別にこっちが役に立たなかったわけじゃないです。
ただ、API使ったこと無かったんで、今更、MFCで教えてくださいとは
書きづらかっただけです。ほんとすみません。


403 :デフォルトの名無しさん:02/07/04 22:10
windows上のvisual applicationの開発では
visual c++とc++ builderのどちらが素早く開発しやすいですか?

404 :デフォルトの名無しさん:02/07/04 22:13
>>403
慣れてる方。

405 :デフォルトの名無しさん:02/07/04 22:35
どちらも初めての場合は?>>404

406 :デフォルトの名無しさん:02/07/04 22:37
安い方。
お金を貯める時間が短くてすむ

407 :デフォルトの名無しさん:02/07/04 22:42
もう持っていたら?>>406

408 :デフォルトの名無しさん:02/07/04 22:44
>>407
インストール時間が短い方。
インストール済みなら起動が早いほう。

409 :デフォルトの名無しさん:02/07/04 22:46
VC++のスレで聞くことが間違ってるという指摘はあえてしないのか?

410 :デフォルトの名無しさん:02/07/04 23:19
>>407
だったら、両方入れてちょっと使って見りゃいいじゃん。
いいかげんウザイから、もう来るな、ぼけ。

411 :デフォルトの名無しさん:02/07/04 23:25
このスレには
両方使って開発した経験のある人はいないということでOK?

412 :デフォルトの名無しさん:02/07/04 23:48
>>411
はいはい、OK だよ。どうでもいいから、氏んでてくれ。

413 :デフォルトの名無しさん:02/07/05 00:10
APIベース(自分でwin main作る)プログラムでMFCも使うこと出来ますか?
たとえばinclude何々とかすれば使えますか。
ファイルダイアログ とか CString とか 便利なもんで。
なにとぞ御教授おねがいします。

414 :デフォルトの名無しさん:02/07/05 00:13
すいません、これどういう意味ですか?

x>0?y:0

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

ちがったっけ?

416 :デフォルトの名無しさん:02/07/05 00:20
if(x>0){z=y;}else{z=0;}
ってことですね?
ありがとうございました。

MSDNに載って無いのなんでなんだろう。

417 :デフォルトの名無しさん:02/07/05 00:23
>>414 おねがいします

418 :デフォルトの名無しさん:02/07/05 00:24
三項演算子で検索汁

419 :414=416:02/07/05 00:24
>>417
?

420 :デフォルトの名無しさん:02/07/05 00:25
まちがえました >>413 です 質問しにきたのに、質問答えちゃいましたよもう。

421 :414=416:02/07/05 00:27
みなさんどうもありがとうございました。

422 :デフォルトの名無しさん:02/07/05 00:29
>>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ではコンパイルできました。

425 :デフォルトの名無しさん:02/07/05 02:28
ベースのデストラクタをvirtualにしる!

426 :425:02/07/05 02:39
いや、違う。
VCの参考演算子のバグか?

427 :425:02/07/05 02:52
いや、違う。
2項目と3項目は変換できないといけないようだ。

428 :425:02/07/05 03:05
いや、違う。
まてよ・・・
いや、違う。
もしかして・・・

429 :デフォルトの名無しさん:02/07/05 03:28
static_cast<Base*>(new A) : static_cast<Base*>(new B);に汁

430 :デフォルトの名無しさん:02/07/05 04:24
Base* p = (b)? static_cast<Base*>(new A) : static_cast<Base*>(new B);
長!

431 :デフォルトの名無しさん:02/07/05 04:34
規格じゃ3項演算子の3項目から2項目への変換があるか、
または同じ型でなければコンパイルできないはず。

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

この例を見れば分かるでしょ

432 :425:02/07/05 07:18
いや、違う。
おそらく・・・
いや、違う。
そうか!
















いや、違う。


433 :デフォルトの名無しさん:02/07/05 09:51
VisualCじゃない質問ばっかり
C++じゃん

434 :424: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は高くて持っていないので、その他で乗っているもの探しています。
どうしても再帰でプログラム書かなければならないので、
スタックを多くしたいのです。

436 :デフォルトの名無しさん:02/07/05 17:10
cl /?

437 :デフォルトの名無しさん :02/07/05 21:57
さっき間違えてC++で訊いてしまったらこちらへ誘導されました。
自分まだ林氏のスーパービギナー編を一通りやっただけのペーペー初心者です。
今、エディットボックス3つと四則演算ボタンを配置しただけの簡単な電卓を作ろうとしていて、
@ed1と2に値を入力
A「+」とか「-」とかを押す
Bed3に答え(浮動小数点型)が表示
という風にしたいのですが、
出だしはCString ssでは駄目なのかとか、
またm_ed1を1項、2を2項と定義付けるにはどう記述するのかからして分りません。
ヘルプや言語リファレンス本で調べてもいまいち・・(あまりに初歩だから載ってない?)。
学校の一室にしかソフトが入ってないので(自前で買うには高い)直接いじれる日時が限られてるし・・どなたか教えて頂けないでしょうか。


438 :437:02/07/05 22:10
あ、ここもVC++とはチョト違うんですね・・すいません気をつけます(汗

439 :デフォルトの名無しさん:02/07/05 22:14
計算する為のトリガが「+」や「−」なんだから、まずキーをアプリケーションで
受け取るためにはどうすればいいのか考えよう&ネットで調べてみよう。
エディットボックスの読み書きはスーパービギナー編にも載ってたはず。
MSDNのCEditのクラスメンバを調べてもいいし。

440 :デフォルトの名無しさん:02/07/07 09:48
今までFORTRANを使用していて最近VCを始めたんですけど
VCでクラス内でのグローバル変数ではなくプロジェクト内の
すべてのクラスからアクセスできるグローバル変数は
どこでどのようにして宣言すればいいのでしょうか?

基本的なことで申し訳ありませんがよろしくお願いします。

441 :デフォルトの名無しさん:02/07/07 10:30
>>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; なんだから別に問題ないと思う
けど。不思議じゃ...。

442 :デフォルトの名無しさん:02/07/07 10:36
>>441
A *p = ( (b) ? new A : new B );


443 :441:02/07/07 10:54
>>442
何が言いたい ? A *p = ( (b) ? new A : new B ); がダメなのはわかっ
てるぞ。

444 :デフォルトの名無しさん:02/07/07 11:01
厨房の香り漂う...

445 :デフォルトの名無しさん:02/07/07 11:02
あー、すまそ。Base*でもいいよ。
括弧内が先に評価されてそこで返値が決定される必要がある。


446 :441:02/07/07 11:14
>>445
あ〜〜〜、なるほど言われてみりゃ 括弧内 の評価が終わった時に一応
返値の型決めないといけないからか...。これぐらいなら共通の型を見つ
けるのも難しくないだろうけど多重継承バリバリだとコンパイラも大変だ
わな。サンクス、一つ勉強になったよ。

447 :デフォルトの名無しさん:02/07/07 13:23
>>440
変数、定数専用のcppとhを用意して必要なクラスでincludeすれば良いべ。

448 :デフォルトの名無しさん:02/07/07 14:23
>>447
>変数、定数専用のcppとhを用意して必要なクラスでincludeすれば良いべ。
ということは

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

なんか質問ばかりですみません。

449 :デフォルトの名無しさん:02/07/07 14:31
クラスはいらない。

実装.c
int global_val;

使用者.c
extern int global_val;

これでOK

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

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

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

どうなんでしょう?
よろしくお願いしますm(_ _)m


451 :440:02/07/07 14:38
すいません、かぶってしまいました。
449さん回答どうもありがとうございます。

もう一度試してみます(^^)

452 :デフォルトの名無しさん:02/07/07 15:42
Visual C++ .NET Standardで作ったものって配布可能でしょうか?

MSのサイトを探してみたのですが、特にNGという情報が載って
いなかったので。

453 :デフォルトの名無しさん:02/07/07 15:44
>>452
NGだったらStandardなんて名前は付けないと思う・・・

454 :デフォルトの名無しさん:02/07/07 15:54
>>453
ありがとうございます。

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

ので、もしかしたらと思っていたのです。今から買ってこようかな。

455 :デフォルトの名無しさん:02/07/07 16:17
商用不可。BorlandのPersonalと同じ

456 :デフォルトの名無しさん:02/07/07 20:59
>>451
>>449さんの言ってる事に>>447のを加えると、

実装.c
int global_val;

実装.h
extern int global_val;

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

って感じ。グローバルのものは全部一括して.cと.hに突っ込んじゃう。

457 :452:02/07/07 21:52
>>455

ぐぅ、商用不可でしたか。
キャッシュバックキャンペーンもあるし、かみさんに内緒でPro.を
買おうかな。C♯もさわってみたいし。

458 :デフォルトの名無しさん:02/07/07 22:12
糞シェア作って公開するんじゃねぇ

459 :452:02/07/07 23:08
C++.netのPro相当のエディションがあればなあ…

>>458
期待に添えないのですが、シェアウェアを作る予定はないのです。


460 :デフォルトの名無しさん:02/07/07 23:12
いらねぇソフトやるよ
http://pc.2ch.net/test/read.cgi/software/1025311611/

このスレの24がVS.NET Proパッケージを\5kで譲ってくれるらしい。

461 :デフォルトの名無しさん:02/07/08 23:35
関連付けの修復ってできませんか?
再インスコするしかないのかな...

462 :デフォルトの名無しさん:02/07/08 23:36
>>461
変更する前に、元の関連付けを退避させておくしかないんじゃない?

463 :461: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を扱っているということなのだろうか

466 :デフォルトの名無しさん:02/07/10 08:19
>>465
向こうはMFC専用だから、こっちはそれ以外と思ってた。
Win32APIスレは別にあるけど。

467 :デフォルトの名無しさん:02/07/10 12:49
>>465
ここがVC++の本流スレ。(スレ立てた人が ++をつけるの忘れただけ)

「VisualC++(MFC限定)相談室」はタイトルどおりMFC限定です。
「初心者にVisual C++を教えるスレ」は最初はネタスレだった(w
今では初心者スレとして機能しているが。

468 :デフォルトの名無しさん:02/07/11 09:10
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
アゲます。↑よろ。

470 :デフォルトの名無しさん:02/07/11 09:21
>>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かなんかで書くしかないんでしょうか?

475 :デフォルトの名無しさん:02/07/11 15:28
>>473
リソースエディタはアイコンじゃないと透明色は使えないよ。

476 :デフォルトの名無しさん:02/07/11 15:30
>>474
>同じくVisualStudioのインストールされたPCでないと起動しないんですか?

そんなことないよ。



477 :474:02/07/11 15:34
>>476
早速の回答ありがとうございます。
僕の作ったダイアログベースのアプリケーションが、
VSのインストールされたPCでないと起動しないんですが、
なにが問題だと考えられますか?
なにか特殊なファイルをつかっちまってるんでしょうか?

478 :デフォルトの名無しさん:02/07/11 15:45
>>477
MFC以外のことが原因なのでは?
MFC使うとMFC42.DLLが必要になるけど、
Win98以降のOSなら、標準で入ってるし。

479 :デフォルトの名無しさん:02/07/11 15:45
使ってるはず。
静的リンクとか言うオプションがあるはず。それにしる

480 :474:02/07/11 15:51
”静的リンク”というやつですね。
それは新規作成時にセティーングするものでしょうか。
よくわかりませんが、ちょっと調べてみます。ありがとうございます。

VS入ってないと使えないなんて、あふぉみたいなアプリケーションですからね。とほほ。

481 :デフォルトの名無しさん:02/07/11 16:18
ツールバーを右揃えで作りたいのですが、うまい実現方無いでしょうか?
現在、サブクラス化してWM_SIZEメッセージでインデントを挿入しているのですが、
コレだとリサイズの時に激しくちらついてしまいます。

482 :デフォルトの名無しさん:02/07/11 16:42
>>480
MFC42.DLLは再頒布可能だよ。
スタティックリンクはProfessionalおよびEnterprise Editionsじゃないとサポートされてない。

それより、デバッグ版なんじゃね?
MFC42D.DLLとかDがくっついてる。
こっちは再頒布不可ね。

483 :デフォルトの名無しさん:02/07/11 17:59
マルチスレッドのプログラムで「使用するランタイムライブラリ」
のとこにあるマルチスレッドとマルチスレッド(dll)ってどうちがうのですか?

dllつくるときはマルチスレッド(dll)のほうかとおもてたら、新規プロジェクト
でWin32 DLL を選択したときデフォルトでただのマルチスレッドになってて
あれ?とおもたのです。


484 :デフォルトの名無しさん:02/07/11 18:54
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ファイルを削除すると
クラスビューを再構築できると聞き、やってみたのですが
直らなかったです。
よろしくお願いします。

486 :デフォルトの名無しさん:02/07/11 19:30

補足です。
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()を呼びたいの。

他にいい方法ってあります?

488 :デフォルトの名無しさん:02/07/11 23:15
>>487
フォーム側でボタンメッセージを受け取ったらそこで
AfxGetMainWnd()->SendMessge( WM_CLOSE );
で駄目かい?

489 :デフォルトの名無しさん:02/07/11 23:20
SetTimerで発生するイベントは、
他の関数内を実行している時でも
割り込み的にSetTimerの関数が実行されるのでしょうか?
それとも、実行中の関数から抜けるまで
プールされるのでしょうか?
どなたかご教授お願い致します。


490 :487:02/07/11 23:34
>>488
できました。
ありがとうございます。

AfxGetMainWnd()なんて知らなかった・・。

491 :デフォルトの名無しさん:02/07/12 00:29
>>489
いろんなところに質問してないで、自分で試したほうが早いと思われる。
最後の引数に関数ポインタを指定すればその関数が直接実行される。
NULLなら WM_TIMER が飛んでくる。

492 :デフォルトの名無しさん:02/07/12 01:33
>>489
割り込み処理はしないよ。
実行中の関数が終了するまでは、
メッセージは保留状態。

493 :デフォルトの名無しさん:02/07/12 02:44
コモンダイアログの質問なんですが、GetOpenFileNameやGetSaveFileNameで出てくるファイルダイアログのリストビューの形式を変えるにはどうしたらいいのでしょうか?
デフォルトはLVS_LISTになっているので、これを最初からLVS_REPORTに変えておきたいのですが。
ウィンドウスタイルを直接変更してもファイルリストが正しく更新されないため表示がおかしくなるだけでした。

494 :デフォルトの名無しさん:02/07/12 15:20
SDKでのリストビューのサブアイテムの編集ができません。
何か知っている方おられましたら、教えてください。

495 :デフォルトの名無しさん:02/07/12 15:23
自前でedit貼り付けてください。

496 :デフォルトの名無しさん:02/07/12 20:54
>>492
本当にありがとうございます。


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

それでは失礼します。

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

MFCだったらこのあたり結構楽にできて再利用できるんだけど(w。

499 :デフォルトの名無しさん:02/07/13 00:55
WTLの方が再利用性高いです

500 :NDR:02/07/13 00:57
>>499
いゃん。

まぁ、ウィンドウクラスを作ってしまえば良いわけですが。


501 :デフォルトの名無しさん:02/07/13 10:31
再利用と言う点では、コンポーネント化が徹底しているVCLが最強。


502 :デフォルトの名無しさん:02/07/13 10:56
VCLじゃ、クライアントから親クラスを変更したり出来ないので、
柔軟な取り回しができん。

503 :デフォルトの名無しさん:02/07/14 19:52
ステータスバーを表示領域を変更しようと思って
indicators[]を変更した後、CMainFrame::OnCreate()に

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

を書いたんだけどうまくいきません。
SetParts()はどこで呼び出せいいのでしょう?

504 :NDR:02/07/14 21:14
>>503
???
んなまどろっこしい方法使わなくても

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

を使えばいいのに…

505 :503:02/07/14 22:09
>>504
おっしゃるとおりのやり方でできました。
どうもです。

132 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)