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


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

VisualC++相談室 5
1 名前:いさましいチビ :01/11/27 13:14
VisualC++関連の話題を扱うスレッドです。

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

2 名前:デフォルトの名無しさん :01/11/27 13:18
2げっと

3 名前:デフォルトの名無しさん :01/11/28 01:20
早速質問。
Aが CreateProcessでアプリBを起動し、Bにメッセージを送信しました。
と、ここまでは良いのですが、そのBが、メッセージを処理し終えるまで、
Aを待機させるには、どうしたら良いのでしょう??

4 名前:デフォルトの名無しさん :01/11/28 01:24
パイプとかイベントとかをWaitFor〜で待つってのは駄目かい?

5 名前:デフォルトの名無しさん :01/11/28 01:25
SendMessage で送れば、処理が終わるまで待たされる

6 名前:デフォルトの名無しさん :01/11/28 01:52
メッセージを処理したことを伝えるイベントオブジェクトを使え。

7 名前:デフォルトの名無しさん :01/11/28 01:57
>4
そ、そのやり方が分からない。何を待てば良いのですか?

>5
SendMessageすると OS(95)ごとハングします。
ReplyMessageとかしないと駄目なんですかねぇ
メッセージを受け取る側にも何か処理がいるとか?

WM_DROPFILESを、テストのためにメモ帳に投げているんですが、
ドロップされたファイルを表示したところで固まってしまう。
PostMessageして、ちょっと間を置いて、ドロップオブジェクトの
メモリを解放すると、うまくいきます。

8 名前:デフォルトの名無しさん :01/11/28 02:10
CreateEvent

CreateProcess
↓          → 子プロセス開始
↓              ↓
↓             メッセージループ
SendMessage       ↓
↓          →
↓              処理
WaitForMultipleObjects
                ↓
復帰        ←   SetEvent



Wait〜復帰までの間UIが固まって困るとかいう場合は
タイマーをセットしてWM_TIMERでWaitしろ。
待ち時間はゼロでな。

9 名前:デフォルトの名無しさん :01/11/28 02:11
Waitするときはイベントだけではなくて
子プロセスのプロセスハンドルも同時に待機しとけよ。

念のため。

10 名前: :01/11/28 02:12
漏れのIDおしい

11 名前:4 :01/11/28 02:13
もしかしてこういう事をきいているんじゃないだろうな。
wait.c
#include <windows.h>
main()
{
HANDLE hEvent = CreateEvent(NULL, FALSE,FALSE,"test");
PulseEvent( hEvent );
CloseHandle( hEvent);
}

pulse.c
#include <windows.h>
int main()
{
HANDLE hEvent = CreateEvent(NULL, FALSE,FALSE,"test");
WaitForSingleObject( hEvent, INFINITE );
CloseHandle( hEvent);
}

12 名前:デフォルトの名無しさん :01/11/28 02:17
WaitするまえにPulseしちゃうと、受け取られないままイベントが消えるんで、
そこんとこよろしく。

WAIT_ABANDONEDが変える可能性もあるんでWaitの戻り値チェックもよろしく。

13 名前:デフォルトの名無しさん :01/11/28 02:22
ポーリングするなら、ロックファイルみたいなの作る、って手もあるな

14 名前:デフォルトの名無しさん :01/11/28 02:27
>11
おー、なんか道が見えてきた。Thanksっす。

15 名前:デフォルトの名無しさん :01/11/28 02:37
なんでSendMessageだとハングするのでしょう?

WM_DROPFILEは別プロセスには送れないと思うのです。

16 名前:デフォルトの名無しさん :01/11/28 02:39
ふつーのポインタを別プロセスに持っていってはいけません。

17 名前:デフォルトの名無しさん :01/11/28 02:48
>16がSendMessageがハングした原因ですか?

...
PostMessageでも駄目だと思うのです。

18 名前:のの :01/11/28 03:05
質問です
API使って、独自のGUI作りたいんですけど
いいサイトありませんでしょうか?
APIとかの説明とかじゃなくて、
ノウハウというか、効率のいいやり方というか、
こつというか。

19 名前:デフォルトの名無しさん :01/11/28 03:16
>>18
王道はない。

20 名前:のの :01/11/28 03:34
>>19
そうですか、
作るGUIのタイプにもよるのでしょうしね、

ごり押しで、組むしかないのかな。

21 名前:デフォルトの名無しさん :01/11/28 03:38
ビルド完了やエラーがあったときにVCのIDEから出る音がうざいので、
コントロールパネルのサウンド設定で全部”なし”にしました。
しかし、今度はビープ音が鳴りやがります。何とかこいつを
止める方法はないでしょうか?

22 名前:デフォルトの名無しさん :01/11/28 03:44
>>21
ケース開いて、スピーカに繋がっているコードをちぎる。

23 名前:デフォルトの名無しさん :01/11/28 04:08
>>22 そういうのはなしで・・・

短い無音のwavに設定したらイイんだけど、なんだか泥臭いなあ

24 名前:デフォルトの名無しさん :01/11/28 04:52
>>21
スピーカーの音量を最小にする。

25 名前:デフォルトの名無しさん :01/11/28 05:28
>>21
無音のwavに設定する。

26 名前:デフォルトの名無しさん :01/11/28 06:52
とりあえず、WM_DROPFILES って何を送るのかわかってないだろ・・・
ファイル名文字列へのポインタじゃないぞ。
HDROP だぞ。ちゃんと HDROP 送ってるか?

27 名前:デフォルトの名無しさん :01/11/28 06:55
あと HDROP って解放しちゃだめです。勝手に解放してくれます。

28 名前:初心者 :01/11/28 08:44
非常に初歩的なことですいません。

MFCをやっているのですが、ハンドルというものがでてきて、とりあえずはじめでてきたときに、「IDみたいにとらえて・・・」のような記述があったのでそのようにとらえていたんですが
「メンバ変数にハンドルをもつクラスが・・・・」のような記述を別で見ました。なんのことだか意味がわからなくなってしまいました。。

どういうことなんでしょうか?? 

29 名前:デフォルトの名無しさん :01/11/28 08:49
そのまま「ハンドル」を「ID」に置換して
「メンバ変数にIDを持つクラス」じゃダメなんでしょうか

30 名前:初心者 :01/11/28 08:59
>>29
えっと・・・それって・・とあるクラスに「ハンドル」というものを受ける用のメンバ変数が定義されているんですってことでしょうか???

31 名前:デフォルトの名無しさん :01/11/28 09:01
>>28
それ、単に

class CWnd
{
  HWND m_hWnd;
public:
  void Create()
  {}
  ....
};

みたく、メンバ変数にハンドルを持ってるクラスのことなんじゃないの?

32 名前:初心者 :01/11/28 09:07
>>31
えっと、、>>30とはちがうのですか?よくわかりません

33 名前:デフォルトの名無しさん :01/11/28 09:10
>>32
あんたは日本語で喋れ。

「でしょうか???」

と適当な文章を疑問形で振らずに、何がわかって何がわからないのか明記しろ。

34 名前:初心者 :01/11/28 09:11
CBitmap bp,*pb;
CDC MDC;
・・
・・
pb=MDC.SelectObject(&bp);

前の状態(オブジェクト??)を保持する為にこうかくって書いてありましたが、このpbてなんですか?ハンドルとは別物ですか?
(意味不明な質問ですいません)

35 名前:デフォルトの名無しさん :01/11/28 09:12
>>32
すいません、、、。
えっと>>31を、具体的に「***」のメンバ変数に「****」を持っているのようにいってもらえないでしょうか?

36 名前:初心者 :01/11/28 09:13
>>35
「初心者」です。
さらに>>32ではなく>>33でした。すいません、、

37 名前:デフォルトの名無しさん :01/11/28 09:29
>>28
IDを何だと思っているのだ?

38 名前:デフォルトの名無しさん :01/11/28 09:30
質問です。
MFCを使わずにタスクトレイに常駐するアプリを作ってるんですが、
トレイ上のアイコンにカーソルを乗せた時にでてくるポップアップの文字列を
値によって変化させたい時はどうしたらいいでしょうか?

39 名前:初心者 :01/11/28 09:35
>>37
固有の識別子のようなとらえかたをしましたが・・・・

40 名前:初心者 :01/11/28 09:51
今、色々ネットで調べているんですが、
「オブジェクトへのポインタ=ハンドル」
のような記述を見つけました。どういう意味なのでしょう?具体的説明がほしいです。

41 名前:デフォルトの名無しさん :01/11/28 09:59
>>40
http://yougo.ascii24.com/gh/15/001551.html
http://yougo.ascii24.com/gh/66/006631.html

広義には、実体を指し示す、何らかのIDやポインタなど。

42 名前:デフォルトの名無しさん :01/11/28 11:17
>>41
ありがとうございます。読ませていただきました。

でも

「オブジェクトを生成するとハンドルが返される」ということですが
オブジェクトが生成される瞬間とは具体的にどのようなときなのでしょうか?
例えばこれだとどうでしょう?(BMP表示)

CBitmap bp,*pb;
CDC MDC;
bp.LoadBitmap(name);
MDC.CreateCompatibleDC(pDC);
pb=MDC.SelectObject(&bp);
pDC->BitBlt(0,0,100,100,&MDC,0,0,SRCCOPY);
MDC.SelectObject(pb);
bp.DeleteObject();

43 名前:デフォルトの名無しさん :01/11/28 12:04
>オブジェクトが生成される瞬間とは具体的にどのようなときなのでしょうか?

1 CBitmap bp,*pb; ←オブジェクト(インスタンス)の生成
2 CDC MDC; ←オブジェクト(インスタンス)の生成
3 bp.LoadBitmap(name); ←リソースからビットマップを読み込んで、そのハンドルを持つ
4 MDC.CreateCompatibleDC(pDC); ←デバイスコンテキストのハンドルを作ってそのハンドルを持つ
5 pb=MDC.SelectObject(&bp);
6 pDC->BitBlt(0,0,100,100,&MDC,0,0,SRCCOPY);
7 MDC.SelectObject(pb);
8 bp.DeleteObject

「オブジェクトが生成」というのが、C++のオブジェクトなのか
Windowsのリソースなのかわからないけど、こういう処理をしてる

1 bpはオブジェクト(インスタンス)の生成
2 CDCはオブジェクト(インスタンス)の生成
3 リソースからビットマップを読み込んで(生成して)、そのハンドルbp内部に持つ
4 デバイスコンテキストのハンドルを作ってそのハンドルをMDC内部に持つ

44 名前:43 :01/11/28 12:12
すまん>>43は書き方が変だね。

45 名前:3 :01/11/28 13:47
>>26,27

FORMATETC form = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
STGMEDIUM medium;
pデータオブジェクト->GetData(&form , &medium );

で、別なところで
 PostMessage(hWnd, WM_DROPFILES, (WPARAM)(m_medium.hGlobal), 0);

送り先側でドロップ処理が終わったら、
 ReleaseStgMedium( &m_medium );

なんですが、問題ありありですか?
受け側の DragFinishで解放するメモリと、ReleaseStgMediumで解放する
メモリってどういう関係?

46 名前:デフォルトの名無しさん :01/11/28 14:32
なんか、DragFinish でグローバルメモリが解放されるらしい?ので、
複製を作って送ればいいんじゃないでしょーか

47 名前:初心者 :01/11/28 16:10
>>44
「ハンドルを内部に持つ」という話がイマイチわかりません。ハンドルはオブジェクトの内部に持ったりするんですか??

48 名前:デフォルトの名無しさん :01/11/28 17:34
>>47
だから、ハンドルをIDみたいに捉えればいいんだろう?
単なる整理番号みたいなものと思えばいい。
ビットマップだのウィンドウだのを新しく作るたびに、整理番号が割り当てられる。
後でこの番号が必要になるから、メンバ変数に代入して憶えておくってだけの話。

49 名前:デフォルトの名無しさん :01/11/28 17:58
あー。47が何が分かってないかがわかった。
キミはこう考えて矛盾にはまった気がしてるんだろう。

ハンドル = オブジェクトへのポインタ or オブジェクトを指すID番号
オブジェクトのメンバとしてハンドルを持つ
→ 自分へのポインタを自分で持つ???

そうじゃない。そうじゃないんだ。
でも上手く説明できる自信がないんで、誰かお願い。

50 名前:デフォルトの名無しさん :01/11/28 18:42
印刷プログラムでプリンタのDCに描画する場合マッピングモードなどはどう設定すればいいのでしょうか?
MM_TEXTはデバイスにより異なるらしいので印刷のときには不適切ですよね?
例えばA4の紙に1行あたり30文字で印刷するにはどうしたらいいですか?
教えてください。

それと CreateFont の第1引数で正の値と負の値をセットした場合どう違うんですか?
MSDNの説明は良くわかりません。

51 名前:デフォルトの名無しさん :01/11/28 18:54
>>50
> それと CreateFont の第1引数で正の値と負の値をセットした場合どう違うんですか?

確か、負数だと「文字の高さ」で指定したことになって、
正数だと「文字を囲むcellの高さ(アクセント記号の分の余白とかも含む高さ)」で
指定したことになる。逆だったかもしれない。

印刷はやったことないので俺はわからん。スマソ。

52 名前:初心者 :01/11/28 19:11
>>48
なんとなくわかってきましたが、少しわからないのが、そのメンバ変数っていうのは一体どれなんでしょうか・・・もすこし具体的に教えてもらえないでしょうか。
>>49
はまってます・・・・・・

53 名前:デフォルトの名無しさん :01/11/28 20:26
MFCのソース嫁!
と言うかソース読まないと使えないのがMFCの出来の悪いところ
もっとうまく抽象化されたライブラリ使ったほうがええよ

54 名前:デフォルトの名無しさん :01/11/28 20:50
プロセスの優先順位なんですが、
BELOW_NORMAL_PRIORITY_CLASSとABOVE_NORMAL_PRIORITY_CLASS
はWin2000から使えるようになったとの事なのですが
(http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_createprocess.htm)
実際これを使おうとすると、そんなのないよ(未定義エラー)となります。
どうしたら使えるようになるのでしょうか?
環境は、Win2000 + VC++6.0(SP4)です。

55 名前:デフォルトの名無しさん :01/11/28 20:59
VS6のSPは今5まで出てるが

56 名前:デフォルトの名無しさん :01/11/28 21:04
>>55
5以上です(5が出ているのは確実に知っています)
SPっすか?

57 名前:デフォルトの名無しさん :01/11/28 21:21
>>54
PlatformSDK入れれ。

58 名前:デフォルトの名無しさん :01/11/28 21:37
今作っているプログラムでNKFを呼び出しているのですが、

StGet.obj : error LNK2001: 外部シンボル ""void __stdcall NkfConvert(char *,char const *)" (?NkfConvert@@YGXPADPBD@Z)" は未解決です
StGet.obj : error LNK2001: 外部シンボル ""int __stdcall SetNkfOption(char const *)" (?SetNkfOption@@YGHPBD@Z)" は未解決です
Debug/kabuget.exe : fatal error LNK1120: 外部参照 2 が未解決です。

と言われてしまいます。
VC++6 / win2000で同じフォルダにnkf32関係のものをすべて入れました。
プロジェクトの設定―リンクですべての構成に対して
wsock32.lib nkf32.lib winmm.lib を追加しました。

どうすればいいのでしょうか。

59 名前:aaa :01/11/28 23:09
すみません。

KabuGet.obj : error LNK2001: 外部シンボル ""void __stdcall NkfConvert(char *,char const *)" (?NkfConvert@@YGXPADPBD@Z)" は未解決です
KabuGet.obj : error LNK2001: 外部シンボル ""int __stdcall SetNkfOption(char const *)" (?SetNkfOption@@YGHPBD@Z)" は未解決です
Debug/kabuget.exe : fatal error LNK1120: 外部参照 2 が未解決です。

の間違いでした。

60 名前:aaa :01/11/28 23:12
エラーメッセージを書き間違えただけで
疑問は解決してないです、すみません。

61 名前:デフォルトの名無しさん :01/11/28 23:23
ライブラリはCでコンパイルされてるのにC++の関数として
呼び出してるんじゃないか?
extern "C"で解決しそうな気もするが。

62 名前:aaa :01/11/29 00:37
>>61さん、解決しました。
ありがとうございます。
nkf.hを書き換えたら、解決しました。
自分で書いたソースばかり見ていたのでわかりませんでした。

63 名前:デフォルトの名無しさん :01/11/29 05:03
初歩的な質問ですいません。
ビルダーからVCへ移植しているのですが、ビルダーでの(TstringList)
と同じ機能の関数はVCで言うと何になるんでしょうか?
ちなみにMFCは使わない方向です。すいません、お願いいたします。

64 名前:デフォルトの名無しさん :01/11/29 05:07
std::list< std::string > あたりではないかな?

65 名前:デフォルトの名無しさん :01/11/29 10:39
VC++で作成したアプリケーションの起動時パラメータ、DOSアプリで言う『main(int arc char** argv)の

の取得の方法を教えてください

66 名前:デフォルトの名無しさん :01/11/29 11:01
>>65です。
自己解決しました。
__argc、__argv マクロを使えばよいのですね・・・

67 名前:デフォルトの名無しさん :01/11/29 20:45
GetProfileString(__TEXT("windows") , __TEXT("device") , __TEXT("") , szTemp , sizeof(szTemp));

のように __TEXT を使うとどうなるんですか?
UNICODE 関連だと思いますが・・・
WindowsNT で GetProfileString で取得した文字列は UNICODE なんですか?
現在デフォルトのプリンタを取得するプログラムを作っているんですが
Windows系の場合はレジストリから取得しNT系の場合はWIN.INIから読み込みらしいのですが
(MSDNの SDK\GRAPHICS\ICM20\ICMVIEW を参考にしています。)
もっと簡単に行う方法はありませんか?

68 名前:デフォルトの名無しさん :01/11/29 20:53
_T マクロの方がタイプ量が少ないね。

汎用テキストマッピングをつかうなら、いっそのこと
テキストはリソースで管理してみたら?

69 名前:デフォルトの名無しさん :01/11/29 21:18
>>67
普段、ワイドキャラクタを使わないんで、よく分からないんだけど、
バッファの長さをAPIに渡すのに
sizeof(szTemp)
でいいの?
ワイドキャラだったら、文字数の二倍の値になるような気がするんだけど。

70 名前: :01/11/29 21:40
あるURLを開きたいのですが、たとえば、
ShellExecute (m_hWnd,"open","http://???",NULL,NULL,SW_SHOW);
とすれば開けますがURLがばれてしまいます。(IEが表示されてしまうため)

で、最後のSW_SHOWをSH_HIDEにすれば表示されないのでOKなんですが
そうするとメモリにIEが残ったままになってしまって都合悪いです。
どうすればいいでしょう?

71 名前:デフォルトの名無しさん :01/11/29 21:43
>70
スパイウェアですか?

72 名前:デフォルトの名無しさん :01/11/29 21:50
WinNTで動作するサービスを作成したいと思ってます。
Googleでサーチしても全然、関連するサイトが見つかりません。

なにか参考になるURLや書籍を教えていただけないでしょうか?

73 名前:デフォルトの名無しさん :01/11/29 21:51
>>72

ASPと入れれば検索できるかも・・・

74 名前:73 :01/11/29 21:52
Application Service ProviderじゃなくてActive Server Pagesの方ね。

75 名前:  :01/11/29 21:52
スパイウェアがどういうものなのかしりません。
最悪、ASPで作ります。トホホ。

76 名前:デフォルトの名無しさん :01/11/29 21:53
>>75

使用状況を密かに作成者に送るソフトのことじゃないの?

77 名前:デフォルトの名無しさん :01/11/29 21:58
>>69
それなら
sizeof(szTemp / sizeof(TCHAR))
もしくは
sizeof(szTemp / sizeof(szTemp[0]))

sizeof(szTemp / sizeof(*szTemp))

すきなのにすれば?

78 名前:初心者 :01/11/29 22:02
誰か>>47を具体的に話して・・・・

79 名前:72 :01/11/29 22:07
すみません、検索してみたのですがおっしゃってる意味がわかんないです。。
ログオンしなくても動く、UNIXのデーモンみたいなやつを作りたいのですが・・・。

80 名前:デフォルトの名無しさん :01/11/29 22:09
>>77
カッコのくくり方が間違ってる。

81 名前:デフォルトの名無しさん :01/11/29 22:15
>78
では混乱させるお話をば・・・
ハンドルとはロッカーの鍵のようなものです。
ロッカーはWindows&174;サービスです。
ロッカーの鍵を開けると(Createなにやら関数)、
鍵をWindows&174;からもらいます。
そしてオブジェクトは鍵を内部に持つのです。
そして何かをしたいときにはこの鍵を
つかって、Windows&174;に働きかけるのです。

82 名前:&174; :01/11/29 22:17
鬱だ

83 名前:デフォルトの名無しさん :01/11/29 22:19
®
こうかな?

84 名前:デフォルトの名無しさん :01/11/29 22:19
>>78
ウインドウとか、いろいろOSが管理してるリソースが
あるんだけど、生で扱うのとプログラミングが煩雑に
なるから、C++の機能(クラスやライブラリ)でラップして
簡単にプログラムを組めるようにしてるの。

初心者のうちは、ライブラリの下で、どういう操作が
おこなわれているかピンと来ないだろうけど、慣れてくると
「ここでCWndクラスを構築しても、中身は空。
Createをコールして、OSの管理するウインドウハンドルが
確保される」
というかんじで、内部の動きが見えるようになる。

85 名前:>78 :01/11/29 22:29
例えば MFC。ウィンドウオブジェクトの CWndはメンバにウィンドウハンドル m_hWndを
持っている。Windowsのウィンドウは HWND というハンドル(=ID)を使って操作されるので、
そのIDを記憶しておく必要がある。そのIDに相当するのが、HWND型の m_hWnd。

何かの関数で、引数で CWndへのポインタ pWnd を受け取って、
何かの関数でその HWNDを渡す必要が有ったら、
void function1(CWnd* pWnd)
{
function2(pWnd->m_hWnd);
...
みたいに使う。

86 名前:デフォルトの名無しさん :01/11/29 22:35
GUIを作るにはMFCを使うのが一般的なのでしょうか?

87 名前:デフォルトの名無しさん :01/11/29 22:46
>>86

Win32API

88 名前:デフォルトの名無しさん :01/11/29 22:48
>>86
一般的だと思いますよ。
一部には、絶対使わないという人もいますが、
VCで作られて、公開されているソフトは、MFCを使ってる
ものが多いようですね。

89 名前:デフォルトの名無しさん :01/11/29 22:50
>>86

アイコンがMFCのデフォールトアイコンだったアプリがあったぞ(マジ

90 名前:デフォルトの名無しさん :01/11/29 22:52
実際MFC無しで1からやると、最小のMFCアプリと同じラインに
達するまで色んな小道具を付けるのは物凄い作業量のような
気がするのですが... それとも自前のスケルトンやフレーム
ワークでも持ってるのかな>普通のWin32APIオンリーな方

91 名前:デフォルトの名無しさん :01/11/29 22:58
C言語の技術だけでVC++でWindowsプログラミングってできる?
MFCってクラスじゃない。そんなの分からないのよ。

92 名前:デフォルトの名無しさん :01/11/29 23:02
Delphi&BCBならWinのサービスプログラム作るテンプレあるよ

93 名前:デフォルトの名無しさん :01/11/29 23:04
MFCのランタイムって普通スタティックリンクするの?
バージョンによって互換性があるとかないとか。
プロの方々、おせーて。

94 名前:デフォルトの名無しさん :01/11/29 23:06
>>93

ううん。
Windows98以降はOSについているみたいだし。

95 名前:デフォルトの名無しさん :01/11/29 23:06
>>91
当然、出来る。一度やってみるよろし。

96 名前:デフォルトの名無しさん :01/11/29 23:11
>>95

ありがとう。

まずは必要なヘッダーと使える関数を調べないとだな・・・・

97 名前:デフォルトの名無しさん :01/11/29 23:12
>>72
ていうかVC++のATLウィザード使えばサービスできるよ

98 名前:デフォルトの名無しさん :01/11/29 23:32
>>96
ヘッダは当分 windows.h だけでおっけー。
ここへどうぞ。Windows SDK 編、第1部から。
ttp://www.kumei.ne.jp/c_lang/

99 名前:デフォルトの名無しさん :01/11/29 23:37
質問。
二次元配列で要素を,a[1024][512]、とすると
エラーになっちゃうんですけど、どうにかなりませんか?
最低でも512*512の配列が必要なんすけど。

100 名前:デフォルトの名無しさん :01/11/29 23:39
>>99
グローバル変数か静的変数(static)にしませう。

101 名前:デフォルトの名無しさん :01/11/29 23:41
>>99
関数から出してグローバル領域で宣言してみれば?

102 名前:≒99 :01/11/29 23:47
>100,101
なんでそうすると良いのでしょーか?

103 名前:デフォルトの名無しさん :01/11/30 00:01
今更だけど、ISAPIフィルタ作りたい。
良い資料/WEB等、無い???
作りたいのは、認証システム。
doc, xlsファイルとかだと、直にURLたたかれたら、ユーザチェック
できないでしょ?普通。
あ、win統合認証とかは使えない。
ユーザIDとパスワードたちは、DBに入ってるし。。。

MSのUSサイトいっても、イマイチ情報が古いし。

104 名前:>>102 :01/11/30 00:05
ローカル変数はスタックという狭いメモリ領域にとられるから。

105 名前:デフォルトの名無しさん :01/11/30 00:07
>>102
スタックが足りないから。
デフォルトの設定ではスタックが1MBしかないので、
1MBを超えるローカル変数は作れません。

106 名前:初心者 :01/11/30 00:09
>>81
その「内部に持つ」というのの形がイマイチ・・

>>84
上に同じく「何処に確保されるのでしょう?

>>85
???
function2(pWnd->m_hWnd);
は、戻り値みたいな考えなんですか??では・・・>>42のような場合はどうなんでしょうか・・・・・

内部に持つっていうのは
「m_hWndにハンドルを持つ」ということなのかな???

107 名前:デフォルトの名無しさん :01/11/30 00:12
>>106
いくらここで聞いても、これ以上は分からないと思われ。
入門書でもみて、経験を積むのが近道。

108 名前:デフォルトの名無しさん :01/11/30 00:13
まず、ビットマップやらウィンドウやらの実体は、
Windows が内部で管理してます。

アプリケーションプログラマが、ビットマップやらウィンドウやらを
操作するには、それぞれのオブジェクトを表すハンドルを使います。

MFCのクラス CBitmap は、ビットマップの管理をするわけですが、
Windows が内部で管理してるビットマップを直接触ることは、
当然出来ません。ビットマップを触るには、ハンドルを使います。

CBitmap クラスは、ビットマップの操作をするために、
そのハンドルを保持しています。

・・・わかり?

109 名前:初心者 :01/11/30 00:21
>>108
その部分はなんとなーくはわかるんですが・・・
わからないのは、例えば
CBitmap bp,*pb;
CDC MDC;
bp.LoadBitmap(name);
MDC.CreateCompatibleDC(pDC);
pb=MDC.SelectObject(&bp);
↑ここで、SelectObjectは前に持っていたオブジェクトへのハンドルを渡すみたいですが、それが、Cbitmap *pbとイコールでつなげてる点がよくわかりません。
pbは、ハンドルなの?????

pDC->BitBlt(0,0,100,100,&MDC,0,0,SRCCOPY);
MDC.SelectObject(pb);
bp.DeleteObject();

110 名前:デフォルトの名無しさん :01/11/30 00:24
81を書いたんですが、更にややこしく書くと、
あなた(=プログラマー)は、使用人(=オブジェクト、例えばMDC)に
ロッカー(=Windowsサービス例えばデバイスコンテキスト)に荷物を
預けて来いと命令できます。(=例えばMDC.CreateCompatibleDC(pDC))
すると使用人(=MDC)は、ロッカーを操作して(=もろもろのWinAPI)、
鍵(=ハンドル)を手に入れます。
すると今度はあなた(=プログラマー)は、荷物をロッカーから出せという命令
(=例えばMDC.SelectObject(&bp))が使えるわけです。使用人(=MDC)が
鍵(=ハンドル)をもっていますから。

111 名前:デフォルトの名無しさん :01/11/30 00:25
>>109
> SelectObjectは前に持っていたオブジェクトへのハンドルを渡すみたい
それが勘違い。MSDN か MFC のソース読みましょう。

112 名前:デフォルトの名無しさん :01/11/30 00:26
CDC.SelectObjectが返すのはハンドルじゃないよ

113 名前:デフォルトの名無しさん :01/11/30 00:32
>>109
それは、MFCの汚い面の現れだな・・・
Windows API をラップしてるだけだから。
Windows API を学ぶべし。

#このあたりは OWL や VCL の方が綺麗で好きだ

114 名前:デフォルトの名無しさん :01/11/30 00:37
>>113
MFC がきれいじゃないのは同意だが、今回の問題は全然関係ないぞ。単に

CBitmap* CBitmap::SelectObject(CBitmap*)

と宣言されてるだけの話。

#あまりズレた返答は Borland 厨の烙印を押されかねんので、気をつけてくれ。

115 名前:デフォルトの名無しさん :01/11/30 00:38
::SelectObjectとCDC::SelectObjectの違いが分かってないのか?

MDC.SelectObject(&bp)が返すのは
MDCが管理するデバイスコンテキストに直前まで選択されていた
同種のGDIオブジェクト、つまりビットマップを管理するCGdiObjectのアドレス。

CGdiObjectクラスは、Win32 GDIオブジェクト(ビットマップ)への
ハンドルをメンバ変数として所有していて、
ハンドルを使ったAPI呼び出しを、クラスのメンバ関数をとおして
利用できるように設計されてるわけだ。

CBitmap *pbに CGdiObject *のポインタを代入しているけど
このとき、CBitmap*はCGdiObjectから派生したクラスへのポインタなので
自動的に、ポインタの型が変換されて正しく代入される。

116 名前:デフォルトの名無しさん :01/11/30 00:39
OWLはヘタレクラスだらけ。

117 名前:デフォルトの名無しさん :01/11/30 00:56
>>100>>101
thanks!出来ました。
ついでにVC++初心者(cは多少判る)にお勧めの参考書あったら
教えたってください。
付属のはわかりづらい

118 名前:デフォルトの名無しさん :01/11/30 01:06
とりあえず、付録で付いてくるScribbleチュートリアルをやろう。
最初のステップだけでもいいよ。

119 名前:113 :01/11/30 01:10
うゅ。ごめんなさい。言動には気を付ける。

CDC::SelectObject のソース追ってみて、動作を理解した。
SelectObject ひとつで、これだけ大変なことやってたんだ。。。

120 名前:デフォルトの名無しさん :01/11/30 01:17
なんか素質有りそうだから、
MFCの前にSDKプログラミングをやってみれ。

深いとこまでやらなくても、
MFCを理解する助けにはなる。

121 名前:114 :01/11/30 01:24
>>119
俺もボケたこと書いてるね。>>115 が正しいです。

122 名前:初心者 :01/11/30 02:12
>>120
すごい質問ですが、SDKってMFCと何が違ってなんなんですか?

123 名前:初心者 :01/11/30 02:18
あ、それと、
大きなBMPの一部分だけを読み込む方法ってありますか?
CBitmap bp,*pb;
CDC MDC;
bp.LoadBitmap(name);
MDC.CreateCompatibleDC(pDC);
pb=MDC.SelectObject(&bp);
pDC->BitBlt(0,0,100,100,&MDC,0,0,SRCCOPY);
MDC.SelectObject(pb);
bp.DeleteObject();
のような風に、BilBltで表示範囲を指定しても、元のBMPは全体が読まれているわけですよね?
これだと、たとえば640*480の画面にスクロールして動いていく画像を出したいと思って、
640*3000くらいの画像を作って(x,y)から(x+640,480)まで描画させるなどとしても、やっぱり元の大きな画像を読み込んでからになるんですよね?
やってみたら、ものすごい動きが遅かったんで・・・
どうすればいいのかな

124 名前:デフォルトの名無しさん :01/11/30 02:28
>>122
MFC を使わず、Win32 API だけを使ってプログラミングすることを指して、SDK
プログラミングと呼ぶ(人もいる)。

>>123
毎回ビットマップを読み込んでるわけじゃなくて、一度だけ読み込んで、それを複数回
BitBlt() してるんですよね? それだと、遅いのはファイルの読み込みではなく BitBlt()
自体じゃないかな。

DirectX を使って構わないのなら、DirectDraw, あるいは Direct3D を使って、ビデオ
メモリ上に画像を置いてしまうのが最速かと。

125 名前:デフォルトの名無しさん :01/11/30 02:39
>>124

>>122に対する返答に対して
ってことは、SDKというのはMFCのような特別なクラスみたいなものは存在しないのですか?まったく巣のままAPIを使うだけなんですか?
「(人もいる)」って?

126 名前:初心者 :01/11/30 02:40
>>124

>>123に対する返答に対して
すいません・・・・・・・毎回ビットマップ読み込んでました。

127 名前:デフォルトの名無しさん :01/11/30 03:02
>>72
http://hata.cc/docs/Win32/1-2-3.html
http://kokoto.pos.to/Service.htm
ATLの奴は俺も良く分からん

128 名前:デフォルトの名無しさん :01/11/30 03:13
>>125
そうそう。自分で WndProc を書いて、WinMain で

1 RegisterClass して
2 CreateWindow して
3 GetMessage(), TranslateAccelerator(), TranlateMessage(), DispatchMessage()
 からなるメッセ―ループをぐるぐる回す

というプログラムを書く。

「人もいる」と書いたのは SDK プログラミングと言う用語が、それほどいい名前だと
思ってないし、一般的でもない気がしたから。あまり気にせんで下さい。

129 名前:デフォルトの名無しさん :01/11/30 03:27
生APIプログラミングって呼ぶのはどうかな?
あまり流行りそうには見えないが、意図してる事は分かりやすいかと。

130 名前:初心者 :01/11/30 04:15
>>126について
毎回ロードしないようにしようとしたんですがうまくいきません。
CBitmap bp,*pb;
CDC MDC;
bp.LoadBitmap(name);
MDC.CreateCompatibleDC(pDC);
pb=MDC.SelectObject(&bp);
pDC->BitBlt(0,0,100,100,&MDC,0,0,SRCCOPY);
MDC.SelectObject(pb);

の、bp.LoadBitmap(name); の部分だけを一回実行するだけにしたんでは駄目なようですが、どうすればいいのでしょう?
MDC2に元画像を一度だけおいて、そこからMDCに転送して、色々描画してから実際に画面に出力するようふうにしてみたらできるかと思ってやってみましたが、これも何か違う部分でうまくいきませんでした。

131 名前:デフォルトの名無しさん :01/11/30 04:21
>>130
関連する部分のコードを抜粋して出してみ。

> bp.LoadBitmap(name); の部分だけを一回実行するだけにしたんでは駄目なようですが、
少なくとも >>130 のコードではそれが分からんよね。どうやって「一回だけ」実行する
ようにしたのか、それが分かる程度に編集してね。

132 名前:初心者 :01/11/30 04:30
>>131
えっと、CBlockView::OnDraw(CDC* pDC)のなかに、上記のようなコードを書いて、bp.LoadBitmap(name); はif文で一回だけ実行するようにしました。
アニメーションさせる(画像を移動させていく)のでタイマーを使って常に一定間隔で再描画するようにしています。InvalidateRectで。

133 名前:デフォルトの名無しさん :01/11/30 04:35
>>132
コード抜粋しなよ。口で説明するより、実物を見たほうが早い。

134 名前:初心者 :01/11/30 04:41
>>133

BOOL first=TRUE;
void CBlockView::OnDraw(CDC* pDC)
{
CBlockDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: この場所にネイティブ データ用の描画コードを追加します。
CDC MDC;
      MDC.CreateCompatibleDC(pDC);
      CBitmap bp, *pobp;
if (first){bp.LoadBitmap(bmpback);first=FALSE;}
      pobp=MDC.SelectObject(&bp);
pDC->BitBlt(0, 0, 800, 600, &MDC, 0, 0, SRCCOPY);
MDC.SelectObject(pobp);
}
のような形です。これが繰り返されます。(本当はこの後表示位置を変数で置いて色々したい)

135 名前:初心者 :01/11/30 04:42
>>134
ああ、なんか空白部分が変になってしまった、、、

136 名前:デフォルトの名無しさん :01/11/30 04:51
>>134
ああ、それだとダメです。

CBitmap bp, *pobp;
CDC MDC;

はいずれも OnDraw() メソッドのローカル変数として定義されていますから、
OnDraw() から抜けた瞬間に無効になります(次に OnDraw が呼ばれたとき
には、前回の値は残ってません)。

#これは VC++ に限らず C/C++ の基本中の基本なので、少し C++ の基本的な
#書籍を読んだほうが良いです。

ビットマップを描画しておく CDC 変数をメンバ変数にして、

1. OnCreate() あたりでビットマップの読み出しと描画を行っておく
2. OnDraw では、そのメンバ変数を使って BitBlt する

のが良いかと。あと MFC スレが別にあるので、MFC に関してはそちらで聞いた
方が詳しい人がつかまると思います。

137 名前:初心者 :01/11/30 04:52
>>136
ありがとうございます、、、、、
ちょとやってみます

138 名前:デフォルトの名無しさん :01/11/30 07:01
SDKだけでやる場合に、マウスでカット&ペーストとか
自分で実装するの考えると頭痛くなるんだけど慣れてる
人はそうでもないのか?

139 名前:デフォルトの名無しさん :01/11/30 07:53
OLE絡みとCOMは、慣れても頭が痛い。

140 名前:初心者 :01/11/30 09:38
>>136
ありがとうございます、解決しました。無事動くようになった様です。

141 名前:初心者 :01/11/30 09:39
GetPixelを使って色の取得をしてみたんですが、これを一連の動作を絡めて関数化しました。ところが
CDC MDC
////
////
////
iro(MDC,mona.x,mona.y,mona.xx,mona.yy,128,0,0);
MDCをGetPixelで使うのでCDC MDCを第一引数に取ったんですが、こうすると

1 番目の引数を 'class CDC' から 'class CDC' に変換できません。

と言われてしまいます。何故でしょう?

142 名前:乗換初心者 :01/11/30 09:54
このスレの頭のほうの関連なんですが、
VBでいうところの、DoEvents()
BCBでいうところのApplication->ProcessMessages();
(待ちループの間、他のアプリケーションに制御を渡す)
っていうのはVCではなんと書けばいいんすか?

143 名前:デフォルトの名無しさん :01/11/30 10:05
>>141
関数 iro の宣言を見せてみ

144 名前:デフォルトの名無しさん :01/11/30 10:33
>>143
MDCが登場する部分と周辺
int iro(CDC MDC,int x,int y,int xx,int yy,int red,int green,int blue)
{
struct color{
int r;
int g;
int b;
}ref;
COLORREF CRefBuf;
CRefBuf= GetPixel(MDC,x,y);
ref.r = GetRValue(CRefBuf);//R
ref.g = GetGValue(CRefBuf);//G
ref.b = GetBValue(CRefBuf);//B
***
***様々
***



}

145 名前:初心者 :01/11/30 10:33
>>144
初心者。また、名前を入れ忘れた。スマソ

146 名前:デフォルトの名無しさん :01/11/30 10:47
COLORREF GetPixel(
HDC hdc, // デバイスコンテキストのハンドル
int nXPos, // ピクセルの x 座標
int nYPos // ピクセルの y 座標
);

だよ。

147 名前:デフォルトの名無しさん :01/11/30 11:21
>>144
MFCは詳しくないけど、
CDC にはコピーコンストラクタがないんじゃないかね。

CDC& にしてみそ。

148 名前:初心者 :01/11/30 11:23
>>146
え!?何がおかしいんですか?上のやつ、普通に関数じゃなくて直接(OnDrawなんですけど)書き込んだら正常に実行でたんですけど・・・。引数で渡そうとするとおかしく・・・

149 名前:デフォルトの名無しさん :01/11/30 11:23
>>142
>>128の3

150 名前:デフォルトの名無しさん :01/11/30 11:24
>>144
これも

CRefBuf= GetPixel(MDC,x,y);

CRefBuf= MDC.GetPixel(x,y);

151 名前:初心者 :01/11/30 11:24
>>147
あ、はい。

152 名前:初心者 :01/11/30 11:30
>>147
できちゃいました。ありがとうございます、、、

153 名前:初心者 :01/11/30 11:42
まだよくわかっていないところがあるようなので少し勉強してきます、、、

154 名前:デフォルトの名無しさん :01/11/30 16:02
VC++6の
ダイアログベースでBMPを読み込んでウィンドウに表示はできたのですがその読み込んだbmpを
unsigned char image[3][i][j]の配列に入れたいのですが、どのような式が必要でしょうか?
bmpがはいってる変数はm_bmpBitmapで変数のタイプはCBitmapです

155 名前:デフォルトの名無しさん :01/11/30 16:07
このスレ立てた
いさましいチビって誰?

156 名前:デフォルトの名無しさん :01/11/30 16:24
>>154
unsigned char の配列って、256色限定ですか?
読み込んだBMPがたまたまフルカラーだったらどうします?

157 名前:デフォルトの名無しさん :01/11/30 16:36
すいません256色で考えてください.実際にはモノクロでunsigned char image[i][j]
で配列に入れることを考えてます.モノクロで無いとそれを加工する式が思いつかないので。
初心者なもので状況説明がうまくできなく申し訳ありません.

158 名前:デフォルトの名無しさん :01/11/30 16:37
ものすごく限られた用途で使用しようと考えているプログラムです.

159 名前:デフォルトの名無しさん :01/11/30 16:43
>>154
ニュースで取り込むと、インデントも崩れないよ。

CBitmap bm;
if( bm.LoadBitmap(IDB_BITMAP1) == 0 ) {
// エラー処理
}

BITMAP bm_info;
if( bm.GetObject( sizeof bm_info, &bm_info ) == 0 ) {
// エラー処理
}

CDC dc;
if( dc.CreateCompatibleDC(NULL) == 0 ) {
// エラー処理
}
CBitmap *old_bm = dc.SelectObject( &bm );
if( old_bm == NULL ) {
// エラー処理
}

TRACE("%d %d\n", bm_info.bmWidth, bm_info.bmHeight);

unsigned char image[3][256][256];
for( int y = 0; y < bm_info.bmHeight; y++ ) {
for( int x = 0; x < bm_info.bmWidth; x++ ) {
COLORREF col = dc.GetPixel( x, y );
image[0][x][y] = GetRValue(col);
image[1][x][y] = GetGValue(col);
image[2][x][y] = GetBValue(col);
TRACE("%02x %02x %02x\n", image[0][x][y],image[1][x][y],image[1][x][y]);
}
}

dc.SelectObject(old_bm);

160 名前:159 :01/11/30 16:49
勘違いしてた。ニュースでもインデントがつぶれてたね。

161 名前:乗換初心者 :01/11/30 17:22
>>149
って処理ループを書かなきゃならんのすか?
vbやbcbみたく、1行で済ませて楽する方法はないのでしょか?

162 名前:デフォルトの名無しさん :01/11/30 17:30
AfxGetApp()->PumpMessage();

163 名前:デフォルトの名無しさん :01/11/30 18:13
フォルダ選択ダイアログで、長いフォルダを指定すると、SHGetPathFromIDList 関数が失敗してフォルダを取得できません。
実際に第2引数のバッファには文字列が設定されているのですが、途中で切れた文字列になっています。
終端文字列(NULL)も付いていないようです。
ヘルプやいろんなサイトを検索してみましたがどうしても分かりません。
だれかご存知の方、ご教示お願い致します。
ソースは下記です。
BOOL SelectFolderDialog(const HWND& m_hWnd, const CString& strTitle, const CString& strDefaultFolder, CString& strSelectFolder)
{
BOOL nFuncRet=TRUE;
BROWSEINFO bi;
TCHAR szDir[1024];
LPITEMIDLIST pidl;
LPMALLOC pMalloc;

TCHAR szDefaultFolder[_MAX_PATH];
strcpy(szDefaultFolder,strDefaultFolder);

if (SUCCEEDED(SHGetMalloc(&pMalloc))){
ZeroMemory(&bi,sizeof(bi));
bi.hwndOwner = m_hWnd;
bi.pidlRoot = 0;
bi.lpszTitle = strTitle;
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lParam=(LPARAM)szDefaultFolder;
          bi.lpfn = BrowseCallbackProc;
pidl = SHBrowseForFolder(&bi);

if (pidl){
if (SHGetPathFromIDList(pidl,szDir))
strSelectFolder=szDir;
pMalloc->Free(pidl);
pMalloc->Release();
}
else
nFuncRet=FALSE;
}
return nFuncRet;
}
// SelectFolderDialog()の再帰関数
int CALLBACK
BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lp, LPARAM pData)
{
switch (uMsg)
{
case BFFM_INITIALIZED:
if(pData!=NULL)
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)pData);
default:
break;
}
return 0;
}

164 名前:デフォルトの名無しさん :01/11/30 18:35
>>163
IShellFolder の GetDisplayNameOf は?

165 名前:デフォルトの名無しさん :01/11/30 22:08
>159
すいません、ニュースって何ですか?

166 名前:デフォルトの名無しさん :01/11/30 22:19
>>165
SONYのワークステーション。

167 名前:デフォルトの名無しさん :01/11/30 22:56
>>165
news://toc.dyndns.org/2ch.pc.tech

168 名前: ◆toc/CX1g :01/12/01 00:01
>>160
> 勘違いしてた。ニュースでもインデントがつぶれてたね。

あ、すんません、つぶれなくしましょうか?

今はブラウザと見え方をなるべく合わせようとして
連続するスペースをひとつのスペースで置き換えてます。

169 名前:デフォルトの名無しさん :01/12/01 01:17
>167
ありがと
>168
おねがいします。
えっと、あと159のプログラムを貼り付けると配列に取り込めるんですか?
(たとえば、ボタンを作ってそれにメッセージハンドラのコード追加のところにかく)
それと、このプログラムはリソースに登録しといたBmpをよみこんでますよね?
リソースに登録していないファイルから読み込んだbmpにもそのままでつかえるのでしょうか?

170 名前:奈々Cさん :01/12/01 09:00
どなたかすみませんが、IEをプラグイン的に拡張するActiveXのサンプルコード
があったら、ポインタで結構ですから教えていただけないでしょうか。

やりたいことは、HTMLからURLを渡されたらサーバからデータを引っ張り、処理
結果をIEの画面の一部(あるいは全部)に描画するものです。

ネスケのplug-inなら理解できるのですが、IEでActiveXとなると難しいですの
で。

よろしくお願いします。

171 名前:奈々Cさん :01/12/01 09:03
わがままですみません。サンプルのソースコードはVC++を希望です。
VBは扱えませんので・・・。

172 名前:デフォルトの名無しさん :01/12/01 12:03
またVC++で開発中にソースが逝きました。こんどはプロジェクト名のcppファイルが焼失しました。
でもオブジェクトは生きてる。
オブジェクト指向やっててよかった

173 名前:デフォルトの名無しさん :01/12/01 12:05
>>171
ATLのチュートリアル(多角形を表示するもの)を見れ

174 名前:デフォルトの名無しさん :01/12/01 14:05
n

175 名前:デフォルトの名無しさん :01/12/01 14:07
>>170

ポインタで結構?
じゃあ、
char *activex;
これでいいね。

176 名前:デフォルトの名無しさん :01/12/01 14:14
どうしよう。まったく面白くない。

177 名前:デフォルトの名無しさん :01/12/01 14:30
>>176 せめてこのぐらい書いてやれや。
CComPtr<IWebBrowser2> pWebBrowser;

178 名前:170 :01/12/03 06:49
>>173
ありがとうございます。

で、冗談のセンスがない人はプログラムのセンスも無いと思いますが、どうです
か? >>175

179 名前:デフォルトの名無しさん :01/12/03 13:23
RS232Cのデータ取り込むのにReadFileを使ってます。
abcdefgというデータでテストすると
ある程度時間たつと受信データが乱れます
順番が変わったり、受信しなかったりすることあります
Sleepで待ち時間を設定すると正確に受信できる時間が
伸びますが、結局は受信データが乱れます。
何が原因なのでしょうか?
ハード的に限界があるのでしょうか?

180 名前:デフォルトの名無しさん :01/12/03 14:11
デバッグだと問題ないのにリリースで動かすとAccess Violationで止まっちまうぞゴルァ!!
助けてプリーズ。

181 名前:デフォルトの名無しさん :01/12/03 17:13
Windowsだったら、
try {} catch (...) { MessageBox(NULL, "死んだごめん。", NULL, MB_OK | MB_APPLMODAL); exit(1); }
で囲んでおけば?

182 名前:デフォルトの名無しさん :01/12/03 17:14
>>180
とりあえず、コンパイラのメッセージの未初期化なんとかってやつ、
全部調べ直せ。

183 名前:デフォルトの名無しさん :01/12/03 17:27
今、再帰でちょっとした計算をしているのですが、
Windowsでスタックを食いつぶした場合って、どうなってしまうのでしょうか?

試しにちょっと無茶をさせてみた所、計算終了後、5分くらいは何の変化も
なかったんですが。その後、エラーメッセージもなく突然PCが落ちました。
スタック食いつぶしが原因かどうかもよく分かりません。

184 名前:デフォルトの名無しさん :01/12/03 17:30
>>183
NT系のWindowsで同じこと試してみな。

185 名前:デフォルトの名無しさん :01/12/03 17:33
>>184
環境は一応Windows2000なんです(T-T)
なにか俺、見逃してるっぽいですね…

186 名前:デフォルトの名無しさん :01/12/03 18:49
初めてVC++6.0Proを買ってきてインストールしました。
SPを探してみたところ、MSのHPにSP5があったのですが、
Wideband-FullとFullがあります。
何が違うのでしょうか?どちらがお勧めですか?

187 名前:デフォルトの名無しさん :01/12/03 19:36
>>186
初心者なのなら、そのままにしといてもいいんじゃ?

188 名前:デフォルトの名無しさん :01/12/03 20:05
ReleaseとDebugで明らかに動作が違うのだけれど、
こういうのはどうしたら良いんでしょうか?
ウェブを検索したらそれで困っている人がいくらか引っかかった・・・。

189 名前:デフォルトの名無しさん :01/12/03 20:34
>>188
>>182読め

190 名前:デフォルトの名無しさん :01/12/03 21:14
ん〜 lightwaveで作ったキャラをC言語で動かすことってできるの?
なんとなく気になった!

191 名前:デフォルトの名無しさん :01/12/04 02:41
>>179
フロー制御していないに一票

>190
理屈上できないはずが無い

192 名前:デフォルトの名無しさん :01/12/04 13:42
すいません,以前も質問したのですがVCで
BMP画像を配列に格納する方法がわからないのですが,
モノクロ画像をunsigned char image[x][y]に格納するにはどのようにコードを書けばいいのでしょうか?
ボタンをつくり関数を追加してそこにメッセージハンドラを記述する形でコードを書く形です.
又,その逆に配列にしたものをBMPに戻すにはどのようにすればよろしいのでしょうか?

193 名前:デフォルトの名無しさん :01/12/04 13:45
BMPは二種類あるけどどっち?

194 名前:デフォルトの名無しさん :01/12/04 18:21
コマンドライン引数について。
 >test.exe "c:\windows\" 123
とやると、

期待する解釈:
 argv[1]→ c:\windows\
 argv[2]→ 123
実際:
 argv[1]→ c:\windows\" 123
となってしまう。こういう場合って、自分でパーサ作らないと駄目?

195 名前:194 :01/12/04 18:23
>194 間違い。

期待する解釈:
 argv[1]→ c:\windows\
 argv[2]→ 123
実際:
 argv[1]→ c:\windows" 123

196 名前:>>194 :01/12/04 18:26
>test "c:\windows\\" 123
とやれば良いに1票

197 名前:デフォルトの名無しさん :01/12/04 18:29
同時にファイルの複数開きたいと考えています。
WinAPIのGetOpenFileName()を用いて複数ファイル名を
取得するにはどのようにすればいいですか?

198 名前:194 :01/12/04 18:30
>>196
そりゃ、そうだが。そういう入力があったときの話し。

199 名前:196 :01/12/04 18:53
>>194 そういう入力をユーザがする場合は、
ユーザは argv[1] = c:\windows" 123 を期待しているのだから
それで問題なかろう。そういう仕様なんだから。

194のプログラムだけが仕様を改善(?)しても、
他のプログラムと一貫性がなければ、ユーザにとっては改悪やん。

200 名前:超初心者(*゚ з゚; ポ :01/12/04 19:11
参考書に書いてあったのですが、この条件式の意味が判りません!

(c=(j>0)?buf[--j]:getc(fp))!=EOF)


ちなみに
int j;
char buf[100];
FILE *fp です。
特に「?」とか「:」とか判りません。
よろしくお願いします!

201 名前:194 :01/12/04 19:12
>199
はぁ、そういう見方もできるわけだね。世の中広いわ。

でも、普通は
>copy "c:\windows\" d:
みたいに使うでしょう。実際、これで動くわけだから。

202 名前:デフォルトの名無しさん :01/12/04 19:13
>>200

C(C++?)にもそういう構文があるんだ・・・
Perlならおなじみだけど。

203 名前:デフォルトの名無しさん :01/12/04 19:18
>>200
マジレス。

その本は捨てた方がいい。

204 名前:デフォルトの名無しさん :01/12/04 19:36
>>201
>でも、普通は
>>copy "c:\windows\" d:
>みたいに使うでしょう。実際、これで動くわけだから。

copyはそれでは動かんよ。やってみろ。

205 名前:デフォルトの名無しさん :01/12/04 19:45
>>201
はcopy使ったこと無いヴァカ。

206 名前:デフォルトの名無しさん :01/12/04 19:46
>>200

if(j>0){
  j = j-1;
  c = buf[j];
}else{
  c = getc(fp);
}
if (c!=EOF) ...

207 名前:超初心者(*゚ з゚; ポ :01/12/04 20:29
>>206
 ありがとうございます!そんな意味だったんすか!
 むずかしい。。。でも判りました!

>>203
 Cのリファレンス的本はこれしかモッテないんす。。。
 捨てられません(^^;

208 名前:デフォルトの名無しさん :01/12/04 20:46
>193
すいませんBMP2種類あるってBMPの種類ですか?
読み込み方ですか?種類ならよくわからないんですが、読み込み方はリソースにもとからBMPを割り当てたやり方です。
どうか、よろしくおねがいします。

>以前も質問したのですがVCで
>BMP画像を配列に格納する方法がわからないのですが,
>モノクロ画像をunsigned char image[x][y]に格納するにはどのようにコードを書けばいいのでしょうか?
>ボタンをつくり関数を追加してそこにメッセージハンドラを記述する形でコードを書く形です.
>又,その逆に配列にしたものをBMPに戻すにはどのようにすればよろしいのでしょうか?

209 名前:デフォルトの名無しさん :01/12/04 20:52
CraeteDIBBitmap

210 名前:デフォルトの名無しさん :01/12/04 22:23
>>208

 BITMAPFILEHEADERやDIBをキーワードにサーチエンジンで調べてみよう。
BMP内にモノクロビットマップがカラーテーブルで格納されているなら、
その値を持ってくるだけ。フルカラーRGBならBMPに記録されているピクセ
ル列のRGBの一つをそのまま読み込めばよい(ただし4バイト境界に注意)。
BMP内に記録されているピクセル列の位置は、BITMAPFILEHEADERを参照。

211 名前:211 :01/12/04 22:35
マウスのドラッグで長方形を描くにはどうすればいいのでしょうか?
Windowsのデスクトップとかで出来るやつです。
onMouseDownとMoveの間に四角をかくと途中の線も書いてしまって汚い。
 

212 名前:デフォルトの名無しさん :01/12/04 22:59
>>211
途中の線消せよ。

213 名前:デフォルトの名無しさん :01/12/04 23:03
>>209 間違い過ぎです。

214 名前:211 :01/12/04 23:04
>>212
どうやって消す?厨房ですまんがけし方だけ
具体的に教えて〜〜。

215 名前:デフォルトの名無しさん :01/12/04 23:51
質問です。VC++6.0です。
人からもらったプロジェクトなんですが、これを開いてコンパイルするとincludeファイルが見つけられないエラーが続出です。
これをくれた人は自分の環境ではちゃんとコンパイルできていると思うのですが、何故かうまくいきません。
具体的には、ユーザー定義のヘッダで、ファイル自体はあるし、プロジェクトにも追加されてます。
仕方がないので#include "aaa.h"を#include "aaa\aaa.h"の様に打ち変えてコンパイルしてます。
これでコンパイルは出来るのですが、いまいちスマートではないですよね?
こういうケースはみなさんどのように対処してますか?

216 名前:デフォルトの名無しさん :01/12/04 23:55
プロジェクト>設定>C/C++>プリプロセッサ。

217 名前:Kusakabe Yokaichi :01/12/04 23:57
>>215
まだプログラマとは言えないレベルですね。

218 名前:デフォルトの名無しさん :01/12/05 00:46
>>214 ヒントはXORです。
同じ図形を2回XORで描画すると元に戻ることを利用すると楽ちん。

219 名前:デフォルトの名無しさん :01/12/05 10:17
Internet Transfer Controlの使い方教えてください

220 名前:デフォルトの名無しさん :01/12/05 10:29
どこをどう勘違いすればここで使い方が教えてもらえると思ったのか教えてください。

221 名前:デフォルトの名無しさん :01/12/05 11:10
コマンドプロンプトでビルドできるようにするための
メイクファイルって自動で吐き出せないんでしょうか?

222 名前:デフォルトの名無しさん :01/12/05 11:17
>>221
[プロジェクト]->[メイクファイルのエクスポート]

223 名前:211 :01/12/05 13:32
できたー! 完徹してしまった。
>>218ありがとう!
onMouseMoveに以下を書いた。
if(m_bLButtonDown )//ドラッグされたら・・・
{
//描画準備
CDC *pDC = GetDC();
//Rectを定義し、FocusRectを描く
CRect Rect;
Rect.SetRect(m_dx,m_dy,point.x,point.y);
Rect.NormalizeRect();
pDC->DrawFocusRect(Rect);
//前に描いたやつを消す
Rect.SetRect(m_dx,m_dy,m_x,m_y);
Rect.NormalizeRect();
pDC->DrawFocusRect(Rect);
//消すポイントをとっておく
m_x = point.x;
m_y = point.y;
ReleaseDC(pDC);
}

224 名前:デフォルトの名無しさん :01/12/05 14:15
>>204,205
NT4では動くぞ。

225 名前:デフォルトの名無しさん :01/12/05 18:32
EnumThreadWindowsで、外部アプリケーション(ダイアログベース)の
メインウィンドウ hMainWnd を得たい。が、トップレベルウィンドウとして
複数列挙される。そこから hMainWndを区別する方法として、どんなものが考えられます?

キャプションで判断すると今一つ確実でないし、クラス名(#32770)で判断すると、
オーナーNULLのメッセージボックスと区別がつかない。GetParentでも区別できない。

なんか、FAQっぽいけど、ご教授願います。

226 名前:デフォルトの名無しさん :01/12/05 19:39
owner NULLがダサすぎるのでそのアプリは捨てる。

227 名前:デフォルトの名無しさん :01/12/05 21:40
iniファイルをexeと同じディレクトリに保存したいのだが
VC作成中はReleaseの下にexeがあり、ユーザーの環境では直接置かれる。
どうやるのが正しい一貫性のあるやり方でせう?
今はGetCurrentDirectory()を使っているが
ルートディレクトリにインストールされたりするとC:\
と最初に\がついてうまく動かない場合あり。

228 名前:デフォルトの名無しさん :01/12/05 22:03
>>227
CString strAppDir; // アプリケーションが起動されたディレクトリ
TCHAR szFull[_MAX_PATH];
TCHAR szDrive[_MAX_DRIVE];
TCHAR szDir[_MAX_DIR];
::GetModuleFileName(NULL, szFull, sizeof(szFull) / sizeof(TCHAR));
_splitpath(szFull, szDrive, szDir, NULL, NULL);
strAppDir.Format(_T("%s%s"), szDrive, szDir);

CString strINIfile;
strINIfile = strAppDir + _T("hogehoge.ini");

229 名前:デフォルトの名無しさん :01/12/05 22:19
Release/Debugそれぞれに
Release/Debug用のiniファイルをおいとけ。

\は自分でなんとか処理すれ。

230 名前:デフォルトの名無しさん :01/12/05 22:20
>>228
Thanks
ドライブとディレクトリを分割するのか・・・。結構面倒ですね。
しかしこれだとiniファイルをReleaseの下に作ってしまわないでせうか?
開発時はReleaseの下には作りたくない・・・のだがそれはワガママ?

231 名前:デフォルトの名無しさん :01/12/05 22:21
_splitpathってUNCも正しく処理できたっけ?

232 名前:デフォルトの名無しさん :01/12/05 22:23
>>229
それぞれ置くのは混乱するのでパス。
\は漢字コードの2バイト目とかもあり、スマートな処理が面倒そうなのです。

233 名前:デフォルトの名無しさん :01/12/05 22:33
なんでReleaseの下に作りたくないの?

234 名前:デフォルトの名無しさん :01/12/05 22:37
開発時にはReleaseを起動しない。これで良し。

235 名前:デフォルトの名無しさん :01/12/05 22:52
>>232
_mbsleadとか_tcsleadの使い方を覚えなさい。

236 名前:デフォルトの名無しさん :01/12/05 22:58
>>235
それって検索しても見つからないぞ。自作の関数か?

237 名前:デフォルトの名無しさん :01/12/05 23:02
ごめん is 付け忘れた。

MSDNで探してくんろ

238 名前:デフォルトの名無しさん :01/12/05 23:49
でかいビットマップファイルをメモリに読みこみたいんですが、
CreateFileで開いてからサイズ調べてGlobalAllocしてそこに全部一気にReadFileするのと、
ファイルマッピング使ってマップするのと
どっちが(効率とか速さとか考えると)良いのでしょうか?

239 名前:デフォルトの名無しさん :01/12/05 23:52
ふぁいるまっぴんぐ

240 名前:デフォルトの名無しさん :01/12/06 00:21
ファイルの大きさやその後の処理によりけりだと思います。
ただ読んで表示するだけなら、ファイルマッピングに一票

241 名前:デフォルトの名無しさん :01/12/06 00:39
>>227 に、なぜVCのプロジェクト設定で
デバッグ時のカレントディレクトリを弄らないのか
小一時間問いつめるYO

242 名前:デフォルトの名無しさん :01/12/06 01:07
>>241
デバッグ用のexeを置くディレクトリをソースと同じところにしろ、と言ってる?

243 名前:デフォルトの名無しさん :01/12/06 01:11
デバッグタブの中をよーくみてみろ。

244 名前:デフォルトの名無しさん :01/12/06 01:25
作業用のディレクトリを\Debugにしろ、と?
カレントディレクトリの問題じゃないのだが。

245 名前:デフォルトの名無しさん :01/12/06 01:34
なんかこう、灯台元ヒグラシってやつ?

246 名前:デフォルトの名無しさん :01/12/06 12:53
なんでReleaseの下に作りたくないのか回答がないな。
いちいちDebugとかReleaseとか面倒だから同じディレクトリにして、
ファイル名変えたら?Debug版はhogehoge-d.exeみたいにd付けるとか。

247 名前:デフォルトの名無しさん :01/12/06 12:58
もしかしたらカレントディレクトリって、常にexeのある場所と一緒だと思ってるかわいそうな人なのかも。

いたわってあげよう!

248 名前:デフォルトの名無しさん :01/12/06 14:10
>>247
>iniファイルをexeと同じディレクトリに保存したい
と言って
>GetCurrentDirectory()を使っている
そうなので、案外そうかも。

249 名前:デフォルトの名無しさん :01/12/06 16:14
>>246
iniファイルを2つ作りたくないから。
ディレクトリを同じにすれば確かに解決するがあまりスマートな方法ではないと思うが。
>>247,248
質問読んでそれぐらいの認識もできない?
レベルの低い奴からはその程度の回答しか得られんな。

250 名前:デフォルトの名無しさん :01/12/06 16:38
BeepMessage使ってビープ音を出してます
繰り返し再生したいのですがうまくいきません
どうしたらいいのでしょうか?
Wave再生APIとかを使わないとうまくいかないのでしょうか?
OSはWin98です


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