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


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

VisualC++相談室 4
1 名前:いさましいチビの女 :01/10/04 12:17
VisualC++関連の話題を扱うスレッドです。

旧スレッド
http://piza2.2ch.net/test/read.cgi/tech/993186053/l50

2 名前:デフォルトの名無しさん :01/10/04 14:09
削除依頼出しときました。

3 名前:デフォルトの名無しさん :01/10/04 18:24
きれいに減色するやり方教えてください。
自分で作ってみたんですが色の分布が広い画像ではイマイチです。
フルカラー画像から256色選択する部分と選択した色に残りの色を割り当てる
綺麗なアルゴリズム教えてください。
どこかに解説やソースが公開されていたりしませんか?
お願いします。

4 名前:200! :01/10/04 18:25
>>3 誤差分散法

5 名前:デフォルトの名無しさん :01/10/04 18:35
解像度を100倍くらいにして、ディザ

6 名前:デフォルトの名無しさん :01/10/04 19:26
>>3
全っ然VC++の話じゃねーな・・

7 名前:チビ女 :01/10/04 19:50
>>2
なぜー?(>A<)

8 名前:デフォルトの名無しさん :01/10/04 22:02
>>3
色空間はRGBよりXYZ(やLa*b*)でやったほうが素直に仕上がるようだ。

9 名前:デフォルトの名無しさん :01/10/04 23:35
起動時のタイトルバーの文字ってどこで変更するの?

10 名前:デフォルトの名無しさん :01/10/04 23:36
SetWindowTextでお願いします。>>9

11 名前:デフォルトの名無しさん :01/10/04 23:44
>>10
MFCが勝手に書き換えてるタイトルのこといってるんじゃないかな。

どっかオーバーライドすりゃいいんだけど、忘れた。
MFCのソースを読め

12 名前:  :01/10/04 23:48
>>9
CreateWindow()

13 名前:デフォルトの名無しさん :01/10/05 01:26
ねぇねぇ、c++(mfcも可)で、正規表現って、扱えるン?

14 名前:デフォルトの名無しさん :01/10/05 02:47
正規表現って何?

15 名前:デフォルトの名無しさん :01/10/05 02:48
まんこ

16 名前:デフォルトの名無しさん :01/10/05 03:07
/ちんこ/

17 名前:デフォルトの名無しさん :01/10/05 03:26
ちんこにぱーる。

$st="でんぐりがえし";
$st =~ s/で/ま/;

18 名前:デフォルトの名無しさん :01/10/05 06:04
自分で作れば、ってことになると思うが

19 名前:デフォルトの名無しさん :01/10/05 13:54
ある領域から、ある領域へメモリのコピーを行いたいのですが、
どのような方法が一番効率的でしょうか?

20 名前:デフォルトの名無しさん :01/10/05 14:00
>>19 何も考えずに memmove を使うと良い。

21 名前::01/10/05 14:12
256色選択する部分を改良したら格段に綺麗になりました。
次は誤差拡散ってのに挑戦してみます。

22 名前:デフォルトの名無しさん :01/10/05 14:18
>>19
memmove

でも自分で書いたほうがちょっと速いかも・・・

23 名前:19 :01/10/05 14:29
>>20
>>22
ありがとうございます。

memmoveのソースを読んでみたいのですが、
どうすればよいでしょうか?
マシン語のコードを出力してみたのですが、
memmoveについては出てこない・・・。

24 名前:デフォルトの名無しさん :01/10/05 14:35
LDIR(ふるっ

25 名前:デフォルトの名無しさん :01/10/05 14:48
>>19

速くなるのは、コピー元とコピー先の領域が重複する場合を
前提としないとき。標準の memmove は、そのままで速く動く
ように十分調節されているはず。

>>23
>マシン語のコードを出力してみたのですが、

外部関数は吐かない。

>memmoveのソースを読んでみたいのですが、

コンパイラのライブラリのソースを探すのは時間がかかる。
十分に経験があれば、君の考える方法で間違いないと思う。
変数の数を減らして、なるべくポインタを使って、
registerキーワードも付けておく。

26 名前:デフォルトの名無しさん :01/10/05 16:18
> ある領域から、ある領域へメモリのコピーを行いたいのですが、
^^^^^^^

...なぜmemmove? memcpyだと思うのだが。

27 名前:デフォルトの名無しさん :01/10/05 16:57
>>26
場合によりけり
領域が重なってる可能性がある場合はmemmove

28 名前:デフォルトの名無しさん :01/10/05 18:22
VCにSTLPortをインストールしたんですが、
CRT.NCBの情報を更新する方法がわからないので、
IntelliSenseが正常に働きません。

どうにか更新する方法ないでしょうか?

29 名前:デフォルトの名無しさん :01/10/05 19:50
age

30 名前:デフォルトの名無しさん :01/10/06 03:09
素直にmemcpy使え
リリースビルドだと最適化でrep movsd+αに変換されちゃうから>memcpy
2次キャッシュor実メモリにあることが前提でない限りどんな手動最適化したって無駄だ
(1次キャッシュにある限りどのCPUでも最速なので>rep movsd)
1次キャッシュにないことが前提ならFPU,MMX,SSE等を使った高速化手法が存在する

31 名前:デフォルトの名無しさん :01/10/06 06:41
DirectX sdkを使用してC++6.0でブロック崩しのプログラムを書いてみたんですが、コンパイルは特に問題ないのですが、リンクするときに
DXBlock.obj : error LNK2001: unresolved external symbol _DDLoadBitmap
等と9つ位出てしまいます。
これはsdkをちゃんと読み込んでないってことなんでしょうか?

32 名前: デフォルトの名無しさん :01/10/06 09:22
Visual C++ 6.0でコンパイルしたとtxtに書いてある
ソースコ−ドにdswやmdpがないのでお手上げです。
どなたかコンパイルの仕方教えてください。

33 名前:うんこ :01/10/06 09:38
あるディレクトリ下のファイルをすべてバッファに
取り込みたい場合に使うコマンドって何でしょう?
DQSは自覚しております。

34 名前:デフォルトの名無しさん :01/10/06 09:39
>>32
ソースコード一式を出せるなら、それを出したほうが早いと思うが。

一般的には Makefile があるなら nmake を使う。無い場合には cl 使って
コンパイル。

35 名前:デフォルトの名無しさん :01/10/06 10:02
>>33
意味がわからん。
1.ディレクトリ以下のファイル情報(ファイル名、サイズ、属性、etc...)を全てチェックしたい
2.ディレクトリ以下のファイルデータ(バイナリ)を全てメモリ上にロードしたい

まあ、どちらにしろ、FindFirstFile() FindNextFile()をMSDNで引きなさい。

36 名前:デフォルトの名無しさん :01/10/06 11:26
>>33
DQS=ドキュソ

37 名前:デフォルトの名無しさん :01/10/06 13:09
>>32
「Visual C++ でコンパイルする」というのと、
「*.dsw(ワークスペース) や *.dsp(プロジェクト) のファイルがある」というのは、
全く別のことです。(話の次元が違います)

ワークスペースやプロジェクトといったファイルが使われるのは、
Visual C++ に付属の「(いわゆる)統合開発環境」でビルドするときに限った話です。

38 名前:28 :01/10/06 14:27
俺の質問に答えろよ!!!!!

39 名前:28 :01/10/06 14:50
さーて荒らすか

40 名前:デフォルトの名無しさん :01/10/06 16:58
>>28
かっちょ悪いよ。

41 名前:デフォルトの名無しさん :01/10/06 17:33
>>32
コンパイル?
君のやりたいことはビルドじゃないのか?
どっちにしてもVCのメニューからビルドを選べ。

あと、ソースコードにdswだのmdpだの書き込まれてるわけじゃないぞ。
それらはビルドするときに勝手に作られる。

42 名前:28 :01/10/06 17:54
>>40
かっこ悪くても言いから教えろよ

43 名前:デフォルトの名無しさん :01/10/06 18:12
2chに来て吼えてる暇があったら自分で調べたらどうか。
ここでマジレスに見せかけたネタ回答をつかまされたらどうやって真贋を
確かめるつもりだ?

44 名前:28 :01/10/06 18:54
>>43
そんなの、実際にやって反映されてるか見れば経たかどうかは一目瞭然だろ。
御託はいいから、早く教えろよ。

45 名前:28 :01/10/06 18:55
経た > ネタ

46 名前:デフォルトの名無しさん :01/10/06 19:01
>>28
>VCにSTLPortをインストールしたんですが、

この時点で意味不明。VCってVisualC++のことじゃねーの?
開発環境に対してインストールしたってどういう意味だよ?

47 名前:28 :01/10/06 19:47
>>46
どういう意味だかわかってるだろ?
VCで使うためにインストールした。
揚足とってる暇があるなら、教えろよ。

48 名前:デフォルトの名無しさん :01/10/06 20:04
この板で「教えろ」と吼えてマジレスをもらった事例はない。
ネタにされる前に頭を下げたらどうだ?(w

49 名前:デフォルトの名無しさん :01/10/06 20:15
>>47
だから、揚足取られるような奴質問ってのは意味がわからんっていってんだよ。

>>28だけ読んだら
CRT.NCBを更新したい?ハァ?何それ?
手動で更新すればぁ? で終わり。

もっと君の遭遇している問題を明確にしなさいって事。

50 名前:デフォルトの名無しさん :01/10/06 20:16
>>49
奴質問ってのは奴の質問ね。

51 名前:デフォルトの名無しさん :01/10/06 20:28
今度仕事でVC++6.0(MFC)を使わなきゃならないんですが、
お勧めの入門書ってあります?
今まではVBとMS−Cの仕事ばかりだったんで難易度が高く理解できません。
俺も厨房PGだったのか・・・

52 名前:28 :01/10/06 20:29
>>48
いまさら頭下げてもかわんねーだろ

>>49 手動で更新すればぁ? で終わり。

だから、そのやり方を聞いてるんだよ。
お前、CRT.NCBが何かわかってねーだろ?

53 名前:デフォルトの名無しさん :01/10/06 20:43
>>51
MSDNに付いてるScribleチュートリアル。

54 名前:49 :01/10/06 20:57
>>52
知るわけねーだろ、お前ヴァカ?
俺が煽りかどーかもわかんねぇの?

55 名前:デフォルトの名無しさん :01/10/06 21:01
2chで質問するやつってまともな回答来るとマジで信じてるんだろか?
玉石混淆の中から苦労して玉だけ探し当てるよりは確実に玉だけ教えてくれるとこ
行ったほうがいいとおもわれ。

56 名前:28 :01/10/06 21:25
>>54
煽りだろうが、なんだろうが関係ねーんだよ。
俺はCRT.NCBの更新の仕方が分かればいいだけ。
あんたが知ってるかもしれないから反応したんだよ。

57 名前:デフォルトの名無しさん :01/10/06 21:35
> コンパイラの警告 (レベル 1) C4786
> 'identifier' : デバッグ情報で識別子が 'number' 文字に切り捨てられました。
> 識別子の文字列の長さが制限値を超えたので、切り捨てられました。

長い識別子など、どこにも使ってないのに、こんな警告がぞろぞろ出てしまいます。
我ながらしょうもない質問だと思いますが、万が一ヘルプに載っていること
以外でなにか原因をご存知の方、いらっしゃいましたら助言下さいませ。

58 名前:デフォルトの名無しさん :01/10/06 21:44
>>57
STLのmapとか使ってない?

#pragma warning(disable,4786)

を適当なところに書くと、警告でなくなるよ。

59 名前:49 :01/10/06 21:52
>>56
だから、ハァ、何それ?って最初にいってるじゃんよ。
洞察力が足りないよ、チミィ。
そんなんじゃこの先何回でも壁にぶち当たるよ?
そのたびにココにきて荒れるのかい? ┐('〜`;)┌

60 名前:57 :01/10/06 22:07
>>58
ありがとうございます、まさにその通りでした。
そして自分の情けなさに赤面です…。

61 名前:デフォルトの名無しさん :01/10/06 22:08
>56

一度ncbファイルを消すと自動的に再生成サレルヨ

イヤホント、マジデマジデ

62 名前:28 :01/10/06 22:10
>>62
それはプロジェクトのncbだけ。
とうぜんCRT.NCBとか別ディレクトリに移動したけど、
反映されなかったしね。

つーことで、引き続き募集中

63 名前:28 :01/10/06 22:50
俺の質問に答えろ

64 名前:49 :01/10/06 22:58
>>63
だからぁ、IntelliSenseってあれだろ。
クラスオブジェクト名の後に「.」をつけるとメンバがポップアップで出る機能だろ?
STLPortって用はライブラリだろ?ttp://www.stlport.org/にあるやつだよな?

自前のライブラリでもヘッダをincludeすればIntelliSenseは機能するのに
なんでCRT.NCBを更新する必要がある?いちいちincludeするのが面倒なら
手動でwindows.hでにでもincludeしておけばぁ?

65 名前:49 :01/10/06 22:59
用は要な。変換ミスは多めに見ろよ。

66 名前:デフォルトの名無しさん :01/10/06 23:05
つーか、IntelliSenseでincludeもしてねぇ識別子まで補完するのは
邪魔以外の何者でもないと思うんだが。意味ねぇし。

67 名前:49 :01/10/06 23:12
>>66
禿げ同。
28が何を考えてるのかサパーリわからん。

68 名前:デフォルトの名無しさん :01/10/06 23:42
MFC。
CListBoxにAddString()で項目を追加するとき、文字色を設定するには?
listboxからCDCをgetしてSetTextColorしてみたものの変わらず。
簡単な方法があったらおせ〜て!!

69 名前:デフォルトの名無しさん :01/10/06 23:46
>>68
自分で作れば?

70 名前:デフォルトの名無しさん :01/10/06 23:46
 

71 名前:デフォルトの名無しさん :01/10/06 23:48
できるだけ自分で作りたくないからMFCを使うんだろ〜が。

72 名前:28 :01/10/06 23:52
>>64 >>66
分かってないね。
#includeしようがしまいが、crt.ncbがある限りVC標準のSTLの候補が表示されて、
STLPortのが表示されるわけじゃない。crt.ncbを消してもSTLPortの候補は表示されない。
プロジェクトの外部依存以外の部分以外に追加すれば表示されるけど、
STLのヘッダなんていちいち追加したくない。

だから、crt.ncbを更新するのが一番いい判断だと思うんだが。

73 名前:28 :01/10/06 23:53
>>66>>67

74 名前:49 :01/10/07 00:01
>>72
ああやっと君の言いたい事がわかったような気がするよ・・・
名前空間ぐらい知ってるよな? それでもだめなら
Program Files\Microsoft Visual Studio\VC98\CRT\SRC
の中身を置き換えちまえ。VC標準のSTLはいらないんだろ?
どっちにしろIntelliSenseに頼るようなやつがSTLPort? (プ だけどな

75 名前:49 :01/10/07 00:07
>>72
>プロジェクトの外部依存以外の部分以外に追加すれば表示されるけど、
>STLのヘッダなんていちいち追加したくない。

だからwindows.hにでもincludeしとけっていってるだろ、ヴァカ。
お前レベル低すぎるわ。ネタとしても。

76 名前:28 :01/10/07 00:07
>>74
あんた、多分分かってない。
VC98/CRT/SRCを置き換えようが解決されない。

>STLPort? (プ だけどな
VCのSTLにバグがあるんだからしょうがないだろ

77 名前:28 :01/10/07 00:09
>>75
だからぁ、windows.hにincludeしても解決しないんだって。
データベース(crt.ncb)に登録されてる候補が最優先で表示されるから。
std::
って入力しても、VC標準のSTLの候補が出てくるわけ。
ちなみに、crt.ncb削除すると、普通のCランタイムの候補が表示されなくなる。

78 名前:  :01/10/07 00:10
>>72
*.ncbを編集するツールは俺の知る限りない。
つーことで、crt.ncbをつくれ。
まず、空のプロジェクトを作ってその中にstl-port、Cヘッダのすぺての
関連するファイルを「プロジェクトに追加」する。できたncbをcrt.ncbと
置き換える。出来るかどうか知らんけど。
ちなみに#includeしただけだと、コード補完は動かんぞ。

79 名前:デフォルトの名無しさん :01/10/07 00:24
一番恥ずかしいやつ >>49

80 名前:デフォルトの名無しさん :01/10/07 00:25
VC++ Ver6.0を使ってます。
メールを送信するクラスライブラリ等を探しています。
イメージしているのは下記の雰囲気のものです。

CMail Mail;
Mail.SMTP = "smtp.aaa.co.jp";
Mail.Subject = "○○の件";
Mail.To = "abc@xyz.co.jp";
Mail.From = "xyz@abc.co.jp";
Mail.File = "添付.txt";
Mail.Message = "いつもお世話になります。\nさようなら。";
Mail.Send();

・MFCを使っていてもかまわない。
・出来ればソースがあると有り難い。(今後勉強のため)

上記のようなものがどこかにないでしょうか?
MSDNライブラリ見てもよく分からないので・・

81 名前:28 :01/10/07 00:26
>>78
サンクス。面倒だけど、やってみる。

82 名前:デフォルトの名無しさん :01/10/07 00:26
一番ウザイやつ >>28

83 名前:49 :01/10/07 00:27
>>76
おまえも多分わかってない。
俺が言いたいのはVCのSTLのヘッダとライブラリを全部STLPortの奴に
入れ替えろって事。それで反映されないわけがないだろ。
お前のVCが存在しないライブラリを参照する特別製ならダメだけどな。

84 名前:49 :01/10/07 00:30
ああ、なんだか客観的にみると 「 28 = 49 = 自演厨房 」
に見えるな・・・

85 名前:28 :01/10/07 00:31
>>83
もしかして、VC使ったこと無い?
*.ncbはプロトタイプの情報全部記録されてるデータベースだから、
実際のヘッダがどうなっているかは関係なく、*.ncbに記録されてる情報しか表示されない。

#余談だけど、クラスウィザードがおかしくなるって言うのはコレが原因。

VCのIDEはヘッダの中身を走査してクラスウィザードやIntelliSenseに反映させるわけじゃないんで、
その方法じゃどうあがいても解決されない

86 名前:デフォルトの七士さん :01/10/07 00:34
わからないことがあるんですけど、教えていただきたくて書いてます。
CSplitterWnd::DoScroll(CView* pViewFrom, 、)
この第一引数の説明に

pViewFrom スクロール メッセージが発生したビューへのポインタ。

という説明が書いてあるんですけど,
ビュークラスへのポインタ?って事ですか?

誰か教えてください。お願いします。

87 名前:  :01/10/07 00:35
>>83
28もウザイがお前もウザイ。
MSDEVのコード補完はヘッダを見てるわけではない。
自分のプロジェクトに入っているコードを元にIDEが作ったncbと
最初からあるmfcatl.ncb,crt.ncb,win32.ncbをデータベースとして
候補を表示してる。

88 名前:49 :01/10/07 00:36
>>85
だから煽りだっていってるだろ・・・
なんかわかってるっぽい人がレスしてるじゃん。その人に結果報告でもしたら?
いつまでも俺にかまってるとダメ人間になっちゃうよ?

89 名前:デフォルトの名無しさん :01/10/07 00:44
49は明らかに「構ってクン」なんだから、放置しとけよ。
そのうちに飽きて消える。

90 名前:49 :01/10/07 00:45
>>87
べつに君にウザイって言われてもねぇ・・・
>>78と同一人物でしょ?
自分がやったことの無い方法を提示して
知識をひけらかしてるだけの奴にウザイって言われてもねぇ・・・
煽りと対してかわらんよ? ま、28も最初荒れてた割には
真剣に困ってるわけじゃなさそうだし、俺はもう降りるよ。


□□□□□□□□  大変失礼いたしました □□□□□□□□ 

91 名前:デフォルトの名無しさん :01/10/07 00:46
86かわいそうにな。
こんなときに質問なんて,,,,,

92 名前:デフォルトの名無しさん :01/10/07 01:02
>>86
"CView* pViewFrom"ってあるのだが・・・

93 名前:86 :01/10/07 02:13
86です。
BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
// ビューを何個か作る。
........。。;

// スクロールバーつける。
m_wndSplitter2.SetScrollStyle( WS_HSCROLL );
m_wndSplitter2.CreateScrollBarCtrl( WS_HSCROLL,
m_wndSplitter2.IdFromRowCol(0,0) );

で,分割ウィンドウに共有スクロールバーを作ってそのスクロールバーを動かしたい
んですけどMSDN読んでてもあんまりわかんなくて,
m_wndSplitter2.DoScrollBy(*****, 5, TRUE );
を使えば動くのかなって思って,*****になに書けばいいかわかんなくて
質問したんですけど、根本的になんか違うのでしょうか?
おしえてください。

94 名前:デフォルトの名無しさん :01/10/07 02:49
>>93
共有スクロールやったことないのだが。
DoScrollはスクロールが発生すると呼ばれる関数なので違うと思う。
CWndのスクロール関係の関数やGetScrollBarCtrlでスクロールバー
を取得していろいろやってみるとか。

95 名前:86 :01/10/07 12:23
94さん。ありがとう。
なんとかやってみます。

96 名前:デフォルトの名無しさん :01/10/07 22:46
sqrtfって何?

97 名前:デフォルトの名無しさん :01/10/07 23:05
>>96
sqrt() の float 版じゃないの?

98 名前:93 :01/10/08 12:17
分割ウィンドに個別のスクロールバーってつけれるんですか?

99 名前:49 :01/10/08 16:32
>>78
おい、空のプロジェクト作ってSTLPortのヘッダを全部プロジェクトに追加したなら、
それを雛型としてCustomAppWizardで登録すればいいじゃねーかよ!

ちゃんと教えてやれよ、ケチ!

100 名前:80 :01/10/09 21:43
う〜ん、フォローが付きませんね。 ( >80 )
クラスの格好してなくてもいいです。 クラス化ぐらいはやりますので。
80で挙げたプロパティー程度を入れるとメール送信してくれればそれでいいです。
やっぱそんなのないのかな?

101 名前:デフォルトの名無しさん :01/10/09 21:48
>>100
nMail.dll とかは?
別ファイルになっちゃうけど。

102 名前:URL忘れ :01/10/09 21:49
http://www.nanshiki.co.jp/lib/nmail.html

103 名前:デフォルトの名無しさん :01/10/09 21:54
 VC6の自分のプロジェクト内で、他の人の作ったプロジェクトの中の
クラス(一つだけ)を使いたいのですが、プロジェクトの追加やDependancyの設定
をしても、link時にリンク不能のエラーが出てきます。これは、必要な
.objファイルを一つ一つ丹念にリストアップすることしか解決法が
ないということでしょうか。

104 名前:デフォルトの名無しさん :01/10/09 22:09
>>100
RogueWaveのライブラリに、smtp agent classとかあるんじゃない?
popはあるみたいだけど。

105 名前:80 :01/10/09 22:20
>101-102
ソースがあればもっと嬉しかったですけど、これで目的は達成できそうです。
これだけ太っ腹なメーカーさんがnMail.dllの権利は放棄しないみたいなこと
を書いるので、おそらくそう簡単なものではないのでしょうね。(意味通じるかな?)
俺程度の素人には、このDllみたいなものを自作するのは荷が重いのかもし
れませんが、ぼちぼち勉強していきます。
いずれにしろ当面はこれで十分です。ありがとうございました。

106 名前:80 :01/10/09 22:33
>104
こちらも紹介ありがとうございます。
ただ、こちらのサイトを見るに個人で勉強がてらぱっと作るという用途ではなさそう
ですね。
本格的な製品開発向け、といったところでしょうか。
俺は前者なのでこちらのサイトは少し合いませんでした。
>80 にそのあたりの事情説明が不足していたため、お手数おかけしてしまったよう
です。申し訳ありません。

107 名前:デフォルトの名無しさん :01/10/09 23:16
>>103
ちょっと意味がわからないんだが。
他人の作ったクラスを使うならヘッダファイルとライブラリファイル(またはソースファイル)を
もらえばいいんじゃないの?

108 名前:デフォルトの名無しさん :01/10/09 23:26
103です。その使いたいクラスがまた他にいろいろクラスを使っていて、
そのクラスのヘッダだけをもらうだけではlink不能になるんですが、なにか
簡単に全部のヘッダファイルをプロジェクトごとインクルードすることは
できないものでしょうか…

109 名前:デフォルトの名無しさん :01/10/09 23:38
>>106
勉強がてら、だったら自分で作れよ

110 名前:デフォルトの名無しさん :01/10/09 23:46
「ドキュメント」から「ビューの状態」を遷移させたいんだけど、
どうやってやってますか?
やっぱりポインタひっぱってくるの?
ちょっとオブジェクト指向的に逝きたいんだけど、
参考になるもんございませんか?

111 名前:デフォルトの名無しさん :01/10/09 23:46
>>108
念のため確認するけどヘッダだけじゃクラスのメンバの宣言しかないから
定義部分(つまりソースファイル .cpp か ライブラリ .lib)がなきゃ
コンパイルできないよ。ヘッダファイルに定義まで書いてあるなら別だけど。
(それってC++で可だったっけ・・・?)

そんなことは分かってるとしてその状況ならむしろそのプロジェクトに
自分のファイルを追加したほうが早いんじゃない?

112 名前:sage :01/10/09 23:54
>>110
doc-viewはOOでもなんでもないからなあ。

あきらめてviewを拾ってくるか、
もっとましなフレームワークは選択できない?

113 名前:デフォルトの名無しさん :01/10/10 00:00
>>110
無理すんな、やめろ。

114 名前:デフォルトの名無しさん :01/10/10 00:18
>>112
「ましな」ってどういうのあるんですか?

115 名前:デフォルトの名無しさん :01/10/10 00:34
>>114
wtl

116 名前:デフォルトの名無しさん :01/10/10 00:41
>>115
こいつは聞きかじりだけで書いてて、wtlがどういうものか詳細は知らない

117 名前:  :01/10/10 00:52
WTLが出たので聞きたいのだが、WTLの日本語の解説ってないの?

118 名前:デフォルトの名無しさん :01/10/10 00:53
>>116
ワラタ

119 名前:デフォルトの名無しさん :01/10/10 00:58
日本語見たことない
べつにあのままでもわかるでしょ

120 名前:デフォルトの名無しさん :01/10/10 02:06
>>110
CDocument::UpdateAllViews()じゃいかんの?
対応するViewのOnUpdate()が呼び出されるんだけど。

>>112
上記メソッドがObserverパターンに対応すると思うのだけど、どうよ。

121 名前:デフォルトの名無しさん :01/10/10 02:17

バージョンが6.0からあがらないんですけど大丈夫なんでしょうか?

122 名前:おいちょかば :01/10/10 05:37
APIでMDIを扱っていたんですけど、DOCウィンドウを最大化した状態で
FRAMEウィンドウをリサイズするとDOCウィンドウのサイズは変わらずに
そのままになってしまう。FRAMEのサイズにあわせてDOCのサイズも
変化するようにしたいんだけどどうしたら良い?

123 名前:デフォルトの名無しさん :01/10/10 07:47
マップモードをかえて描画したのですが、
 pDC->SetMapMode(MM_ISOTROPIC);
 pDC->SetWindowExt(0x100,0x100);
 pDC->SetViewportExt(0x200,0x200);
LineToなどがうまく描画されません。
端の方が細い線になってしまいます。
何が原因なんでしょうか?
 pen.CreatePen(PS_SOLID, 1, RGB(0,255,0));
 oldPen = pDC->SelectObject(&pen);
 pDC->SetROP2(R2_XORPEN);
ちなみにペンはXORです。

124 名前:デフォルトの名無しさん :01/10/10 10:00
>>122 WM_SIZE, WM_SIZING

125 名前:デフォルトの名無しさん :01/10/10 10:16
ソースリスト等は、どういうタイミングでセーブされるんだろう

停電にあったけど、ソースが生きてたので

126 名前:デフォルトの名無しさん :01/10/10 11:55
>>125
Ctrl+Sを押したとき
F5を押したとき
Ctrl+F5を押したとき
など

127 名前:デフォルトの名無しさん :01/10/10 12:25
ボタンなどのコントロールを飛び越える線を書きたいんだけど、どうすればいい?

128 名前:122 :01/10/10 13:16
>>124
最大化されてると効かなかった気が…
ちょっと試してみます

129 名前:デフォルトの名無しさん :01/10/10 15:12
マジメに質問です。
VC++ を使ってコンソールアプリ作ってますが、
プログラムの中から外部の .exe を実行させる方法はあるのでしょうか。
引数の渡し方など、詳しく教えていただければありがたいと思います。

当方、VC++6、WinMe です。
MFC は使っても使わなくてもいいです。
よろしくお願いします。

130 名前:デフォルトの名無しさん :01/10/10 15:30
>>129 CreateProcess 関数を呼ぶこと。この関数を呼ぶには STARTUPINFOとPROCESS_INFORMATION構造体が必要である。
STARTUPINFOには起動時の状態を指定する。
STARTUPINFOのdwFlagsに渡したい情報のフラグをOR演算子 | でつなげて指定する。
PROCESS_INFORMATION構造体は、プロセスの情報を得るために使う。そのまま渡せば良い。
初めのうちは SECURITY_ATTRIBUTES のアドレスを渡さなくてもOK(代わりにNULLを渡す)。

131 名前:デフォルトの名無しさん :01/10/10 15:57
PROCESS_INFORMATION pi;
STARTUPINFO si;
si.cb = sizeof(si);
si.lpReserved = NULL;
si.dwFlags = 0
CreateProcess("notepad.exe", NULL, NULL, NULL, TRUE,
HIGH_PRIORITY_CLASS, NULL, NULL, &si, &pi);

132 名前:デフォルトの名無しさん :01/10/10 16:29
いつ見てもC/C++のソースは汚いなぁ
やっぱりDelphiが1番良いや

133 名前:デフォルトの名無しさん :01/10/10 16:45
CreateFileでopen(モードはGENERIC_WRITEとOPEN_ALWAYS)したファイル
に、データを追加したいのですが、
WriteFileでデータを書き込むと、追加ではなく、ファイルの最初から書き込みされてしまいます

openした時、ファイルポインタが先頭になってしまっているから?
だと思うのですが、

データを追加したい場合はどうすれば良いのでしょうか?

134 名前:デフォルトの名無しさん :01/10/10 16:47
>>97
WinExec("notepad.exe", SW_SHOW);
system("notepad.exe");

135 名前:デフォルトの名無しさん :01/10/10 16:50
>>133
SetFilePointer

136 名前:デフォルトの名無しさん :01/10/10 17:08
129です。
CreateProcess を使って、所望の動作を実現できました。
お返事を頂いた方、本当にありがとうございました。
#なぜかフルパスじゃないと動かないという問題が残ってますけど。。

137 名前:デフォルトの名無しさん :01/10/10 17:16
>>136
重要なことだが、返されたプロセスハンドルを WaitForSingleObject で待って、CloseHandle しないといけない。

>#なぜかフルパスじゃないと動かないという問題が残ってますけど。。

CreateProcessの第8引数とか、GetFullPathName, Get{Current,Windows,System}Directory, SearchPath, FindFirstFile[Ex] を調べとけ。

138 名前:デフォルトの名無しさん :01/10/10 17:22
>>137 待ちたくなければ、さらにCreateThread しなければいけない。

139 名前:デフォルトの名無しさん :01/10/10 17:23
>137
ありがとうございます。
で、調べたサンプルプログラムに
if (pi.hProcess) {
  DWORD dwExitCode = STILL_ACTIVE;
  while (dwExitCode == STILL_ACTIVE) {
    WaitForSingleObject( pi.hProcess, 1000 );
    GetExitCodeProcess( pi.hProcess, &dwExitCode );
  }
}
とあったんですが、これで問題ないでしょか?

#フルパス問題については調べます。

140 名前:デフォルトの名無しさん :01/10/10 17:43
サンプルの中には、初心者の無知に付け込んだものが多い。
WaitForSingleObject 関数が終わるまで待つので、STILL_ACTIVE かどうかを調べる必要はない。
while ループは要らない。WaitForSingleObjectを抜けた地点で、プロセスの終了が保証される。

141 名前:デフォルトの名無しさん :01/10/10 18:14
で?

142 名前:デフォルトの名無しさん :01/10/10 18:34
>>141 MSDNを見て考えましょう。

DWORD dwResult;
if (pi.hProcess) {
  WaitForSingleObject( pi.hProcess, INFINITE );
  GetExitCodeProcess( pi.hProcess, &dwResult );
}

143 名前:デフォルトの名無しさん :01/10/10 18:56
dwResult はどうやって取得するの?

144 名前:デフォルトの名無しさん :01/10/10 19:00
GetExitCodeProcess が格納してくれる。

145 名前:てんさいぷろぐらむぁ(偽) ◆8Fck5JHo :01/10/10 20:13
>>142

なんでもかんでもINFINITEにしたら不測の事態や特殊な処理に対応できないのでわ?

>>139のサンプルにコメントを入れてみる。
if (pi.hProcess) {
  DWORD dwExitCode = STILL_ACTIVE;
  while (dwExitCode == STILL_ACTIVE) {
    WaitForSingleObject( pi.hProcess, 1000 );
    GetExitCodeProcess( pi.hProcess, &dwExitCode );
    // ここで状況に応じてあんな処理やこんな処理をしてみたりする
  }
}


サンプルはある程度柔軟性を持ったソースである方が正しいような気がする。
まあ何があっても自然な形で終わらせられるのが一番スマートなんだろうけど
他のプロセスをいぢる以上相手が何やってるかわからん場合もあるだろうし。

146 名前:てんさいぷろぐらむぁ(偽) ◆8Fck5JHo :01/10/10 20:15
if (pi.hProcess) {
  DWORD dwExitCode = STILL_ACTIVE;
  while (dwExitCode == STILL_ACTIVE) {
    WaitForSingleObject( pi.hProcess, 1000 );
    GetExitCodeProcess( pi.hProcess, &dwExitCode );
    // ここで状況に応じてあんな処理やこんな処理をしてみたりする
  }
  // ここで状況に応じてあんな処理やこんな処理をしてみたりする
}

147 名前:デフォルトの名無しさん :01/10/10 20:18
>>146
STILL_ACTIVEでの判定は正しくないよ。
プロセスが終了コードとしてSTILL_ACTIVEと同値を返した場合は
判定をミスする

148 名前:デフォルトの名無しさん :01/10/10 20:18
>>145
>なんでもかんでもINFINITEにしたら不測の事態や特殊な処理に対応できないのでわ?

一理有り。しかし、while と STILL_ACTIVE は不要。

149 名前:sage :01/10/10 20:27
不測の事態用のイベントオブジェクトも作って
WaitForMultipleObjectしとけ。

CloseHandleきちんとやっとけ。

150 名前:てんさいぷろぐらむぁ(偽) ◆8Fck5JHo :01/10/10 20:37
うーん
ぢつはCreateProcessとか他のプロセスを使うモノは
あんまり書いた事が無いんでなんとも言えないんですが。

先に>>148について
>一理有り。しかし、while と STILL_ACTIVE は不要。

親的には本来終わっているはずの子プロセスが
内部で勝手に無限ループなどをかまして
終了しない場合を考えてみると
INFINITEを指定すると子プロセスに引きずられて親も永遠に終了しなくなってしまう。

WaitForSingleObjectのタイムアウト値とwhileのループで
定期的に状態を調べる事によってそれを防げる。
whileにカウントを付けといて子プロセスが
(本来終了しているはずの状態で)数回ループした場合子プロセスは
不正な状況に陥ったと判断してTerminateProcessで強制的に終了する。
TerminateProcessもかなり危険であるが、親も一緒に死亡するよりはまし。

Ctrl+Alt+Delのタスクマネージャを自分でやるかんぢといえば分かりやすいかな?

>>147
>プロセスが終了コードとしてSTILL_ACTIVEと同値を返した場合は
>判定をミスする

それはそのプロセスがあほ過ぎるので仕方が無いかと(^^;
まあサンプルだしその辺はてきとーに対処してくださいソースなんだろうと。

151 名前:デフォルトの名無しさん :01/10/10 20:41
> それはそのプロセスがあほ過ぎるので仕方が無いかと(^^;

あほすぎるって、終了コードに対するガイドラインってあったっけ?

152 名前:てんさいぷろぐらむぁ(偽) ◆8Fck5JHo :01/10/10 21:05
とりあえず今MSDNをてきとーに見た感じでは

少なくともGetExitCodeProcessの説明で
「指定したプロセスが終了していないときは、STILL_ACTIVE が格納されます。」
と書いてあるんだから、STILL_ACTIVEを返さないのが普通では?

この値ってSCODEじゃないのかと。

153 名前:beginer :01/10/10 22:15
for(;;){ここ}
ここで宣言した変数は、forを抜けても生き続けますか?

154 名前:デフォルトの名無しさん :01/10/10 22:25
no

155 名前:beginer :01/10/10 22:30
ははぁ!わっかりましたー!

156 名前:デフォルトの名無しさん :01/10/10 23:31
質問です。
ifstreamを使うだけで、デバッグ終了時に
「メモリリークじゃボケ」って出るんですけどなんででしょうか?

157 名前:デフォルトの名無しさん :01/10/10 23:33
>>154
嘘言うなよな

>>155
生き続けます

158 名前:名無しさん :01/10/10 23:33
どう使ってるのか書けやゴルァ

159 名前:デフォルトの名無しさん :01/10/11 00:28
BoundsCheckerで
「リソースリークされた場所、GlobalAddAtomA(wincore.cpp)」
とかって出るんですけど、これってどういうことでリークしてるの?

160 名前:デフォルトの名無しさん :01/10/11 00:37
GlobalAddAtom

161 名前:sage :01/10/11 00:38
>>159
たぶんこれ
ttp://www.geocrawler.com/archives/3/487/1999/11/0/2927948/

162 名前:デフォルトの名無しさん :01/10/11 00:46
>>161
よ、読めん。なんて書いてあるの?

163 名前:sage :01/10/11 00:56
嘘訳。

いわなかったっけ?リークじゃないけど、(ツールは)リークだって報告するね。
アイコンみたいに、プログラムが死ぬまで持たなきゃいかんリソースを確保してるんだ。
同じように、いろんなメモリやファイルのマッピングも、プログラムが死ぬまで
確保しておくんだよ。

だれか修正して。

164 名前:名無し蟻 :01/10/11 02:56
>>157

そーゆー嘘を言っちゃいかんよ

165 名前:デフォルトの名無しさん :01/10/11 03:49
>>164 に一票。
スコープ外で生きてたらたまらんわ。

166 名前:デフォルトの名無しさん :01/10/11 10:04
>>165
俺も一票。不在者投票。

167 名前:166 :01/10/11 10:06
ただ、>>157の人は、スコープはなくなってもメモリは解放されないと
言ってるような気はする。普通、それを生き続けるとは表現しないと
思うけどね。

168 名前:デフォルトの名無しさん :01/10/11 10:11
すみませんが質問です
VC++6.0 Win32SDKでプログラムの勉強しています

マウスポインタがウィンドウ上部のツールボタンなどに
触れたと同時の下のステータスウィンドウに説明文を
表示させたいのですがうまくいきません
WM_SETCURSORを使ったのですが、ツールバーにいくと
メッセージを捕まえてくれるのですが、個々のボタンでは
うまくいかないのです。
解決方法ご存知の方がいましたら、教えてください
お願いします

169 名前:デフォルトの名無しさん :01/10/11 10:25
がいしゅつならスマソ。
VC++で、UNIXのregexpに相当する関数ってあります?

170 名前:デフォルトの名無しさん :01/10/11 10:41
>>168
WM_MOUSEMOVE で捕らえて WM_NCHITTEST の返り値を調べてみましょう。
ツールバーのボタンはツールバーの子どもです。

171 名前:168 :01/10/11 10:43
>>170
レスありがとうございます!
さっそく調べてみたいと思います
助かります

172 名前:デフォルトの名無しさん :01/10/11 10:53
>>127
>ボタンなどのコントロールを飛び越える線を書きたいんだけど、どうすればいい?

推奨しないけど、GetDesktopWindow() で得たウィンドウは、スクリーン全体を描画できます。
やり方としては、GetDesktopWindow, GetWindowDC の後、InvalidateRectで領域を設定してから
BeginPaint して、終わったら EndPaint を使う。MapWindowPoints とか <windowsx.h> の MapWindowRect は座標変換に役立つ。

173 名前:デフォルトの名無しさん :01/10/11 10:57
>>172
WM_PAINT 以外では BeginPaint を呼ぶな。

174 名前:デフォルトの名無しさん :01/10/11 11:21
>>172
非矩形ウィンドウを作って最前面に持ってくる。

175 名前:デフォルトの名無しさん :01/10/11 11:20
Microsoft Win32 APIの関数と概要:
http://www.topposystem.co.jp/DL/Win32API/

176 名前:デフォルトの名無しさん :01/10/11 11:46
IPアドレスを示すテキストデータ (例: '192.168.1.1' )
が正しいものかどうか
(変な英文字が入ってたり、255を超える数字が含まれていたり・・・ 等)
を判断する簡単な方法(API等)はありますか?
それとも、自分で一つ一つ
数字三桁で255以内で、次が'.'で、・・・と確認処理作るしかないのでしょうか

変なデータをsocket関数に渡すと、errorが返るかと思えば、
暴走しちゃうんですよね
それで、チェックが必要になりました

177 名前:デフォルトの名無しさん :01/10/11 11:59
>>176 簡単かどうかは知らんけど、これでどうだ
unsigned i1,i2,i3,i4; char c;
if (std::sscanf(ip_string, "%3u.%3u.%3u.%3u%c", &i1,&i2,&i3,&i4,&c) == 4
     && i1 < 256 && i2 < 256 && i3 < 256 && i4 < 256) {
    puts("OK");
}
else {
    puts("NG");
}

178 名前:デフォルトの玉無しさん :01/10/11 18:22

パスの通しかた教えてください。
ビルドの際に標準のパス(VC標準のヘッダやライブラリのパス)以外に
自分のライブラリ用のフォルダも参照されるようにしたいです。
レジストリをいじるんですか?
それとも自作ライブラリを標準パスにコピーするべきですか?

179 名前:デフォルトの名無しさん :01/10/11 20:18
>>178
set path=

180 名前:sage :01/10/11 23:18
-I
-L

181 名前:デフォルトの玉無しさん :01/10/11 23:19
すいません。質問させていただきます。
AbcCreateという関数をエクスポートする必要があります。
VC++のextern "C" __dllexport HRESULT CALLBACK AbcCreate(void* 0); では、
_AbcCreate@4になってしまいます。
VC++で装飾やアンダーライン抜きのDLLを作るにはどうすればよろしいのでしょうか。
BCC32ではうまくいきました。

182 名前:デフォルトの名無しさん :01/10/11 23:25
>>181
リンカに /export:AbcCreate=AbcCreate を渡すか、定義ファイルを書け。

LIBRARY Hoge
EXPORTS
AbcCreate=AbcCreate

183 名前:デフォルトの玉無しさん :01/10/11 23:36
速いレスありがとうございます。おかげでうまくいきました。私は6分で解決されることに丸半日を費やして何もできなかった愚かな密度の無い人間です。
自分が如何に無知かがよくわかりました。本当にありがとうございました。

184 名前:デフォルトの名無しさん :01/10/11 23:39
>>178

cd ~/
vi .bashrc
[i]
PATH=$PATH.:
[ESC]
:wq!

以上だ。

185 名前:122 :01/10/12 00:19
>>124
試してみましたがうまくいきません。

最大化しているDocウィンドウに
SendMessage( hDoc, WM_SIZE, (WPARAM)SIZE_MAXIMIZED, (LPARAM)(x+y<<16) );
とやっても反応しません。
いったんもとのサイズに戻したあと最大化、とかやってみましたが、
ちらちらしてちょっといやな感じでした。

186 名前:デフォルトの名無しさん :01/10/12 00:44
>>178
メニューのプロジェクト→設定

187 名前:デフォルトの名無しさん :01/10/12 01:32
あっ、181=183です。182さんありがとうございました。

188 名前:デフォルトの名無しさん :01/10/12 09:27
>>185
最大化しているものを最大化してどうする?
maximize の逆は restore。メッセージの受け方、知らないの?
ウィンドウのサイズが変わったら WM_SIZING を受ける。
メッセージを受けたら ShowWindow, SetWindowPos で操作する。

189 名前:157ではないけれど、 :01/10/12 13:28
>>153
>>157 の言っている事の方が正しい。
157を嘘と言っている奴は、宣言と定義の区別がついていないと思われ。
文章の感じから、>>153もその一人みたいだが。

190 名前:166 :01/10/12 14:12
>>189
>>166 & >>167 の者だけど、俺はどう?

191 名前:デフォルトの名無しさん :01/10/12 14:50
>>190
おそらく >>153 自身が宣言と定義を混同していると思うんだが、まずはその点から。
宣言と定義の例をそれぞれ挙げると、前者は extern int i, 後者は int i となる。宣言
では変数の実体は確保されないが、逆にスコープを抜けても変数が保有している
データは開放されない。

--------------------------------------------------------------------
{
  extern int i;
  i = 0;
}

{
  extern int i;
  printf("%d\n", i);  // 0 が出力されるはず。
}
--------------------------------------------------------------------

もちろん、この場合には i に対してどこかで実体を与えないとならない。実体がない
とリンク時に「シンボルが解決できない」という類のエラーになる。


>>153 の「宣言」を「定義」に置き換えた場合。メモリの開放に関しては

- そもそも自動変数がスタック上に取られるとは限らない。現実に、レジスタをうまく使い
 まわすことで、スタックを消費しない場合もありうる。

- 自動変数をスタックに取る処理系でも、スコープを抜けた瞬間にスタックフレームポイン
 タを操作して、スタックを縮める実装があっても構わない。また同一のスタック領域を、別
 の自動変数に割り当てて使うのも OK。

 for (;;) {
   int i;
 }
 for (;;) {
   int j;  // これで &i == &j とか。
 }

ということで、標準Cの範疇では「スコープを外れた自動変数が持っていたデータに関して
は、スコープを外れた瞬間に保証できなくなる(そもそもアクセスする手段を提供してない)」
以上のことは言えない。

192 名前:名無し蟻 :01/10/12 14:52
>189

...もしかして、for ( int i ; ; ){}と間違ってないか?

193 名前:名無し蟻 :01/10/12 14:58
>191

あぁ、そうか宣言か。定義と読み間違えてた。悪い。

確かに宣言だけなら実体はつくられないから、「生きてるかどうか」なんてのを考えるのはナンセンスだな。
この辺りがわからなければCの入門書を読み直せばわかるだろう。

だがforブロック内で変数”宣言”なんてのはスパゲティの素だと思うから止めた方が良いと思うけどね

194 名前:189 :01/10/12 15:19
>>190
同類。変数の宣言とその寿命は別物。
宣言が必ずしも定義とは限らない。

195 名前:デフォルトの名無しさん :01/10/12 15:31
>>193
熱く語る前にしっかり読め。

196 名前:154 :01/10/12 15:37
オレも読み違えてた。
でも、じゃぁこの質問単なる引っ掛けか?
普通forブロックで宣言なんてしないよな。

197 名前:デフォルトの名無しさん :01/10/12 15:59
なるほどなー やっぱ2chはタメになるゼ!
かーさん!新しいパソコン買って!!

198 名前:雑談スレないから、ここに書くよ :01/10/12 16:01
たまに、システムのincludeファイル(windows.hとか)の中身を見たい時があって、
エディタで開いたりするけど、
これらのファイルって、READ ONLYじゃないんだね
で、見てる時にキー操作のミスで知らないうちに
一文字くらい変なところにアルファベットとか打っちゃって、
そのまま間違ってセーブしたりして、
それでエラーでたら、解決に相当悩む気がする

さっき、知らずに変な文字打っちゃってて、
気が付いたから良かったんだけど・・・

199 名前:デフォルトの名無しさん :01/10/12 16:07
>>198 間違ってたらデバッグしてねって事なんだよ。

200 名前:デフォルトの名無しさん :01/10/12 17:00
>>193-196
いや、やるだろ。
「変数はそれが使用される場所で宣言されるべきである。」

201 名前:デフォルトの名無しさん :01/10/12 17:47
>>200
定義じゃなくて宣言なの?

202 名前:デフォルトの名無しさん :01/10/13 00:15
あくまで趣味プログラミングに括った場合での質問です。
自分は普段MFCを使わずにプログラミングをしているのですが、
MFCでプログラミングしている友人から、
「MFCを使わないのって、どこがいいの?」
という質問が飛んできました。
とりあえず自分は、軽い・実行モジュールサイズが小さい・フレームワークの
段階から自由に設計できる、という利点を挙げたのですが、
どうにも納得がいかないようなのです。
自分も、MFCを使うことの利点はわかっていますが、
彼にもSDKプログラミングの楽しさを知ってもらいたいなーというのもあります。
彼を納得させられるような、両者の違いというのをご教授願いたいです。

203 名前:デフォルトの名無しさん :01/10/13 01:12
MFCは多機能、フレームワークを作らなくても良いから書き始めるまでが早い、
クラスウィザードの全面的支援が得られる・・・
ごめん、俺やっぱSDKよりMFCの方が好きだわ(w

204 名前:デフォルトの名無しさん :01/10/13 01:22
>とりあえず自分は、軽い・実行モジュールサイズが小さい・フレームワークの
>段階から自由に設計できる、という利点を挙げたのですが、

ていうか、この程度の瑣末なメリットを捨て去って余りある利点がMFCにはある。

205 名前:sage :01/10/13 02:44
誰か激しく突っ込んでやれよ >>196

206 名前:デフォルトの名無しさん :01/10/13 03:43
現在スクロールバーを自作しています。
標準のスクロールバーは16ビットまでしか扱えないため32ビットの範囲を扱えるものを作っています。
通常のスクロールバーと同じ動きにしたいんですがタイミングなどが分からないので教えてください。

1.スクロールバーの矢印のボタンを押すとスクロールしますが
  押しっぱなしにするとすこし間隔があいてから自動で連続スクロールが開始されます。
  この時の間隔の取得方法

2.連続スクロールが始まってからの間隔の取得方法

3.スライド部分をドラッグしてスクロール出来ますが
  ドラッグした状態で20ドットほどスクロールバーから離れると解除されます。
  また近づけるとドラッグが有効になります。
  この境界部分のピクセル数の取得方法


これらはAPIで取得できるのしょうか?
教えてくれた人には「娘。ポッキー?当たるの〜?」です。

207 名前:122 :01/10/13 03:52
>>188
指南ありがとう。希望の動作ができました。
MDIClientのWM_SIZEでDOCウィンドウに対して
SetWindowPosをやって解決…
これで安心して逝けます。再びありがとう

208 名前:デフォルトの名無しさん :01/10/13 04:35
>標準のスクロールバーは16ビットまでしか扱えないため
NTでもそうなんだっけ?

209 名前:デフォルトの名無しさん :01/10/13 04:46
>>206
32bitを扱えるぞ。16bitなのはWM_H/VSCROLLのWPARAMだけ。

210 名前:デフォルトの名無しさん :01/10/13 07:18
>>206
全部APIで取得できるよ。
おれも前に作ったよ(ゲームのセッティング画面用だけれど)

211 名前:beginer(153) :01/10/13 07:59
スンマセン!ジツハ,シツモンジタイ マチガエテマシタ!
int* min = &data[i]; は一回目のループが
終わった時、*minはどうなるんざましょ?ってことだったのです。スンマセン!

#include <iostream>

void sort(int* data, int n)
{
for (int i = 0; i < n - 1; ++i) { /* 走査の回数は n - 1 回 */

int* min = &data[i]; /* 未整列部分の先頭を最小値と仮定 */

for (int j = i + 1; j < n; ++j) { /* 未整列部分を走査 */
if (*min > data[j]) { /* data[j] が *min よりも */
min = &data[j]; /* 小さい場合は、それを新 */
} /* しい最小値と仮定 */
}

int temp = *min; /* 最小値と未整列部分の先頭を入れ替える */
*min = data[i];
data[i] = temp;

}
}

int main()
{
int data[] = {12, 8, 4, 3, 7};
sort(data, 5);

for (int i = 0; i < 5; ++i) std::cout << data[i] << std::endl;

return 0;
}

212 名前:189 :01/10/13 14:01
>>211
minは外側のfor (int i = 0; i < n - 1; ++i)のループの繰り返しのたびに、
新たに作られる。これは外側のforループのブロックの先頭でminを*定義*して
おり、そのブロックの終わりまでがminのスコープとなるため。

# あと、どうでもいいけどbeginnerな。(w

213 名前:デフォルトの名無しさん :01/10/13 14:06
ワロタ

214 名前:beginner(153) :01/10/13 14:49
>>212
ワッカリマシター!アリガトウゴザイマシター!
宣言ではなくて、定義だからですねん。
ヤヤコシイ(;∀;)

215 名前:189 :01/10/13 16:16
>>214
ちと書き方がまずかった。
誤解を招きそうなんで以下の通り訂正。

minは外側のfor (int i = 0; i < n - 1; ++i)のループの繰り返しのたびに、
新たに作られる。これは外側のforループのブロックの先頭でminを*定義*して
いるため。また、この例では定義=宣言でもあるため、そのブロックの終わり
までがminのスコープとなる。

>>194でも書いたが、定義は宣言でもあるが宣言は必ずしも定義とは限らない。
宣言は、コンパイラに対して他の部分で定義された、あるいは今まさに定義さ
れようとしているシンボルの存在を教えるためのもので、強く型付けされた言
語では、これ無しにシンボルは利用できない。フォワード宣言や他の翻訳ユニッ
トで定義された大域変数のプロトタイプ宣言などは、どれもそのシンボルを現
在のスコープに導入するためのもの。そういう意味で、>>200の言っているこ
とは正しい。ただ、>>201が書いているように、多くの場合、>>200の言う宣言
はその定義も含む変数のこと。

通常、宣言といったら定義と区別してそう呼ぶことが多く、定義を含まないも
のを指すため、>>189のように書いた。

beginner(153)が迷いませんようにとの願いを込めて長レス。sage。

216 名前:202 :01/10/13 16:44
>>203-204
ご意見ありがとうございます。
どちらから入ったかによって、その逆が取っつきにくく感じられることって
ありますよね。自分も友人もそのような傾向にあるようです。
自分がSDKの道に入ったのは、「猫でも〜」のページとの出会いでした。
ていうか、このスレって、SDK派の人は少ないのでしょうか・・・。

217 名前:beginner(153) :01/10/13 18:21
>>215
宣言と定義の違いがいまいちわかりません。
struct A{
int a;
int b;
};
はどっちでしょうか?
int main (){
int a;
return 0;
}
は、どっちですか?
トイウカ、マトハズレナシツモン?(・□・;)

218 名前:206 :01/10/13 19:11
SBM_GETSCROLLINFO で32ビットのトラック位置(?)が取得できました。
WM_HSCROLL では16ビットなので16ビットまでしか扱えないと思ってました。
というわけで自作するのは辞めました。
パイパイキーン!!

219 名前:デフォルトの名無しさん :01/10/13 23:48
>>217
そろそろ腰を据えてK&Rを読みなさい。
その方が君のためになる。

220 名前:デフォルトの名無しさん :01/10/13 23:51
>>217
前者が定義、後者の int a; が宣言だと思う。
そもそも「変数の定義」なんて言い方は無いと思ったけど・・・。
変数は宣言するものであって定義するものじゃないんじゃないの?

221 名前:デフォルトの名無しさん :01/10/14 00:04
>>220
君もそろそろ腰を据えてK&Rを読みなさい。
その方が君のためになる。

222 名前:beginner(153) :01/10/14 00:07
K&Rですか!!
も、もうちょっと詳説C++プログラミングを
読み進めようと思います。。。
あと、C言語ポインタ完全制覇も。。。

前に、K&Rらしき本をチラリと見たのですが、
サパーリワカラナカッタノデ…。
まだ参照とかポインタとか理解が不十分なモノデ

223 名前:デフォルトの名無しさん :01/10/14 09:41
>>222
じゃあ、他の本読むの無駄だと思いませんか?
まずはK&Rを完全理解するのを目指すのが一番いいと思います。

224 名前:デフォルトの名無しさん :01/10/14 11:54
>>223 に激しく一票。

C++ だと、宣言と定義の境界があいまいになってくる部分があるように思う。
だからいきなり C++ じゃなくって、まず K&R が先。

225 名前:デフォルトの名無しさん :01/10/14 15:30
IMEの有効無効の切り替えはどうやるんですか?
自作のエディタ(たいした機能はなし)を作ってます。
読み取り専用のものと編集可能なものの2種類です。
同じアプリの中で同時にある場合
読み取り専用にフォーカスがある場合IMEを無効にして
編集可能なものの場合有効にしたいです。
(エディットボックスの読み取り専用みたいな感じです。)
何ていうAPIを使ったらいいですか?

226 名前:デフォルトの名無しさん :01/10/14 15:38
>>225
ImmSetConversionStatus
ていうかMSDN読め。

227 名前:デフォルトの名無しさん :01/10/14 15:47
新たにクラスを作成するとデフォルトコンストラクタが
自動的に宣言、定義されるのですが、
これって残しておかないとまずいのでしょうか?

228 名前:デフォルトの名無しさん :01/10/14 15:56
あなが必要でなければいりません。ヘッダとcppの両方のコンを消してください。

229 名前:227 :01/10/14 18:43
>>228
どもです。デストラクタが自動生成されるのはわかるような気がしますが、
なんでデフォルトコンストラクタが作られるんでしょうか?

230 名前:デフォルトの名無しさん :01/10/14 18:52
コピーコンストラクタを自動生成してもあまり嬉しくないから。

231 名前:227 :01/10/14 19:50
>>230
どちらか(copy or default)生成しなければならない理由でもあるのですか?
両方とも生成されなくても良いと思うのですが。

232 名前:デフォルトの名無しさん :01/10/14 19:59
デフォルトコンストラクタって、
どうせ書くことのほうが多いんだし、
雛型だけでも自動的に吐いてもらうと楽じゃん。
いらなきゃ10秒で削除できるし。

233 名前:デフォルトの名無しさん :01/10/14 20:11
あとから派生クラスでオーバー炉ー℃したくなったときにはじめっから書いておけば楽ジャン

234 名前:デフォルトの名無しさん :01/10/14 20:12
らい℃だったか。

235 名前:デフォルトの名無しさん :01/10/14 20:12
>>231
生成されると不都合があるのか?

236 名前:デフォルトの名無しさん :01/10/14 20:18
>>232-235
レスをありがとうございます。
ただ、的が外れてまして、
>>229
> なんでデフォルトコンストラクタが作られるんでしょうか?
>>230
> コピーコンストラクタを自動生成してもあまり嬉しくないから。
>>231
> どちらか(copy or default)生成しなければならない理由でもあるのですか?
に対する回答がほしいのです。

237 名前:デフォルトの名無しさん :01/10/14 20:21
>>236

結局いつか書くから

だろ。
書かないなら消しなさい。

238 名前:236 :01/10/14 20:25
>>237
それは、
>>229
> なんでデフォルトコンストラクタが作られるんでしょうか?
に対する回答ですよね。
それは、前の方が書いたのでわかります。
そうではなくて
>>230
> コピーコンストラクタを自動生成してもあまり嬉しくないから。
>>231
> どちらか(copy or default)生成しなければならない理由でもあるのですか?
への回答がほしいのです。
あなたはVisual C++を使ったことがありますか?
copy constructorはデフォルトで自動生成されません。

239 名前:C++初心者 :01/10/14 21:31
C++初心者です。質問させてください。

VisualC++(DirectX)でゲームを作ろうと思うのですが参考になる本。
これを読んでおけって言う本無いでしょうか。
こんな事をしておけなども、、

これでも一応職業はプログラマです。
でもC++だけはあまり触ったことがないので、、
過去にCの仕事をやったことがあるのですが一回だけなのでこの際"未経験"って事でお願いします。
出来るのはKylix、Delphi(ObjectPascal)、perl、DBMagic、COBOL、VBです。

こんな私ですがご教授下さい。

240 名前:デフォルトの名無しさん :01/10/14 21:35
】==2==C==H======================================================

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

===============================読者数:72094人 発行日:2001/09/27

こんにちは、ひろゆきですー。

いやぁ、ついに逮捕者がでましたねー。
これを機に、荒し依頼とか荒らした人とかもバシバシ逮捕されるようになると、
2chの運営も楽になるなぁと溜飲を下げる午後のニュースでありました。

おいらもこれからは荒らしの被害者からの苦情には誠実に対応することにしま
したです、、、
5月には、珍走団からの苦情の電話に「バーカ、バーカ」とイキがってしまい、
その後痛い目にあってしまいましたです。
みんなの前で土下座するのは恥ずかしかったですです。。。
まさか直接乗り込んでくるとは思いもしなかったんです、、、
恐るべし、珍走団。。。(;;)
と、苦い思い出を噛み締める夕暮れでした。。。

んじゃ!

241 名前:デフォルトの名無しさん :01/10/14 22:11
>>239
参考になる本はいっぱい書いてあるだろ。
過去ログ読んでから書き込め。

っていうか自分で努力しろ。まずはそっから。

242 名前:デフォルトの名無しさん :01/10/14 22:12
>>238

頭悪いなぁ。どうして

> なんでデフォルトコンストラクタが作られるんでしょうか?
に対する
> コピーコンストラクタを自動生成してもあまり嬉しくないから。
から
> どちらか(copy or default)生成しなければならない理由でもあるのですか?
になるのよ?

>230を逆に言えば、デフォルトコンストラクタを自動生成してくれると大半の人は嬉しいのよ。
いちいち書く手間が省けるからさ。

どうしてそこまで読みとれないのよ?

なんべんも
「どうせ書くなら自動生成してくれる方が楽」
「あんたがいらないなら消せ」
と言われてるでしょ? 頭悪すぎるよ?

さらに
> あなたはVisual C++を使ったことがありますか?
こんなくだらねぇ捨てぜりふ。救えないよ。マジで。

243 名前:デフォルトの名無しさん :01/10/14 22:34
>>236
的が外れてるのはお前の方。
生成されると不都合があるのか?

以下マジレス。
AppWizard経由でクラスを新規作成し、自分でソースを一切いじらずに
ビルドすることができる。

244 名前:デフォルトの名無しさん :01/10/14 22:40
>238
気にするなよ。なんでも疑問に思うことはいいことだ。

245 名前:236 :01/10/14 23:32
>>242
>>230を逆に言えば、デフォルトコンストラクタを自動生成してくれると大半の人は嬉しいのよ。
>いちいち書く手間が省けるからさ。
そう言えよ。(藁
>>228でスデに"ストレートに"そういっているし、
遠まわしにいわれてもわからん。

246 名前:236 :01/10/14 23:39
あ、で
>>242
|> なんでデフォルトコンストラクタが作られるんでしょうか?
|に対する
|> コピーコンストラクタを自動生成してもあまり嬉しくないから。
|から
|> どちらか(copy or default)生成しなければならない理由でもあるのですか?
|になるのよ?
デフォルトコンストラクタが作られなければ、
"かわりに"コピーコンストラクタが作られる、と読み取れたのです。

247 名前:デフォルトの名無しさん :01/10/14 23:48
>>246
>"かわりに"コピーコンストラクタが作られる、と読み取れたのです。
そういう妄想はどっから湧くんだよ(w

248 名前:236 :01/10/15 00:09
「なんで朝食がパンなんですか?」
「米はあまりおいしくないから」
ってきたら、朝食がパンじゃなければご飯になりそうだと思いませんか?

249 名前:デフォルトの名無しさん :01/10/15 00:12
その発想力はいずれ君がゲームかなにかを企画するときのためにとっときなさい。
ここでは役に立たないから。

250 名前:デフォルトの名無しさん :01/10/15 00:21
すげーよこいつ。真説夢見館みたいなゲームはこういうやつから生まれてくるんだな。


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