VisualC++相談室 3

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

旧スレッド
http://piza.2ch.net/test/read.cgi?bbs=tech&key=981630730&ls=50
2デフォルトの名無しさん:2001/06/22(金) 23:43
ダイアログボックスに背景画像を張りたいんですが。
ピクチャーを置いただけではボタンも隠れてしまいます。

どうしたら良いですか?
3デフォルトの名無しさん:2001/06/22(金) 23:55
ピクチャーの上にボタン置けば?
4デフォルトの名無しさん:2001/06/22(金) 23:58
>>3
ダイアログエディタでボタンが上に見えるように置いても
実行すると隠れてしまうんです・・・
5デフォルトの名無しさん:2001/06/23(土) 00:00
GetDCで画面のデバコン取って書け。
6デフォルトの名無しさん:2001/06/23(土) 00:04
>>2
ダイアログボックスをサブクラス化して、WM_PAINT乗っ取れ
7デフォルトの名無しさん:2001/06/23(土) 00:19
>>6
が正解。(というか管理が楽)
付け足すなら、ダイアログボックスのフラグに子窓をクリップするか
どうかってのがあるから、それ入れとかないとチラつく。
8デフォルトの名無しさん:2001/06/23(土) 01:27
プログラミング及びVC++初心者ですが、
コンピュータの理解を深め、プログラミングも上達するための
初心者向けの課題は何かないでしょうか?
9デフォルトの名無しさん:2001/06/23(土) 01:38
コンピュータの理解を深めたかったらコンパイラを作ると良いと思うよ。

でも、そんなのいきなりは無理だよね。

最初は自分の作りたい物作ったら?

私なんかはBCBで、某エロゲー会社のセーブデータ保存ディレクトリ変更ツール作ってたりとかしたけど。といっても、内容はレジストリのエントリの値を変えるだけ。

それでも改造して遊んでくうちにプログラムのコツとかもわかっていくよ。
10デフォルトの名無しさん:2001/06/23(土) 01:45
ワンボードマイコン買ってこい。
スイッチを押すとLEDが点灯するプログラム書くだけでも
コンピュータの理解は深まるぞ。
118:2001/06/23(土) 01:46
>>9
8です。
書き込みありがとうございます。
プログラミングは面白いんですけど、コンピュータに関する知識が
なさ過ぎて、いまいち何をしたらいいのか分からず
目的がない状態だったもので。

コンパイラですか?面白そうですね。あとエミュレータなんかも
自分で作ってみたらきっと面白いんだろうと思います。
参考としておすすめの本などありましたら、おしえて下さい。
128:2001/06/23(土) 01:49
>>10
8です。

>ワンボードマイコン買ってこい。
ワンボードマイコンってどういうものなのでしょうか?
なんか単純な作業でもささやかな喜びを感じれそうな作業はすきです。
13デフォルトの名無しさん:2001/06/23(土) 07:42
>>9
そう!エロこそがプログラム上達の最強の原動力ナリ
14デフォルトの名無しさん:2001/06/23(土) 11:24
>>6 >>7
さんきゅ〜、うまくいきました。
これしかないか、とは思ってたけど(^^;;
15デフォルトの名無しさん:2001/06/24(日) 02:47
GLU ってなんだよ。あんな説明じゃわかんねーよ。
っていうか座標決め撃ちどかーんってできないの?
それともプログラムの中でCreateするときに指定してあげるの?
それともそれとも付属のリソースエディタは使っちゃダメなの?
16デフォルトの名無しさん:2001/06/24(日) 02:53
GLU -> DLU だった・・・・・・・・・ハズッ!!
17デフォルトの名無しさん:2001/06/25(月) 21:17
DirectXを使わないWINDOW上のゲームを作ろうと重い、メッセージループの中に描画や移動を入れました。しかしマウスが動くたびに表示がちらつきます。
どうすればよいのでしょうか。あと、メッセージループのなかに描画等を入れてよいのでしょうか。

while(GetMessage(-----------)){
/*ここに描画や移動を入れる*/


TranslateMessage(--------)
DispatchMessage(---------)
}
18デフォルトの名無しさん:2001/06/25(月) 21:40
>>17
ダメです。
GDIに迎合するなら描画はWM_PAINTでやって下さい。
一定周期ごとに再描画が必要ならWM_TIMERかなんかで
一定周期ごとにInvalidateしてください。
19デフォルトの名無しさん:2001/06/25(月) 21:50
なるほど。そうやるんですか。ありがとうございました。
20ツッコミが無いので:2001/06/27(水) 16:42
>9,10
>コンパイラ 〜
>ワンボードマイコン 〜


・・ちょっと待て
21デフォルトの名無しさん:2001/06/27(水) 17:14
>>20
いや、とりあえずまちがっちゃいないだろ(w
22:2001/06/27(水) 18:19
>>20
「ハード面での知識を得たい」というのと
「ソフト面(例えばアルゴリズム)の知識を得たい」というのとでは
適切な教材は違ってくるわな・・・

全般的な知識だったら、情報処理試験を合格できるような受験勉強をすればいいし。
23デフォルトの名無しさん:2001/06/27(水) 18:51
ageとく
24厨房:2001/06/27(水) 23:30
vcや他のソフトにもあるけど、ウィザード形式のダイアログボックス
はコンポーネント等があるのでしょうか?
それとも、ダイアログのクラスにシコシコとコーディングでしょうか?
25デフォルトの名無しさん:2001/06/28(木) 03:23
>>24
プロパティーシート
26デフォルトの名無しさん:2001/06/28(木) 03:24
>>25
プロパティシートだ、鬱。
27デフォルトの名無しさん:2001/06/28(木) 03:27
0000
28デフォルトの名無しさん:2001/06/28(木) 07:58
練習でフィールドをキャラクターが歩くようなものを作ったのですが、
方向キーの受付がかなり不自然になってしまいました。
WM_KEYDOWNを捕まえているのですが、キーが押されているかどうかを
もっとスムーズに知る方法を教えてください。
29:2001/06/28(木) 12:03
>>28
SHORT GetAsyncKeyState(int vKey);
引数 vKeyで指定されたキーが、
「今現在」押下されているかどうかを判定する。

Asyncというのは非同期(Asynchronous)の略で、
「メッセージキューの内容と非同期である」ということ。

戻り値は16ビットの整数値で、
最上位ビット(&0x8000)が、1の時が押下状態、0の時が非押下状態。
最下位ビット(&0x0001)が、1の時がトグル状態、0の時が非トグル状態
30デフォルトの名無しさん:2001/06/28(木) 12:40
エディットコントロールにSendMessageでWM_CHARを送るときに、
ひらがなや漢字などの2バイトの文字がうまく送れません。
なにか方法があるのでしょうか。おしえてください。
31デフォルトの名無しさん:2001/06/28(木) 12:50
>>30
WM_IME_CHAR使え
3230:2001/06/28(木) 14:34
>>31
はい、使ってみます。
アリガトウございました。
3328:2001/06/29(金) 11:00
>>29
ありがとうございます。ところでトグル状態とは何でしょう?
34>33:2001/06/29(金) 14:11
NumLock、CapsLockとかのロック状態
35デフォルトの名無しさん:2001/06/29(金) 15:36
自分でクリエイトしたボタンのキャプションを改行したいのですが、
ボタンステイタスのどのパラメータを使えば複数行になるんでしょうか?
標準のボタンだとプロパティのスタイルタブにある複数行をチェックすれば済むのですが・・・
BS_MULTILINEでは改行されないんですけど・・・なんで?
36デフォルトの名無しさん:2001/06/29(金) 15:58
>35
BS_MULTILINEでされるハズ
多分、天候のせいでしょう。
37デフォルトの名無しさん:2001/06/29(金) 16:03
>>35
\r\nで改行・・・・だよね?
38デフォルトの名無しさん:2001/06/29(金) 16:31
>>37
もちろん、でもボタンのキャプションにそのまま\r\nと出ますけど・・・
3928:2001/06/29(金) 16:42
すいません、また質問させてください。
SHORT GetAsyncKeyState(int vKey);
でいろいろ試してみたのですがvKeyで指定したキーをずっと押し続けいても
常に押下状態と返すわけではなく最上位ビットが0だったり1だったりするのですが
こんなもんでしょうか?
40デフォルトの名無しさん:2001/06/29(金) 17:07
>>35です。
作りたいのはオペレーターが自分で機能付きのボタンを好きなところに貼れるアプリなんです。
テキストにボタン名、機能(あらかじめ決まってる5種類位、_CMD_Add_とか書く)、ボタンの位置、大きさ
を書くと
起動時にそのテキストを読んでユーザーのお好みでボタンを配置出来るというものなんです。
int buttonNumber;
CRect buttonRect;
CString buttonName;
UserButton[buttonNumber]->Create(buttonName, BS_OWNERDRAW | BS_PUSHBUTTON | BS_MULTILINE | WS_VISIBLE, buttonRect, this, __USER_BUTTON_ID__+buttonNumber);
でやっても駄目なんですけど・・・
41デフォルトの名無しさん:2001/06/29(金) 17:25
>40
オーナードローでもテキストって出んの?
42デフォルトの名無しさん:2001/06/29(金) 18:41
コンパイラ エラー C2896
'function1' : 関数テンプレート 'function2' を関数の引数として使用できません。

これってANSIの仕様ですか?
ごっついむかついちゃった。どうしよう・・・
4339:2001/06/30(土) 09:46
if文で}の位置が違っていた。
鬱になった。
44デフォルトの名無しさん:2001/07/02(月) 17:53
あげてみっかな。
45デフォルトの名無しさん:2001/07/03(火) 02:42
メニューの「最近使ったファイル」に追加されるファイル名をクリックした時の処理は
どのようになっているのでしょう?
例えば、ここでクリックしたファイルのファイルパスをダイアログボックスで
表示するようにしたい場合は、どのようにしたらよいでしょうか?

もしご存知の方がいましたら、よろしくおねがいします。m(_ _)m
46デフォルトの名無しさん:2001/07/03(火) 07:47
>>45
CHogeDoc::OnOpenDocument() じゃだめ?
もっと前で捕まえたいなら、OnOpenDocumentにブレークポイント入れて、
そこでコールスタックを見て、適当な場所を探す。
47eij:2001/07/03(火) 08:43
お世話になります。WIN98 VC6 MFC で組んでおります。

仮想画面にビットマップを転送しておいて、(再)描画時
に仮想画面から通常画面に転送するといったことを
しております。
初期描画:PatBlt→仮想画面、BitBlt→仮想画面、仮想画面→BitBlt
再描画時:仮想画面→BitBlt
としてます。
ここで、仮想画面に対して"PatBlt"を使った直後、残メモリが
ちょうど画像の サイズ分減少します。
"PatBlt"をコメントで抜いた場合は 仮想画面に対する"BitBlt"の
直後に同じように残メモリが減少します。つまり仮想画面に何か
データを転送した時点で起こります。 画像のサイズには関係なく
起こる症状です。 何が原因でこのような症状になるのかご教示
いただければありがたいです。

なお、残メモリは、"GlobalMemoryStatus"api関数で調べております。
以上よろしくお願いいたします。
48デフォルトの名無しさん:2001/07/03(火) 11:55
>>47
どっちのスレで答えて欲しいのかも書いといてください。
49eij:2001/07/03(火) 13:17
>>48 スマソ。以降こっっちで。
50デフォルトの名無しさん:2001/07/03(火) 14:29
BitBlt とかのデータってメモリ上に残るんじゃないの?FIFOだかLRUだかの条件で
別処理実行してったり、終了時には開放されると思うが。
51 :2001/07/03(火) 15:59
プログラムで、FDDを認識するのはどうすればいいのでしょうか?
MOやメディアリーダーと区別したいのですが・・・。
52デフォルトの名無しさん:2001/07/03(火) 16:08
教えてくださいませ。

CView上に、CButtonをクリエイトしたんだけど、
CViewがBitBltするとボタンが消えちゃいます。
マウスポインタをボタン上に持っていくと突然現れます。

どうすれば、ずーっとボタンを出ているように
することができるのでしょうか?
53デフォルトの名無しさん:2001/07/03(火) 16:41
>>52
>CViewがBitBlt
CViewにBitBlt ?
GetDC()がクリッピングをしないからです。ボタン位置のリージョンを作成し
反転してDCにSelectObject する。
こんなめんどくさいことは通常しません。
描画タイミングをペイントメッセージ時(OnDraw)にするか、ボタンに対して
Invalidate-Updateをかけてやりましょう。
54追記:2001/07/03(火) 16:48
ペイントメッセージ時で起こっているなら、ボタンの親がCViewになってません。
それでだめならCViewのスタイルにWS_CLIPCHILDREN を追加しましょう
それでだめならCFormView を使いましょう。
55eij:2001/07/03(火) 17:11
>>50 このとき減ったメモリが、仮想画面に割り当てたビットマップを
"DeleteObject"することによって解放されることを確認しました。
DeleteDC->DeleteObjectの順番なら成功(解放)するがその反対なら
失敗(リーク)する。こんなことってある?
今、24bit色のディスプレイ設定で、8bit色5MBの画像を表示する場合、
CreateDIBitmapで15MB、仮想画面で15MBの、都合30MB消費する
のですが、こんな設計は逝ってよしでしょうか?
56デフォルトの名無しさん:2001/07/03(火) 21:06
>>55
DC に Select されている BITMAP (等) は DeleteObject できません。
ドキュメント読んだ?
57デフォルトの名無しさん:2001/07/03(火) 21:09
>ドキュメント読んだ?

↑これ余計でした。心が荒んでいたもので。
ごめんなさい。
58デフォルトの名無しさん:2001/07/03(火) 21:11
>>55
やっとなんとなく状況理解
SelectObject(hdcMem, oldbm); はやりましたか?
5958:2001/07/03(火) 21:13
ってそれじゃわかるわけないか、こんな感じの順番
テキトーにアレンジして

HDC hdcMem = CreateCompatibleDC(_draw_handle) ;
HBITMAP hbm = CreateBitmap(tw, th, 1, 1, NULL) ;
HBITMAP oldbm = (HBITMAP)SelectObject(hdcMem, hbm) ;
BitBlt(hdcMem, 0, 0, tw, th, xxxMem, 0, 0, SRCCOPY) ;
SelectObject(hdcMem, oldbm) ;
DeleteObject(hbm) ;
DeleteDC(hdcMem) ;
6058:2001/07/03(火) 21:15
他にも答えてる人が居たのね、ま、ワカってることならやりすごして
ちょうだい、じゃ
61デフォルトの名無しさん:2001/07/03(火) 21:20
>>55
言葉で説明するよりも該当部分のソース見せたほうがアドバイスもらいやすいと思うけど (w
62eiji:2001/07/03(火) 21:40
>>56-60 Selectで、DCからBMPを切り離すことはしてると
思います。今家なので確認は出来ないのですが。
>>61 そうですね、かなり混乱してて、デバッグ用のコードを
埋め込んだりしてソースがかなり汚くなっているので、整理して
簡潔にアップしたいと思います。ちなみに >>55 の最後で書いてる
このような設計自体に関してはどうでしょうか?逝ってよし?

皆さん色々ありがとう!こんなにレスつくとは思っていなかったので
励みになります。ではまた明日来ます。
63デフォルトの名無しさん:2001/07/03(火) 22:14
>>このような設計自体に関してはどうでしょうか?逝ってよし?

ソースがないとその判断もできないって
64デフォルトの名無しさん:2001/07/03(火) 23:23
>>62
直した方が良いけど、メモリリークだけなら終了時にゃ解放されるんで
連続して際限なくリークし続けるんでなければ、ごまかして納品されてる
ものは結構あんでしょ。今びなら30Mならまあ別に。
リソースリークでハンドル減ってんだとあんまし良くないと思う。
65デフォルトの名無しさん:2001/07/03(火) 23:35
逆にシステムそのもののメモリ使用量で、切り詰めようもないのに、
メモリ食う食う、言ってウルサイ客もいるね。説得するのがタイヘン
66eiji:2001/07/04(水) 14:53
ちょっと取り込んでるので後日来ます。
なお、現状では
メイン画面:CreateDIBitmap、オフ画面:CreateCompatibleBitmap
としてるんですが、メモリの消費がディスプレイ設定にかなり依存しております。
これはどのように思われます?
67:2001/07/04(水) 15:30
メモリの消費量がどうかと訊ねられても・・・。
全部を表示するためには、
どうやったってメモリ上においておかなくちゃいけないし・・・。

表示領域が一部分だけなのなら、バンディングでもしたら?
としか答えようがない。
昔だったら、GlobalNotifyでも使ってスワップアウトすれば・・・
とでも答えられたのだけど・・・
68eiji:2001/07/04(水) 15:56
そうですな。要はスピードをとるかスペースをとるかバランスをとるかって
ことね。まぁ、用途に応じてってことですか。今スピードよかスペースが問題
になってきてるので、仮想画面なしの、DIB生成(CreateDIBSectionあたり)と
しますわ。
69デフォルトの名無しさん:2001/07/04(水) 16:33
すみません、質問です。
プリコンパイル済みヘッダを使用しているプロジェクトと、
使用してないプロジェクト(VC++以外等)で変更無しで両用出来るように、

#include "stdafx.h"

をうまくマクロで制御出来ないでしょうか?
以前、どこかで見た気がして、いろいろ検索したのですが発見できませんでした。
ご存知の方いましたら、お教えください。
70VC++:2001/07/04(水) 16:35
>>2
遅レスですが・・・・・
ボタンのタブオーダーをピクチャーの後にして
(たとえば、ピクチャーが7ならボタンが8)
ボタンの上にピクチャーを置けば良いかと・・・・・・
実行前はボタンは隠れてますが実行後は表示されます。
71デフォルトの名無しさん:2001/07/04(水) 16:54
VCそのものの質問なんですが、デュアルCPUとかにしたとして
VCは何も設定しなくても並列コンパイルなるものをやってくれる
んでしょうか?なんか特殊なやり方が必要なんでしょうか。
StandardEditionだと出来ないとかだったらイヤだな(TwT
知ってる方教えてくだちい。
72デフォルトの名無しさん:2001/07/04(水) 18:10
>>71
スレッド分ければOSが勝手にCPUリソース使ってくれるはず。
ただ、9x系はデュアルCPUサポートしてないんじゃなかったかな。
NT系じゃないとダメだったはず。
73デフォルトの名無しさん:2001/07/04(水) 18:25
>>52
CViewのウィンドウスタイルを変更して
を子ウィンドウをクリップするという手もある
74デフォルトの名無しさん:2001/07/04(水) 18:26
>>70
あ〜〜!そっか。
タブオーダーって表示の優先順位じゃなくて表示の順番になるのか・・。
ダイアログエディタだとタブオーダーの逆順に表示されるのに・・・。
サンクス!やってみます
75:2001/07/04(水) 18:38
>>71
汎用機じゃないから、別段CPUの数は意識しなくてもいい。
昔のNT4.0だと、Workstationで2CPU、Serverで4CPUまでOSが対応してくれる。
マルチスレッド処理を記述すれば、
優先順位に応じて空いているCPUを自動的にスレッドに割り振りしてくれるよ。
# あんまり賢いスケジューリングじゃないけど。

但し、マルチCPUの場合、
本当に複数のスレッドが同時に動くから、排他制御を
厳密にチェック・テストする必要があるね。
76ななしさん:2001/07/04(水) 18:56
スパコンでないからそもそもデータフロー解析する
並列計算はできない。
アプリケーションが複数のスレッドを使えるだけ。
7771:2001/07/04(水) 19:31
たくさんレスありがとうございます!
えーと・・・・・
VC(てかコンパイラ)そのものがマルチスレッドアプリケーションってことで
いいんでしょうか。まだ少しよくわかんない・・・・・
自分でコード書いてビルドしたアプリがマルチスレッドで動作するかどうか
ではなくて、
VCのコンパイラがマルチスレッドでコードを高速にコンパイル(並列コンパイル)
してくれるかどうかが知りたかったんですが。
対応マザーにCPU2つブッ差せばVCは嫌でも並列コンパイルやってくれる、
ってことでいいんでせうか?(w
バカですんまそん。
78デフォルトの名無しさん:2001/07/04(水) 20:11
翻訳単位が複数ある場合は、翻訳単位ごとにスレッド分けてコンパイルすれば簡単そうだが、
1つの翻訳単位をコンパイルした場合はかなり高度なことやらなくちゃいけなそうなきがするなぁ。

普通に使う場合、コンパイル作業の7割くらいは1翻訳単位のみビルドだと思うから、
結構この差は大きそう。
79デフォルトの名無しさん:2001/07/04(水) 20:20
よくわからんけど、コンパイル中にプロセスモニタとかで
スレッド数を見たら?

gmake つかえば make -g あたりで並列コンパイルじゃなかったっけ。
自分でmakefile準備しようぜ
80デフォルトの名無しさん:2001/07/04(水) 20:21
どーでもいいけど、非同期プログラミングするなら
必ず並列環境で開発しようね。うん。

よけいなお世話?
81デフォルトの名無しさん:2001/07/04(水) 20:22
並列コンパイルとマルチスレッドアプリ作成の話は別モンだと思う
書き込んだアトでも勘違いしたと思ったら、訂正した方が良いと思うが
アンマリひきずらんで
82デフォルトの名無しさん:2001/07/04(水) 20:28
”も”って人か...
83:2001/07/04(水) 21:25
>>
いや、鳥
84:2001/07/04(水) 21:33
コンパイル時間を短縮したかったのか・・・

VC++にそんな器用な芸当が出来るのか?
プリコンパイルドヘッダとか、インクリメンタルコンパイルくらいしか
見当たらない。
85デフォルトの名無しさん:2001/07/04(水) 21:34
おい日本語が大丈夫か
86デフォルトの名無しさん:2001/07/04(水) 21:42
マルチCPU使ったってコンパイル速くならんよ。
でもコンパイル中でもWEBみてMSDNみて、いろいろできるね。
快適に。

ああ、でも、恩恵にあやかりたかったらHDDは分けとこうね。
パーティションじゃないよ。物理的にね。
87デフォルトの名無しさん:2001/07/04(水) 22:08
VC2個立ち上げて同時にコンパイルすれば速度の恩恵が受けられる?
ReleaseとDebugを同時にリビルドするとか。
言ってる自分が馬鹿馬鹿しいが。
88デフォルトの名無しさん:2001/07/04(水) 22:14
だから
ファイルの書き込み速度以上に速くならないって。
8971:2001/07/04(水) 22:19
うわ、出来るもんだとばかり思ってたっす(涙
いやはや、たくさんのレスありがとうございます。
makefileのことちょっと調べてみます。
どもです!
90デフォルトの名無しさん:2001/07/04(水) 22:26
GNU make
win屋はwinが当たり前だと思ってることがある
俺もVC屋だけどホンマに的外れ多いよ
91デフォルトの名無しさん:2001/07/04(水) 22:41
マルチスレッド技術は、基本的に、アプリケーションやOSの応答性を高める
ための技術だと思ってね。
コンパイラ向きじゃないと思うのよ。うん。

IDEの方はマルチスレッドの恩恵を受けてるけど、cl.exeとそいつが呼び出す
下のプログラムはマルチスレッド対応してないとおもうよ。
恩恵があまりないからね。

で、gmakeで並列コンパイルしたとしてもメモリをたくさん食うだけで、
ファイル読み込み時間の合計はかわらんし、書き込み速度もかわらん。
たぶん君が使ってるCPU内のキャッシュメモリもあふれてかえって
遅くなってる可能性もあるよ。
92デフォルトの名無しさん:2001/07/04(水) 23:40
〜だって
93デフォルトの名無しさん:2001/07/05(木) 11:29
今、マウスカーソルの動作を制御するプログラムを作っていて、
ダイアログ上のボタンを自動的に押したりとかさせたいんですが、
その動作をどうやって実現させるかがわからなくて困ってます。
何か良い方法は無いでしょうか?
94デフォルトの名無しさん:2001/07/05(木) 12:29
>>90
VCスレだから許せ。
95デフォルトの名無しさん:2001/07/05(木) 12:34
>>93
たとえば、LBUTTONDOWNを送って、その後、LBUTTONUPを送れば、
「マウスでクリックした」という偽造メッセージを送れる。

ただし、送り先は対象となるボタンのウィンドウハンドルに送らないとダメみたい。

ちなみに、KEYDOWN, KEYUPはダメだった。
こっちの方法知ってる人いたら教えて欲しいです。
96デフォルトの名無しさん:2001/07/05(木) 12:40
昔書いたソースからコピペ、もう忘れたんで詳しいことは自分で調べてね
mouse_event(MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN,65536*x/GetSystemMetrics(SM_CXSCREEN),65536*y/GetSystemMetrics(SM_CYSCREEN),0,0);
97デフォルトの名無しさん:2001/07/05(木) 12:49
>>95
key_eventを使う。
98デフォルトの名無しさん:2001/07/05(木) 13:49
>93
ボタンクリックをエミュレートするなら、ボタンにBM_CLICKを送るだけいい。
または、そのボタンを押したときに発生するWM_COMMANDを親のダイアログに直接送る。

ボタンがへこむアニメーションも再現したければ、BM_SETSTATEを使え。
99デフォルトの名無しさん:2001/07/05(木) 13:51
Win2KとWinMeの両方で問題なく動くプログラム作るとしたら、
どっちでビルドした方がいいとかいうのはありますか?
100デフォルトの名無しさん:2001/07/05(木) 17:51
>>99
まさか Win9x/Me 上でマジで開発しよう…なんてこと、考えてないだろうな。
いや、まさかとは思うが、念のため...。
101デフォルトの名無しさん:2001/07/05(木) 18:04
>>100
いや、Win2kでビルドしたら動かずに、WinMeでビルドしたら動いたもんで。
詳しくはおいおい調査してくけど・・・。
102デフォルトの名無しさん:2001/07/05(木) 18:19
>>98
最小化ボタンのアニメーションは再現できないんでは?
103100:2001/07/05(木) 18:29
>>101
あ、そゆことね。スマソ。

ふむぅ..。しかしなんとも理不尽だね。
そういえば、そんなこと経験したことあるよーな気もするなぁ...。
104デフォルトの名無しさん:2001/07/05(木) 19:01
ボタンの位置(座標)ってどうやって取るんですか?
できればCRectで受け取りたいんですけど・・・
105デフォルトの名無しさん:2001/07/05(木) 19:57
>>104
GetWindowRect
106デフォルトの名無しさん:2001/07/05(木) 20:37
>>101

それって
「Win2kでビルド→Win2k:×、WinMe×」で
「WinMeでビルド→Win2k:○、WinMe:○」ってこと?
107デフォルトの名無しさん:2001/07/05(木) 20:40
>>104
そうですよね。その筈なんですけど
CRect BRECT;
CButton *myBT = (CButton*)GetDlgItem(IDC_BUTTON);
myBT->GetWindowRect(BRECT);
COXRoundedButton*Test = new COXRoundedButton();
Test->Create("Sample", BS_OWNERDRAW | BS_PUSHBUTTON | WS_VISIBLE, BRECT, this, ID_SAMPLE);
とやると位置がズレルのは何故何でしょうか?
108デフォルトの名無しさん:2001/07/05(木) 21:07
>>106
「Win2kでビルド→Win2k:○、WinMe×」
「WinMeでビルド→Win2k:?、WinMe:○」
っす。
Meでビルドしたのはまだ2kに持って来てないっす。
10993:2001/07/05(木) 21:56
>96
ありがとう!
試してみたら、LEFTUP→LEFTDOWN→LEFTUPの順でやるとうまく動かせました。
(LEFTDOWN→LEFTUPだけだと、なぜかドラッグしたことになってしまった)

>98
最初、それでいこうかと思ったんだけど、
結局メッセージ送りつける相手のハンドルがわからなくて断念しました。
110106:2001/07/05(木) 22:19
>>108

その場合、インストール(&使用)されているコンポーネントは本当に一致している?

わりとその辺で動作が違うのだと思う。まぁOS依存動作もあるけど、それはヘルプ見て確認してるんだよね?
111デフォルトの名無しさん:2001/07/05(木) 22:21
>>107
CWnd::ScreenToClient()
CWnd::ClientToScreen()
この辺調べて見れ。
Createする場合、Windowのローカル座標で作るんじゃなかったか?
112デフォルトの名無しさん:2001/07/05(木) 22:38
>>108
使うAPIにもよるよ。
ちゃんとヘルプとか読んでるの?
113デフォルトの名無しさん:2001/07/06(金) 00:12
ちゃんとヘルプ読んでるやつはここに質問書かないって
114デフォルトの名無しさん:2001/07/06(金) 00:34
>>106,>>112
う〜ん、CreateFileでCOMポート開いてただけなんだけどなぁ(^^;
当然HELPは読んでるけどね。

結局、
「Win2kでビルド→Win2k:○、VCインストール前のWinMe×、インストール後のWinMe○」

ってことで、なんか足りなかったのかなぁ??
再現させるにはまたWinMeのインストールからか・・・。
115106:2001/07/06(金) 04:48
>>113

確かに「F1を押す」だけの事ができない奴多いものな>2ch。
116デフォルトの名無しさん:2001/07/06(金) 10:43

HeapAlloc と GlobalAlloc の違いについて教えてください。
GlobalAlloc のメモリは再配置可能で HeapAlloc はそうでなく
HeapAlloc はメモリが断片化される可能性があるらしいのですがこれはどういうことですか?
例えば1MBのメモリを3回確保して最初に確保した1MBは開放してから再度1MB確保した場合
GlobalAlloc では開放された領域が再利用されて HeapAlloc の場合は開放された領域ではなく4MB目の位置に新しく確保されるということでしょうか?
確保できるメモリ量に違いなどはあるのでしょうか?
GlobalAlloc は一度に確保できるのは65535ハンドル数までらしいですが、ハンドルの数ではなくバイト数での制限はあるのでしょうか?
昔ウィンドウズで扱えるヒープのサイズは256MBとか噂で聞いた気もしますが、そのような制限はあるのでしょうか?
それと HeapAlloc と GlobalAlloc ではどちらを使うのが一般的ですか?
自分は今までは HeapAlloc を使っていたんですが。( GlobalAlloc はロックしないといけないので面倒 )

ご意見・ツッコミ・煽りなどをお寄せください。
どうぞよろしくお願いします。
117名無しさん:2001/07/06(金) 10:47
GlobalAllocは640KBの壁があった前世紀の遺物。
江戸時代のプログラミング。
HeapAllocは独自のアロケーター作成用のツール。
mallocやnewを独自に作るための部品。
ベストはmalloc。
ソースを見るとちゃんと二進セマフォを
いじっているんで、マルチスレッドにも対応している。
118デフォルトの名無しさん:2001/07/06(金) 12:29
自分以外の他のプログラムを終了させるような関数を教えてください。
例えばウィンドウズを終了させると一応すべてのプロセスが終わるのですが、
ここでは特定のプログラムを終わらせる方法が知りたいです。
119デフォルトの名無しさん:2001/07/06(金) 12:32
FindWindowとPostMessageを繰り返すだけ。
普通はそれで問題なし。
120デフォルトの名無しさん:2001/07/06(金) 12:38
>>116
GlobalAllocっていっても、
単にそのプロセスのデフォルトヒープを使ってるだけじゃなかったかな。

LocalAllocでも同じだけど、漏れが使うときはいつも LPTR な確保しかしないから、
ロックなんてしてない。

HeapAllocは DLL には便利だと思う。
ロードされたプロセスに極力迷惑かけないでメモリを使えるから。
DLL_PROCESS_ATTACH で HeapCreate して、
DLL_PROCESS_DETACH で HeapDestroy すれば、
プライベートヒープを丸ごと一気に解放しちゃえて、楽チン。

漏れはあの巨大な標準ランタイムライブラリ(msvcrt.dll だとしても、
それがメモリを消費することには変わりはない)を極力使いたくないから、
C++ なプログラムの場合だと、
operator new と operator delete を LocalAlloc/LocalFree で定義して、
使うことが多い。
このとき、それが DLL ならプライベートヒープを確保して使うな。

WIN32 API はほとんど thread free なので、排他制御を考える必要はない。
もちろん、メモリの利用効率という点では malloc に一歩譲ると思うが、
そもそも、それが大きく影響するようなら、逆にメモリの使い方が下手な証拠。

…と、漏れは思ふ。
121デフォルトの名無しさん:2001/07/06(金) 12:47
>>118
プロセスを頃す方法はいくつかあるが、
/subsystem:windows な PE で、かつ、窓(見える/見えないは別として)を持っているなら
>>119 の方法が一番、素直。
ツボは、いかにして頃したいプロセスの ID を抜くか…ってところ。
122デフォルトの名無しさん:2001/07/06(金) 14:01
GlobalAllocって、クリップボードで他のプロセスに渡すメモリに
使いませんでしたっけ?
123名無しさん:2001/07/06(金) 14:03
そこがいわゆる負の遺産というか盲腸の手術後というか。
ほかにもGlobalFreeが必要なポインタを返すやつがいくつか
あるはず。
124118ヽ(´ー`)ノ :2001/07/06(金) 14:06
>>119 >>121
ありがとうございます。
実験で、とあるプログラムに WM_CLOSE を送ったらちゃんと終了できました。

しかし、本当の目的のプログラムはどうしてもFindWindowでみつかりませんでした。
ちなみにツールバーには出ないタイプで、タスクトレイに小さいアイコンとして
常駐するタイプです。他の関数で HWND を調べるしかないのでしょうか?
125121:2001/07/06(金) 14:33
>>124
EnumWindows
126デフォルトの名無しさん:2001/07/06(金) 17:02
モデムで通信してて、
そこから01を読書きしたいんだけど誰か方法教えて!
検索してもATコマンドばっかり(T_T)
127toray:2001/07/06(金) 20:02
ボタンを押すと、c:\test.exe
を100回実行するプログラムを書きたい。
どうやればいいでしょうか。
VBしかわかりません。おねいがいます
128デフォルトの名無しさん:2001/07/06(金) 20:25
>>127
for(int i=0; i<100; i++) system("c:\\test.exe");
129toray:2001/07/06(金) 21:54
system を使うのか

ありがとう。
130vmware:2001/07/06(金) 21:59
vmware をVisualC++でつくらなければならなくなりました。
アドバイスを!
131デフォルトの名無しさん:2001/07/06(金) 22:36
>>130
頑張れ。
132デフォルトの名無しさん:2001/07/06(金) 22:51
わけわからんけど、あながち不可能でもないからガンバレ>>131
133デフォルトの名無しさん:2001/07/06(金) 23:22
>>130
出花をくじくようなことを書いて申し訳ないが、
他人にアドバイスを求めなければならないようでは、
チミには不可能と思われ

第一、あれには確か特許がかかっていたはずだから、
たとえ技術的に可能でも、法律的にはおそらく不可能と思われ
134デフォルトの名無しさん:2001/07/07(土) 00:53
急にある自作クラスがクラスウイザードから見えなくなってしまいました。
こんな現象知りませんか?

ビルドは出来るし、ワークスペースにも見えるんですけど・・・・
135デフォルトの名無しさん:2001/07/07(土) 01:10
>>134
クラスウィザードは .clw ファイルによって管理されています。
バージョンの不整合が起こったんでしょう。
.clw を削除してクラスウィザードを立ち上げるとナンダカンダと聞いて
きますので、それが早いと思います。
また、既存のまま新規クラスのウィザード取り込みもできるハズですので
そんでもよいでしょう
136135:2001/07/07(土) 01:11
>バージョンの不整合
ちょっち言い方オカシイね。プロジェクト内のファイル更新の不整合
137デフォルトの名無しさん:2001/07/07(土) 13:31
>>135
サンクスです。
どうやらMFCクラスから派生したものの、やっぱ不要と考えて手動で
書き換えたせいのようです(^^;
今までエラーが出なかったのは単に選択してなかっただけのようで。

お勉強になりました。
138デフォルトの名無しさん:2001/07/08(日) 10:30

質問れす。
どうも最近PCがフリーズしまくりです。
プログラムの開発をしていると良くフリーズします。
「Ctrl+Alt+Del」で再起動しようとすると「ダイアログの表示待ちでシステムがビジーです。」って青い画面が表示されます。
これってプログラムが悪いんですかね。
逝く寸前にダイアログを表示しようとはしてないんですけど・・・
ビルドするとビルド中に逝くこともある。(コンパイルからリンクに移行するときに良く逝く)
他のプログラムでフリーズすることもあるが、自分のプログラムを動かした後に逝くことが多い。
これってどこが悪いんですかね?

ちなみに僕チンの頭は悪くありましぇん。
139デフォルトの名無しさん:2001/07/08(日) 12:10
メモリがたりねぇんだよ!
そうじゃなかったら割り当てたメモリを解放しわすれてんだろ
140RIP_MAPIRO:2001/07/08(日) 12:39
システムリソースの残量は何パーセント?極端に減っていたら
使わないデバイスをデバイスマネージャーで無効にする。

クロックアップしているならFSBを落す。もしくは、ハイブリッドなメモリの構成
ならハイブリッドな構成を改める。
141デフォルトの名無しさん:2001/07/08(日) 13:53
質問です。
リソースエディタで、ドキュメントに関連付けられた
アイコンをいくらいじっても、シェルの新規作成では
デフォルトの破れアイコンが出てきます。
icoファイルからいじっても同じ、シェルの
ファイルタイプの関連付けからやってもダメ(再起動すると元通り)でした。

関連付けの根本が分かってないです。
定番の本/検索ワードありましたら教えてください。
142デフォルトの名無しさん:2001/07/09(月) 00:27
アイコンキャッシュに残ってた…なんてオチじゃねーだろなっ!
143141:2001/07/09(月) 06:56
…そのオチでした。
すいません。

「アイコンキャッシュ」で検索して、
ShellIconCacheにたどり着きました。逝ってきます。
144デフォルトの名無しさん:2001/07/09(月) 10:04
あほみたいな質問ですみません。

CBitmapを使って、256色のビットマップを作りたいのですが
どうしたらよいのでしょうか?
145デフォルトの名無しさん:2001/07/09(月) 10:27
>>144に付け足しで、
画面はフルカラーで設定されていますが、
ビットマップのみ256色表示がしたいのです。
146デフォルトの名無しさん:2001/07/09(月) 10:53
>>145
もうすこし具体的に何をしたいかを書いてください。
お絵かきソフトとかで256色に限定したいってこと?
147デフォルトの名無しさん:2001/07/09(月) 11:02
>>146
そんな感じです。

フルカラーだと大きなビットマップが作れないので
256色にして大きなビットマップが作りたいのです。


CBitmap.Create(幅、高さ、1,8,0)
とやるところまでは解ったのですが、
CDCの方も何かをしてやらないと表示され無いんですよね?


よろしくお願いします。
148デフォルトの名無しさん:2001/07/09(月) 16:19
>>147
またまた付け足しですみません。

ダブルバッファリング先のビットマップです。
スクロールしたりするときに、大きいビットマップが欲しいのです。
149デフォルトの名無しさん:2001/07/09(月) 16:53
MsCommを使ってます。
ダイアログにコントロールを貼り付けずに使いたいのですが。
何故かというと、MDIでメニューから通信を使いたいのです。
隠しダイアログ作るとかいった泥臭技は最終手段として考えて
いるのですが、もっとすっきりした正攻法はないでしょうか。
150デフォルトの名無しさん:2001/07/09(月) 17:09
>>147

>>59 をMFCにアレンジしな。CBitmapとCDCをのメンバ関数使ってな。
これで分からなかったら初心者スレあったと思うからそこ逝きな。
151デフォルトの名無しさん:2001/07/10(火) 13:03
過去ログ逝き防止age
152defaultの名無しさん:2001/07/10(火) 13:50
>>149
正攻法1:
RTS/CTSフロー制御をつける。
メッセージポンプの中で受信フラグを見る。
受信していれば→処理

正攻法2:
入力スレッドを立て、受信したらEventを立てる。
メッセージポンプの当たりでイヴェントをチェック。
153149:2001/07/10(火) 15:46
>>152 レスありがとっ!

C***Docのメンバ変数として、CMSCommのインスタンスを作ってと
考えているのですが。
メッセージポンプって?今から調べてみます。
154さとう:2001/07/11(水) 00:43
WS_CHILD | WS_VISIBLE | ES_WANTRETURN | ES_MULTILINE |
ES_AUTOVSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | WS_HSCROLL ,
でウィンドウを作り,
strcat(str,call);
strcat(str,"\n\t");
Edit_SetText(hEdit, str);
でテキストを表示すると改行されず,改行マークが文字化けしてしまいます.
strには改行がちゃんと入っているのですが.
155デフォルトの名無しさん:2001/07/11(水) 00:53
>>154
ひさびさかな?
改行は\r\nです。
156デフォルトの名無しさん:2001/07/11(水) 01:37
char Moji[10];
Moji="Test";

とすると、Teだけを取り出し時はどのようにしたらいいですか?
157デフォルトの名無しさん:2001/07/11(水) 01:43
>>156
にゃんか書いてる意味がよく分からんが、
Moji[2] = '\0' ってことか?
158デフォルトの名無しさん:2001/07/11(水) 01:46
>>157
えぇと、Moji[0]はT、Moji[1]はeなんだけど。
それをつなげるには、どうしたらいいかな?と。
159デフォルトの名無しさん:2001/07/11(水) 01:48
>>156
char *sptr = strstr( Moji, "Te" );
if( sptr )
 sptr[strlen("Te")] = '\0';

実行結果>Moji = "Te";

こういうことじゃなくて?
160デフォルトの名無しさん:2001/07/11(水) 01:49
>>158
お前は、C言語そのものを勉強しろ。
ポインタあたりが全然解ってないだろ?
161デフォルトの名無しさん:2001/07/11(水) 01:50
>>157
あ、、なんだか分からない命令文とかあるので
今から実装してみます。
ありがとうございまーす
162>>147:2001/07/11(水) 01:52
あっちで返事した者だが、こっちでも答えてやる。
っていうか質問はどっか一箇所でした方が良いと思う。

8bit の HBITMAP が DC に Select できない、というのが
そもそもの問題(あっちのスレにそう書いてあるのだ)なら、
CreateDIBSection で DIB の HBITMAP 作ればたぶん Select
できるぞ。使い方はドキュメント読んで。
163中学生:2001/07/11(水) 02:10
C言語でsinカーブを書くにはどうしたらいいの?
ソースコード見せて。
ちなみにコンパイラはVC++6.0
164デフォルトの名無しさん:2001/07/11(水) 02:40
>>163

http://www.google.com/

好きなだけご覧ください。
165デフォルトの名無しさん:2001/07/11(水) 02:42
いやんエッチ!
166デフォルトの名無しさん:2001/07/11(水) 02:47
163>>
Y=Asin(Wt+(2PI)/λ)r) うろ覚え。
これじゃないの?
167デフォルトの名無しさん:2001/07/11(水) 07:08
BeginPaint() とか EndPaint() とか
MoveToEx() とか LineTo() とか
168デフォルトの名無しさん:2001/07/11(水) 08:21
>>163
サインカーブは厨房にはまず理解できないと思う。
まず、ラジアンって知ってるか?
169168さん@今日は臨休:2001/07/11(水) 09:03
//ほれ、即席だ
//かなり他のソースを流用したから分かりにくいだろうが
//文句足れんじゃねえぞ
#include <windows.h>
#include <math.h>

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

BOOL InitialProcess(HDC);

HINSTANCE hInst;
HWND hwnd;
LPBYTE Buf;
BITMAPINFO BMI;
170168さん@今日は臨休:2001/07/11(水) 09:04
//続くぜ

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow){

MSG msg;
WNDCLASSEX wndclass ;

hInst=hInstance;

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.lpszMenuName = NULL;
wndclass.lpszClassName = "Test Window";
wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);

RegisterClassEx (&wndclass);

hwnd = CreateWindow ("Test Window",
"曲線絵画",
WS_OVERLAPPEDWINDOW,
50,50,
640+6,480+30,
NULL,
NULL,
hInstance,
NULL);

ShowWindow (hwnd,iCmdShow);
UpdateWindow (hwnd);
HDC hdc = GetDC(hwnd);
if(InitialProcess(hdc) != TRUE){
ReleaseDC(hwnd,hdc);
return msg.wParam;
}
ReleaseDC(hwnd,hdc);
while (GetMessage (&msg,NULL,0,0)) { // メッセージループ

TranslateMessage(&msg);
DispatchMessage(&msg);

}

return msg.wParam ;

}
171168さん@今日は臨休:2001/07/11(水) 09:05

BOOL SetDIBInfo(LPBITMAPINFO BMI ,int Width,int Height)
{
BMI->bmiHeader.biBitCount = 24;
BMI->bmiHeader.biSize= sizeof(BITMAPINFOHEADER);
BMI->bmiHeader.biWidth = Width;
BMI->bmiHeader.biHeight = Height;
BMI->bmiHeader.biCompression = BI_RGB;
BMI->bmiHeader.biPlanes = 1;
return TRUE;
}
172168さん@今日は臨休:2001/07/11(水) 09:07
BOOL InitialProcess(HDC hdc)
{
int i;
int x,y;
const double PAI = 3.141592;

Buf = (LPBYTE)malloc(640*480*3);
SetDIBInfo(&BMI,640,480);
for(i = 0;i<640*480*3;i++){
Buf[i] = 255;
}
for(x = 0;x<640;x++)
{
Buf[(240*640+x)*3]=0;Buf[(240*640+x)*3+1]=0;Buf[(240*640+x)*3+2]=0;
}
for(y = 0;y<480;y++){
Buf[(y*640+160)*3]=0;Buf[(y*640+160)*3+1]=0;Buf[(y*640+160)*3+2]=0;
Buf[(y*640+320)*3]=0;Buf[(y*640+320)*3+1]=0;Buf[(y*640+320)*3+2]=0;
Buf[(y*640+480)*3]=0;Buf[(y*640+480)*3+1]=0;Buf[(y*640+480)*3+2]=0;

}
for(x = 0;x<640;x++)
{
y = (int)240+sin((double)(2*PAI/640)*x)*120;
if(y < 480){
if(y >= 0){
Buf[(y*640+x)*3] = 0;Buf[(y*640+x)*3+1] = 128;Buf[(y*640+x)*3+2] = 128;
}
}
y = (int)240+cos((double)(2*PAI/640)*x)*120;
if(y < 480){
if(y >= 0){
Buf[(y*640+x)*3] = 128;Buf[(y*640+x)*3+1] = 128;Buf[(y*640+x)*3+2] = 0;
}
}
y = (int)240+tan((double)(2*PAI/640)*x)*120;
if(y < 480){
if(y >= 0){
Buf[(y*640+x)*3] = 128;Buf[(y*640+x)*3+1] = 0;Buf[(y*640+x)*3+2] = 128;
}
}
StretchDIBits(hdc,0,0,640,480,0,0,640,480,Buf,&BMI,DIB_RGB_COLORS,SRCCOPY);
if(GetAsyncKeyState(VK_ESCAPE)<0)
return FALSE;
}
return TRUE;
}
173168さん@今日は臨休:2001/07/11(水) 09:08
//これで終わりだ

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
hdc = GetDC(hWnd);

switch( message )
{
case WM_PAINT:
hdc = BeginPaint (hWnd, &ps);
StretchDIBits(hdc,0,0,640,480,0,0,640,480,Buf,&BMI,DIB_RGB_COLORS,SRCCOPY);
EndPaint( hWnd, &ps );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default:
return DefWindowProc( hWnd, message, wParam, lParam );
}
ReleaseDC(hWnd,hdc);
return 0;
}
174デフォルトの名無しさん:2001/07/11(水) 10:57
漏れも組んでみたよ

#include <windows.h>
#define WIDTH 600
#define HEIGHT 300

LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
 switch(uMsg){
 case WM_PAINT:
 PAINTSTRUCT ps;
  HDC hdc=BeginPaint(hwnd,&ps);
  MoveToEx(hdc,WIDTH-1,HEIGHT/2,0);
  for(int x=0;x<WIDTH;x++){
   double y=(1-sin(2*3.14*x/WIDTH))*HEIGHT/2;
   LineTo(hdc,x,(int)y);
  }
  EndPaint(hwnd,&ps);
 }
 return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int nCmdShow){
 WNDCLASS wc;
 memset(&wc,0,sizeof(WNDCLASS));
 wc.lpfnWndProc=WndProc;
 wc.hInstance=hInstance;
 wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
 wc.lpszClassName="CLASS";
 RegisterClass(&wc);
 CreateWindow("CLASS","",WS_POPUP|WS_VISIBLE,0,0,WIDTH,HEIGHT,0,0,hInstance,0);
 MessageBox(0,"OK を押すと終了",0,0);
}
175デフォルトの名無しさん:2001/07/11(水) 11:01
む、ギリギリ省略されないと思ってたのに…欝墮齒腦
176デフォルトの名無しさん:2001/07/11(水) 11:15
switch(uMsg){ の真下に次の2行追加。さらに欝

 case WM_NCHITTEST:
  return HTCAPTION;
177さとう:2001/07/11(水) 15:20
>155さん
ありがとうございました。大変助かりました。
178デフォルトの名無しさん:2001/07/11(水) 16:08
ウィンドウにボタンやコンボボックスのコントロールを配置しました。
TABキーでフォーカスを移動させたいのですが、VCに、VBのTabIndexのような設定を
行うための手段はありますか?
自分でWM_KEYDOWNを拾ってフォーカスを管理しないといけないのでしょうか?
教えてください。
179デフォルトの名無しさん:2001/07/11(水) 17:20
>>178
CTRL+D
180デフォルトの名無しさん:2001/07/11(水) 17:21
>>178
Ctrl+D又はタブオーダー
181高校生:2001/07/11(水) 21:06
C言語ってグラフィックツールがないから、
どうやってグラフ描いたらいいか分からん。
計算はCでやってグラフ描画はExcelでやったほうがいいのかな?
182デフォルトの名無しさん:2001/07/11(水) 21:11
>>181
それでもいいよ。

VCなら自分でグラフの描画できるけどね。
183修士一年:2001/07/11(水) 21:16
非常に申し訳ない。
VC++を研究に使うんだが、グラフ表示
の関係上C言語のみでは不可能なのだと気づいた。
つきましてはVC++のいい入門書の紹介をお頼み申し上げる。
ちなみにCは分かる(つもりだ)。
184デフォルトの名無しさん:2001/07/11(水) 21:21
>>183
とりあえず「猫でもわかるプログラミング」ってページを検索してください。
185デフォルトの名無しさん:2001/07/11(水) 21:46
>>174 の描画部分をちょっと書き換えれば大抵のグラフは描けると思うが…
186デフォルトの名無しさん:2001/07/12(木) 12:05
187デフォルトの名無しさん:2001/07/12(木) 13:05
>>178
VBのTabIndexってどういうヤツ?
188脂漏と:2001/07/13(金) 11:42
#include <stdio.h>

int main(void)
{
int i, j;
int kuku[4][5];

for(i=0;i<4;i++)
for(j=0;i<5;j++){
kuku[i][j] = i*j;
}

for(i=0;i<4;i++){
for(j=0;i<5;j++)
printf("%d ", kuku[i][j]);
printf("\n");
}

return 0;
}

どうも上のfor文で無限ループに突入するみたいなんですけど
どうしてでしょうか?
189デフォルトの名無しさん:2001/07/13(金) 11:47
for(j=0;i<5;j++){
i<5→j<5じゃ無いの?
190デフォルトの名無しさん:2001/07/13(金) 11:50
191脂漏と:2001/07/13(金) 13:59
>>189,190
ありがとうございました。
謎が解けました。
19290:2001/07/13(金) 22:15
>>191
コードはコピペしちゃいかんよ。
193デフォルトの名無しさん:2001/07/14(土) 03:52
194デフォルトの名無しさん:2001/07/14(土) 17:52
195デフォルトの名無しさん:2001/07/17(火) 01:05
あああげげげ
196デフォルトの名無しさん:2001/07/17(火) 01:55
ふと考えたんですが
RAMディスク使ってビルドの過程を高速化することってできないですかね
197デフォルトの名無しさん:2001/07/17(火) 02:37
>>196
とっくにキャッシングしてると思われ。
198デフォルトの名無しさん:2001/07/17(火) 02:48
そもそもリンカが使ってるファイルは実はファイルじゃなくてメモリマップトファイルだから
実メモリを山のように実装しておけばそれで済む。
199デフォルトの名無しさん:2001/07/17(火) 03:17
10年前の発想>196
200デフォルトの名無しさん:2001/07/17(火) 04:14
最近VC++を触りはじめたんだけど、MFCとやらを使わない場合は
メッセージによってswitchで分けたところに、ひたすらやりたいことを
する関数をMSDNで見つけて、書いてくだけでいいもんなの?
簡単なツールを作るのに勉強がてらVC触ってるだけなんだけど。
201デフォルトの名無しさん:2001/07/17(火) 04:48
>>200
無理しないでMFC使えばよいと思うが・・・
202デフォルトの名無しさん:2001/07/17(火) 05:16
>>201
小難しそうで_・)
他スレでC++しらきゃだめ、みたいなことも書いてあったので。
203デフォルトの名無しさん:2001/07/17(火) 06:45
>>200
メッセージループ作るとこまで逝ったのなら、
大体そんなもんだ。
204デフォルトの名無しさん:2001/07/17(火) 09:54
デバッグ実行中にOutPutWindowに以下のメッセージが
出るんだけど、ほっといて大丈夫?

>No handler for command ID 0xE125, disabling it.
>SENDING command id 0xE107 to CMDIView target.
205デフォルトの名無しさん:2001/07/17(火) 10:49
あるボタンを押したときに単純なテキスト入力コントロール(Edit Box)を
表示させたいのですが、VBの場合は確かInputString関数を使えばできます。
VCのこれと同等の関数はないでしょうか。EditBoxだけのダイアログをあまり
作りたくないのです。
206デフォルトの名無しさん:2001/07/17(火) 10:59
1つ作って、使いまわせば良いんじゃないかな?
207デフォルトの名無しさん:2001/07/17(火) 11:05

やっぱそうですかね。そうしまっす。ありがと〜。
208デフォルトの名無しさん:2001/07/17(火) 16:32
>>202
C++を知らないでウインドウズプログラミングって組めるのか?
とりあえず思いっきり無理な気がするんだが。
209デフォルトの名無しさん:2001/07/17(火) 16:51
>>208
出来るよ。
「猫でもわかる」(http://www.kumei.ne.jp/c_lang/) はほとんどCだし。

俺はやりたいとも思わんけど。
21090:2001/07/17(火) 22:07
>>208
C++が一般的になる前はCで書いてたよ。
もちろん今でも書けるけど、機会は減ったね。

MFCが出たてのどうしようもない頃は
わざとMFCなしで書いてたよ。

遠い昔だ...
211デフォルトの名無しさん:2001/07/18(水) 21:54
SDKでの描画ダブルバッファについて教えてください

以下のソースで何も描画されないのは何故でしょうか?
GetDeviceCaps()でRC_BITBLTは確認してますし
CreateCompatibleDC(),BitBlt()も成功しています
下のソースではhdcにDrawすると描画され、hdcにDrawすると描画されません

環境VC++6.0 WindowsNT

case WM_PAINT:
 hdc = BeginPaint (hWnd, &ps);
 hdcnew = CreateCompatibleDC(hdc);
 RECT rt;
 GetClientRect( hWnd, &rt );
 DrawText( hdcnew, "AAAA\n", 5, &rt, DT_CENTER );
 BitBlt(hdc,rt.left,rt.top,rt.right-rt.left,rt.bottom-rt.top,hdcnew,0,0,SRCCOPY);
 EndPaint( hWnd, &ps );
 break;
212デフォルトの名無しさん:2001/07/18(水) 22:28
>211
CreateCompatibleBitmap()とSelectObject()が抜けてるよ。
基本は、
「WM_CREATEで裏画面を作成」
      ↓
「WM_PAINTで裏画面からコピー」
だから、それから挑戦してみたら。
参考までに。
http://www-online.kek.jp/~keibun/win32prog/paint.html
http://www2s.biglobe.ne.jp/~maekawa/dev/vc/redraw/
213デフォルトの名無しさん:2001/07/18(水) 23:23
抽象クラスの仮想関数をいくら増やしてもクラスのサイズが変わらない
のは何故かしら?あと、virtual 型名 の「型名」を変えても同じ。
どうして!?
214デフォルトの名無しさん:2001/07/18(水) 23:29
>>213

「仮想関数テーブル」を検索してみてください。
215211:2001/07/19(木) 00:21
ありがとうございます。

一旦ビットマップに保存して
差し替えなければならないのですね。
216デフォルトの名無しさん:2001/07/19(木) 00:54
あのですね。C言語で、
ある指定した数までの素数を求めるプログラムを作った場合、
配列を使ったエラトステネスのふるいで求めるプログラムと、
線形リストによりポインタを使ったプログラムと、
普通にfor文で割っていって、割りきれた値が例えばi==jだったらそれは
素数であるといった3つの場合を考える時、
計算量とメモリの使用量はどう違うんでしょうか?教えてください!
217デフォルトの名無しさん:2001/07/19(木) 00:58
自分で計測しろ>216
218216:2001/07/19(木) 01:17
どーやって計測すればいいんでしょうか?
219デフォルトの名無しさん:2001/07/19(木) 01:27
プロファイラ使うか、手作りで計測コードを埋め込む。

埋め込む場合、
計算量は単純に時間測定、
メモリ使用量はmalloc/freeの部分に、
使用サイズ、ピークを加減算する関数をはさむ。
これでだいたい判る。
220デフォルトの名無しさん:2001/07/19(木) 01:40
>>218
計測しないとわからん程度ならどうだっていいじゃん。
221デフォルトの名無しさん:2001/07/19(木) 01:53
VCで、今ネットに繋いでいる回線を切断する関数ってあります?
222デフォルトの名無しさん:2001/07/19(木) 02:05
>>221
InitiateSystemShutdown()
223221:2001/07/19(木) 02:08
>>222
それはシステムのシャットダウンですよ。
ねたじゃないなら覚えておいた方がいいですよ。
224:2001/07/19(木) 02:14
>>221
system("net stop \"Network connections\")";

回線ってなによ。モデム?ならそういう風に書いてくれ。
LANカードとか刺さってたらどうするのよ?
225221:2001/07/19(木) 02:20
>>224
これはコマンドですか?「net」って今やってみたら「コマンドまたはファイル名が違う」と言われました。

回線っていうか、今繋がっているダイヤルアップの接続を自分の意思で切ることが出来るのかな?ということなんです。
226:2001/07/19(木) 02:21
TAPIを調べるがよい。

ついでにいうと、開発はNT系列でやるがよい。
227221:2001/07/19(木) 03:02
>>226
わからない・・・
自分でも情けないと思うんですが、TAPIの関数群を色々調べたんですが、
lineClose() などの終了関数はすべてオープンしたときのハンドルが必要みたいで、
いい日本語の説明ページが見当たらないしちょっと手詰まり状態。
それに、すでに接続されている状態から自分のプログラムを立ち上げて
接続を切りたいのですが・・・
iriaとかのツールがやってるようなやつを。
ちなみに自分のマシン限定プログラムです(WIN98)。
228さとう:2001/07/19(木) 03:18
VC++のリソースエディタでエディットボックスを作るとキーを押して
もWM_CHARやWM_KEYDOWNのメッセージがダイアログボックスに送られ
ないようです。キーを押されたかどうかを知るにはどうしたらいいの
でしょうか?
229デフォルトの名無しさん:2001/07/19(木) 04:09
>>228
メッセージをフックするのが一番手っ取り早いかな。

ただ…、単に入力の有無とその文字を知りたいだけなら、
親ダイアログのWM_COMMANDでEN_CHANGEを捕まえて、
EM_GETLINEやGetWindowTextなどを使うだけで済むと思います
230デフォルトの名無しさん:2001/07/19(木) 08:09
>>227
Ras。
231デフォルトの名無しさん:2001/07/19(木) 20:04
vector< spelma > MeatBar;
というメンバベクトルが、DLL内のクラス内にあるのですが、
std::vector<class MeatBar,class std::allocator<class MeatBar> >' は __export キーワードを使って class 'Sex' にエクスポートしてください。
と警告されます。そのあとそのメンバを参照すると、強制終了します。
vectorをDLL内のクラスのクラスメンバとして持つにはどうすればよいのでしょう。
232デフォルトの名無しさん:2001/07/19(木) 20:14
ちなみに、spelmaもクラスです。
233デフォルトの名無しさん:2001/07/19(木) 20:49
回線で首つって死ねば解決するよ。
234デフォルトの名無しさん:2001/07/19(木) 21:37
ちなみにネタではありません。このアプリケーションの仕様をオブジェクト指向で表しました。少し不自然なところがあるものの、7不思議ということで片付けておきました。では教えてください。
235デフォルトの名無しさん:2001/07/19(木) 22:58
>>234
帰れ。

プログラマーズ・ジョーク
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=983059592
ここでやれ。
236デフォルトの名無しさん:2001/07/19(木) 23:01
マジですよ?
237デフォルトの名無しさん:2001/07/19(木) 23:08
>228

エディットボックスをサブクラス化すればメッセージは拾える。
文字が知りたいだけなら、229のとおり。
238カカ:2001/07/19(木) 23:11
割り込みで失礼します。

VC++6.0で、テンプレート関数を

 func<int>( 123 );

というように型を明示的に指定すると、

d:\DATA\PROGRAM\VC++\Test\TaskTest.cpp(51) : fatal error C1001: 内部コンパイラ エラー
(コンパイラ ファイル 'msc1.cpp', 行番号 1794)
Visual C++ のサポート情報 コマンドを選択してください
ヘルプ メニュー、 またはサポート情報のヘルプ ファイルを参照してください

と、内部コンパイラ エラーになることがあるんです。
サンプルコードを載せたいところなのですが、これ単純なソースコードでは普通にできるんです。
200行くらいを超えると、ほぼ確実に発生してしまいます。

今までは型キャストでなんとかしてたんですが、今回キャストで解決しようとするとものすごく長い記述になってしまう部分で・・・。
どなたか同じような現象が発生している方はいないでしょうか?
239デフォルトの名無しさん:2001/07/20(金) 00:42
関数テンプレートがらみのバグはよくあることなんで
なんかがんばって、回避策を探すとよいと思われ。

とりあえず関数を短めに分割してみれば?
240デフォルトの名無しさん:2001/07/20(金) 00:45
>>238
SPはあてた?あててるならスマソ。
241カカ:2001/07/20(金) 01:24
バグってのは一番ヤな可能性だぁ。
一応SPは5です。

「MSDN」
関数テンプレートの引数は明示的に指定できます。次に例を示します。

template<class T> void f(T) {...}
void g(char j) {
f<int>(j); //generate the specialization f(int)
}

できないじゃないかMSDNメー。
242デフォルトの名無しさん:2001/07/20(金) 02:15
>>241
テンプレ使うなってことだと思われ。
243デフォルトの名無しさん:2001/07/20(金) 03:25
ウチでも同じ現象が発生してるので、解決策求むage
244さとう:2001/07/22(日) 12:50
>229,237
メッセージをフックする方法でうまくできました。
大変ありがとうございました。
245デフォルトの名無しさん:2001/07/22(日) 13:10
GDIでダブルバッファリングってどうやるんですか。下のようにやりましたが駄目でした。
BITMAP bm;
LoadBitmap(hInstance,"IDB_BITMAP1")
HDC hdc,hdc2,buf;
hdc=GetDC(hwnd);
buf=CreateCompatibleDC(hdc);
hdc2=CreateCompatibleDC(hdc);
SelectObject(hdc2,bm);
Bitblt(buf,0,0,600,600,hdc2,0,0,SRCCOPY);
Bitblt(hdc,0,0,600,600,buf,0,0,SRCCOPY);
246デフォルトの名無しさん:2001/07/22(日) 15:58
すいません、VC++で開発中に、コンパイルして実行したあと、しばらくして落ちたんですが、そのあと再起動してもう一度環境を開くと、cppファイルがバイナリファイルに変化してしまって、そのファイルのソースコードそのものが消失しました。これはどういうことでしょう。
247246:2001/07/22(日) 16:04
こんな現象が起こる可能性のあるもので開発するのは怖くないですか?
248デフォルトの名無しさん:2001/07/22(日) 16:30
>>246
それは別にVCが悪い訳じゃなくて、FATがぶっ壊されてるだけ。
249デフォルトの名無しさん:2001/07/22(日) 16:31
>>245
bufに対するビットマップオブジェクトがない。
250デフォルトの名無しさん:2001/07/22(日) 16:39
VCでMITSって作れるんでしょうか。
作り方がわかる方教えてください。
251デフォルトの名無しさん:2001/07/22(日) 17:28
>249
なるほど、そういうことですか。おかげでできました。どうもありがとうございました。
252デフォルトの名無しさん:2001/07/22(日) 19:28
VCで
関数呼び出しを書くときに
括弧まで書いたら、引数一覧が出るのですが
この機能の名称ってなんですか?
あと、表示できない時があるのですか、表示可能な条件とかも教えてください。
(うちのノートだと表示するのですがデスクトップだと表示しないです)
構造体メンバを示す時にも表示できるのもおねがいします
253いお:2001/07/22(日) 21:07
たしか
「IntelliSense」というやつだったよーな
254デフォルトの名無しさん:2001/07/22(日) 23:05
>>252

パッケージ読め。
またはMSDN読め。

あとIntelliSenceはClassWizardから情報を引っ張ってきていて
ClassWizardはわりとよくこける。
こけるとメンバ表示されなくなる。

のでメンバが表示されなくなったらVCを再起動すれば
直ることが多い。

> 表示可能な条件
ClassWizardが情報を認識していること。以上。ClassView見れ。
255252:2001/07/22(日) 23:29
「IntelliSense」って名称がわからなかったので、調べようにも。
名称わかったのでMSDN読んだ調べた。
わかりました。
ありがとうございます。
256デフォルトの名無しさん:2001/07/23(月) 04:40
C++は、もう破滅寸前。
ここらでSTLに挫折した、全体の95%相当のプログラマが
不買運動を起こし、消滅します。

ありがとうC言語!そしてC++さようなら!(^_^)また会えるといいね!

http://piza.2ch.net/test/read.cgi?bbs=tech&key=995820118&ls=100
257デフォルトの名無しさん:2001/07/23(月) 05:19
>>256
(゚Д゚)ハァ?
258これってバグだべ:2001/07/23(月) 06:13
#include <stdio.h>
#include <windows.h>
static char szMsg[] = "String";
static short wDlgData[] = { LOWORD(szMsg), HIWORD(szMsg) };
void main(void)
{
printf("%08lX\n", szMsg);
printf("%04X:%04X\n", wDlgData[0], wDlgData[1]);
printf("%04X:%04X\n", LOWORD(szMsg), HIWORD(szMsg));
}
上のソースをコンパイル & 実行すると結果が以下のようになる。
0040E030
0000:0040
E030:0040
コンパイラはVC++6.0、回避方法無いかナ〜?
259デフォルトの名無しさん:2001/07/23(月) 06:30
>>258
なんでそんなわけわかんないコードにする意味が全く理解できないが、
static short wDlgData[] = { LOWORD(szMsg), HIWORD(szMsg) };

static long num = (long)szMsg;
static short wDlgData[] = { LOWORD(num), HIWORD(num) };
で回避できるようだ。
260デフォルトの名無しさん:2001/07/23(月) 07:15
>>259
おぉ!なるほど〜
> なんでそんなわけわか
コンパイルされたダイアログのリソース・スクリプトみたいなのをプログラム内部に定義したいな〜とか思ってさ。
261デフォルトの名無しさん:2001/07/23(月) 12:25
>>260

だからって>>258のコードにする理由にはならないと思うけど。
262デフォルトの名無しさん:2001/07/23(月) 13:54
>>258
> 理由にはならない
ストレージを少しでも少なくしようと思っての事だけど。そうゆう意味じゃなくて?
結局以下のようなコードで解決。
解決したのは0xFFFF。マクロは説明の為のオマケね。

#define DLGCMD_TEXT 0
#define DLGCMD_EDIT 1
#define DLGCMD_CHECK 2
#define DLGCMD_END -1

#define Def_DlgText(x,y,w,h,id,p) \
  DLGCMD_TEXT,x,y,w,h,id,(short)((unsigned long)(p)&0xFFFF),HIWORD(p)
#define Def_DlgCheck(x,y,w,h,id,p) \
  DLGCMD_CHECK,x,y,w,h,id,(short)((unsigned long)(p)&0xFFFF),HIWORD(p)

static char szMsg[] = "String";
static unsigned short wDlgData[] = {
  Def_DlgText(10,10,96,20,IDC_TEXT,szMsg),
  Def_DlgCheck(10,30,96,20,IDC_CHECK,szMsg)
  };
263デフォルトの名無しさん:2001/07/23(月) 13:58
上の配列wDlgData、最後にDLGCMD_END入れるの忘れちゃった
264デフォルトの名無しさん:2001/07/23(月) 14:48
MFCで、ダイアログのOnPaintでオフスクリーン描画しようと思って、
void CHogeDlg::OnPaint()
{
PAINTSTRUCT ps;
CDC *dc = BeginPaint( &ps );
// dc使って描画
EndPaint( &ps );
}
ってやったんだけど、ちらついてしまいます。
dcで描画してる所をトレースしてみたら、EndPaint前なのに描画されてしまっていました。
ダイアログだとダメなんでしょうか?
265デフォルトの名無しさん:2001/07/23(月) 15:18
>>264
BeginPaint/EndPaint使ったからってオフスクリーン描画になるわけではない。
バックバッファを用意しろ。
266258:2001/07/23(月) 16:00
>>262

ごめん、やっぱり言ってることもやってるコードも
意味不明だわ。

ただ、前述の奴バグは確認した。
スタックだと大丈夫だけど、それ以外に配置されると駄目みたいだね。


俺って厨だったんだな。鬱だ。
267149:2001/07/23(月) 16:20
>>152 どうも。MSCommコントロールを貼り付けない方法(動的Create)で、
一応送受信はできたんですが、受信イベントをフックできないです。

>正攻法2:
>入力スレッドを立て、受信したらEventを立てる。
>メッセージポンプの当たりでイヴェントをチェック。

入力スレッドというのは、受信バッファを監視する用ということでしょうか。
268262:2001/07/23(月) 16:28
>>259
これは、定義したshort配列をある関数に渡すと、内容に従って子ウィンドウをぽこぽこ作ってくれる為のデータ定義です。
子ウィンドウのタイプ・サイズなどはshortで定義出来ますが、キャプション文字列は配列に収まらないので、上位・下位ワードに分けてねじ込もうとしているのでした。
269名無しさん:2001/07/23(月) 16:30
ReadFileで無限ループしてバッファリングして
それでSetEvent。
でもふつうは勝手に受信させといて
APIで受信バッファをみれば良い。
270262:2001/07/23(月) 16:31
あと、子ウィンドウの種類によっては必要なパラメータ数が異なるので、
構造体として定義する事が出来ないのでした。(出来ない事もないケド)
271デフォルトの名無しさん:2001/07/23(月) 16:57
>>270
なんでCreateDialogIndirectを使わないのか。
272デフォルトの名無しさん:2001/07/23(月) 17:15
特に派生元を意識しない独自クラスを新規作成して、メンバにコントロールを
入れるとします。この場合、コントロールへのメッセージを受け取りたい場合は、
基本クラスを設定せねば(genericじゃだめ)なりませんよね?多分。
皆さんこのような場合は基本クラスを何にするんでしょうか。
あと、基本クラスを追加(存在しない場合)する場合の手順は何かいい方法が
あるでしょうか。
273デフォルトの名無しさん:2001/07/23(月) 17:17
(゚Д゚)ハァ??
274259 (!=261):2001/07/23(月) 17:17
>>268
>>271に同じ。
どの道、構造体を使うべきでは。

どうしてもって言うなら、shortで確保しないで、longで確保した方が万倍スマートです。
そんな部分のメモリケチっても、先にリソースが底尽きます。
275272:2001/07/23(月) 17:18
すいません。genericでも基本クラスを設定できますね。
genericで、基本クラスを設定しなかったという状態でお願いします。
276デフォルトの名無しさん:2001/07/23(月) 17:23
>>272 = >>275
何がやりたいのか全く理解できない。
とりあえずサンプルコード晒せ。話はそれからだ。
277デフォルトの名無しさん:2001/07/23(月) 17:44
>257
そもそもクラスに関して何か勘違いしてないか。
278262:2001/07/23(月) 19:18
> shortで確保しないで、long
そうしようと思った矢先に、解決策を思いついたのでした。
まぁ良いじゃん、16bit時代からやって来たから、貧乏癖が染み付いてるんだよ。

> CreateDialogIndirect
今はWindowsでやってるけど、将来的に他のプラットフォームへも持って行きたいんで、
なるべくAPI依存しないようにやってるんだよね。
279デフォルトの名無しさん:2001/07/23(月) 19:29
>>278
だったら、リソースをコンバートする方法を考えた方が建設的。
280278:2001/07/23(月) 23:04
>>279
> リソースをコンバート
ふむ〜それはそうかも。
確かに、GUIをグラフィカルにデザイン出来ないってのは辛い物がある。
今は他にもやる事いっぱいで、脱線になっちゃうんでやんないけど、また同じような問題にぶつかったらやるかなぁ。
ありがと、良いアイデア出してくれて。
281デフォルトの名無しさん:2001/07/26(木) 08:39
test
282デフォルトの名無しさん:2001/07/26(木) 08:39
MSCOMM使ってます。純粋にポートが開かれてるかどうかを調べる方法は
ないのでしょうか?
GetPortOpenメンバ関数にしろ、GetCommIDメンバ関数にしろ、自分自身が
開いたポートに関しては分かるのですが、他のアプリによって開かれたポートに
関しては判定できません。
最悪CreateFile API関数を使おうかと思うのですが他に簡単な方法はない
でしょうか。
283282:2001/07/26(木) 11:53
ポートオープンのアクションで例外拾えました。
やた!
284デフォルトの名無しさん:2001/07/26(木) 23:29
ちょっと意図とは違うのですが、
コンパイラされた後のファイルから
ソースを見ることって出来ますか?

参考にしたいプログラムがあったので・・・
危ない話すんません。。
285デフォルトの名無しさん:2001/07/26(木) 23:39
>>284
失せろマルチポスト野郎。
286デフォルトの名無しさん:2001/07/27(金) 17:51
ハンドルされていない例外は・・・・ってエラーは
try,catch
で受け取れない?
287286:2001/07/27(金) 17:57
ゴメン。受け取れはする。
try(...)
の中で。
でも、やっぱその後に”ハンドルされていない・・・”って
メッセージが出て終了する。回避可能?
288デフォルトの名無しさん :2001/07/27(金) 19:11

現在3つの問題に頭を悩ましております。

1つ目はマウスの座標のことです。
GetCursorPos で取得できるのは整数単位の座標ですが
もっと精度の高い取得はできないのしょうか?
0.1ピクセル単位で取得したいのですが・・・

2つ目はプログラム終了時にOSが自動でプログラム内で
使用したオブジェクトを破棄してくれるみたいですが
自動破棄されないものってあるんですか?
メモリなんかは勝手に破棄してくれているように見えますが(システムモニターで見ていると破棄されているように見える)
メモリの破棄は任せちゃってもいいですか?
逆に「これはプログラム終了前に必ず破棄しないと逝けない!」ってものはありますか?

3つ目はモーニング娘の吉澤ひとみが好きで好きでたまりません。
現在の彼女は強いて言うなら矢口似です。
前は矢口ファンだったので彼女の評価は比較的良かったのですが最近は吉澤にメロメロなため彼女がウザくなってきました。
彼女と別れて吉澤(本人)と付き合う最も最適な方法はどのようなものでしょうか?
ぜひ教えてください。
289デフォルトの名無しさん:2001/07/27(金) 19:28
そもそもマウスカーソルは0.1ピクセル単位では動かない。っつーかネタ?
290RIP_MAPIRO:2001/07/27(金) 20:42
>>288
DirectInputを使って移動量を内部で累積したものを利用すれば可能。
マウスの挙動を自前で用意する事になるので、他のウインドウと共存
させるときは注意。

メモリの破棄は普通最後まで面倒見るべき。とくに他人様のオブジェクト
を構築するときは、内部でどんなリソースが確保されているか分からん。
291無能な姦理人@Shiri-Q:2001/07/28(土) 00:05
□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□





続きはコチラです
http://www.geocities.com/entry_k/main/main01.html
292デフォルトの名無しさん:2001/07/28(土) 00:32
>>290
そういうことなんか?
>>288が知りたかったのは「マウスの移動量」でいいんか?
「マウスカーソルの座標」と「マウスの移動量」は全然違うもんじゃないのか?
293デフォルトの名無しさん:2001/07/28(土) 15:05

288です。
ネタではありません。

1つ目はペイントソフトでA点からB点にマウスが移動した場合の軌跡をできるだけ正確に取りたいんです。
例えば (10,10) から (20,20) まで移動した場合のマウスの軌跡
(11.1,10.8)-(12.2,11.6)-(13.5,13.1)-(14.2,14.0) ... って具合に10分の1ぐらいの精度でマウスの微妙な動きを取得したいんです。

2つ目は自力で破棄するように心がけます。

3つ目に関しては忘れてください。
昨夜彼女とXXXして彼女の良さを再認識しました。ハァハァハァ
吉澤のことは忘れます・・・
っていうか昨日のFUNで「裸にエプロンの石川」に萌えてしまいました。
青春って素晴らしいですね。
294デフォルトの名無しさん:2001/07/28(土) 15:12
>>293
ん〜と…
その用途だと、充分に短い観測周期を取らないといけないと思うんだけど。
1ms単位で>>290の言ってたようにDirectInputで移動量を監視して積算。
当然誤差が出るから、最終的にはカーソル座標で丸めないといかんと思うが。

ちなみに、1ms周期を作るにはマルチメディアタイマー使うしかないかも。
295デフォルトの名無しさん:2001/07/28(土) 15:48
THICKが10msのOSで1msってどうやって測るのでせうか?
296デフォルトの名無しさん:2001/07/28(土) 16:48
QueryPerformanceConter
297デフォルトの名無しさん:2001/07/28(土) 16:51
>>294
それ以前にマウスは1ms単位では情報を送ってこないよ
298デフォルトの名無しさん:2001/07/28(土) 16:52
VC++ でインストールプログラムを作りたいのですが、
ショートカットファイルの作成方法(API)をご存知の方
教えてください。
299アッガイ:2001/07/28(土) 16:55
応援お願いしますっ!!
http://www.sh.rim.or.jp/~pumpkin/choice/
300デフォルトの名無しさん:2001/07/28(土) 16:56
>>293
検索すれば5分でみつかる
301300:2001/07/28(土) 16:57
間違えた。
300は >>298 あてのメッセージ
302298:2001/07/28(土) 17:04
すまん、見つかった
303デフォルトの名無しさん:2001/07/28(土) 21:59
VC6SP5+w2kの環境で質問があるのですが、リストビューに
アイテムを挿入すると、アイコンの背景が白くなってしまうのですが
何か回避方法は無いのでしょうか?
304286=287:2001/07/30(月) 09:11
誰か返事くれよ。クスン。(涙
305ポカリスト:2001/07/30(月) 14:36
CxxxViewの中にSplitterWndってどうやればもてるの?
おしぇ〜て
306デフォルトの名無しさん:2001/07/30(月) 22:34
>>305
なぜフレームを使わない?
307デフォルトの名無しさん:2001/07/31(火) 09:39
っつーか、Scribbleからやり直せ。
308デフォルトの名無しさん:2001/07/31(火) 17:26
エクセルをオートメーションで操作しています。
エクセルの起動やセルの参照、書き込み、ファイルの保存等一通りできたんですけど、
マクロの実行ができません。
誰か分かる方います?
309デフォルトの名無しさん:2001/07/31(火) 17:29
>>308
ごめん。俺分かんないや。何みて勉強したの?おれも興味あるんで。
310デフォルトの名無しさん:2001/08/01(水) 12:54
ExecuteExel4Macroって違うかな?
311308:2001/08/01(水) 12:57
>>309 VC++超初心者ってHPで質問掲示板があって、過去ログ(投稿)の
検索ができるんだけど、excelで検索してみ。
312308:2001/08/01(水) 12:59
>>310 ナイスタイミング。今からやってみるよ。サンキュ。
313デフォルトの名無しさん:2001/08/01(水) 13:06
>311=312
なにをやっている。何をw
314308:2001/08/01(水) 13:10
>>313 どういう意味だゴルァ!!!(悪意はないよ)
315デフォルトの名無しさん:2001/08/01(水) 14:11
VC6のエディタでキーワードの強調表示が出来るそうですが
オプションやカスタマイズに設定するところが見当たりあせん。
何処にあるんでしょうか?
あと、キーワードの定義ファイルって、どこかからかダウンロード
できますか?
316デフォルトの名無しさん:2001/08/01(水) 15:44
>ExecuteExel4Macroって違うかな?

違います。

Application.Run

で実行できます。
317308:2001/08/01(水) 16:32
>>316 "Run"関数じゃダメだったよ。ほんで"_Run2"ってウサン臭い関数があって
これで逝けた。アンダーバーで何を表してんだよ。(w
"Run"と"_Run2"の仕様は全く一緒。関数内部を見てみると、DispatchID以外
全く一緒。うーん。もちょっと調べてみるわ。
ちなみに"ExecuteExel4Macro"は、まだVBAが出る前のExcel4.0のマクロとの
互換を保つための関数のようだな。この頃俺は多分123やってたんでよく分からん
のだが。とにかく旧命令をサポートしてるってことみたいだね。

まっ、とにかく逝けたのでよしとするわ。"Run"と"_Run2"の動作や用途の違い
が分かる人は教えてくれ。分かったら俺もアプするわ。
318デフォルトの名無しさん:2001/08/01(水) 18:27
319デフォルトの名無しさん:2001/08/02(木) 15:38
"Afx"ってどういう意味でしょうか。なんかの略?
320デフォルトの名無しさん:2001/08/02(木) 16:06
>>319
あふろエックスだよ。覚えときなさい。
321デフォルトの名無しさん:2001/08/02(木) 16:35
>>320 嘘つくなって。アナルファックエクステンションって
拡張仕様のことみたいだね。検索してみ。いっぱいヒットするよ。
322デフォルトの名無しさん:2001/08/02(木) 17:00
>>321
一件もヒットしねぇぞグァラ・・・
323デフォルトの名無しさん:2001/08/02(木) 23:46
CSVを読み書きするとき特に気をつけることはありますか?
・文字列内にカンマがあるときは全体を"でくくる。
・さらに文字列内に"があるときは、"を""にする。

でいいでしょうか?
324デフォルトの名無しさん:2001/08/02(木) 23:49
>>323
CSVって、別に規格があるわけじゃないし。
323さんの扱うCSVがそうだったら、それでいいってしかいいようがない。
325323:2001/08/03(金) 00:27
>>324
回答ありがとうございます。
できるだけ他のアプリケーションでも読み書きできる
ような形式にしたいんです。

かといって、いろいろなオプションをつけるのは
面倒なんで避けたいんです。

その場合、上記の方法が最善でしょうか?
326デフォルトの名無しさん:2001/08/03(金) 00:45
>>319 Afx = Application Frameworks
327デフォルトの名無しさん:2001/08/03(金) 01:16
XMLつかへ >>325
328びん:2001/08/03(金) 11:37
VCを使う = C++を使う = MFCを使え
ってことなんですか?
329一休み:2001/08/03(金) 14:22
>>326 xは?
330デフォルトの名無しさん:2001/08/03(金) 14:53
>>329
ks
331デフォルトの名無しさん:2001/08/03(金) 14:55
テンプレートクラスのインスタンスを

テンプレートクラス名1<テンプレートクラス名2<型名>> インスタンス名;

のように生成することは可能でしょうか?
332デフォルトの名無しさん:2001/08/03(金) 14:58
>>331
できるよ。
333331:2001/08/03(金) 15:04
>>332
レスどうもです。
以下のように簡略化したソースでコンパイルを試みたのですが、
error C2146: 構文エラー : ',' が、識別子 'arrayPoint' の前に必要です。
のようなエラーが出てしまいます。

template<class T>
class Point
{
T m_x, m_y;
};

template<class T>
class Array
{
T m_array[10];
};

void main()
{
Point<float> point;
Array<float> array;
Array<Point<float>> arrayPoint; // この行でエラーが出てしまう
}
334331:2001/08/03(金) 15:05
コンパイラはVisualC++6.0 Pro + SP5 です。
335デフォルトの名無しさん:2001/08/03(金) 15:06
>>333
>Array<Point<float>*> arrayPoint; // この行でエラーが出てしまう

↑*のとことに、スペース入れてください。
そうしないとコンパイラが演算子の>>と区別がつかないらしいです。
336331:2001/08/03(金) 15:08
>>335
レスどうもです。
なるほど、右シフトと認識されてしまうのですね。
ありがとうございました!
337デフォルトの名無しさん:2001/08/03(金) 19:34
マルチスレッドプログラムについて質問があります。

スレッドを使った場合共有リソースアクセス時に同期を取らなければなりませんが
実際どのような現象が発生するのでしょうか?

仮にWin98で共通の変数 INT nHoge; を別のスレッドから使用する場合

nHoge = 10;
のような処理を別のスレッドから実行した場合

WinNT系 + 2CPUの環境だと、完全に同時にこのような処理が行われると思うのですが
実際こういう状況になった場合、値が壊れるのでしょうか?
それとも同時アクセスによってシステムクラッシュしてしまうのでしょうか?

また
nHoge = 10;と言う処理と return nHoge; や if(nHoge)等の同時実行
(つまり書き込み中に別のスレッドから読み込む)
したばあい、読み込みの値が壊れるだけですむのでしょうか?
それとも同時実行でシステムクラッシュするのでしょうか?

上記のような処理で仮にシステムクラッシュするとしてもう一つ質問があります。
1CPUやWin98等の環境の場合上記のような事をしても、時分割で実行されるため
完全な同時アクセスにはならないと推測します。
つまりアセンブラで1命令程度の処理ならば、値が予定外になるぐらいですむと推測するのですが、
実際はどのような現象が現れるのでしょうか?

その他同期関係で注意する事があれば合わせてご教授していただけると大変助かります。
よろしくお願いします。
338337:2001/08/03(金) 19:36
すいません。

上記の 6行目
>仮にWin98で共通の変数 INT nHoge; を別のスレッドから使用する場合

は書き込みミスです。無視してください。
339デフォルトの名無しさん:2001/08/03(金) 19:49
・同時書き込みでデータの消失
・双方待ち状態になりデッドロック、プログラムハング
値が壊れるだけで済む、って言ってるがおもっきり重大な問題だと思うが
シングルCPUに関してはその通り
340デフォルトの名無しさん:2001/08/04(土) 05:36
>>337
変数の同時アクセスでシステムクラッシュはしないよ。
どれかのスレッドが直前に書きこんだ値を読むだけ。
341デフォルトの名無しさん:2001/08/04(土) 09:16
>>340
デュアルだとバス衝突したりしないの?
342デフォルトの名無しさん:2001/08/04(土) 11:42
age
343デフォルトの名無しさん:2001/08/04(土) 12:02
>>341

そいつはもう、マルチスレッドのソフトウェアが
どうとかいうレイヤじゃないだろう。
344デフォルトの名無しさん:2001/08/04(土) 12:23
>>341
バスアービトレーションというキーワードでアーキテクチャ
の本でも探して勉強しなおせ。
345デフォルトの名無しさん:2001/08/04(土) 19:54
>>341
ファイルだったらそうだが、メモリの読み書きじゃ論理エラーで終る。
346sage:2001/08/05(日) 14:35
VC++のデバッガーって配列をポインタとして扱った場合に最初の要素しか見えないんだけど、なんとかならんの?
347デフォルトの名無しさん:2001/08/05(日) 14:37
>>346
ならん
348神に喧嘩を売る男:2001/08/05(日) 14:45
ウィルスで俺の携帯壊してくれ〜(こおせないよね(笑))
349346:2001/08/05(日) 14:59
>>347
簡潔なレスどうも。では、なんとかなる良いデバッガはない?
350デフォルトの名無しさん:2001/08/05(日) 15:22
351デフォルトの名無しさん:2001/08/05(日) 16:08
>>348
「こおせ」ません(ワラワラ
352デフォルトの名無しさん:2001/08/06(月) 09:55
スピンボタンって、ボタンアップのメッセージってないよね。
皆どうしてる。
例えば、スピンボタンと連動させるエディットボックスの数値は動かしたい
んだけど、メイン処理はボタンアップでって場合。
353デフォルトの名無しさん:2001/08/06(月) 12:19
>>352
WM_NOTIFY
354352:2001/08/06(月) 13:57
>>353 もちっと詳しく。
355デフォルトの名無しさん:2001/08/06(月) 15:32
>>354
PreTransrateMessage で自分でメッセージ調べれば?
356デフォルトの名無しさん:2001/08/06(月) 16:08
>>352-355
SPY++という便利なものがあるだろうに。
357デフォルトの名無しさん:2001/08/07(火) 06:33
>>354
ていうかMSDNで「スピンボタン」て引いてみろ
358デフォルトの名無しさん:2001/08/07(火) 20:17

スタティックライブラリでのリソースの扱い方について教えてください。
スタティックライブラリ内にリソースファイルを作りました。
スタティックライブラリからリソース内のダイアログを生成しようとすると失敗します。
アプリケーション本体のリソース内のダイアログはスタティックライブラリ内から生成できます。
どうもリンクの時点でスタティックライブラリ内のリソースが正常にリンクされていないようですが
これってどうすればいいですか?
リンクの際に何か特殊なオプションを設定するのでしょうか?
環境はVC++6.0でSDKでプログラムしています。
教えてください。
359デフォルトの名無しさん:2001/08/08(水) 10:42
>>358
確か MS-Linker には、複数のコンパイル済みリソースを「リンク」する能力は
無かったと思います。

ライブラリが必要とするリソースを *.rc で提供して、
アプリケーションの *.rc からインクルードしてもらう必要があります。

たとえば MFC をスタティックリンクするアプリケーションを
ウィザードで作成しても、やはりそうなっていると思います。
360:2001/08/08(水) 22:39
質問なのですが、みなさんはMFCつかってますか?
MFCつかえるようになったら、全部MFCでつくってますか?
361デフォルトの名無しさん:2001/08/08(水) 23:44
使ってるよ
SDKに疲れたらMFCに手を出せばいい思う
全部MFCで作るっていうのは無謀
APIの全機能がつかえるわけではないし
CFindFileのような,ぁやιぃ(使えない)クラスがごろごろあるからね
362デフォルトの名無しさん:2001/08/09(木) 00:57
>>360
今、SDKだけですか。そりゃ凄いや。
MFC主体だけど361さんが書いているように全部MFCというのは
無理があると思う。APIを直接呼び出していることも多い。
363:2001/08/09(木) 07:53
??
MFCとAPI直が
まざってるということですか?
明確に、このアプリは全部MFC!とかわける必要はなし?
364デフォルトの名無しさん:2001/08/09(木) 08:11
>>363
MFCだって内部で結局APIを呼んでいる。
MFCにはいくつか致命的に使えないクラスがあって、
それを使うくらいならAPI直叩きの方がマシというだけのこと。

結局、MFCの大部分はWinAPIのラッパーでしかないので。
365デフォルトの名無しさん:2001/08/09(木) 15:57
"GetFirstViewPosition"は常に最初に作った VIEW が帰って来るのでしょうか。
366 :2001/08/09(木) 16:07
>>365

こういう質問は自分で確認できると思うのだが?
367デフォルトの名無しさん:2001/08/09(木) 17:14
>>366
全く持って同意。
使ってみて、動きが変だとか、思い通りに動かないとかならまだわかるが、
俺らはMSDNじゃねぇっつーの。
368デフォルトの名無しさん:2001/08/09(木) 17:36
>>367
> 俺らはMSDNじゃねぇっつーの。
ワラタ!
369デフォルトの名無しさん:2001/08/09(木) 20:22
もう出てたらごめん。
Visual Studio とかの分割ウィンドウってどうやってるの?
ただの CSplitterWnd とは違うよね。
同じようにやろうと思ったら大変なのかな?
370デフォルトの名無しさん:2001/08/09(木) 20:31
371369:2001/08/09(木) 21:10
>>370
うぉー ありがとう!
けっこう大変そうですが調べてみます。
「MFCインターナル」買ってみようっと。
372デフォルトの名無しさん:2001/08/10(金) 02:50
age
373MSDN:2001/08/10(金) 04:59
>>365
CDocument::GetFirstViewPosition
virtual POSITION GetFirstViewPosition( ) const;

戻り値

GetNextView メンバ関数での列挙に使う POSITION 値を返します。

解説

ドキュメントに関連付けられたビューのリスト内の最初のビューの位置を取得します。



//ビューのリストの最初のビューを取得します。

POSITION pos = GetFirstViewPosition();
CView* pFirstView = GetNextView( pos );
// この例では CDocument::GetFirstViewPosition
// と GetNextView を使って各ビューを再描画します。
void CMyDoc::OnRepaintAllViews()
{
 POSITION pos = GetFirstViewPosition();
 while (pos != NULL)
 {
  CView* pView = GetNextView(pos);
  pView->UpdateWindow();
 }
}

// 同じ結果を得る簡単な方法は、UpdateAllViews(NULL) を
// 呼び出すことです。
374365:2001/08/10(金) 08:53
いや。そんなに寄ってたかって言われても・・・。
まぁ。精進しますです。はい。
375デフォルトの名無しさん:2001/08/10(金) 10:30
ON_COMMAND_RANGEをクラスウィザードで追加できないのですが
バグでしょうか?
376デフォルトの名無しさん:2001/08/10(金) 10:40
GetNextViewって登録した順番にViewが返ってくるの?
377デフォルトの名無しさん:2001/08/10(金) 19:50
>>376
VC持ってますか?
持ってれば実験すればいい。
持ってないならどうだっていい。
378デフォルトの名無しさん:2001/08/14(火) 11:57
age
379デフォルトの名無しさん:2001/08/16(木) 11:26
VC++で、
関連づけされたファイルを起動する(という言い方も変だけど)事はできるのでしょうか

たとえばxxx.lzhをダブルクリックすると、関連づけされた解凍ソフトが立ち上がって
勝手に解凍までしてくれる状態になっている時、

プログラム中から、同じような事をしたいのです
(解凍ソフトのほうを呼び出すのではなく、あくまで xxx.lzhファイルを実行する
というふうにしたいのです・・・)
380デフォルトの名無しさん:2001/08/16(木) 11:30
>>379
コマンド発行で"start xxx.lzh"ってするってはどう?
381デフォルトの名無しさん:2001/08/16(木) 11:30
>379
377が参考になるぞ。
382381:2001/08/16(木) 11:37
>379
おれの勘違いだった。
普通にopenではだめだな。
陳謝。
383デフォルトの名無しさん:2001/08/16(木) 11:39
>>379
ShellExecute
384デフォルトの名無しさん:2001/08/16(木) 11:42
>>379
レジストリ読んでコマンド実行
だめ?
385379:2001/08/16(木) 14:59
ありがとうございました
勉強不足で、CreateProcessしか 知らなかったのです・・・
ShellExecuteで解決ですね!
386NOMAD:2001/08/18(土) 01:46
VC6スタンダード使っています。
ツリービューを使って(別の方法があるならそれでもいい)エクスプローラーの左側のようなのをつけたいのですが
どうすればよいのでしょう?
Webなどで調べてみるとダイアログを立ち上げる方法はけっこう載ってるのに表示させておくというのは
見つけられなかったんです。
ディレクトリ構造を毎回調べていくという方法なら一応今の知識でもできるのですが、
もっといい(楽な)方法があれば教えて欲しいのです。
ヒントや参考図書でもうれしいです。よろしくお願いしますm(_ _)m
387デフォルトの名無しさん:2001/08/18(土) 03:56
指定されたファイルをエクスプローラで(というかフォルダで)開いて
選択された状態にする方法はないでしょうか?

ちょうどショートカットのプロパティで「リンク先を探す」ボタンを
押したときの処理みたいに。

お願いします。
388デフォルトの名無しさん:2001/08/18(土) 04:03
>>386
とりあえずどうぞ
http://www.codeproject.com/shell/seashell.asp
389デフォルトの名無しさん:2001/08/18(土) 08:52
>>387
ShellFolderView オブジェクトを作ってあれこれ。
390NOMAD:2001/08/18(土) 12:53
>>388
情報どうもです。ソース見て研究してみます。
しかし・・・これの実装は大変そうですね(^^;
391デフォルトの名無しさん:2001/08/18(土) 16:58
リソースえでぉたで作ったダイアログのスピンの最大値変える方法どうやってやんのよ
392デフォルトの名無しさん:2001/08/18(土) 17:44
>>391
ClassWizardでエディットコントロールに値として変数を割り当てると最大値と最小値が設定できる。
393デフォルトの名無しさん:2001/08/19(日) 02:43
前から疑問だったんですが
みなさんは窓作るだけのプログラムを
何も見ないで一から書けますか?
やはり職業プログラマの人は
それくらい当然のごとく覚えてるんでしょうか?
394デフォルトの名無しさん:2001/08/19(日) 02:52
書けません
それが出来るのはゲームプログラマと秀まる夫くらいです
395デフォルトの名無しさん:2001/08/19(日) 03:04
>>393
わたしも無理です
Hello Worldだけでも意味がわからないソースがあるっス(w
396デフォルトの名無しさん:2001/08/19(日) 05:25
>>393
できるよ。
新しいプロジェクトを作るときに「標準的なHelloWorld」選べば一発(w
VC6限定だけどね。
397デフォルトの名無しさん:2001/08/19(日) 05:47
>>396
だね。

そもそも、書き溜めたソースと参考資料の検索速度で「仕事」してるようなもんだし。
趣味のプログラムの方がよっぽど手間かかる(笑
398デフォルトの名無しさん:2001/08/19(日) 09:03
>>393
396、397の言うとおり
先代のコードをいかに利用するかってのもスキルの一つ。
399デフォルトの名無しさん:2001/08/19(日) 15:14
あげ?
400デフォルトの名無しさん:2001/08/19(日) 17:43
400おぱーい
401 :2001/08/20(月) 01:32
リストビューコントロールとヘッダーコントロールの違いが
いまいちわからないのですが、どう違うんでしょう?
402デフォルトの名無しさん:2001/08/20(月) 01:45
>>401
ハァ?
403デフォルトの名無しさん:2001/08/20(月) 08:10
Listってのは表。
HeaderControlってのは、Listの見出し。
ListViewは、Listの頭にHeaderControlがくっついてるもの。
404デフォルトの名無しさん:2001/08/20(月) 11:41
>393
覚えてるよ。VC++6.0のウイザード使わないで何回も最初から書いてたから。今思うとただの馬鹿
405デフォルトの名無しさん:2001/08/20(月) 12:43
class StrngVectorList : public string,public vector,public list
{

}
406デフォルトの名無しさん:2001/08/20(月) 23:27
>>393
それって普通じゃないの?
MFCって使ってるひといるの?
407デフォルトの名無しさん:2001/08/20(月) 23:29
>>406
むしろ使ってないの?
自分(会社)専用ライブラリとかないとき
408デフォルトの名無しさん:2001/08/20(月) 23:50
APIだけで書いてるよ、ついでにIDEも使って無い。
だけど別に作るの遅くないよ?
409デフォルトの名無しさん:2001/08/21(火) 01:26
>>408
おぉ、同志よ!
WIN32 API の上に何重にも積み重ねられた
得体の知れないウンコの塊を使うよりも、
最小限の機能を極小サイズで書きたいよ。

小物を作るときは、msvcrt なんかも使わない。
410デフォルトの名無しさん:2001/08/21(火) 01:34
>>409
そもそも、Win32 API 自体がコテコテにデコレーションされてるじゃな
い。MSVCRT.DLL 使わずとも KERN32.DLL, USER32.DLL, GDI32.DLL
使ってる時点で、どうせ大差ないよ。
411デフォルトの名無しさん:2001/08/21(火) 01:36
>>408
それだとウィンドウプロシージャが 4000 行ぐらいになったり、
IDisplatch 派生クラスの実装にえらく手間取ったりしない?
412デフォルトの名無しさん:2001/08/21(火) 01:37
>>409
おれは、サイズなんかより、見やすさ(理解速度)優先。
413デフォルトの名無しさん:2001/08/21(火) 04:36
>>408
俺、MFC使ってアンタの半分の期間で同じ作業できるよ。
414デフォルトの名無しさん:2001/08/21(火) 08:12
>>406
API直叩きで書くってのと「何も見ないで」書くってのにはかなり大きな隔たりが…。
俺CreateWindowの引数なんてMSDN見ないと書けないぞ。
415デフォルトの名無しさん:2001/08/21(火) 10:07
>>414
俺は見ながらでも間違える自信あるね。
つか、あんな量の引数要求されてもなぁ・・・
416409:2001/08/21(火) 12:58
>>410
そうは思わんけどなぁ...。

>>412
勿論、時と場合にもよるな。
漏れだって年がら年中「サイズ命」ってわけじゃない。
417デフォルトの名無しさん:2001/08/22(水) 10:54
STLなんだけど。
あるコンテナを関数の引数として渡したいんだけど、関数はテンプレート関数
にしなきゃだめなのでしょうか?
418デフォルトの名無しさん:2001/08/22(水) 16:04
今C++勉強してる者ですが、最近C#なるものが出てきましたよね。
これってC++今からやるよりはC#の方がいいのでしょうか?
いまいちC#ってのがわからないのですが、C#はC++の上位版
なのですか?CとC++の関係のように。今後C++に取って代わる
のでしょうか。
419名無しさん:2001/08/22(水) 16:08
それは誰にもわからない
420デフォルトの名無しさん:2001/08/22(水) 16:24
>>418
C#はむしろVBの代わり。
421デフォルトの名無しさん:2001/08/22(水) 16:36
まったくそのとおり。C++に載り切れなかったVB厨が使うもの。
422デフォルトの名無しさん:2001/08/22(水) 18:20
てっきりJavaに走ったのをネイティブコードちらつかせて
引き戻しているのかと思ったよ。
423シド:2001/08/22(水) 19:56
OpenGL・VC++に関して
参考になる書籍を教えてください。
いろいろ探したんだけどいいのがなくて。
お願いします。
424デフォルトの名無しさん:2001/08/22(水) 20:08
Windowsプログラミング
425シド:2001/08/22(水) 23:10
OpenGL・VC++に関して
参考になる書籍を教えてください。
いろいろ探したんだけどいいのがなくて。
お願いします。
426シド:2001/08/22(水) 23:11
OpenGL・VC++に関して
参考になる書籍を教えてください。
いろいろ探したんだけどいいのがなくて。
お願いします。
427名無しさん:2001/08/22(水) 23:17
アマゾンでさがせば
いっぱいでてくんじゃない?
428デフォルトの名無しさん:2001/08/22(水) 23:20
いまさらOPENGLですか?
429デフォルトの名無しさん:2001/08/23(木) 00:01
たしかにいまさらなんだけど、
今一番OpenGLしやすい環境ってWindowsかもね。
430デフォルトの名無しさん:2001/08/23(木) 01:36
あのVC++の6を使って勉強しようと思いインストールしましたが
もう、これかなり古いですか?
勉強用にはどんなものなのでしょうか?
マジレスたのみます。
431デフォルトの名無しさん:2001/08/23(木) 01:38
>>430
少しは頭使いなよ。MS の Web サイトに行けば、その程度の情報はす
ぐ入手できるでしょ?
432デフォルトの名無しさん:2001/08/23(木) 02:16
430ですが、まだ初心者で
VC++みてるだけで頭がくらくらして
熱がでて寝込みそうなくらいなんです。
MSのWEBサイトもみただけでぶったおれそう。
433デフォルトの名無しさん:2001/08/23(木) 02:19
とにかくVC6のサービスパック落として来い
434デフォルトの名無しさん:2001/08/23(木) 02:21
>>432
まぁ、初心者ならわかるが・・・

別に古くはないよ。(一応売ってる中では最新版だから)
ただ、そろそろ新しいのが出る。
435デフォルトの名無しさん:2001/08/23(木) 03:37
ダイアログボックスでエジットボックスに初期の文字列を設定します。
それをプロシージャの中でやるとうまくいくんですが、
ごちゃごちゃしてきたので新しい関数にまとめて呼ぶようにしたら
文字列が設定されなくなりました。
なんででしょうか?
436デフォルトの名無しさん:2001/08/23(木) 03:40
>>435
状況が良く分かりません。具体的にウィンドウプロシージャでどのメッ
セージを受け取ったときに、どういう処理をしているのか書いて下さい。
437デフォルトの名無しさん:2001/08/23(木) 04:06
430です。
甘えてしまいました。すみません。
なんとなく今のバージョンでも
よさそうな感じですね。
失礼しました。
438435:2001/08/23(木) 06:26
部分的に抜き出すと、
case WM_INITDIALOG:
initdialog();
return 0;
...
void initdialog(){
SetDlgItemText(hWnd, IDC_EDIT1,"123");
return;
}
こんな感じです。
これだとエジットボックスに文字列が表示されないのですけど、
SetDlgItemTextをプロシージャの方にコピペするとうまくいきます。
439デフォルトの名無しさん:2001/08/23(木) 07:16
hWndはグローバル変数か?
440 :2001/08/23(木) 07:32
そういやVSの次バージョンっていつ頃発売なんだろ・・・。
もうかなり長いこと6.0のような気が。
441435:2001/08/23(木) 07:50
>>439
Yes.
442デフォルトの名無しさん:2001/08/23(木) 07:51
昨日だよ。早く買いに行こうね。
443デフォルトの名無しさん:2001/08/23(木) 07:57
>435
それだと別に関数にしなくてもいいだろ。むしろしたほうが汚い。応用性無いクソ関数だし。
444デフォルトの名無しさん:2001/08/23(木) 10:01
MFCを使っていると、F1が勝手にヘルプ起動になってしまいますが、
これを避けて、自前の処理を呼び出す事は出来るのでしょうか?
ダイヤログベースの窓で作っているのですが、
そもそもファンクションは、今の私では、
PreTranslateMessageの、WM_KEYDOWNメッセージでしか取れません。(T_T)
F1に至っては、ヘルプを探す窓が表示されるだけで、
PreTranslateMessageにも何も来ない感じです。
MFCさえ使わなければ・・・という感じなのですが、
非MFC化する時間が無いこともあって焦ってます(^^;
445デフォルトの名無しさん:2001/08/23(木) 10:13
マイクロソフト・フライドチキンはビルゲイツ独自の製法にのっとって丁寧に作った美味しいフライドチキンです。
446デフォルトの名無しさん :2001/08/23(木) 10:43
VisualC++ 6.0がインストールできません。
どうすればいいでしょう?
447デフォルトの名無しさん:2001/08/23(木) 10:49
>>446
あきらめなさい。
448デフォルトの名無しさん:2001/08/23(木) 10:51
VC++は2枚目のCDに大半のデータが入っています。ですので割れで1枚目のCDだけ手に入れてもインストールできません。残念でしたお馬鹿さん。
449デフォルトの名無しさん:2001/08/23(木) 11:40
IRQ割り込みをVCアプリから使うことは出来るのでしょうか?
450デフォルトの名無しさん:2001/08/23(木) 14:50
WinInetのFTPを非同期で使うプログラムを作成してるんですが。
FtpGetFile要求後の中断がうまくできません。
FtpハンドルをInternetCloseハンドルで削除すると
WinInet内部で落ちてしまいます。
なにか情報などを知っている方いませんか。
451デフォルトの名無しさん:2001/08/23(木) 16:30
>>450
WinSock使え
452デフォルトの名無しさん:2001/08/23(木) 17:10
>>451
やっぱそれしかないですかねー。
WinInetのFtpは特に不安定でイヤになりますよほんと・・・・。
453デフォルトの名無しさん:2001/08/23(木) 19:26
受け取った2つのLIBファイルをEXEに組み込んでビルドしたら
「〜は他で使用されてます」みたいな競合(?)エラーが沢山出たん
ですけど。。。
これはLIBの作成者が悪い?それとも私が回避できる問題なのでしょうか?
454デフォルトの名無しさん:2001/08/23(木) 19:35
無視してかまへん
455デフォルトの名無しさん:2001/08/23(木) 19:37
>>444
Acceleraterリソース見たか?
456デフォルトの名無しさん:2001/08/23(木) 23:33
VC6使ってますけど、コンパイル時に、他のdll(mfcのdllじゃないやつ)を.exeの内部に組み込んでしまって、.exeだけにしたいのですが、例えばdllの名前がtest.dllだとしたら、どういう風にコンパイルすればいいんでしょうか。よろしくお願いします。
457デフォルトの名無しさん:2001/08/24(金) 00:19
あの、DLLの意味分かってる?
458デフォルトの名無しさん:2001/08/24(金) 00:52
>>456
たしかに全部1ファイルにして、DynamicにLoadしたい場合がある。
納品物件とか、一応モジュール化したけど、リリースで使うのが
決まってる様なやつなど。静的にリコンパイルなんてしたくないしね。
そのまま実行できるアーカイバってのがあったと思う。
(伸長したDLLを読みに行ってくれるかは疑問だけど)
459デフォルトの名無しさん:2001/08/24(金) 01:17
なんかdllをlibにするツールなかったっけ?
460sage:2001/08/24(金) 01:21
>>459
dllのインポートライブラリを作るツールじゃないの?それ
461459:2001/08/24(金) 01:32
>>460
スマソ、そうみたい。DirectX関係のやつね。
462デフォルトの名無しさん:2001/08/24(金) 01:35
原理的には可能なのかな?
詳しい人いない?
463PeFileWrapper:2001/08/24(金) 02:00
>>462
条件が揃えば不可能ではないと思う。
条件と言うのは、元の .exe と .dll を選ぶということ。
ただしその条件を満せる可能性は、
両者をあらかじめ故意にそのように作りでもしない限り、
ほとんどゼロといえる。


たとえば、両者がともにダイアログリソースを持っていたとする。
リソースには文字列(名前)か序数のどちらかを割り付ける。

もし .exe と .dll でおなじ名前か序数のダイアログリソースが
ひとつでもあったら、
両者を互いに干渉することなくくっつけて
ひとつのバイナリにすることは不可能。
ダイアログに限らず、他のタイプのリソースでも同様。

…これはあくまでひとつの例だけどね。
464デフォルトの名無しさん:2001/08/24(金) 02:29
リソースに突っ込んで実行時に書き出しLoadLibrary
465デフォルトの名無しさん:2001/08/24(金) 04:13
>>464
それだとみかけ上ひとつのDLLにみえないこともないけど、
結局リソース内のデータを複数のDLLとしてその場でファイル生成して、
そのDLLごとにLoadLibraryってことですよね?

結局リソースのセクションとしてロードされているわけだから、
そのままセクションの属性を変えて、フィックスアップして
一発でやりたいですね。セクションの属性を変えるのは
簡単そうだけど、コードとデータのセクションのフィックスアップは
めんどうだなあ。なんかスマートな方法ってないもんでしょうか。
466463:2001/08/24(金) 09:42
>>465
Fixup はかなり面倒だけど、難しいわけじゃないから頑張ればできる。


Fixup の手を抜くなら、ベースアドレスを指定して、
.reloc セクションをぶった切ればいい。(あらかじめ Fixup しておく)


ただし TLS が使えないことは自明。
あと、モジュールハンドルをもたないから、
それを直接・間接に要求する API は全滅。
あと、スレッドの Attach と Detach で
DLL の初期化ルーチンを呼ぶことができない…とか。

Fixup の処理と同様にして IAT を埋める必要があるから、
そのときにハックしてシミュレートすれば、
モジュールハンドルを要求する API はなんとかなるけど、
かなり大変なコードになると思う。


で、普通ならこのあたり(API のシミュレート関連)を DLL に
しておきたいと思うところだが、それをやってしまうと、
この場合、意味がなくなっちゃう。 (藁


いろいろ制限が厳しいけど、
不可能というわけではない。

ただし、そこまで時間とお金をかけてまでして、
ひとつのバイナリにすべてを押し込む価値(意味、必要)があるのかどうか、
最後はこいつを天秤にかけることになるだろうな。

漏れは、意味がないと思うけどな。
どのみち、DLL のバージョンの違いで動かない…なんてことは、
Windoze を使う以上、不可避だからね。
467デフォルトの名無しさん:2001/08/24(金) 13:57
>465
そんなにセクションとフィックスアップを多様されるとセックスアップと読んでしまうじゃないか。
468デフォルトの名無しさん:2001/08/25(土) 01:42
COMについて教えてください。

pObj->QueryInterface(IID_IDataObject, (PPVOID)&pIDataT);
このようなコードがよくありますが、

IID_IDataObject を取得しようとした場合 pObj-> が必要になりますが
この pObj の部分はどのように調べたら良いのでしょうか?
CoCreateInstance(CLSID_***
っていうので取得するようですが、この CLSID_*** の部分に何を指定するか
どう調べたらいいんですか?

「IID_IDataObject を取得するには CoCreateInstance で CLSID_*** を指定して、それから QueryInterface しろ」
ってどこかに書かれているのしょうか?

現在やりたいのはドラッグ&ドロップでのファイル名の交換です。
VCのサンプルを見て勉強中なんですがCOMで挫折しています。
全然分からないのは DoDragDrop の引数の IID_IDataObject にデータを格納するようですが(多分)
どうやって格納するんですか?
どこかのサイトに分かりやすいサンプルがあるようでしたら教えてください。
469デフォルトの名無しさん:2001/08/25(土) 08:19
データを渡す側は、

class FileNameData : public IDataObject
{
  // GetData とか QueryGetData, EnumFormatEtc
  // GetDataHere, GetCanonicalFormatEtc, SetData, DAdvise,
  // DUnadvise, EnumDAdvise, QueryInterface, AddRef, Release
  // を(ちゃんと渡したいファイル名を返すように)自分で実装。
}

こんなのを作って new FileNameData かなんかでオブジェクトを作る。
470デフォルトの名無しさん:2001/08/26 08:26
CListViewで質問です。

class CMyListView : public CListView
{
protected:
  CMyListView();
  DECLARE_DYNCREATE(CMyListView)

public:
  CListCtrl &m_List;
...
};

みたいにして、OnInitialUpdate()辺りで、
m_List = GetListCtrl();
というようにしたいのですが、コンストラクタで何とかしろゴルァーみたいなエラーが出てしまいます。
うまく回避して実現する方法がありましたら教えてください。よろしくお願いします。
>>470
メンバにしなくてもローカル変数にそのつど受ければいいんじゃ…。
どうしてもメンバにしたけりゃ

public:
  CListCtrl* m_pList;

としといて
m_pList = &GetListCtrl();
と取る。
472デフォルトの名無しさん:01/08/27 09:49 ID:s7D152vQ
ワーカースレッドを AfxBeginThread にて作っております。
このとき、構造体を渡したいのですが、void受けなので、メンバデータ
が飛んでしまいます。どうしよ。
473デフォルトの名無しさん:01/08/27 11:24 ID:5m6UTQbg
>>472
受け取ったらキャストしろ
474472:01/08/27 11:35 ID:s7D152vQ
void受けは関係なかった。スマソ。
キャストしてもうまくいかん。
通常の関数受け渡しではキャストすればうまく逝くんだが、スレッド関数では
だめなんだ。
ちなみに構造体のアドレスはきちんと渡せてる。でもメンバがグチャグチャ。
475472:01/08/27 11:51 ID:s7D152vQ
呼び出し元で構造体をポインタ宣言して、メモリ確保してポインタを渡してやれば
うまくゆく。

呼び出し元で構造体を宣言して、ポインタ(&)を渡してやればうまく逝かない。
どうして???
476デフォルトの名無しさん:01/08/27 12:00 ID:U/MfduGw
>>472
>呼び出し元で構造体を宣言して、ポインタ(&)を渡してやればうまく逝かない。
>どうして???
スコープ外だから。
477472:01/08/27 12:03 ID:s7D152vQ
>>476
別スレッドだから、スコープ外になるってことか?
サンクス。
478デフォルトの名無しさん:01/08/27 13:42 ID:QY1C3w3s
>>477
違う。
そのスレッドが動作中に、ローカルで宣言したスタック領域が解放されるから。

スタック領域にメモリ確保

スレッド生成、確保したポインタ渡す

return(スタック領域解放)

この時点で、別スレッドで処理しているメモリが解放される。
デバッガでブレークしかけて追ってみそ。
479デフォルトの名無しさん:01/08/27 14:30 ID:.CyrU1AM
>>477
開放されるというか、ローカル変数用の領域(スタック)は使いまわし
されるから、非同期で動いてる別のスレッドに渡しちゃいけない

mallocしたくない場合は同期オブジェクト使って、作ったスレッド
が自分のローカル領域にコピーするまで待つようにすれば大丈夫
480472:01/08/27 14:42 ID:s7D152vQ
>>478

おおっ!なるほど!
ということは、スタティックな領域に置くか、スレッドを呼び出す関数を記述
しているメンバ関数を持つクラスのメンバにするなどとせねばならないですね。
ホントにありがとっ!
481472:01/08/27 14:45 ID:s7D152vQ
>>479

おおっ!そういうやり方もありますか。勉強してみます。サンクス!
482デフォルトの名無しさん:01/08/27 15:58 ID:s7D152vQ
test
483デフォルトの名無しさん:01/08/27 17:52 ID:wWk80Tes
昔作ったプログラムを作り直しているのですが、ソースリストが長すぎるために
分割してみようと考えたのですが、今まで全て1本のソースでプログラムを作ってきたので
分割の仕方がよく分かりません。
ただ分割しただけでは、外部参照が未解決です・・・等のエラーが沢山出て
ビルドもできません。
ソースリストを分割する際には、どのような事に気をつけたら良いんでしょうか?
484デフォルトの名無しさん:01/08/27 18:17 ID:CbLq.TAQ
>>483
宣言と定義
485 :01/08/27 18:57 ID:vJfY8N1k
>>483
それってなんかC(C++)の基礎を理解してないってことに
起因してないかい?
486デフォルトの名無しさん:01/08/27 19:00 ID:wkdl9yNY
>>483
>分割してみようと考えたのですが、今まで全て1本のソースでプログラムを作ってきたので
>分割の仕方がよく分かりません。
ネタだよね?ね?
487472:01/08/27 19:22 ID:s7D152vQ
SetPriorityClass関数を使いたいのですが、自分自身のプロセスのハンドルを
取得するにはどうすればいいのでしょうか。
488デフォルトの名無しさん:01/08/27 19:24 ID:6V5bAAt6
>>487

::GetCurrentProcess()

だったと思う。
489デフォルトの名無しさん:01/08/27 20:21 ID:7YRrwn2.
stlみたいなヘッダは、StdAfx.hでincludeするべきでしょうか?
490デフォルトの名無しさん:01/08/27 20:32 ID:xzJAo6XI
すみません、MFCが使いづらいのでMFCをマップしようと思うのですが、わかりません。
491デフォルトの名無しさん:01/08/27 20:53 ID:IiQ03hCY
VBから呼び出せるようにVC++でCOMを作りたいのですが、
最低限度、実装が必要となるインターフェイスはどれでしょうか?
よろしくお願いします。
492sage:01/08/27 21:30 ID:ABizV.k6
AddRef
Release
QueryInterface

MSDNヨメ
493デフォルトの名無しさん:01/08/27 22:16 ID:IiQ03hCY
>>492
それインターフェイスじゃないじゃん。
あんたホントに知ってる人?
知らないなら書かなくてもいいんだよ。
494483:01/08/27 22:19 ID:wWk80Tes
>>484
宣言と定義ですか?とりあえず、#defineなどはヘッダにまとめて
インクルードしてるのですが、他に何か注意する所はありますか?

>>485
そうかもしれません・・・。

>>486
いえ、ネタではありません。
あ、ヘッダとリソースファイルなどはもちろん別ファイルでしたよ。
メインプログラムっていうか、本体が1つのソースファイルだけで
書いていたので、非常に長いのです。
これでは、デバッグもしずらくて・・・。
495493:01/08/27 22:23 ID:IiQ03hCY
>>492
ごめん、頭冷やしてMSDN読み直す。
最近Windows用アプリ作り始めたバッカな素人な俺が悪い。
すまなかった。
496デフォルトの名無しさん:01/08/27 22:51 ID:8Xs.NW3U
>>494
とりあえず「関数の宣言と定義」を手持ちの
入門書かなんかで調べなされ。話はそれからだ。
497 ◆arcElGGo :01/08/27 22:52 ID:/MRZ8T2M
>>491
必須のインタフェースは作るものによってまったく違うんじゃねーか?
ほんとにほんとに必須なのはIUnknownだが、
これだけあったところでどうにもならんぞ。
498デフォルトの名無しさん:01/08/27 23:19 ID:sw7RmyPw
>>483
もしかしてメイン関数がやたら長いプログラム?
それとも自分でいくつか関数作ったけど、ソースが一本なの?
意味あるかは別として例えばmain関数を1つのソースファイル
に書いて、mainから呼び出される自作サブルーチンを別のファイル
に書き、mainのファイルにそれらの関数のプロトタイプを記述する
ってのはどうよ。プロトタイプはまた別にヘッダファイルにした
ほうがいいかもしれんけど。ん?でもここはVC++のスレだよな。
クラスとか作ってるのかな?そんなふうには思えないが・・・。
499デフォルトの名無しさん:01/08/27 23:22 ID:NUyHCMlc
#include<xxxx>
class a{

};
class b{

};
class c{

};
class d{

};

int main(){




return 0;
}
>>491

COMとして最低限必須なのは IUnknown
VBとかスクリプトの事を考えれば OLEAutomationの為にIDispatch が必要。
必然的にタイプライブラリも必要になります。

とりあえずIDLでIDispatch派生のインターフェイスを作って、MIDLでコンパイル。
出来たインターフェイスを使って実装&タイプライブラリをリンク。

IDispatch::Invokeの実装には、タイプライブラリを使えば比較的手抜きで実装可能。
LoadTypeLibだのLoadRegTypelibあたりを調べてください。

ここではaleaut32.dllに全てを任せる幸せな方法を想定しています。
VB向けならVARIANTで定義されている型で事足りると思うので。

後の説明は長くなるので省略。MSDNライブラリを参照してください。
とりあえず上記の流れがもっとも幸せな流れです。

OLEコントロール等を作るのならば、それなりに大変な事になると覚悟してください。

つーか
ATL使えばほとんど解決な気もするけど。
501489:01/08/28 04:30 ID:YifVuKWg
>>489
レスが無いのですが、
場合によるから答えにくい質問ということでしょうか?
502デフォルトの名無しさん:01/08/28 07:44 ID:EbweAhfU
>>501
例えば、STL使ってるクラスを他で使いまわす予定がある場合なんかは、
そのクラスのヘッダでincludeするべきだろうし、
stdafx.hでincludeしてるからといって、他の各ヘッダでincludeしてはいけないものでもないし、
臨機応変に使い分ければ?
そんな苦悩するほどの問題じゃないと思うが。
503デフォルトの名無しさん:01/08/28 08:23 ID:c61aoHXs
ポートアクセスは、inp,outpでいけるんでしょうか、それとも何かそれ用の
ドライバが必要なんでしょうか?
504493:01/08/28 09:17 ID:pLk7FMTU
InsideCOM+なんかを読むと他には、

IProvideClassInfo
ISupportErrorInfo
IConnectionPointとIConnectionPointContainer
IExternalConnection

これらがVB製のCOMに標準実装されてるとか。
とくにこの中で特に欲しかったのがコネクションポイントかな。
まぁ、少し勉強が必要だわ。
VBだとオブジェクトの集約ができないから、
VC++で頑張ってるわけなんだけど、めんどくさいなぁ。
ATLってそんなに物事単純になるのかな?

みなさんいろいろとありがとね。
505デフォルトの名無しさん:01/08/28 11:34 ID:HEWceQCw
>>503
OSによる。
506デフォルトの名無しさん:01/08/28 11:57 ID:EbweAhfU
>>503
しかもポートにもよる。
DOSは全部OK。
9x系とNT系だと使えるポートが違ったと思った。というかNT系は多分ほとんど不可。
API使った方が幸せだと思うよ。
特殊ハードならDOSでやるかドライバ書くか・・・
507503:01/08/28 14:03 ID:c61aoHXs
>>506 APIでそんな関数あったっけ?
508デフォルトの名無しさん:01/08/28 14:56 ID:HEWceQCw
>>507
ポート(と、そのドライバ)による。
CreateFile/WriteFile/ReadFileでできる物もあるし、DeviceIoControlでできる物もある。
むろんAPIで操作できない物もある(その方が多い)
>>504

>>ATLってそんなに物事単純になるのかな?

仮にインプロセスサーバを作るとして簡単に流れを説明すると(最近触ってないからチョット違うかも)

1:ウイザードでATLCOMなんたらプロジェクトを選ぶ。(DllRegisterServerやIClassFactoryが出来上がる。)
2:クラスビューを右くりっく、ATLオブジェクトを追加するを選ぶ。
3:適当に名前を付ける _
& IConnectionPointをサポートするにチェックをつける _
& ISupportErrorInfoをサポートするにチェックをつける
4:クラスビューを右クリックでメソッドの追加やら、プロパティの追加を選択するとIDLとか全部勝手に書き換えてくれる。
5:気合を入れて実装部を作成する。

MSDNライブラリにATLウイザードを使ってOLEコントロールみたいのを作る
チュートリアルがあったような気がします。
とりあえずそれの通りに一個作ってみると速いかもデス。
510489:01/08/29 00:36 ID:8/lkv8vA
>502
ありがとうです。たしかに、プログラムを書く上で本質的な問題ではありませんね。
511504:01/08/29 09:42 ID:bW4UpvLc
>>509
http://www.microsoft.com/JAPAN/developer/library/vcmfc/_atl_atl_tutorial.htm
この辺を見てやってみることにするよ。
ありがとう。
512504:01/08/29 16:04 ID:bW4UpvLc
>>509
ATLの使い方はなんとなく分かりました。
っていうかVSすごすぎです!
でも逆にそれ無しじゃなんだか厳しいですね。
あれを自分で理解してやっていくのは
慣れが必要かも。
できれば開発環境に依存したくないのがホンネ。
1〜4はそんな感じでやれそうです。

で、5なんですが・・・はっきり言って鬱ですw
無味乾燥なヘルプ読むより本を読むほうが早そうなので、
http://www.amazon.co.jp/exec/obidos/ASIN/4756136001/ref=pd_sim_b_dp_1_1/249-4193949-1373904
これからこの本を買いに逝ってきます。
513504:01/08/29 18:11 ID:bW4UpvLc
ところでみんなCharles Petzold の本は持ってるの?
なんかamazonとか見てると教科書みたいに書いてあるんだけど。
かなり高いんでちょっと迷ってます。
514デフォルトの名無しさん:01/08/30 14:47 ID:zBaTa85.
皆様、大変お世話になっています。
大変厨房な質問と自覚してますが、質問させてください。
VC++6.0を使用しています。
ヘッダーファイル(*.h)をコンパイルしようとすると
「ファイル'c:\フルパス\hoge.h'の拡張子に関連した
コンパイルツールが無いためコンパイルできません。」
とのエラーがでてしまい、コンパイルできません。
拡張子の関連付けの問題だと思うのですが、
どれに関連づければいいのかわかりません。
よろしくお願いします。
515デフォルトの名無しさん:01/08/30 14:59 ID:HQVigopA
>>514

ヘッダファイルのコンパイル?プリコンパイルヘッダを作るの?
それともなんか勘違いしていませんか?コンパイルするのはソース
プログラム(普通は*.cまたは*.cpp)ですよ。
516デフォルトの名無しさん:01/08/30 15:11 ID:zBaTa85.
>>515 レスありがとうございます。ご指摘どうり、無理なことを
やろうとしていたようです。恥ずかしい。
ありがとうございました。
517デフォルトの名無しさん:01/08/30 16:14 ID:2v8EBV2o
>>516
ヘッダーファイルとソースファイルの関係があいまいならここでもよく読むよろし
http://www.kab-studio.com/Programing/Codian/Cpp/02.html
518デフォルトの名無しさん:01/08/30 16:21 ID:c4aCQnY.
>>517 レスありがとうございます。これから読んでみます。
いまプリプロセッサではまりまくってます(T_T)
気分転換に読んでみます。ありがとうございました。
519デフォルトの名無しさん:01/08/31 01:14 ID:KmOcVo8.
>>518
プリプロセッサを理解したての初心者が陥りやすい症状:
なんでもかんでもやたらマクロにしたがる

定数とか、定数の引数を伴う関数呼び出しくらいならいいが、
if、whileなど制御ステートメントを伴うものや++、--演算子を
伴うものは文法を完全に理解するまで手を付けないのが吉。
520デフォルトの名無しさん:01/08/31 02:14 ID:cJM93gm2
>>519 レスありがとうございます。
グローバル変数をヘッダーファイルにまとめて定義しといて
プリプロセッサでファイルによってextern宣言させようとしてたので
すが、そこではこけてなくて、以前にに宣言しといたグローバス変数の
定義が残ってそこでエラーはいてたようです。死にました(T_T)
プリプロセッサってどこでバグってのかわからないので
怖いなーと思いました。
521デフォルトの名無しさん:01/08/31 04:50 ID:fCsVygVQ
エディットコントロールのEM_ERRSPACEが飛んできてくれません。
このメッセージはエディットコントロールに書ききれなくなった
ときに飛んでくると思うのですが。
testlimitをセットしててもダメです。
なぜでしょうか?
522デフォルトの名無しさん:01/08/31 05:12 ID:seI0gCvk
>>521
>EN_ERRSPACE通知メッセージは、 エディット コントロールが
>特定の要求を満たすための十分なメモリを割り当てることが
>できないときに送られます。エディット コントロールの
>親ウィンドウは、 WM_COMMANDメッセージを通じて
>この通知メッセージを受け取ります。

 書ききれなくなったとは意味が違います。
523sage:01/08/31 07:40 ID:Rxk6Y1v6
>>520
-Eオプション試しとけ

ついでに uniqもな
524デフォルトの名無しさん:01/08/31 08:12 ID:Dwxf2z86
>>523 レスありがとうございます。
なるほど。それだと、重複をチェックできるわけですね。
知ってるのとしらないので、すごい違いますよね。とほほ。
525デフォルトの名無しさん:01/08/31 22:39 ID:Rxk6Y1v6
グローバスage
526デフォルトの名無しさん:01/09/01 13:25 ID:wmoI/a0A
ただ今COMクライアントを作成中・・・

タイプライブラリをClassWizardで読み込んでCreateDispatchから
COMサーバにアクセスする方法は分かってきたが、COMサーバ側で
発生したイベントを取得する(イベントシンク?)の方法が分からない・・
VBでの実装は簡単に出来るようだが、VC++でも簡単な方法があるのだろうか・・
527デフォルトの名無しさん:01/09/01 15:33 ID:7gUlR5aU
STLでリストとデキューの違いがわかりません。
どっちもおんなじ事できるし、どう使い分けるのがいいんでしょうか?
528デフォルトの名無しさん:01/09/01 16:30 ID:D.FkLllo
>>527
list は中間要素へのアクセスに O(n)、中間要素の削除・挿入は O(1)
deque は中間要素へのアクセスに O(1), 中間要素の削除・挿入は O(n)

deque は両端からアクセスできる配列だと思えば良い。途中の要素に
添え字アクセスする機会が多いなら deque、辿るのは先頭・末尾から
順番だが、途中で要素の挿入・削除が頻繁に発生するなら list。
529デフォルトの名無しさん:01/09/01 17:06 ID:ERYSF/rQ
COMなんて使い道あるんか。だいたい、そんなもん使ってる自体
糞だと思うが・・・。
530デフォルトの名無しさん:01/09/01 17:42 ID:6wEGDcFE
COMってつぎはぎだらけのテクノロジてな感じがする。
それに依存してる.NETも同じような感じなのかな?
531528:01/09/01 23:51 ID:ZEJtND0w
勉強になりました、ありがとうございます。
今までは両方同じように使っておりました、
532名無しさん:01/09/02 01:15 ID:PC5taIpU
画面をキャプチャしてJPEG保存したいのですが

CreateDC("DISPLAY",NULL,NULL,NULL);
でゲットしてからどうしたらよいのかわからなくなってきました。
教えてけれ
533デフォルトの名無しさん:01/09/02 05:34 ID:hju7CXGw
>>532
jpegの保存の仕方だけ。
http://www.ijg.org/
こっからjpeg6bのライブラリ落としてきて、一部ソース書き換えれば使える。
534名無しさん:01/09/03 02:16 ID:DrsF/y7o
>>533
Thanks
でもなんかおとせないです、
535デフォルトの名無しさん:01/09/03 23:32 ID:qVrrFAFM
a
536デフォルトの名無しさん:01/09/04 14:07 ID:6/sNHYbo
あるボタンをクリックしたら、
インターネットエクスプローラを起動したいのですけどどうすればいいの?
537デフォルトの名無しさん:01/09/04 17:06 ID:hjiI/cLc
WIN32 APPLICATIONの空のプロジェクトから
簡単なプログラムを作ってみたのですが、
そのビルドしたファイルをエクスプローラ等で表示したときに、
ファイル名のところに出るアイコンを変更するには
どうすればいいのでしょうか?

アイコンは「挿入」「リソース」「Icon」から
作成したのですが、そこまでです。
538デフォルトの名無しさん:01/09/04 17:08 ID:y/VspVw.
>>529-530
.net 以前に、すでに今の Windows が COM の塊なんだけど。
539初心者:01/09/04 20:43 ID:oh8PDgKk
ビットマップを表示するアプリケーションを作成しているのですが、
スクロールバーがうまく機能してくれません。
具体的にはスクロールバーは正常に表示されているのですが、表示クライアント
領域がディスプレイサイズの一定割合に達しないと、OnHScroll(),OnVScroll()
に処理が来ないような感じです。
WN_HSCROLL,WN_VSCROLLメッセージ発行に条件とかあるのでしょうか?
540デフォルトの名無しさん:01/09/04 20:53 ID:dMvjTacY
Delにインターフェイスってあったのか。
言語ガイドみてはじめてしった。
入門用の参考書には一言もふれてないのに・・・
541デフォルトの名無しさん:01/09/04 22:41 ID:3J1vv5e.
.NETではCOMはナリを潜めているような感じですが。
当然インオペのための仕組みは用意されていますけれども。
相談でないのでsage
542シド:01/09/06 22:51
OpenGLでauxで絵を描いた場合、
その絵の印刷はできないのですか?
どこのサイトにものってませんよね。
ピクチャボックスなんだけど、コントロールのプロパティでフレーム設定の
場合はきちんと図形が描画できるんだけど、四角形設定にすると何も図形が
表示されん。これはどういうことでしょう。
544がくせいくん:01/09/12 06:22
Visual Studio 6.0 エンタープライズエディションに
SP5を当てたのですが、VisualC++のバージョン情報を見ても6.0のままです。
一方、VisualBASICはSP5になっていました。Windows2000 SR2環境なのですが、
VC++が反映されていないというのはおかしいですよね。
どなたか何かご存知の方、助言PLEASE!!
545デフォルトの名無しさん:01/09/12 06:25
助言できないけど、普通にマイクロソフトに聞いてみたら? >>544
546デフォルトの名無しさん:01/09/12 07:13
>>544
VC++はSPあててもバージョン表記変わらんよ。
547がくせいくん:01/09/12 07:35
>545
FAQなどを読んではいるのですが・・

>544
そうだったんですか! てっきり反映されていないと思っていました。

助言、ありがとうございます。
548デフォルトの名無しさん:01/09/12 07:59
>>547
バカ?
549音速の名無しさん :01/09/12 09:29
みなさん、はじめまして
CD-ROMのセットを検出したいのですが、監視用のスレッドを作って常に回すしか
ないのでしょうか?
>>547
ンだよ、ネタかよ。馬鹿臭。
551がくせいくん:01/09/12 15:18
いえ、ネタではありません。本当にわからないのです。
もし(失礼ですが)544さんの助言が間違っているのでしたら、
是非ほかの方のアドバイスをいただきたいと思っています。
よろしくお願いします。
552がくせいくん:01/09/12 15:19
すみません。546さんの間違いでした
何度もごめんなさい・・
>>551
ああ、ネタじゃないならいいや。突っかかってゴメソ。
554デフォルトの名無しさん:01/09/12 15:36


1 3 5 7 □ 10 □
上の数列(?)はある規則によって並んでいます。
□の中に当てはまる数字を答えなさい。
また、その規則も答えなさい。
555超初心者:01/09/12 15:47
一つのワークスペース(プロジェクト)に、cとcppが数ファイルずつ混在しています
aaa.cの中からbbb.cppの関数を呼ぶのに、プロトタイプ宣言しているのですが
(両方にincludeされてるxxx.hで宣言している)
LNK2001 リンクエラーになってしまいます

cからcppの関数は呼べないんですか?
それとも別な原因があるのかな
556デフォルトの名無しさん:01/09/12 16:24
>>555
CとC++では関数の名前付け規則が異なるからです。
C++のソースでは、

extern "C" {
#include "xxx.h"

void func()
{

}
}

としてみてください。
557555:01/09/12 16:51
>>556
ありがとうございました

とりあえず言われたままに やってみたら、
問題そのもの(リンクエラー)は解決してしまいました

extern "C"とか、名前付け規則の意味とか わからないので、
これから調べてみます
ありがとうございました
558!555:01/09/12 16:54
>>556
そんな方法があったのか・・・
俺、今までcppに拡張子直すか、
xxx.cppというダミーファイル作って、その中でinclude"xxx.c"とかやってたよ・・・
ウツダシノウ…
559デフォルトの名無しさん:01/09/12 18:13
C++をVC++で勉強しなければならない羽目になりました。
んで、本のサンプルソースを打つと、

try {
(メモリ割当する部分)
} catch (xalloc) {
cout << "メモリー割り当てできません\n";
}

となっている部分で、xallocが見当たらなくてコンパイル
エラーになるんですが、これってどーすればいいんですか。
560デフォルトの名無しさん:01/09/12 18:22
   ?????????????
  ?                         ?
 ?                           ?
?                              ?
???????(゚Д゚)???????
*                             *
*                             *
*                             *
*                             *
???????????????????????????????????????
561デフォルトの名無しさん:01/09/12 18:25
>>559
MSDNは調べたかい?
VC++でなんかするなら、MSDNで調べれば大体解る。
562556:01/09/12 18:36
>>559
えーと、確かxallocってドラフト時の仕様じゃなかったでしたっけ。
bad_allocに変えてみたらどうですか?
ワーカースレッドを作り、その処理終了時にメッセージ投げて、
メインスレッドのイベントとして受け取りたいんだけど出来る?
>563
メッセージって、Windowsのメッセージループの事?
メインになるスレッド側でメッセージループ作って
ワーカスレッドでPostMessageすれば?
あとはEventObject使うとか
565sage:01/09/12 20:49
>>563
アイドル中に、ワーカのスレッドハンドルに対してWaitForすりゃええんでないの?
終わるまで待つだけならイベントオブジェクトをよけいに作る必要ないよ
566デフォルトの名無しさん:01/09/13 00:50
とっても初歩的な質問です。
include <stdlib.h>
はどこに宣言すればよいですか?
atoi関数を使いたいです。

mfc-dialog base
>>566
とりあえずstdlib.hで検索して、適当なソース見てみな
568たま:01/09/13 04:24
LINK : fatal error LNK1104: ファイル "nafxcwd.lib" を開けません。

というエラーが出ます。
nafxcwd.libがどうやらパソコン内に入っていないようです。
Microsoft VisualC++6.0 StandardEdition
を使っているのですが、これにはnafxcwd.libが
入っていないみたいなんです。
StandardEditionだから入っていないのでしょうか?

どこかでnafxcwd.libをダウンロードできる場所を
知ってる方いましたら教えてください。
よろしくお願いします。
570デフォルトの名無しさん:01/09/13 04:34
Cのコンパイラはどこで手に入るのですか?
フリーのもあるんでしょうか?
>>570
そのキーワード全部入れてgoogleで検索。
>>570
スレ違い。
googleで検索しろ。
573デフォルトの名無しさん:01/09/13 04:42
いろんなコンパイラがあってよくわかりません。
ちなみにOSはMeです。
よくわからんのじゃ、しょうがないな。
なんだかわからんが、あきらめろ>573
いろんなコンパイラがあってよくわ

(藁
576563:01/09/13 09:19
>564
PostMessageでいけました。
>565
メインスレッドはダイアログで、コントロールへのイベントは受け取りたいんだ。
メインスレッドでWaitForすれば、対象スレッドが終了するまでロックされると
思うんだが。
>>575
何がおかしい?
578563:01/09/13 09:37
>565
アイドル時にだけ見にいくか。そんなことできるの?
優先順位低の監視スレッドを作ればできるだろうけど。
579デフォルトの名無しさん:01/09/13 13:21
すんません、ちょいと教えてください。
レジストリのバイナリデータのアクセス方法がわからないのですが・・・
GetProfileInt ・・・ DWORD
GetProfileString ・・・ 文字列
Get系の関数でバイナリデータ用って無いですよね。
元々iniファイルに無いからGetProfile系に無いのはあたりまえで
別なAPIとかで提供されるのでしょうか?
>>579
おぃおぃ、マジかよ。少しは調べる努力をしたのか?
Reg* な API をつかえ。
581デフォルトの名無しさん:01/09/13 13:56
>>580
ありがとうございます、たすかりました
DevStudioのヘルプに「レジストリ」で検索したのですが・・・
たどり着けなかったです・・・探し方が悪いとも思いますが
582デフォルトの名無しさん:01/09/13 19:52
int型からCString型するにはどうすればいいんだー!
型キャスト変換自由自在にしたいぜよ!
お願いいたしまする。
583デフォルトの名無しさん:01/09/13 19:59
int i = 123;
CString s;
s.Format( "%d", i );

つーか、
> 型キャスト変換自由自在にしたい
ならC/C++以外の言語にしろ。
584coelacanth:01/09/13 20:03
あの、1.25という実数を4/5というふうに変換するにはどうすればいいでしょうか?
>>583
ありがとうございまする!

ウゥでもVC買ってしまったのでする。
でもチビチビがんばりたいのでする。スンマセン
>>584
お前の使っている算数の教科書には4 / 5 = 1.25となるような演算子が定義されてるのか?
587デフォルトの名無しさん:01/09/13 20:43
スタティックテキストに送るメッセージのXX_YYYYYのXXは何でしょう。
>>584
1.25 は 4/5 ではなく 5/4 だが、何か?
>>587
たとえば、何?
590デフォルトの名無しさん:01/09/13 20:53
>589
背景の色を変えるとか画像を設定するとかなんですけど。
591デフォルトの名無しさん:01/09/13 20:59
>>584
double x=1.25;
if (x == 1.25) printf("4/5");
else
592デフォルトの名無しさん:01/09/13 21:00
>>584
double x=1.25;
if (x == 1.25) printf("4/5");
else      printf("%f", x);
593中学で習ったろ?:01/09/13 21:01
>>584
1.25 なら 125/100 として約分しろ
1.125 なら 1125/1000
1.11125 なら 111125/100000 だ

約分方法がわからないなら「ユークリッドの互除法」と「最大公約数」で検索しろ

おまけ循環小数
0.1234
  ・  ・
のときは
1234/9999 としろ
あたまに余計なのがついてたら循環部分と分けれ

#循環しないのは無理数だから無理
>>587

STM_YYYYY

2文字とは限りません。
595デフォルトの名無しさん:01/09/13 21:06
>584
void a(double c)
char d,e;
for(x=1;x<10000000000;x++){
for(y=1;y<10000000000;y++)}
if(x/y==c){
strcpy(d,itoa(x))
strcpy(e,itoa(y))
}
break;
}
}

}
>>585

いきなりMFCを使わないで
素のC、もしくは素のC++から勉強を始める事をオススメします。
GUI作りたいのは分かりますが、結局後で泣きを見るので。

ボタンをクリック
 ↓
アボーン
なんで????
597デフォルトの名無しさん:01/09/13 21:08
>587
わかりました。
どうもありがとうございました。
598デフォルトの名無しさん:01/09/13 21:18
お店にて、VC++にはstandardとprofessional
っていうバージョンがあることに今更ながら気づく(苦笑)
これって何が違うんじゃ?
599デフォルトの名無しさん:01/09/13 21:23
>598
ハァ?誰よお前。お前の文脈じゃ誰だかわからねえだろうが。一体何者が何をしに店に行ったのかちゃんと書けボケが。
600デフォルトの名無しさん:01/09/13 21:26
VB厨房がoffice2000を買いに行ったんです
ごめんなさい
601sage:01/09/13 21:40
>>576
タイムアウト0にしとけよ..
602570:01/09/14 05:40
とりあえずBorlandC++を手に入れました。
VisualC++なんて高すぎて個人で使ってる人なんているんですか?
きみよりも金持ちな人は沢山いるよ>602
604デフォルトの名無しさん:01/09/14 05:46
VC++のWin32アプリウイザードで、標準的なHElloWorld!アプリケーションを選択したときに生成されるコードで、悪い点はありますか?
>>602
VC++Pro、アカデミックパックで1万強なんだが…高い?
>>604
君の頭
>>606
禿げしく同意!
608604:01/09/14 05:52
>606
はぁ?俺はMIT卒なんだが。ここのPGの程度を確認してやろうと思っただけなんだがね。
609デフォルトの名無しさん:01/09/14 05:53
>>605
それを使って値段以上の価値あるプログラム組めばいいんだYO
610デフォルトの名無しさん:01/09/14 05:54
>608
だったら模範解答見せろ
611みんな!:01/09/14 05:56
>>604 が面白いよ!
暇つぶしにどうぞ!
612614:01/09/14 05:59
おっと用事ができた
帰ってきたら見てやるから、書いとけよ。
613570:01/09/14 05:59
JavaやHTML等はできるので次は本格的にC、C++と思って
コンパイラ探してたんですが。。。1万でもちょっと・・・
MIT出なら、LISP schemeスレに参加してくれ
>>614
相手にすんなよ(w
616デフォルトの名無しさん:01/09/14 07:27
正直、VC++に開発時間をカウントする機能をつけてほしい。開発につまづいて振り返ったとき、その積み重ねた時間が俺を奮い立たせるような気がする。
どう?いい案だと思わない?
617デフォルトの名無しさん:01/09/14 07:32
正直、本職のプログラマーのホームページが少ない気がする。2チャンネラーのプログラマーなら本出す人とかにも文句言うだけあって、ちゃんとした役に立つページ作れるんだろうな。
本職のプログラマはページを作って啓蒙するなんて言う無駄なことには労力を費やしません。
>>616
無駄にした時間を、現実として突きつけられることになるので、いらない。
620デフォルトの名無しさん :01/09/14 14:00

typedef struct
{
LONG A;
LONG B;
LONG C;
ABC* before_item;
ABC* next_item;
} ABC;


こういう構造体を作るにはどうしたらいいですか?
コンパイルするとエラーになります。
前のアイテムと次のアイテムへのリンクを構造体に持たせたいんです。

typedef struct
{
LONG A;
LONG B;
LONG C;
LPVOID before_item;
LPVOID next_item;
} ABC;

一応これでできますが、これだとキャストしないと逝けないので面倒です。
教えてチョンマゲ!
>>620

typedef struct _ABC ABC;

struct _ABC {
LONG A;
LONG B;
LONG C;
ABC* before_item;
ABC* next_item;
} ;
622デフォルトの名無しさん:01/09/14 17:51
VC++のフォントの大きさはどのぐらいでやるのが丁度いいですか?僕はデフォルトです。
>>618
無駄なこと...とは思わないけど、時間がないよね。
自分で書いた図形を仮想DCに転送して、OnPaintで
再描画するときって、CBitmap作らないとだめだっけ?
>>622
1600x1200以上の画面で9point
626デフォルトの名無しさん:01/09/14 19:54
同じマシン、環境でも、

intのサイズが変わってしまう事ってあるのでしょうか?
627デフォルトの名無しさん:01/09/14 20:08
通常はありえない
628デフォルトの名無しさん:01/09/14 20:38
すみません。
string s,x;
char w[]="1", r[]="ITEM1";
s=w;
x=r;
s=s+x;
というstringオブジェクトがあった場合、
SendMessage(hWnd,LB_INSERTSTRING,0,(LPARAM)(LPCSTR))
で、LPARAMにsの内容を渡したいのですが、どうすればいいのでしょう。
>>628
s.c_str()
630できました。:01/09/14 20:50
>629
ありがとうございました。
631626:01/09/14 21:23
>>627
基本的に、ないと考えて良いのでしょうかね

今、複数のマシンで winsocketで簡単な通信するソフト作ってて、
通信のbuffそのものは、BYTEの配列にしてて、

ただ、それを(ポインタで)展開するデータの中には、
int型とかも含まれてて、マシンとかによってサイズがかわって
おかしくなっちゃう事もあるのかな と、
これもDWORDとかにしたほうが良いのかな と思いまして

実は、今テストしてたら おかしくなっちゃって、
それが原因かと思って ここに質問したのです
(実は、原因は全然違う 超くだらない ミスでした
65536バイトのバッファを確保しようとして、
なにを狂ったか、
BYTE aaa[ sizeof(WORD) ];
とかやっちゃって 2バイトしか定義されなくて(ワラ、
へんなところアクセスして暴走)
>>631
コンパイラが変わるとか、コンパイルオプションを変えるとかすれば変わるよ。
633デフォルトの名無しさん:01/09/15 00:00
>>631
それは根本的に貴方の書いたソースの問題かと
631ってもしかして馬鹿?
もしかしなくてもバカ
636631:01/09/15 03:15
もちろんバカだぜ!!!!!!!!
ネタだったのか、ジサクジエンだったのか、もうどっちでもいいや。
MCIの練習で CD プレーヤー 作ってます。

で、質問なんですが CD の再生をすることは出来たんですが、1トラック目から順繰りにしか再生できません。
それもこれも、コマンドパラメータの dwFrom と dwTo に設定する値が解らないからです。
API バイブル 3を見ると、「現在の時間フォーマットでの開始・終了位置が格納されている」と書かれているのですが、
どうすれば TMSF 形式から、DWORD に変換すればいいのかが解りません。

解るひと教えてー
639デフォルトの名無しさん:01/09/15 13:08
あげわすれたぞっと。
640デフォルトの名無しさん:01/09/15 15:38
>>638
MCI_MAKE_TMSFマクロ使うアルよ。
できたっ!さんくすこ〜☆ミ
642デフォルトの名無しさん:01/09/16 03:35
VisualC++6.0スタンダードを使っているのですが

#include <sys/socket.h>

とかやったら「ヘッダーファイルが見つからない」とか出ました。
実装されてないんでしょうか?
実際にsys/にsockt.hがあるか調べろ>642
なかったらcygwin入れれ
>>642
ばかめ。
include/は調べたか?
646sage:01/09/16 04:17
sys/の下はそもそも環境依存ヘッダだらけだ。
なくても文句言うな
あるフォントのある文字の横幅を取得するためにはどうすればいいんでしょうか。
648sage:01/09/16 05:11
GetTextExtent
649デフォルトの名無しさん:01/09/16 05:34
>>644
cygwin入れてますが?VC++で使うって事なんで。
それともVC++でCygwinのヘッダをインクルードできるんですか?

>>645
聞きたいのは「VC++スタンダードエディション」に実装されてるか否かだ

>>646
ネットワークプログラミングしようとしたらこれだし
死んでいいよ>>649
>>649

MSDNで調べる癖ぐらいつけろ。

VCはsys/socket..hじゃないよ。winsock使えれ。
ネタ決定
653デフォルトの名無しさん:01/09/16 06:30
>>650
あんたも最初は分からんかっただろ?

>>651
MSDNでの調べ方分からないです。
WinsockInit()関数やらはヘッダファイル無しで使えるのですか?
654653:01/09/16 06:43
winsock2.hでした。。。鬱だ氏脳

ftp://ftp.microsoft.com/bussys/winsock/winsock2/WSAPI22.DOC
英語分からん。工房だし。
655デフォルトの名無しさん:01/09/16 06:48
WindowsでどのぐらいのGUIアプリケーションを開発できるようになればプロとしてやっていけますか?
>>654
>winsock2.hでした。。。鬱だ氏脳
だからさっさと死ねよ!
657デフォルトの名無しさん:01/09/16 07:07
>>656
酷い奴だな。。。
658お胸おっぱい (!=650):01/09/16 07:36
>>653
ちったぁ自分で調べれ。
君の VC6 がワレモノでなければ、ヘルプくらい付いてるだろ。
659デフォルトの名無しさん:01/09/16 07:55
友達がVisualStudioを焼き焼きしてくれるそうです(^^
そうすると、VBを学ぶべきかC++を学ぶべきか・・・
>>654
高校生でも、ある程度は読めるだろ・・・
つか、
649の
>cygwin入れてますが?VC++で使うって事なんで。
>それともVC++でCygwinのヘッダをインクルードできるんですか?
ここが謎・・・
普通 gcc 使ってたらそんなこと考えんだろ・・・

>>658
ワレモノでしょ。
じゃなきゃ普通こんな質問しない。
MSDNで"ネットワーク プログラミング"ででてくるし。
単なる割れ厨の戯言
放置で逝きましょう
662つーか、:01/09/16 09:40
さっさと死ね!
割れ厨は氏ね!
664sage:01/09/16 10:46
>>654
読むだけなら厨房の英語で十分だ。
MSDNを引くことを覚えろ。
665デフォルトの名無しさん:01/09/16 14:18
Warezじゃありません。学割で10000円ぐらいで買いました。

>>660
> 普通 gcc 使ってたらそんなこと考えんだろ・・・

MASMとかVC++で使えるんでそっちはどうなのかなと。


厨房の英語に"represent"とか出てくるわけないでしょう・・・
やり始めの人の気持ちも考えられん稚拙な人ばかりで誠に残念です。
666デフォルトの名無しさん:01/09/16 14:19
>>664
MSDN引きましたがMFC関連ばっかりです。MFC厨にはなりたくないんで。
667デフォルトの名無しさん:01/09/16 14:32
668sage:01/09/16 14:53
情報技術系の用語は、わからんでも仕方ない。
が、単語の意味くらい辞書で引けるだろ?

MFC以外の情報も、山のようにあるから、あきらめずに引き続けろ。
それでもわからなければまた聞きに来い
669666:01/09/16 14:59
>>668
御提言ありがとうございました。
口ばっかり達者な奴ってロクな大人にならんぞ
そうだそうだ!
>>672
お前も何か言ってやれ!
             |/
     , ─  ̄ ̄ ─- _ ̄ ̄
   /          ヽ
  / / ̄ヽ/ ̄ ヽ   l
  /  |  O |  O |    |
  |   |   人   ノ    |
  |  >-─´-`─-<    |
 / ̄  , -─- 、__ ` ̄ヽ |
 ゝ ̄ ̄______  ̄  ノ  |
   ̄ ̄        ̄ ̄   l
ノ |              | \
 ̄ヽ              | ̄
  |              |
   |             |
   l             |
  ⊂__________⊃
オバQかよっ!ヽ(`Д´)プソプソ
674デフォルトの名無しさん:01/09/16 19:39
WindowsでどのぐらいのGUIアプリケーションを開発できるようになればプロとしてやっていけますか?
「どのぐらい」が何を指すのか不明。
規模か数か期間かその他か?
676デフォルトの名無しさん:01/09/16 19:55
アプリケーションのレベルです
677デフォルトの名無しさん:01/09/16 20:16
>>674
そうですねぇ、、、GUI周りのクラスライブラリをフルスクラッチ、
それから、Oracle程度のRDBや最低Officeにある程度のアプリケーションを
すべて一人で作れるスキルが泣ければ、日本ですらお金はもらえないでしょう。
リーマンプログラマなら誰でもなれるよ
679デフォルトの名無しさん:01/09/16 20:27
>677
フルスクラッチって何ですか?
クラッチを踏み込んだ状態
>>676
「アプリケーションのレベル」が何を指すのか不明。
低水準<ファームウェア<ドライバ<ミドルウェア<ソフトウェア<高水準
という話?
682デフォルトの名無しさん:01/09/16 20:43
低レベル<テキストエディタ<OFFICE<高レベル
683デフォルトの名無しさん:01/09/16 20:53
>>674
まず、エクスプローラを勉強することを薦める。
「エクスプローラ・ライク」を作れる技術がなけりゃあ、
まず、話にならんかも。

また、それと同じくらい重要なのが、なんていうか、
センスとか、ポリシーってやつかな。

いくら技術が高くても、ポリシーのない奴が作った GUI は糞だからね。
>>682
なんでテキストエディタが低レベルでOFFICEが高レベルなのか不明。
685デフォルトの名無しさん:01/09/16 21:51
>684
手軽にすぐ作れて、GUIまわりであまり複雑に考えなくていいから、そういう表現をしましたが。
どうしたらテキストエディタが手軽なの?
もしかしてコントロール貼っておしまい?
テキストエディタっつってもピンキリだしなぁ。
メモ帳みたいのまでテキストエディタとか言われたらなぁ…
>>685
少なくともテキストエディタは「手軽にすぐ作れてGUIまわりで複雑に考えなくていい」アプリケーションではないぞ。
689デフォルトの名無しさん:01/09/16 22:48
>686
テキストエディタと言っても、メモ帳のことです。
秀丸などではありません。誤解を招きました?
690現役工房:01/09/16 23:10
>>665
おいおいおい、representぐらい工房の教科書でも出てくるぞ??
学割で買ったってことにしてるオサーンですか??
691666:01/09/16 23:15
>>690
「厨房の英語に」と言ってるだろ。ちゃんと文章読んでくれ。
692666:01/09/16 23:16
> 学割で買ったってことにしてるオサーンですか??

お前がオサーンだ
氏ね
690は死んでいいよ(笑)
>690
脳ある鷹は爪を隠す
>>654では工房て書いてあるじゃん
ま、んなこたどうでも(・∀・)イイ!! のでさげ。
アカデミックパックって1K円もしたっけ?
>>689
テキストエディタを軽視する奴はプログラマになれないから安心しろ。
煽りはよそでやってくれ>>690

666はヴァカだけど(w
>>698
禿道
世の中に軽視されるべきプログラムは無い。
例えそれがHELLO!WORLDレベルであっても。
>>696
アカデミック、プロフェッショナルで13kぐらいだね
ラーニングは7k位だっけ?忘れた
702デフォルトの名無しさん:01/09/17 02:23
>698
>700
果たしてそうですか。あなた達はよくVBで作られたアプリを馬鹿にする一員ではないですか?違うなら勘違いをお許しください。
>>702
(゚Д゚)ハァ?
この話題のどこにVBが関係すんだ?
プログラマならテキストエディタのインターフェース次第で開発効率が変わってくるって話題だろ?
704(゚Д゚ )ァ? :01/09/17 03:38
>703
>世の中に軽視されるべきプログラムは無い。
「プログラム」はVB製も含んでますよね。
>>700 は見当違い。
>>702 はスレ違い。
>>703 煽りはよそでやってくれ。

こんなんで良いですか?
706デフォルトの名無しさん:01/09/17 05:55
>>704

VBアプリの大半は”プログラム”じゃないから。

切って張るだけの工作品だよ。

そーゆーのが馬鹿にされるんだって。
707666:01/09/17 06:24
皆さんおはようございます。

>>695
高1だし。つうか「厨房の英語でも分かる」とほざいた>>664に対しての
反論だから「中学の教科書には載ってない」的な答えになったわけだぞ?
物を言うなら読解力つけてからにしようね(笑)

>>696
>>701
VC++のスタンダードはアカデミパックで10000円(=10k)ぐらいだと言ってるんですが。
少なくとも最寄のソフマップではそうでした。
ちなみにプロフェッショナルは24000円。とても買えん。

ラーニングエディションってそりゃVBですよ。
VC++はスタンダード、プロフェッショナル、エンタープライズの3種だけだし。

>>699
まぁまぁ、マターリと逝きましょうよ。

690はバカだけど(笑)

>>706
効率性を求める目的以外でVBやってる奴は逝ってよし。
やっぱアセンブラでしょ。gdbもMASMもNASMもタダで手に入るし。
面倒臭いからやろうとしないってのは一番おかしい。
>>707
是非このテキストを保存しておいて20過ぎてからもう一度読み返して
見ることを勧める。昔書いた日記並の恥ずかしさを味わえること請け合いだ。

…つかネタか煽りであることを祈るよ、本当に
おいおい、嘘はいかんよ。
VC++STD AC 8k
VC++PRO AC 13k
VSENT AC 40k

確か、こんなモン。
でもさ、さすがにいまどきアセンブラはねーだろ。
工房がシッタカしてるんじゃないよ、まったく、もう。

自分でOS書いたりするんじゃなきゃ、インラインで十分。
それすらも高級言語で作るのが普通になりつつあるからな。
711自他共認超優秀プログラマー(35歳):01/09/17 06:55
インラインって、インランって読んでしまいますよね(笑
712デフォルトの名無しさん:01/09/17 07:00
すいません、ウインドウプロシージャの最初の行で宣言したchar* aを、

int i;
i=SendMessage(hWndText,WM_GETTEXTLENGTH,0,0);//hWndTextはテキストボックスのハンドル
a=new char[i];
SendMessage(hWndText,WM_GETTEXT,strlen((const char *)a),(LPARAM)(LPCSTR)a);
とやったあとに。
delete[] a;
とやったらバグるんですが。なぜでしょう。デバッグしたら、落ちたときにはちゃんとaに文字列が設定されていました。
713666:01/09/17 07:03
>>708
論理的には貴殿が癌に冒されて自分勝手になってるだけという惨憺たる事実と
身障+知障+神経症の発言はイグノアするのがベーシカリーなスタンスであり
我'zに対する嫌悪ありで発見の際は権力の犬を召喚しまくっている次第です。

以上。分かりましたか?

>>709
嘘じゃないです。そもそも価格なんかで嘘つく必要無いと言うか。

VC++STD AC 10k
VC++PRO AC 24k
VSENT AC 40k

これぐらいで売ってたんですが。もしかしてソフマップは詐欺企業なんですか?
だとしたら許せませんね。10000円で売りやがってたし。
714デフォルトの名無しさん:01/09/17 07:07
VC++STD AC 8k
VC++PRO AC 16k
715デフォルトの名無しさん:01/09/17 07:09
716666:01/09/17 07:09
>>710
あんたが興味無ければやらんでいい。
それだけだと思うが?

> インライン
コンパイラが吐くアセンブリコードに絶対性を見出せない限りは必要性あり。
趣味でやるならコンパイラなんて関知せんが仕事なら分かるような気はする。
717708:01/09/17 07:15
>>713
すまん、前半さっぱり分からない(w

ただ本当に1万で買ったならちょっと酷いとは思うよ
>>709の言うとおり、ラオックスでプロフェッショナルアカデミック13k
ヤマダ電気でもで14k位だからね

>>715
それは高いと思う
718710:01/09/17 07:18
>>713
不正解だって
24kはVS Pro ACだよ。

>>716
仕事でやるならコンパイラのはくコードくらいは把握してるもんだが、
だからといって全部アセンブラで書くなんてことはせんぞ。
大体、絶対性ってなんだよ?
コンパイラ様のほうが、人間よりマトモなコードはくことが多いぞ。

> やっぱアセンブラでしょ。
それに、なにが「やっぱ」なわけ?

それから、俺はアセンブラは不要とはいってないぞ。
適材適所で使うべきものだ。
お前の発言からはアセンブラ至上主義としか取れなかったからな。
719666:01/09/17 07:26
ソフマップが詐欺なのはもう分かったので
一般的な価格は皆さんの言う通りだと分かりました、はいはい


>>718
コンパイラ<<<<<<<<<<<<<人間
だよ。

あ、でも近年のは質上がって人間<<<<<<<<<<<<<コンパイラかもしれん

「やっぱ」ってのはアセンブラの方が趣味として楽しめるからな。
CPUへの機械語命令と一つ一つ対応してるし。

> それから、俺はアセンブラは不要とはいってないぞ。
悪かったな
720予想屋:01/09/17 07:27
666・・・メガネヲタク風もやし工房
710・・・肉体派インテリプログラマー
721デフォルトの名無しさん:01/09/17 07:33
さ、VC++相談室に戻りましょう。
脱線しすぎ。
>>666
被害妄想の自分かわいそうな厨房さんですか??
なんでも煽り扱いしてんじゃねぇよ。
だから孤立するんだって。
723710:01/09/17 07:36
>>721
スマソ
724696:01/09/17 07:40
あ、1K円じゃ1000円じゃん(;´Д`)
ガコウ逝って来ます・・・
725デフォルトの名無しさん:01/09/17 07:45
すいません、ウインドウプロシージャの最初の行で宣言したchar* aを、

int i;
i=SendMessage(hWndText,WM_GETTEXTLENGTH,0,0);//hWndTextはテキストボックスのハンドル
a=new char[i];
SendMessage(hWndText,WM_GETTEXT,strlen((const char *)a),(LPARAM)(LPCSTR)a);
とやったあとに。
delete[] a;
とやったらバグるんですが。なぜでしょう。デバッグしたら、落ちたときにはちゃんとaに文字列が設定されていました。
726725:01/09/17 07:46
バグるというのは強制終了するという意味です。
727708:01/09/17 07:59
>>726
なぜ2度も書く(w
strlenの使い方をもう一度見直そう

漏れもそろそろ逝くか
>>725
SendMessage(hWndText,WM_GETTEXT,strlen((const char *)a),(LPARAM)(LPCSTR)a);

SendMessage(hWndText,WM_GETTEXT,i,(LPARAM)(LPCSTR)a);

寝るか。
729デフォルトの名無しさん:01/09/17 08:18
>727、728
できました!どうもありがとうございます。
730666:01/09/17 20:41
>>720
「mailto:くだらねー:-)」とかいいつつinfantな発言だね。笑
眼鏡かけてないし。エセESPやってないで仕事しなさい。

>>722
別に何でも煽り扱いしてないが。
「被害妄想」とか屁理屈捏ねる前に勉強すれば?
731デフォルトの名無しさん:01/09/17 20:44
                         ∧∧
         ゴルァ!            ヽ(゚ω゚=) ぃょぅ
    (  Λ_Λ               (   )
  (⊂ ´⌒つ゚д゚)つ)             ∪∪
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄


                        Σ ∧∧
         ゴルァゴルァゴルァ!      ヽ(゚ω゚=) ぃょ...!
         (  Λ_Λ            (   )
      (((⊂ ´⌒つ゚д゚)つ)          ∪∪
 ̄ ̄ ̄ ̄ ̄ ̄ ̄∪ノ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

                           ∧∧
         ゴルァゴルァゴルァゴルァゴルァ! (゚ω゚=;) コワぃょぅ
             (  Λ_Λ       (   )
          ((((⊂ ´⌒つ゚д゚)つ)      ∪∪
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∪ノ ̄ ̄ ̄ ̄ ̄ ̄ ̄

                           ∧∧
         ゴルァゴルァゴルァゴルァゴルァ!(xωx=) いたぃょぅ
                  (  Λ_Λ   (   )
               ((((⊂ ´⌒つ゚д゚)つ)*∪∪
732720:01/09/17 20:46
>666
くだらねーは俺の行為についての感想だが何か?
>>666
つーかさ、MFC厨以前に、教えて厨じゃどうにもなんだろ。
頭悪い発言連発してるし。
邪魔だから失せろ。
734デフォルトの名無しさん:01/09/17 21:20
MFCはSDKを理解してから初めて使えるものだ。
735デフォルトの名無しさん:01/09/17 21:38
初心者です。
確かCreateWindow()でWM_CREATEメッセージが出るとかいうのを
見たことあるんですが、ShowWindow()ではメッセージ発生しないん
でしょうか。作成直後でなくて可視状態になってから実行したい
処理があるのですが・・・・
レスお願いしま〜〜
WM_PAINT
737デフォルトの名無しさん:01/09/17 21:45
MFCの質問ですが、ウインドウのシステムメニューからのコマンド(最小化、最大化、クローズ)をキャッチするにはどうしたらいいのでしょうか。そもそも、これらのコマンドは、どんな経路で走っているのですか?
 よろしくおねがいします。
738デフォルトの名無しさん:01/09/17 22:53
>737
>737
WM_SYSCOMMANDとかWM_CLOSEとかWM_SIZE
それをDefWindowProc()に渡したり渡さなかったりで処理が変わる。
つーかメッセージ監視用のソフトぐらいもってた方がいいぞ。
>>737
ていうか何故spy++を使わない?
740sage:01/09/18 01:10
>>739
知らないだけだと思われ
741666:01/09/18 01:24
>>732
上祐史浩(宗教団体アレフ)か。感服するよ

http://www.aleph.to/
http://www.joyu.to/

これがナルシシズムの骨頂という奴だ、存分にマスかいててくれ

>>733
頭悪い発言?コンパイラ<人間ってやつ?
実際、そういう時代もあったんだが。
ソフトの値段については「俺が見た限り」で正直に言っただけだがね。
>>741
君と同じ国にいると思うと(以下略)
>>741
( ゚Д゚)ハァ?ナルシズムかそれ??
君の質問は終わったんだからとっとと帰ってくれ。
744デフォルトの名無しさん:01/09/18 07:54
test.cppでコンパイル時はエラーが出ないのですが実行すると
”test が原因で test.exe にエラーが発生しました。testは終了します。”
というメッセージが出てきます。
何が原因か全く分からないのですが、どのような可能性があるでしょうか?
           ____________
          ||                ||
          || アホは無視。        ||
          ||          。   ΛΛ
          ||          \ (゚Д゚ ) みなさんいいですね
          ||________⊂ ι|
  ∧ ∧    ∧ ∧    ∧ ∧     |  |
  (  ∧ ∧ (   ∧ ∧ (  ∧ ∧    UU~
〜(_(  ∧ ∧ __(  ∧ ∧__(    ∧ ∧
  〜(_(  ∧ ∧_(  ∧ ∧_ (   ∧ ∧
    〜(_(   ,,)〜(_(   ,,)〜(_(   ,,) は〜い
      〜(___ノ  〜(___ノ   〜(___ノ
746デフォルトの名無しさん:01/09/18 07:57
>>744
test.cppって何?
まずソース晒せ。話はそれからだ。
747744:01/09/18 08:04
ソースを晒すのは短くないので難しいです。
test.cppについてはメッセージ中にファイル名が出てくるのを
説明するのに出しただけです。
748お胸おっぱい:01/09/18 08:17
>>744
プログラムが間違っている可能性がある。OK?
749666:01/09/18 08:28
>>742->>743
池田先生の弟子として恥ずかしくない言動を心掛けよう(笑

http://www.sokagakkai.or.jp/

池田大作「ウーマン、イトマン、キンマンコ!」

>>744
>>746の言う通りソース晒さんと話し始まらん
境界間違えてAccessViolationなんてヘマは流石に無いよな?
750デフォルトの名無しさん:01/09/18 08:46
>739
正直感動した!そのためにSPY++があったのか!!
751デフォルトの名無しさん:01/09/18 11:56
#include <stdin>
752デフォルトの名無しさん:01/09/19 01:06
winsockを使おうと思って
#include <windows.h>
#include <winsock2.h>

と書いたのですが、エラーが大量に発生します。
winsock2を先に書けば良いのですが、windows.hが最初と言う
頭があるので納得いきません。
どうするのが正しいですか?
753sage:01/09/19 01:28
winsock2を先に書け
754まずは:01/09/19 01:32
#include <windows.h>
#include <winsock2.h>
int main(){ return 0; }
この3行だけのソースをコンパイルしてみろ。
755デフォルトの名無しさん:01/09/19 02:50
>>754
ダメです。
再定義されているというメッセージが大量に。
windows.hのなかでwinsock2.hが既にincludeされているようなのですが。
includeされるという保証があるのでしょうか?

ちなみに、SDKは2000/08版を使ってます
手持ちのwindows.hではこうなってる
#if(_WIN32_WINNT >= 0x0400)
#include <winsock2.h>
#include <mswsock.h>
#else
#include <winsock.h>
#endif /* _WIN32_WINNT >= 0x0400 */

だからwinsock*は改めてincludeする必要なし
757_:01/09/19 04:13
ファイルのフルパスからファイル名を抽出するためには
どうしたらよろしいでしょうか?
そういうAPIがあるんでしょうか?

素人です。どなたか教えてください。
>>757
最後の/または\まで舐めて、それ以降を抽出する。
パス名/\が含まれるかどうかとか、
SJISの場合\の漢字判定もする必要がある。
APIがあればそれ使った方が良いかもしれんけど、知らない。
759_:01/09/19 04:31
>>758
うっ・・・、
GetAt()なんかで舐めるんですか・・・?
書き方がよく分からないです・・・。
760エロ画像:01/09/19 04:35
761デフォルトの名無しさん:01/09/19 04:56
>>757
GetFullPathName()
大抵の処理系にはutilityぽい関数であると思うけどな
split,path,extとかで探してみ
あ、VCスレだった、最近VC使ってないからわからん
>>759
CString::ReverseFindで一発だろ。
766デフォルトの名無しさん:01/09/19 07:19
>>757
IEのバージョンによっては存在しないけど、PathFindFileName。

あるいは FindFirstFile して WIN32_FIND_DATA::cFileName を見る。
767 :01/09/19 07:51
つーか、自分の頭でやってることをコードに落とせばいいだけだろ。
効率の善し悪しは別として。
それが出来なかったらプログラムやめた方がいいぞ。
>>757
TCHAR系の変数や関数を使って書くのが吉。
上記内容なら、_splitpath()(あるいは_tsplitpath())がおすすめ。
つうかMFCって標準的にそういうライブラリないのか?
770質問です:01/09/19 16:16
ダイアログベースで作成したプログラムはリターンキーで強制終了してしまいますが、
これをやめるにはどうするのでしょうか?
771デフォルトの名無しさん:01/09/19 16:31
>>770
MFCでなら、OnOK() をオーバーライドして、CDialog::OnOK()を呼ばないようにしてやる。
>>770
その終了は正規の終了シーケンスに則った「行儀の良い終了(Graceful Shutdown)」のはずですが。
もし本当に強制終了されるならOSが壊れているのかもしれません。
773771:01/09/19 18:57
スマソ、おもいっきし外してますな、俺。
確かに、エラーが出て「強制終了」されるなら、どっかメモリ壊したりしてる可能性がある。
774デフォルトの名無しさん:01/09/19 21:15
エクスプローラーみたいにディレクトリ構造を表示するダイアログを作りたいのですがどうすればいいのでしょう?
>774
CTreeView
776デフォルトの名無しさん:01/09/20 00:59
CPropertySheetを使っています。

コンストラクタで以下のように書くと、
AddPage( &m_PPageHoge ) ;
AddPage( &m_・・・・
自動的にプロパティーシートの左上隅からプロパティー
ページが追加されていきますよね?

場所を指定してプロパティーページを追加する
方法はありますでしょうか?
上の方に空白を設けてそこにCEdig::Createして
エディットボックスを作りたいのですが。

ご存知の方いらっしゃいましたら
よろしくご教授ください。
777デフォルトの名無しさん:01/09/20 01:10
>>768
普通stringクラス+アルゴリズム使うだろ。
厨房決定。(ワラ
778デフォルトの名無しさん:01/09/20 02:19
>>777
どうでもいいが std::string じゃなくて std::basic_string<TCHAR> じゃないのか?
マクロ _UNICODE を定義したときにハマるぞ。


あと上でも書いてるが GetFullPathName() の第一引数にフルパス名を渡せば、
ファイル名だけ抜き出してくることができる。szFullPath にフルパス名が入って
いると仮定して

TCHAR szPath[MAX_PATH];
LPTSTR *pszFilePart;
::GetFullPathName(szFullPath, MAX_PATH, szPath, &pszFilePart);

これで pszFilePart がファイル名の先頭を指すようになる。szFullPath の内容が
szPath にコピーされるのでやや効率が悪いが、

- 他の Win32 API と同じく、セパレータとして '\\', '/' 両方を受け付ける
- UNC を理解する (//machine/dir/ を食わせると pszFilePart は NULL になる)

など、他の Win32 API と齟齬をきたさぬ仕様が便利。
779デフォルトの名無しさん:01/09/20 10:43
CPropertySheetを使っています。

コンストラクタで以下のように書くと、
AddPage( &m_PPageHoge ) ;
AddPage( &m_・・・・
自動的にプロパティーシートの左上隅からプロパティー
ページが追加されていきますよね?

場所を指定してプロパティーページを追加する
方法はありますでしょうか?
上の方に空白を設けてそこにCEdig::Createして
エディットボックスを作りたいのですが。

ご存知の方いらっしゃいましたら
よろしくご教授ください。
780菊丸:01/09/20 11:10
VCでエクセルをCSVファイルに落とさずにデータを扱いたいのですが
、その様な事はできるのでしょうか?
よろしくお願いします。
>>780
COM
782菊丸:01/09/20 11:31
>>781
すみません。
いま一つ意味がわかりません。

どういうことでしょうか?
783デフォルトの名無しさん:01/09/20 11:55
>>782
COM 知らないの? 情報は豊富にあるはずだから、書籍なり google なりで調べてください。
たとえば Excel97 だと、こんな感じのコードで操作できる。

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <objbase.h>
#include <tchar.h>

#import "C:\PROGRAM FILES\COMMON FILES\MICROSOFT SHARED\VBA\MSO97RT.DLL" \
  no_namespace rename("DocumentProperties", "DocumentPropertiesXL")
#import "C:\PROGRAM FILES\COMMON FILES\MICROSOFT SHARED\VBA\VBEEXT1.OLB" \
  no_namespace
#import "C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\EXCEL8.OLB" \
  rename("DialogBox", "DialogBoxXL") \
  rename("RGB", "RBGXL") \
  rename("DocumentProperties", "DocumentPropertiesXL") \
  no_dual_interfaces

int APIENTRY
_tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int nCmdShow)
{
  ::CoInitialize(NULL);
  Excel::_ApplicationPtr spExcel;
  Excel::WorkbooksPtr spWorkbooks;

  spExcel.CreateInstance("Excel.Application");
  spExcel->PutVisible(TRUE);

  _bstr_t bstrFile("D:\\tmp\\test.xls");
  spWorkbooks = spExcel->GetWorkbooks();
  spWorkbooks->Open(bstrFile);

  ::Sleep(5000);    // Wait

  spExcel->Quit();
  ::CoUninitialize();
  return (0);
}
784菊丸:01/09/20 12:15
>>783
なるほど。

即レス、
マジでありがとうございました。
785デフォルトの名無しさん:01/09/20 12:26
>>770 ありがとうございます。オーバーロードのことですか?
>>771 その終了シーケンスをやめたいのです。
786デフォルトの名無しさん:01/09/20 13:24
VCチュートリアルが終わった程度の初心者です。
InternetExplorerの右上にある「e」のマークのような画像を
ウインドの右上に表示するにはどうすればよいのでしょう。
それともVCでは作れないのでしょうか。
ヒントだけでもお願いします。
787デフォルトの名無しさん:01/09/20 13:27
エディットコントロールビューを読み込み専用にすると灰色
になっちゃいました。
読み込み専用(書き込み不可)のエディットコントロールを
白くする方法ってあるのでしょうか?
よろしくお願いします。
788デフォルトの名無しさん:01/09/20 14:54
OS別に気を付けなくちゃ行けない事の情報とか、
どこかにないでしょうか

NT4でVC++5.0で作ってるんですが、
そのソフトをWin98で動作させると
落ちまくったりして、
調べているところなのです
>>788
MSDN
>>785
ん?つまり、OKボタンはそのまま残して、リターンだけ無効にしたいってこと?
PreTranslateMessage()をオーバーライドして、
BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
{
  // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
  if( pMsg->message == WM_KEYDOWN && pMsg->wParam == 0xd )
    return true;
  return CDialog::PreTranslateMessage(pMsg);
}
とかしておけば?
>>787
背景色変えてやれば? > CWnd::OnCtlColor()
>>786
OnPaint() | WM_PAINT で ビットマップかアイコンを描画。
CBitmap | ::LoadBitmap() でMSDN。
793786:01/09/20 16:04
>>792
ありがとうございます。
でも、それだと、ツールバーの下に描画されるのでは?
ツールバーの横(とかメニューの横)にかっこよく絵を
置きたいのです。
なんとかなりませんでしょうか?
>>793
CDialogBar
getopt互換関数ってないですか?
>>788
IEのバージョン(w
797sage:01/09/20 23:37
>>795
素直にgetoptもってきて使え。
798デフォルトの名無しさん:01/09/20 23:58
描画について質問。

拡大した画像を表示したいんだけど、
SetViewportExtなどを使って拡大するのと、
ストレッチブリットで拡大して描画するのと
どっちが速いですか?(もちろん処理速度)

どっちも拡大してからの座標変換がややこしい。。。
>>798
自分で実験しろ。
800デフォルトの名無しさん:01/09/21 11:48
コンソールアプリ実行したらDOS窓の一番上に
”定義ファイルが開けません”
って出るけどこれ何?
801デフォルトの名無しさん:01/09/21 12:02
スレッドを、 スレッドの外から強制終了させる方法はありませんか?
802デフォルトの名無しさん:01/09/21 12:21
>>801
強制でいいなら TerminateThread() 。
803801:01/09/21 13:20
>>802
thanks!
804分割ウィンドウで質問:01/09/21 13:42
┏━━━━┳━━━━┓
┃      ┃      ┃
┃      ┃      ┃
┣━━━━┫      ┃
┃      ┃      ┃
┃      ┣━━━━┫
┃      ┃      ┃
┃      ┃      ┃
┗━━━━┻━━━━┛
このように分割されたウィンドウはどうすれば上手く
出来るのでしょうか?

SplitterWndをOnCreateClientでネストして使用し
・まず左右に分割
・次に左を上下に分割
・最後に右を上下に分割
とやってみたのですが、左の領域の幅が
何故かゼロ(分割線が左端に寄ってしまう)に
なってしまい、悩んでいます。

左右のどちらか一方が分割されないような三分割は
検索すると結構見つかるのですが、この形態の四分割は
参考例が見つからないので、識者の知恵をお借りしたい次第です・・。
805sage:01/09/21 17:19
>>803
わかってるならいいけど、最後の手段だぞ、それ。
806デフォルトの名無しさん:01/09/21 18:08
>>805
というより、設計が間違ってます(w
807デフォルトの名無しさん:01/09/22 00:35
>>799
いいから答えろや。ゴルァ。
知らんかったら書くな。ゴルァ。
>>807
そんなもんほぼ環境依存なんだから自分で実験して好きな方使え。
>>808
本人が放置希望みたいだから以後その方向で行きませう。
810デフォルトの名無しさん:01/09/22 02:05
リソースがDLL化されているプロジェクトに
リソースを追加するにはどうすれば良いでしょうか?
811デフォルトの名無しさん:01/09/22 03:06
CFileFindでサブディレクトリを含めた検索はどうすればいいんでしょうか?
>>811
再帰的に検索する。
検索結果がディレクトリだった場合は、検索関数自身をコールすれば良い。
813811:01/09/22 09:52
>812
あう、用意されてないんですか。わかりました。ありがとうございます。
814デフォルトの名無しさん:01/09/22 09:53
>>810
ハァ?

1. そのリソース DLL にリソースを追加する。
2. リソース DLL は使わず自分にそのリソースを追加する。
815デフォルトの名無しさん:01/09/22 10:21
ofstreamでファイルを出力するときに
フォルダが存在しない場合にエラーにならないで
勝手に作成してくれるのってないですか?
816sage:01/09/22 11:02
>>815
ない
MakeSureDirectoryPathExistsを調べとけ
817デフォルトの名無しさん:01/09/22 12:11
>>816
いぇっさー
818デフォルトの名無しさん:01/09/22 14:27
>>814
1.DLLしか提供されていなくても、リソースって追加できます?
やり方教えてください
2.リソースだけでなく、プログラム本体の下層レイヤーなども含まれているので
 ちょっと無理です
819sage:01/09/22 14:32
>>818
リソースDLLをもらったんだが、それにリソースを追加したい。
でも、ソースはない。

という話しか?
何がやりたいのかはっきりしろ
820818:01/09/22 14:35
DLLではなく、ただの拡張子.libのライブラリーファイルです
821デフォルトの名無しさん:01/09/22 14:45
VCのプロジェクトがあって、リソースやプログラムのコアとなる部分がライブラリー化され
そのライブラリーに対するAPIが用意されていて、それでプログラムしていくようになっています。
このプロジェクトに、リソースを追加するやり方を教えてもらいたいのですがお願いします。
822sage:01/09/22 14:58
>>821

まず国語を勉強し直せ。

DLLとインポートライブラリの関係はわかっているか?
リソースDLLがどんな目的で作られるかわかっているか?

そのプロジェクトにリソースを追加するだけなら、
プロジェクトを開いてctrl+R
もしくは
プロジェクトへのファイルの追加で、自分の書いたリソーススクリプトファイルか
リソースファイルを追加しろ。
>>820
じゃあDLL関係ねぇじゃねぇか!!
状況説明くらいまともにしてくれ。
・何がしたいのか
・どういう状況か
これくらいは具体的に書け。

あと、ネタならネタってメール欄に書いとけ。
824Tori:01/09/22 18:39
MFCを使わないSDIのプログラミングはそれほど難しくなく、また、さまざまな
プログラムが組めると思います。
MFCを使わない時のデメリットはなにでしょうか?
マジレす希望
>>824
MFCを使った場合のメリットなら。
ClassWizardを使って、メッセージハンドラを手間無く追加できる。
別のプロジェクトからクラスまるごと使いまわし、がしやすい。
特殊なView(ListView, HtmlView等)を使う場合、初期段階でインプリメントまで自動でやってくれる。

つまり、ハンドラ書くのが手間じゃない人や、特殊なView使わないなら、
それほどデメリットにならないのでは?
たびたびすいません。CFileFindはディレクトリの中にディレクトリが1個だけある時それを見つけられないようですけど、
回避方法はありますか?
827デフォルトの名無しさん:01/09/23 00:25

ごめんなさい。解決しました。
しかし何つう糞関数なんだCFindNextFile()…
828 :01/09/23 01:45
>>827
それはFindFirst/NextFile()に則った挙動だと思うけど。

まあ、CFileFindが糞だということは同意。
毎回WIN32_FIND_DATAをnewしてるし、GetFilePath() はバグってるし。
829デフォルトの名無しさん:01/09/23 10:30
>>828
え、GetFilePath()がバグってるって?
どういうのか教えてください。
830デフォルトの名無しさん:01/09/23 14:14
NTのサービスとして動作するプログラム作ってるんだけど、
プログラム内でUNCパス指定されたファイル読みたいんだけど、
UNCパス指定が\\Servername\Foldername\Filename
だと読めないんですが、ローカルファイルだと読めます。
UNCの指定が変ですか?
831デフォルトの名無しさん:01/09/23 14:26
>>830
誰の権限で接続しにいってる?
832 :01/09/23 14:29
>>831
権限は指定してないのでsystemユーザーかな、で繋ぐ相手はWin98で
特にフォルダにパスワードとか切ってないんだけど
833デフォルトの名無しさん:01/09/23 14:42
こんにちは。
MFCを利用してドキュメントビューアーキテクチャを実装した上で、
MainFrameのOnCreate内にて独自のウィンドウを表示したいと思い、
以下のようなプログラムを組みました。

LPCTSTR wndclass;
CRect rect(32,32,256,256);
m_NewWnd = new CNewWnd;

wndclass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, 0,0,0);
m_NewWnd->Create( wndclass, "NewWnd",
WS_CHILD | WS_OVERLAPPEDWINDOW | WS_HSCROLL |WS_VSCROLL| WS_VISIBLE ,
rect, this, NULL,NULL);
m_NewWnd->ShowWindow(SW_SHOW);

# CNewWndはCWndの派生(中身なし)
# m_NewWndは*CNewWnd型としてヘッダで定義済み

ところがこれだと、表示されるまではいいのですが、
クリックしてもバーが灰色(フォーカスが移っていない状態)のままで
ドラッグも拡大縮小もできません。
また、rectをrectDefaultに変えると灰色のままですが、拡大縮小はできるようになりました。
しかしこのときでも最小化するとそのまま反応がなくなってしまいます。
一体どうやれば普通のウィンドとして表示されるのでしょうか。
お知恵をお貸しください。
834 :01/09/23 15:11
CreateViewやってないからでは?
835Ruby!:01/09/23 15:20

>C++
>いろいろと有名なオブジェクト指向言語であるC++と
>Rubyを比較すると:

>* C++なぞ問題外.^^;;;

http://www.ruby-lang.org/ja/compar.html

Rubyを知ってもらうためにもこの文をコピペしてください。
836833:01/09/23 15:21
>>834
CWndからの派生なので
CFrameのメンバであるCreateViewは使えないのです・・・。
実は以前にVCを使った時にも同じようなことで悩んだ覚えがあります。
しかしその時のソースは残ってないし。
うーん、覚えてない自分に腹が立つ。
837833:01/09/23 15:44
ここで書いていると昔の記憶が蘇り、なんとか解決しました。
Windowハンドルを自分で作ってアタッチしてやれば、
普通のウィンドウのように振舞ってもらえました。

HWND wnd;
wnd = CreateWindow(palletwndclass, "PalletWnd", WS_OVERLAPPEDWINDOW|WS_VISIBLE,
0,0,256,256,this->m_hWnd,NULL,NULL,NULL);
m_PalletWnd = new CPalletWnd;
m_PalletWnd->Attach(wnd);
m_PalletWnd->ShowWindow(SW_SHOW);

しかし、以前のプログラムは何が原因であったのかは謎のままです。
このプログラムも逃げのプログラミングという感じで対処療法すぎて少ししっくりきません・・・。
問題の原因のわかる方がいらっしゃいましたらぜひご教授ください。
>>828
\を含む2バイト文字+\で\が消える。
C:\予定表\9月→C:\予定表9月
>>828>>829
840828:01/09/23 16:42
あれ、いま確かめたらFindNextFileで毎回newしてなかった。鬱出し脳。
841デフォルトの名無しさん:01/09/23 21:08
Visual C++ 7.0ってまだ出る気配ありませんか?
まだ先の話ですかね・・・。
>>841
VS.NET
843841____:01/09/23 22:56
>>842
ネタだったのに・・・
                
  Ruby     は      クソです!    ゴミ      箱     逝きです!
  ∧_∧   ∧_∧    ∧_∧   ∧_∧     ∧_∧    ∧_∧
 ( ・∀・)  ( ・∀・)   ( ・∀・)  (  ・∀)    (∀・  )   (・∀・ )
⊂ ⊂  )  ( U  つ  ⊂__へ つ  ( ○  つ   ⊂ ○ )   ⊂ ∩  つ
 < < <    ) ) )     (_)|   \\ \   / //   / /\ \
 (_(_)  (__)_)    彡(__)   (_(__)  (_(_)   (__)  (__)

この発言をコピペしていただければ幸いです。
845デフォルトの名無しさん:01/09/24 10:19
DLLから呼び出しもとの機能を使用するにはどうすればいいのでしょうか。
今までは呼び出し元で機能のクラスをnewして、そのポインタをDLLの関数に引き渡していて、
DLLの関数からは渡されたクラスのポインタを元にメソッドを呼び出していました。
呼び出し元とDLLを両方ともVCかBorlandC++でコンパイルすれば正常に動くのですが、
片方をVC、片方をBoralndC++でコンパイルすると実行時に異常終了してしまいます。

newしたポインタを渡すという考え自体がだめなのでしょうか
VCとBCCでは仮想関数系の実装方法が違いますからその方法ではダメです >>845

a->get なら Aget(a) のような 関数を作ってラップしてから呼ぶのか安全確実です
847sage:01/09/24 17:39
>>832
ファイルアクセス前に、Netbiosの正しい接続手続きは踏んでる?

サービスとして起動しているプログラムは、通常、
外のサーバの資源はどこにも接続していないはずだよ。
848sage:01/09/24 17:41
>>845
がんがん機能を切り出してCOMにでもしときなさい。
849845:01/09/24 18:01
>846
Thank you!

>848
いや、COMはよく判らないか…
850Tori:01/09/24 18:36
VisualC++6でアクセス2000のデータベースを扱うアプリを考えています。
もっとも詳しく紹介したサイト教えて下さい
>>850
MSDN Library を ADO で検索。
852デフォルトの名無しさん:01/09/26 03:19
ClassViewが突然使えなくなってしまいました
コードに問題があるとは思えません
(単純なもので試しました)
DirectX SDKをインストールしてからおかしくなったような気がします
VC++初心者なので、設定等がおかしいのかもしれません
わかる人がいましたら、教えてください
>>852
コードに問題なけりゃ、お前の頭に問題が有る。
初心者のクセに自分のコードにそれだけ自信をもてるとは、
たいしたものだ、。
>>853
こんにちはザワールドだけなコードだったりしてな(w
>>852

*.ncb消せ。
856デフォルトの名無しさん:01/09/26 14:23
>>855
直りました
ありがとうございます
857ウイルスよこせ!:01/09/26 14:32
お前ら俺にウイルスを送ってみろ。
いくらでも対処してやるよ。
どんどんよこせ。
それともウイルス作れるここにはいないかな?
バカばっかりっぽいもんね。
[email protected]
ビデオキャプチャで用いられる
capXXX()
っていう関数のことを解説してある、良いサイトはないでしょうか?
>>857
>それともウイルス作れるここにはいないかな?
日本語ヘンだよ?
頭も相当ヘンそうだけど。
860デフォルトの名無しさん:01/09/28 03:31
GlobalReAllocってどういう時に使えばいいのでしょうか?
グローバルにリアロークしたい時
862デフォルトの名無しさん:01/09/28 03:53
よくわかりません>861
>>862
ネタだって。

ともかく VC++ についてきた MSDN Library をインストールして、GlobalReAlloc()
の項を読むのが正解。それで分からなかったら、また質問してくれ。
>863 は親切な人
コテハンで質問に答えてくれると嬉しいっス
>>864
嬉しいか、嬉しくないかなんて知ったところではない。
暇な時に、答えられそうな質問に、答えられる人が答えてるだけだし。
866863:01/09/28 06:31
>>864
別にコテハンで書いてもいいが、何でコテハンで書いて欲しいんだ?
「わーい専属サポート員ができた〜」
ってことなんじゃねえの?
じゃあ、回答する人は名前欄「MSDN」とかにしておくとか?(藁
bool型って見たことないんですけど何に使うんですか?BOOLと何が違うんでしょうか?
>>869
・・・
お前とは仕事したくない・・・
>>869
VC++のまえに C++の本を
読んでください
読んでください
読んでください
読んでください
読んでください
読んでください
872MSDN:01/09/28 20:34
>>869
ともかく VC++ についてきた MSDN Library をインストールして、bool
の項を読むのが正解。それで分からなかったら、また質問してくれ。
873デフォルトの名無しさん:01/09/28 21:14
>>863
どういうメリットがあって、どういうデメリットあるのかが良くわからないのです
とりあえず、メリット、デメリットよりも
どういう時に使うと効率が良くなるのか教えてください
その逆で、どういう時に使ってはいけないのかでも
理解可能なのですが
>>873
C の標準関数に realloc() がありますが、この用途は理解してますか?
それとも、グローバルメモリオブジェクトの用途が分からんということかな。
875デフォルトの名無しさん:01/09/28 22:07
>>873
自分にとって必要ない関数を無理に使うことはないと思われ
876デフォルトの名無しさん:01/09/29 00:48
すいません
realloc知りませんでした
今から調べてみます
グローバルメモリっていうのが
そもそも何だかよくわかりません
>>876
> グローバルメモリっていうのが
Win16 時代の名残だから、忘れてて良いよ。

ただし、クリップボード使うときだけ一瞬思い出すこと。
878デフォルトの名無しさん:01/09/29 01:19
>>869
小文字で書いてあるのはCの予約語で、
大文字で書いてあるのはVC++の定義。
Windows.h、Windowsx.hを参照のこと。
>ただし、クリップボード使うときだけ一瞬思い出す
他のプロセスのメモリーにアクセスするための
って感じでしょうか?
>879
ちがう。
>>879
グローバルメモリが必要な時は、普通そう書いてあるから、気にすんな。
882_Bool:01/09/29 08:10
>>878
bool は C++ の予約語…。
883デフォルトの名無しさん:01/09/29 19:42
結局のところGlobalReAllocの
有効な使い方は誰にもわからないということで
いいんでしょうか?
884MSDN:01/09/29 20:26
>>883
いや、分かってるけど。

realloc() の使いどころが分かれば、

 malloc() したメモリ空間を realloc() で拡大/縮小できるのと同様
 GlobalAlloc() したグローバルメモリオブジェクトを GlobalReAlloc() で拡大/縮小できる
 (サイズ以外の属性もいじれるけど)

で十分な説明だと思う。で realloc() の使いどころが分からないのなら、それは VC++ の
スレッドではなく C 言語の(しかも初心者向けの)スレッドで質問したほうがいい。
885デフォルトの名無しさん:01/09/29 21:02
>malloc() したメモリ空間を realloc() で拡大/縮小できるのと同様
>lobalAlloc() したグローバルメモリオブジェクトを GlobalReAlloc() で拡大/縮小できる
こんなのは本を読めば、誰でもわかることでは?
重要なのは、使いどころだと思われ
さらに、誰もrealloc()については聞いてないだろ
まあ、俺もどこで使うべきかっていうのはよくわからないんだが
884が知ったかじゃないなら、
globalreallocとreallocの違いを説明するべし
ついでにreallocのリスクも説明するべし
886MSDN:01/09/29 22:01
>>885
前にも書いたけど、グローバルメモリオブジェクトは Win16 時代の名残だから忘れて
良いんだって。

知ったか呼ばわりされるのもアレだから、一応書いておくが。

その昔、まだ Windows が 3.x だった時代。Win16 API はアプリケーションに二種類の
ヒープを提供していた。

1 ローカルヒープ
 連続して確保できるアドレスは16bit(64KB)
 プロセスローカル
 アクセス/メモリ管理は高速

2 グローバルヒープ
 連続して確保できるアドレスは16bitに制限されない
 すべてのプロセスで共有
 アクセス/メモリ管理は低速

またメモリが少なかった当時の事情に配慮して、OS が適時 compaction 処理を行える
ようになっていた。だから当時は大きなメモリブロックを一括して使いたい場合には

1 GlobalAlloc() で確保
2 メモリにアクセスする直前に確保した領域をロック/終わったらアンロック
3 グローバルヒープは、必要に応じて GlobalReAlloc() で拡大縮小

していたわけだ。

Win32 になったときに 386 のメモリ管理機構が導入され

1 各プロセスのメモリ空間が分離
2 メモリ空間が32bit化され、セグメントの壁がなくなった

ために、グローバルヒープとローカルヒープを区別しておく必要がなくなった。また仮想
記憶システムが一新されて、スワップさえとっておけば compaction 処理を行わなくても
実メモリを有効に利用できるようになった。そこで GlobalAlloc(), LocalAlloc() は過去の
機能を残したまま統合、compaction 処理をしないヒープ割り当て関数の HeapAlloc()
を導入し(こちらのほうが余計な処理をしないため、性能が良い)、これを使うことを推奨
して今に至る。

グローバルメモリオブジェクトを使う機会だけど、Win32 だと実質的には

- Win16 時代のソースコードをメンテナンスする場合
- クリップボード
- DDE 関連

ぐらい。最近はDDEもはやらないから、実質的にはクリップボードにアクセスするときぐ
らいで、クリップボードコピー時には GlobalAlloc() して即 SetClipboardDate() するだけ
だし、クリップボードからデータを取得するときには一時的なハンドルが返されるだけ
だから GlobalReAlloc() を使う機会はほとんどない。

…で分かった? realloc() について説明するのはパスパス。C の初心者スレで聞いて
くれよ。
>>886
ああ、可哀想に・・・そんな説明せんでも、厨房はほっとけばよかったのに。
本気でその程度のことがわかってないなら、このスレじゃなくて、本でも読んで勉強しろって感じだよなぁ。
888デフォルトの名無しさん:01/09/29 22:26
マジ質問。
Win32となった今は
GlobalAlloc()もLocalAlloc()もHeapAlloc()も
全部同じ機能だと思ってたんですが、何か違いはあるんですか?
889sage:01/09/29 22:31
GlobalとLocalは同じだと推測できるが HeapAllocは明らかに違うだろ
890デフォルトの名無しさん:01/09/29 22:38
eMbedded Visual C++ 3.0 で STL 使いたいんですが何か方法はないでしょうか?
>>890
SGIのでもダウンロードしてきて突っ込んだらコンパイル通らん?
892MSDN:01/09/29 22:52
>>888
ともかく VC++ についてきた MSDN Library をインストールして、

- GlobalAlloc(), LocalAlloc()
- HeapAlloc()
- VirtualAlloc()
- VirtualAllocEx()

の項を読むのが正解。それで分からなかったら、また質問してくれ。
>>887
まったく。883と885は1インシデント消費しとけよ。
894888:01/09/29 23:21
Heap系関数の説明にこう書いてあったよ。
There is no difference between memory allocated from a private heap and that allocated by using the standard allocation functions (GlobalAlloc, LocalAlloc, malloc, and so on).
895デフォルトの名無しさん:01/09/29 23:26
最初はMSDNなんてISDNと変わらん
とか思ってたけど意味を知ったらMSDNが
欲しいです。コンパイラは手に入るけどヘルプ
の方が手に入らないのは詐欺だ!だれか一回見た
MSDNオンラインヘルプは自分の物に出来る
ヘルプビューア(軽いやつ)作ってくれ!ちょいやばめかもしんないけど
896sage:01/09/29 23:27
>>894
そりゃ、ヒープ内での扱いは同じだわさ。
異なるヒープを使うってことに以外に違いはないよ。
897MSDN:01/09/29 23:56
>>895
MSDN Library Subscription を買いましょう。
http://www.msj.co.jp/msdn/admission/default.htm

Yahoo Auction で MSDN Library の Subscription 権利 (一年分) が10,000円
弱で出てることがありますから、それを手に入れるのが安上がりかと。

たまに MSDN Subscription の購読権ではなく CD-ROM / DVD-ROM をバラ
して売っている人がいますが、あれはライセンス上問題がある可能性が高いの
で気をつけてください。
898デフォルトの名無しさん:01/09/30 01:41
GlobalAllocってオプションで動作が違うんだよ。
デフラグみたいな動作(Purge)をするために間接ポインタを
返す場合。HeapAllocは保護機構とかもっと低水準の機能の
ためのオプションがある。
899デフォルトの名無しさん:01/09/30 01:48
>GMEM_MOVEABLE 移動可能メモリを割り当てます。
>このフラグはGMEM_FIXEDフラグと組み合わせることは
>できません。戻り値はメモリ オブジェクトのハンドル
>になります。このハンドルは、 呼び出しプロセスに対
>してプライベートな32ビット値です。ハンドルをポイ
>ンタに変換するには、 GlobalLock関数を使用してください。

現代では移動可能メモリって使うべきでない。なんでかというと、
仮想メモリ上(場合によってはディスク上に存在)で移動されても
困るから。
900デフォルトの名無しさん:01/09/30 02:07
>889
移動可能メモリ=仮想メモリなのでは?

移動不可のメモリ=実メモリ上にあり、スワップされないもの。
901デフォルトの名無しさん:01/09/30 02:10
ちがう。それはHeapAllocでコミットされてるかどうか
の話。PurgeっていうのはマックOS7とかDOSで64kとか
32Kのセグメント内でデフラグする行為で、移動可能な
ブロックがデフラグの対象になるわけ。
そういえば最新のMSDNってユーザ登録すればCDかなんかで貰えるの?
貰える場合VC++6proでも大丈夫?VStudioとかじゃないと駄目かな
903901:01/09/30 02:30
漏れはVisualStudioだが、
うーん、内容は出版社の紙の本の方を評価する。
富士ソフトの「WindowsNTプログラミング」が
良かったなあ。
MSDNはWindowsDNAとか独自の世界を暴走していて
電波入りすぎ。無理して買ってもつまらない。
904902:01/09/30 02:41
>>903
むぅ、そうなんすか。お奨めでない、と。
書籍の方も探してみます。例によって高くなければ良いのですが(w

MSDNに余計なのあり過ぎってのはまったく同意です。
個人的に英語版PlatformSDKの全訳さえあれば他に何もいらないので、
その辺を、新MSDNに期待したかったのですが…。
905 :01/09/30 02:43
MSDNなんて、MSの大本営発表なんだからVC付属+ダウンロードで十分だろ。個人では。
不足があればwebで見たらいいし。
ところで、いまVC買っても付属のMSDNは98年位の古いまま?
サービスパック当てるとMSDNも変更かかるはず。
907869:01/09/30 02:54
>>872
boolはintに変換できるし、BOOLはintのtypedefだから当然融通できますよね。
trueもTRUEも1だしfalseもFALSEも0だし…違いといえばBOOLにはintを代入できることくらいですか?
でもそんなことあんまりしませんよね(するとしたらごめんなさい)。
何のためにBOOLがあるのか本当にわからないです…バカでごめんなさい。
>>907
C/過去との互換のため
909MSDN:01/09/30 03:13
>>907
Visual C++ 4.2 では、標準 C++ ヘッダー ファイルの typedef によって bool と int が等価とされていました。
Visual C++ 5.0 以降では、bool は 1 バイトの組み込み型としてインプリメントされています。
910869:01/09/30 03:28
なるほど、互換性を良くしたいときにはBOOL、最適化したいときはboolを使えばいいんですね。
済みません、どうもありがとうございました。
911デフォルトの名無しさん:01/09/30 03:49
>>907
BOOL は、bool がまだ無かったころの名残です。
>>906
でも、最近の API はドキュメントがない。

そこだけオンライン版の MSDN サイト使うって手もあるが、オンライン版の MSDN は VC++ に統合
できないし検索のインターフェースが良くないから、1万円程度なら買ってしまっても、元取れると思
うぞ。

ダウンロードできる Platform SDK のドキュメント、あれが邦訳されてれば文句ないんだが。
>>910
なんかそれ、ちょっと違うと思うんだ。

コンパイラが「真」と「偽」を知ってるかどうか、と、
ソースの可読性のためにあると思うぞ。
BOOL 型の変数に 2 を代入してもコンパイラは何も言わない(言えない)けど、
bool 型の変数にそんなことすると、文句を言われるぞ。

>>911
ってゆーか、MS-C がまだ C++ ではなかった & ANSI 準拠が優先だったからでは?
914913:01/09/30 09:52
ちなみに、話は脱線しちゃうけど、
たとえば Visual C++ 6.0 って、コンパイラのバージョンは "12.0" だってこと、
意外と知ってる人は少ないんじゃない? (→ MS-C/C++ Compiler Version 12.0)

MS-C は Lattice-C のライセンスを受けてリリースした 3.0 が最初で、
そのころはまだ「C Compiler」だった。Windows の開発が始まったのはその頃。
確か bool ってのは C++ で追加された型だったと思う。
だから bool じゃなく、BOOL。

MS-C が C++ になったのは、確か 6.0 からだったと思う。
商品名が「Visual C++」になったのは MS-C 8.0 から。
それ以後、MS-C 9.0 = Visual C++ 2.0、MS-C 10.0 = Visual C++ 4.0、
MS-C 11.0 = Visual C++ 5.0 ときて、今は MS-C 12.0 = Visual C++ 6.0
C++になったのはVer7からだよ
916914:01/09/30 18:24
>>915
あっ、(あの邪悪な) C7 からか。 スマソ
>>914

Winアプリを作れるようになったのもVer7からだったっけ。
918デフォルトの名無しさん:01/10/01 04:14
vc++でプログラムを作ったんですが
人に渡す時は**.exeだけ渡せばいいのでしょうか?
ちなみにStandardEditionです・・・関係ない?
状況に依る>918
>917
一番初期はMS-C6とSDKだった
>918
相手のOSによる、Win95だとruntimeが古いのしか入ってないと思われる
921918:01/10/01 07:17
私も相手も2000を使っている場合は
exeだけでよろしいのでしょうか?
>>921
作ったプログラムが他にファイルを必要としないのなら
実行ファイルだけでok
923美紀:01/10/01 15:18
はじめまして美紀です。
『印刷プログラムを作れ!』ってセクハラ部長に命令されたの。
美紀初めてだから良く分からないの。
PrintDlg で取得したDCに印刷イメージを書き込めばいいみたいだから
作業用の DIBSection 作ってそこに画像やグラフや文字を書き込んでから
プリンタのDCに StretchBlt で書き込もうと思うの。
これでいい?
作業用の DIBSection のサイズってどれくらいがいい?
あんまりサイズが小さいと印刷の解像度が低くなりそうでイヤ!
普通の文字は直接プリンタのDCに書き込んだ方がよさそうだけど
DCのサイズに合わせてフォントサイズを調整する方法が分からないの(泣)
印刷バージンの美紀に優しく教えて。
>>923
GetMapMode、SetMapMode、GetWindowExtなど
925デフォルトの名無しさん:01/10/01 15:35
VCで文法的に許される範囲内で
virtual, static, 長いメソッドなどを全てヘッダに書いた場合、
スピードが遅くなったり、サイズが極端に大きくなることはあるのでしょうか?
# 例えば大きなメソッドが全てインライン展開されてしまったり、staticメソッドが全てのobjファイルに置かれてしまったりなど。

Java, C#と同じようなスタイルで書いて問題ないかということです。
926デフォルトの名無しさん:01/10/01 17:15
VC++6.0でDCOMを入れてないWIN95で動くプログラムはどうやったらできますか?
>>926
SDKのみで書け
928926:01/10/01 22:08
ありがスマソ
929デフォルトの名無しさん:01/10/02 00:53
>>925
コンパイラは賢いので安心してください
930デフォルトの名無しさん:01/10/02 06:49
16bitOSの頃のDOS用コードunion REGS, inregs, outregs, memset 等を32bit
OSのVC++6.0で使用するのはどうすればよいのですか?
>>930
それを使って何をするかによる。
使うだけならできる。
932930:01/10/02 08:26
どうしても「error unexpected "union""REGS"」ってでるんですが、、、
>932
それは使う使わない以前の問題だゴルァ!
構造体定義すればぁ?

で、次にリンカが「int21が無い」とか言い出すに2048カノッサ。
int何の機能を持つAPIに置き換え
>>925
929氏の言うとおり。
ただしある程度コード規模が大きくなると、コード修正後の再コンパイル時間は
どんどん増えます。超小規模コード以外では、開発に支障をきたすことになるでしょう。
936超初心者:01/10/02 12:02
超くだらない質問なのかもしれないけど、調べてもよくわかりません
ウィンドウプロシージャって、
同時に何個も起動されたりするものなのですか?
(イベント処理が終わらないうちに、次のイベントがきたりしたら)
937超初心者 936:01/10/02 12:06
すいません、
あと、OSの中でのイベントの流れとか、
タスク処理みたいなのがどのように行われているか、とか、
について、 参考になる良いホームページとか本とか
ありませんか?
938デフォルトの名無しさん:01/10/02 13:39
DialogBoxでダイアログbox作る時、
いきなり隠す(foreground ?)には、どうしたら良いですか
939デフォルトの名無しさん:01/10/02 14:09
DialogBoxじゃなくてCreateDialogを呼んでShowWindowで隠す。
940デフォルトの名無しさん:01/10/02 14:15
WM_INITDIALOGでShowWindowを呼ぶ。
941デフォルトの名無しさん:01/10/02 14:34
なるほど 助かりました
まだShowWindowも知らない初心者です
942941:01/10/02 14:45
と思ったら、
WM_INITDIALOGでShowWindowでは だめでした・・・
CreateDialogを使うのではなく、
DialogBox使用で隠す方法はないのかな
>>937

Win95だろうがNTだろうが2000だろうが
根底にある技術を知りたいなら、とりあえずこれヨンどけ。

NT版しか読んだことないが、たぶん、win2K版も
書いてあることは同じだ。
>>942
意味がわからん。
何がしたいのかはっきり書け。
945デフォルトの名無しさん:01/10/03 00:06
ATLフルコントロールのActiveXを作成しているんだけど、
プロパティを作成して
HTMLで<OBJECT ------ >
<PARAM NAME="PATH" VALUE="teteete">
</OBJECT>
の記述してもput_のプロパティが呼ばれないのよ
なぜ?だれか教えて
>>943
(・∀・)カキワスレ?
かなり書きわすれ

ISBN 4822280802
948942:01/10/03 02:26
>944
今作ってるソフトは、ダイアログboxのみのソフトで、
winmainから
DialogBox
でダイアログboxを呼び出して、
ダイアログが閉じたら、そのままアプリ終了してます

それで、今はこのソフトを起動すると一番手前にダイアログboxが出現するのですが、
そうじゃなくて、他のウィンドウ(ソフト)の影にかくしたいのです
>>947
リンク張っとくか。

「Windows2000 Server完全技術解説」
横山 哲也 (著), 天野 司 (著), 金井 昌宏 (著), 木村 尚義 (著), 芝山 賢 (著)
日経BP社 ISBN4822280802

http://www.amazon.co.jp/exec/obidos/ASIN/4822280802/
950デフォルトの名無しさん:01/10/03 07:43
>>948

だったらCreateDialog使ってメッセージループ回せ。

ってーかモーダルとモードレスの違いぐらい把握してなさい。
951948:01/10/03 09:18
>>950
じゃあ、やっぱりDialogBox使用では無理なんですね

>>モーダルとモードレスの違いぐらい
独立して処理が動くか、処理が終わるまで戻ってこないかでしたっけ?
とりあえず、入門書でも買いに逝ってきます
いろいろありがとうございました
>>951
可視をoffにしてもだめ?
953デフォルトの名無しさん:01/10/03 11:18
WindowsXPで、
VirtualAllocを使って1Gのメモリを確保しようとしたら
失敗しました。NULLが入ってきます。
Windows2000,WindowsNT,Windows98とかでは
大丈夫です。なんででしょう?
954デフォルトの名無しさん:01/10/03 11:34
XPってデフォルトでスワップオフとかそんなんじゃなかったっけ?
955デフォルトの名無しさん:01/10/03 11:56
スワップオンするAPIを発行すればいいってことでしょうか?
でも、640MB程度ならちゃんと確保できるんです。
956951:01/10/03 13:39
>>952
すいません、だめなんです
957デフォルトの名無しさん:01/10/03 17:51
>>956
やったことあるよ!
座標(0,10000)あたりに移動させて見えなくしたよ!
でもspyで見つけられて恥ずかしかったので
モードレスダイアログの勉強して書き換えたよ!
958デフォルトの名無しさん:01/10/03 19:47
初歩的な質問お願いします。
HeapReAlloc でメモリの再確保を行った場合
再確保前と後でメモリアドレスが変わっても内容は保持されるのでしょうか?

Mem = HeapReAlloc(GetProcessHeap() , 0 , Mem , 1024*10);

Memのアドレスが呼び出し前と変わっても元々Memにあったデータは新しいMemにコピーされますか?
アドレスが変わる場合もとのアドレスのメモリ領域の開放はHeapReAllocが責任持ってやってくれるんですか?
>>958
アドレスが変わったからといって、メモリ上の物理的な位置が変わっていない場合もある。
もちろん変わっている場合もある。
960デフォルトの名無しさん:01/10/03 21:27
GetShortPathNameで短くしたファイル名を長くするにはどうしたら良いですか?
FindFirstFileで取得できるのはファイル名の最後の部分(?)だけでフォルダの部分はダメです。
GetFileTitleの逆でフルパスからパスの部分を取得する関数って何ですか?
FindFirstFileで返ってくる"."や".."フォルダって何ですか?
それを使って再帰的にFindFirstFileを呼ぶとおかしくなります。
>>960
・Win98/2000以降ならGetLongPathNameみたいなAPIがある。
それ以前ならFindFirstFileを何回も呼んで、
フォルダ名から順番にLFNに直していくしかない。

・_splitpath なり PathRemoveFileSpec なりで適当に。

・"."=そのディレクトリ自身。".."=親ディレクトリ。
そりゃ再帰させたら無限ループだ。
962Tori:01/10/03 22:46
>851
Access2000 のmdbをDAOを使って操作できないのでしょうか?
963チビ:01/10/04 12:19
もうすぐ1000なので、新スレ作りました。
http://piza2.2ch.net/test/read.cgi/tech/1002165477/l50
964デフォルトの名無しさん:01/10/04 13:59
Sleepから戻ってこなくなる時って、どんな原因が
考えられますか。
朝まで2ch見てたとき
>>964
酒飲んで風呂に入っているときにSleepしたとき。
967964:01/10/04 18:04
なるほど
気をつけます
968デフォルトの名無しさん:01/10/04 23:32
薬大量に服用したとき。
969デフォルトの名無しさん:01/10/05 00:39
デッドロック。
デッドロックを体感するにはどうしたらいいですか
>>970

1.家を出ます。

2.ドアを施錠します。

3.鍵をドアポストの中に入れます。

4.入れなくて途方に暮れます。

これで完成です。

ただし、この場合は唯一解決手段があり、庭から回り込む or 隣室から回り込むで
デッドロックが解除されます。
扉を破壊せよ
973デフォルトの名無しさん:01/10/06 00:30
SDKでActiveXプログラミングはできますか?
また、MFCで組んだほうがやりやすいのでしょうか?
ATL
975デフォルトの名無しさん:01/10/06 01:32
>>971
鍵をドアポストに入れちゃうアホはほっときませんか?
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。