VisualC++相談室

このエントリーをはてなブックマークに追加
1いさましいチビの女
C++Builder相談室があるので、バランス的にこういうのがあっても良いですよね?
2名無しさん@お腹いっぱい。 :2000/10/04(水) 11:42
CWinAppとCDocumentとCWiewとCMainFrameの関係とか
ドキュメント・ビューアーキテクチャーとか
ドキュメント・テンプレートとか、俺にも分かるぐらいやさしく
おしえれ。
3名無しさん@お腹いっぱい。 :2000/10/04(水) 11:50
Document-Viewを素直に使ってる奴っているのか?
4>2 :2000/10/04(水) 11:58
それ完全に答えるのは、スレでやるのに荷が重過ぎるでしょうに・・
判らない所はどこ?
5名無しさん@お腹いっぱい。 :2000/10/04(水) 16:33
ダイアログのキャンセルボタンを消しちゃったんだけど
あとから、OnCansel() を オーバライドしたいんだけど
クラスウィザードのハンドラの追加とか、仮想関数の追加
ができないんだけど、、、どーすりゃいいんでしょうか?
6名無しさん@お腹いっぱい。 :2000/10/04(水) 18:40
>>5
ボタンを適当に一つ作って、リソースIDをIDCANCELに
書き換えれば出来ないか?
7名無しさん@お腹いっぱい。 :2000/10/04(水) 21:21
いまC++を勉強中でVCかVisualStudioを買おうか迷ってるんだけど
本体以外にドキュメントとかCDROMとかどーゆーのが付いてんの?
windowsAPIのリファレンスとか付いてる? あとMSDNってなにもの?

学生です。買うとしたらVCとwin2000か、VSだけかになる。
8>3 :2000/10/04(水) 21:37
たしかに。
見たことないな。
かわいそうなCDocument..
9コピペ :2000/10/04(水) 21:53
VisualSourceSafe"以外"のバージョン管理ツールを
利用できるようにIDEを設定することはできないのでしょうか?
いろいろ試してみたりしているのですが、どうにもわかりません。


10proxy.tokyo.mbn.or.jp :2000/10/04(水) 22:47
hello
11cse10-41.chiba.mbn.or.jp :2000/10/04(水) 22:48
hello world
12proxy.tokyo.mbn.or.jp :2000/10/04(水) 22:49
by
13名無しさん@お腹いっぱい。 :2000/10/04(水) 23:13
UNSUBSCRIBE
14名無しさん@お腹いっぱい。 :2000/10/05(木) 03:57
完璧にVC使えると、自信を持っていえるのは、
どのくらいのことが出来る事をいうのですか?
面接で恥かかないように、教えてください。
15名無しさん@お腹いっぱい。 :2000/10/05(木) 04:45
「VCで幾つかツール作ったことがある」といえばいいんじゃない。
「無理して完璧に使う」こたあない。

1614 :2000/10/05(木) 04:57
>15
なるほど。
そのように言うことにします。
ありがとうございました。
17名無しさん@お腹いっぱい。 :2000/10/05(木) 16:51
「完璧にVC使えます」とか言う奴は絶対に取りたくないな
18名無しさん@お腹いっぱい。 :2000/10/05(木) 20:31
MSの固有仕様を全部把握しろってこと?
そんなん嫌だ
19名無しさん@お腹いっぱい。 :2000/10/06(金) 00:26
ダイアログからボタン等のパーツをリソースエディタで
削除したとき"resource.h"から該当パーツの#defineを
自動的に削除できないもんでしょうか?
コンパイルが通ってしまうので困る。
落ちる原因が分からず3時間ほど悩みました。

20名無しさん@お腹いっぱい。 :2000/10/06(金) 00:55
「シンボルブラウザ」で未使用のシンボルを選んで削除できたはず。
ただ、使ってないシンボルを#defineしたままでも無害だと思うよ。
GetDlgItemか何かで落ちるのかな?
2119 :2000/10/06(金) 09:35
>20
さんきう、すっきりしました。

>GetDlgItemか何かで落ちるのかな?
GetDlgItem(ID)->EnableWindow(TRUE)
で落ちます。当然ですが。

22名無しさん@お腹いっぱい。 :2000/10/06(金) 10:47
フローしたツールバーの移動を監視したんだけど
どうすれば、いいのでしょうか?
23>22 :2000/10/06(金) 12:20
タイマー監視。
24名無しさん@お腹いっぱい。 :2000/10/06(金) 12:29
>>22
なんかメッセージ飛んでこなかったっけ?
25名無しさん@お腹いっぱい。 :2000/10/06(金) 15:16
ツールバーの親の親を監視
26>22 :2000/10/06(金) 17:23
CToolBarCtrl で OnMove()
27なにー? :2000/10/07(土) 23:36
CDocumentって普通使わないんですか?
今Doc-View構造のプログラミングを勉強してる
トコなんですが
28名無しさん@お腹いっぱい。 :2000/10/08(日) 03:13
1.リストビューの項目をD&Dしたりして、
  項目の順序を変えるソフトを見たりするのですが、
  どうやってるんでしょうか?

2.最近MFCの勉強を始めたんですけど、(独学)
  ツールの使い方自体もよくわかりません。
  こんな便利な使い方があるよ、とか デバックは
  ああすれば、簡単だってのをお教えください。
29名無しさん@お腹いっぱい。 :2000/10/08(日) 04:07
VC++6でプロファイルとインクリメンタルリンカのチェックボックスが
重なってるのってVCのバグですよね。?
30名無しさん@お腹いっぱい。 :2000/10/08(日) 04:15
>>27
使う人は使う。使わない人は使わない。
31名無しさん@お腹いっぱい。 :2000/10/08(日) 05:38
IPアドレスコントロールの使い方が良くわかりません。
GetAddressで得た値を、
ソケットのConnect等で使うには、どうすればいいのですか?
レベルの低い質問ですみません。お願いします。
32ここでいいのかなぁ? :2000/10/08(日) 14:48
C++でWinアプリ作ってますが、
SysTreeView(エクスプローラの左側の奴ね)ライクで、
独自のコントロールが欲しいんですけど、
こうゆう使い勝手の良いコントロールを
一からコーディングするのって、
スゴイ大変な作業になると思われます。

カスタムツリーコントロールの雛型になるソースなど、
できればフリーで転がってないでしょうか?
3327>30 :2000/10/08(日) 14:55
じゃあやっぱりムリして使おうとすることなかったんですね鬱々
34名無しさん@お腹いっぱい。 :2000/10/08(日) 16:30
>>33
しかし「難しくて使えない」ってのは情けない。
「使えるけど、めんどうだから使わない」と言えるようにしておこう。
35名無しさん@お腹いっぱい。 :2000/10/08(日) 21:11
えー、Visual C++5.0にSP3のパッチ当ててます。
http://www.ceres.dti.ne.jp/~goto-ta/windows/tiny.html
このEXEファイル省サイズ化の技を試してみたんですけど、

Test* test = new Test();
delete new;

というコードを入れてみると、

>LIBC.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です

って怒られてしまいます。new演算子定義し直したり、
関係ありそなヘッダを追いかけまくったりしてみたけど分かんないッス。
WinMainCRTStartupを定義せずにデバッガでステップ実行すると、
WinMainを抜けたときに「CRT0.Cのパスを入力してください」と出るのが
何か怪しい気がするんですが……(上の2行を消すと出なくなる)。

この辺、一体何が起こっているのか、どなたか教えて下さいませ。
36名無しさん@お腹いっぱい。 :2000/10/08(日) 21:14
えー、Visual C++5.0にSP3のパッチ当ててます。
http://www.ceres.dti.ne.jp/~goto-ta/windows/tiny.html
このEXEファイル省サイズ化の技を試してみたんですけど、

Test* test = new Test();
delete test;

というコードを入れてみると、

>LIBC.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です

って怒られてしまいます。new演算子定義し直したり、
関係ありそなヘッダを追いかけまくったりしてみたけど分かんないッス。
WinMainCRTStartupを定義せずにデバッガでステップ実行すると、
WinMainを抜けたときに「CRT0.Cのパスを入力してください」と出るのが
何か怪しい気がするんですが……(上の2行を消すと出なくなる)。

この辺、一体何が起こっているのか、どなたか教えて下さいませ。
3735 :2000/10/08(日) 21:41
あう、2度書きになってる〜。ごめんちゃい。
エラーメッセージなんて信用するもんじゃないですな。
38名無しさん@お腹いっぱい。 :2000/10/08(日) 22:54
>>35
その技、使わなくても良いんじゃない?
39名無しさん@お腹いっぱい。 :2000/10/09(月) 00:50
あのEXEファイル省サイズ化の技では、newとかは使えないよ。
tiny.objの制限に書いてなかった?
40名無しさん@お腹いっぱい。 :2000/10/09(月) 02:44
VC++で指定したフォルダ以下のファイルを処理をしようと思っているのですが、

void Searc(LPCTSTR Name, LPCTSTR Path)
{
CFileFind Seeker;
SetCurrentDirectory( Path );

Seeker.FindFile();
while( Seeker.FindNextFile() )
{
if( Seeker.IsDirectory() )
Search( Name, (LPCTSTR)Seeker.GetFilePath() );
}
Seeker.Close();

Seeker.FindFile( Name );
while( Seeker.FindNextFile() )
{
//処理
}
Seeker.Close();

}

とすると実行時にエラーが出ます。
”ハンドルされていない例外はtest.exe(MSVCRTD.DLL)にあります”
だそうで、CHKSTK.ASM内部で止まりました。解決法求む。
41名無しさん@お腹いっぱい。 :2000/10/09(月) 03:09
SHFileOperationじゃだめ?
42名無しさん@お腹いっぱい。 :2000/10/09(月) 05:04
>40
2回目以降のPathの中身を見てみ。
4335 :2000/10/09(月) 09:25
>>39
なぜnewが使えなくなるのか分かります?
省サイズ化の技使わないにしても知りたいッス。
44名無しさん@お腹いっぱい。 :2000/10/09(月) 10:14
VCやりたいんですけど
最低限何の知識があれば
プログラム作れますか?
45名無しさん@お腹いっぱい。 :2000/10/09(月) 10:15
VCやりたいんですけど
最低限何の知識があれば
プログラム作れますか??
46名無しさん@お腹いっぱい。 :2000/10/09(月) 10:25
何を作るかによって全然違います。
ほんとになんでもよいというのなら
サンプル通りに打ち込んで、あとはコンパイルの
しかただけ知っていれば大丈夫です。
これならプログラムの知識はいりません。
47名無しさん@お腹いっぱい。 :2000/10/09(月) 12:44
>>44
初心者だからしょうがないかもしれないけど、
こういうとこで質問する時は、もうすこし話しをつめて
具体的な形にしてくらはい。
4839>35 :2000/10/09(月) 14:22
あの技は、win32apiだけで、msvcrt.dllに依存しないでやる方法だとおもってたけど。
だから、ヒープの初期化処理を呼んでないでしょ。自前で呼べば出来るかも?
または、別な初期化処理が足りないのかも?
c++で、やりたいなら、こっちかな?やりたい事が出来るかは分からないけど。
http://www2s.biglobe.ne.jp/~dkm/Yebisuya/WinTips/tips6.html
4939 :2000/10/09(月) 17:37
new,deleteはつかえる。スマン
_mainでリンクエラーということは、
main()
がないということでは?コンソールアプリ作ってんの?
5039>35 :2000/10/09(月) 18:07
よく見たら
>LIBC.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
crt0だから、本来のスタートアップがリンクされている。
リンクの順番とか、オプションとかが間違ってるだけじゃないのかな?
サイズを小さくしたいだけなら、すなおにCRTをダイナミックリンクしたほうがいいのでは?
51名無しさん@お腹いっぱい。 :2000/10/09(月) 22:21
ENTRY:_main とかつけたら
できるんじゃないの?
5239>35 :2000/10/10(火) 01:38
前に作った奴見てたら、思い出した。
スタートアップで定義されてるグローバル変数がどっかの関数で参照されてると
リンク時にエラーがでる。_errnoとか
53名無しさん@お腹いっぱい。 :2000/10/10(火) 03:45
#pragma comment(linker, "/entry:main")
void __cdecl main(void)
{
}
これをコンパイルすると実行ファイルのサイズはどうなるでしょう?
54名無しさん@お腹いっぱい。 :2000/10/10(火) 04:06
VC++で自作のヘッダファイルをインクルードしたり、自作の
ライブラリを使う場合はどうしたらいいのでしょうか?

普段はUNIXなのでコマンドライン(あるいはMakefileで)
オプションで指定するか環境変数で指定するのしかしらないです。
VC++の場合どのような環境変数を宣言すればよいのでしょうか?

同じディレクトリに置くと、というの以外で方法を教えてください。
55名無しさん@お腹いっぱい。 :2000/10/10(火) 04:15
そんなのVCのhelp見れば。
makefileが書ける人が聞く内容じゃないない気がするけど。
それとも、マウスプチプチのやり方がわからないとか?
56名無しさん@お腹いっぱい。 :2000/10/10(火) 04:45
俺的幻想をお壊さないでくれ>>54
5754 :2000/10/10(火) 06:26
helpみて勉強します。まず自助努力ですね。

統合開発環境みたいなの使うの初めてなのでなにか特別な
ものでもあるのかと思ってしまいまして…。 すみません。
58名無しさん@お腹いっぱい。 :2000/10/10(火) 18:30
印刷プレビュー時、
pDC->SelectObject(GetStockObject(NULL_BRUSH));
ここで暴走してしまいます。

なんで?
5958 :2000/10/10(火) 20:10
アクティブな構成の設定を
デバッグ→リリースに58の現象は、でなくなりました。

なんで?
60名無しさん@お腹いっぱい。 :2000/10/11(水) 06:40
暴走するのは、間違ってるから。
リリースで出なくなるのは、VCだから。
SelectObject
GetStockObject
をhelpで調べてみては?
61名無しさん@お腹いっぱい。 :2000/10/11(水) 09:16
pDC->SelectObject(GetStockObject(NURANAI_BRUSH));
6258 :2000/10/11(水) 10:34
レスありがとう、ヘルプを読みました。
CDC::SelectObject(CBrush* pBrush)は、
CBrush型のポインタを求めている。
GetStockObject(int fnObject)は、
HGDIOBJ型を返している。
つまり型が違うという事ですね、たぶん。

でもコンパイルも通るし、
画面に描画するときもOKで、
デバッグ構成の印刷プレヴュー時だけ
その現象がでるんですね、どうして?(VCだから?)

で、下の方法で解決しました。
SelectObject(pDC->m_hDC,GetStockObject(NULL_BRUSH));

>>61
塗らないブラシは、コンパイルを通りませんでした。

どうして?
63名無しさん@お腹いっぱい。 :2000/10/11(水) 11:47
>>62
CDC::SelectStockObject()ってのもあるよ
64名無しさん@お腹いっぱい。 :2000/10/11(水) 12:46
SelectObjectをhelpでもう一度調べてみたら。
コンパイルが通るからと安心している、お前がうらやましい。
6558 :2000/10/11(水) 17:29
ヘルプ読んだけど、よく解らんかったよ。

> 選択するオブジェクトのハンドルを指定します。オブジェクトは、
> 次に示す関数を使って作成したものでなければなりません。
> オブジェクト 関数
> CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt,
> CreateHatchBrush, CreatePatternBrush, CreateSolidBrush

て事で、GetStockObject で作成したブラシはダメだって事???

ちがう?

>>63
それで、使わさせて頂きます。
66名無しさん@お腹いっぱい。 :2000/10/12(木) 00:37
VC6のSP4なんですが、Debugでビルドした物
を実行すると、

---------------------------------------------
タイトルバー

Microsoft Visual C++ Debug Library
---------------------------------------------
クライアント領域

Program:ファイル名(フルパス)

DAMAGE:after Normal block (#18) at 0x009A0EC0.

(Prees Retry to debug the application)
---------------------------------------------

というエラーのダイアログが出るんですけど、
これってDebug関係のエラーなんでしょうか
それとも、バグがあることを教えてくれてる
んでしょうか。
とりあえず、Releaseでビルドしてもこのダ
イアログは出ませんでした。

エラーが出ている箇所は

delete this;

というところでした

本当に他力本願な書き込みで申し訳ないです。
67名無しさん@お腹いっぱい。 :2000/10/12(木) 03:07
バグです。58が回答するまでお待ち下さい。
68>64 :2000/10/12(木) 10:48
SelectObjectのhelp読んだけど 何が問題か解らないゾ!
...ウツダシノウ...
69名無しさん@お腹いっぱい。 :2000/10/12(木) 11:25
じゃ、afxwin.hでもながめてろ。
70ぱくぱく名無しさん :2000/10/12(木) 11:26
質問ですけど、バッファについて。ランしてから、初めの5もじをタイプすると、
行が変わって、その後、5つの文字のひとつでも打つと、一行変わるように
したいんですけど、バッファってどうやって使えばいいのかわかりません
教えてくれませんか?
71>69 :2000/10/12(木) 12:09
WINGDI.Hじゃなくて?(w
72名無しさん@お腹いっぱい。 :2000/10/12(木) 17:02
58はMFCベースでプログラム組んでるんじゃないのか?
63の方法で解決してるのにまだ、気にしてるようじゃ駄目だ。
そのうちわかるようになるから、やらないといけないことやれ。
ないなら、66の質問にこたえてみろ。
73名無しさん@お腹いっぱい。 :2000/10/12(木) 17:23
VC++のマルチタスキングに付いて勉強する必要に迫られたのですが、
手持ちの本には申し訳程度のことしか書いてありません。
どなたか、いい勉強サイトをご存知なら教えてもらえませんか?
74ヨコ :2000/10/12(木) 17:26
引数が2こだからAPIの方だろ
75>73 :2000/10/12(木) 17:49
>VC++のマルチタスキングに付いて勉強する必要に迫られたのですが、
VCとマルチタスクに何の関係があるんですか?
マルチタスク=マルチスレッドは成り立たないし、
タスクの管理をVCで犯ると言うことですか?
もし出題者がそのままのお題を出しているのなら無知を藁って終わりです
76>75 :2000/10/12(木) 17:51
たぶんOSを起そうとしている人だな(ww
77名無しさん@お腹いっぱい。 :2000/10/12(木) 18:05
>58
ばかはおれだった。
78>70 :2000/10/12(木) 18:41
>質問ですけど、バッファについて。ランしてから、初めの5もじをタイプすると、
>行が変わって、その後、5つの文字のひとつでも打つと、一行変わるように
>したいんですけど、バッファってどうやって使えばいいのかわかりません
>教えてくれませんか?

云っている事がちと不明瞭だが・・・
WM_CHARで捕まえて、後は好みに合わせて料理してください

・仮文字列に1文字追加する
・仮文字列から、表示用文字列に変換する
(5文字毎に改行を挿入する)

文字列をCStringなんかで取れば ::GetLength とか ::Mid とか
::Format とか利用して簡単にできると思うよ
79名無しさん@LV3 :2000/10/12(木) 21:37
>70
OSが書いてない。
結論から言うと、そのようなプログラムは移植性の高い形で
実現することは不可能。
なぜなら、C言語およびその標準入出力ライブラリは、
1文字単位の入力をサポートしていないから。

getc, getcharのような関数は1文字を「返す」が、使ってみれば
分かる通り、端末が通常の状態であれば、これらの関数は
ユーザーが改行を入力するまではブロックする。
ユーザが任意の1文字を入力した時にそれを読み出したければ、
端末のモードを変更したり、OS依存の謎の関数を呼ぶことになるが、
どこでも使える移植性に富んだ方法はない。
80>79 :2000/10/13(金) 10:06
fread() は?
ってここって、VC++だろ・・・
8170 :2000/10/13(金) 14:26
コンパイルして、最初の5文字(何でも選べる)を、タイプし、5文字まとめて表示します。
それは、バッファをつかって、カウンターをつくって。で、そのご、自分の選んだ5文字のうち
どれかをタイプした場合、改行するようにつくるのです。だれか教えてください。
82優しい人 > 70 :2000/10/13(金) 14:45
それはコンソールアプリか?
それと何処までのものを自分で作ったか見せてみ、
そのレベルによって教えやるよ(今日、リーダーいないし・・・)
8370 :2000/10/13(金) 15:25
言っときますけど、ほんとに初心者ですよ。
#include<conio.h>
#include<stdlib.h>
#defineN5
void main(void)
{
int j,k;
char buff[N],it,bucket;
for(k=0;K<N;K++)
{
it=getch();
buff[N]=it
}
while(j<K)
{
putch(buff[j]);
j=j+1;
}
while(bucket!=27)
{
bucket=getch;
if(bucket==it){
putch(bucket);
   putch(10);}
else
putch(bucket);
}






int
84優しい人 :2000/10/13(金) 16:26
#include  <stdio.h>
#define  N  5
int  main(void)
{
  int    j, k          ;
  char  buff[N+1],  it, bucket  ;
 
  printf("なんか5文字いれろ=>");
  for(k = 0;k < N;k ++){
    it = getch();
    buff[k] = it ;
  }  //  同じ文字も可能となっている
 
  buff[N] = 0x00 ;
  printf("入力した5文字:%s\n",buff) ;  //  入力した5文字の表示
 
  while(bucket != 27){          //  ESC で 抜ける
    bucket = getch() ;
    j = 0 ;                //  j を フラグとして利用
    for(k = 0;k < N;k ++)
      if(buff[k] == bucket)      //  初めの五文字を検索
        j = 1 ;              //  hit!!
    if(j == 1)
      printf("%c\n",bucket) ;        // hitした時は、改行も出す
    else
      printf("%c",bucket) ;
  }
  return 0 ;
}
85優しい人(つづき) :2000/10/13(金) 16:27
ちと乱暴だが、意味がまぁまぁ解ったので添削しといた。

改良のポイント:
 ・初期入力で同じ文字は無効にする
 ・大文字/小文字の判別を無くしたり
 ・制御文字をエコーバックさせないようにする
86優しい人(注意!) :2000/10/13(金) 16:29
そのままコピペすると、倍角空白のセイでコンパイルは通らないヨ
UNIXのエコーバックの制御は、下ネ。
http://www.race.u-tokyo.ac.jp/users/moro/unix-programmer/faq-j_4.html

8879 :2000/10/13(金) 18:57
>80
fread()がどうかしたのか。
もっとも「VC++相談室」なのにあんな寝ぼけたレスを書いた
俺は万死に値しますか。

>83
という訳で以下はお詫びのかわり。
1) getcheでその場エコーバック
2) 改行したいときはCR + LFを端末に送る
3) こういう単純な検索はmemchr使えば一発
ってとこずら。

#include <string.h>
#include <conio.h>

#define N 5
#define ESC 27

int main()
{
  char buff[N];
  int i, c;

  for (i = 0; i < N; ++i)
    buff[i] = getche();
  cputs("\r\n");

  while ((c = getche()) != ESC)
    if (memchr(buff, c, N))
      cputs("\r\n"); 

  return 0;
}
8970 :2000/10/14(土) 07:26
どうもありがとう!!>やさしい人
5文字いれたときに、大文字と小文字は、別扱いにしないといけないんです。もし、abcde
といれたら、Aをおしても、改行しません。
90名無しさん@お腹いっぱい。 :2000/10/14(土) 13:41
iteratorの何が便利なのか、全然分かりません。
だれか教えてください。

for (it = vect.begin(); it != vect.end(); it++) {
int i =distance(vect.begin(), it);
itを色々と処理
}

for (int i = 0; i < vect.size(); i++) {
vect[i]を色々と処理
}

この二つの書き方はどっちが幸せになれるでしょうか?
vectorへの添え字が欲しい時とかにiteratorを使うと
distance()の分だけ二度手間な気がします。
91名無しさん@お腹いっぱい。 :2000/10/14(土) 16:14
>90

> int i =distance(vect.begin(), it);
なぜわざわざこのようなものを使うのか。
*it や it->
を使えば良かろう。

92名無しさん@お腹いっぱい。 :2000/10/15(日) 03:05
>>90
vactorやdequeなら後者でもよかろうが、mapなんかはiterator使うしかないだろ。
それから、インデックスに意味があるなら後者の方法を使うべきだろ。
わざわざdistanceを使ってるのはまるっきり意味不明。
9390 :2000/10/15(日) 06:04
みんな、ありがとう!
今回は後者でいくことにしまする。
9470 :2000/10/16(月) 04:41
>やさしいイ人
コンパイルしたらchar buff[N]がエラーでした。どうしてでしょう?
95名無しさん@お腹いっぱい。 :2000/10/16(月) 06:41
配列のサイズには定数しか指定できないよ。
って、Nが変数ってことだよね?それとも;がないって落ちか?
96名無しさん@お腹いっぱい。 :2000/10/16(月) 08:35
>94
全角スペースが入ってるからだろ。
キミのコンパイラはエラーメッセージを出さないのか?
97優しい人 > 70 :2000/10/16(月) 10:28
char buff[N+1] を char buff[N] と書いたらっていいたいのかな?

・・・buff[N]でもコンパイルは通るし、
実行しても、ちと問題があるぐらいだと思うが・・・
エラーメッセージはどーゆーの?
98名無しさん@お腹いっぱい。 :2000/10/16(月) 15:17
CStringを継承したPathStringという自作のクラスを愛用していた
ところ、このPathStringをincludeしただけで、以下のようなメッセー
ジでコンパイルを拒否されて困ってます。結局、必要な機能を新たに
PathStringなしで実装して済ませてますが、不便でなりません。
しかし、いろいろ試した結果、PathStringのcpp部とh部の定義部や
宣言部の中身を空にしても同じエラーが出るので、これはVCそのものに
問題があると確信しました。コンパイルの設定などもいろいろいじって
はみてるのですが、いまだに、問題の原因がわかりません。
だれか、なにか思い当たることがあれば教えてください。

\vc98\include\new(35) : error C2061:
syntax error : identifier 'THIS_FILE'
\vc98\include\new(35) : error C2091:
function returns function
\vc98\include\new(35) : error C2809:
'operator new' has no formal parameters
\vc98\include\new(36) : error C2061:
syntax error : identifier 'THIS_FILE'
\vc98\include\new(37) : error C2091:
function returns function
\vc98\include\new(37) : error C2556:
'void *(__cdecl *__cdecl operator new(void))(unsigned int,const struct std::nothrow_t &)' : overloaded function differs only by return type from 'void *(__cdecl *__cdecl op
erator new(void))(unsigned int)'
\vc98\include\new(35) : see declaration of 'new'
\vc98\include\new(41) : error C2061:
syntax error : identifier 'THIS_FILE'
\vc98\include\new(42) : error C2091:
function returns function
\vc98\include\new(42) : error C2556:
'void *(__cdecl *__cdecl operator new(void))(unsigned int,void *)' : overloaded function differs only by return type from 'void *(__cdecl *__cdecl operator new(void))(unsig
ned int)'
\vc98\include\new(35) : see declaration of 'new'
\vc98\include\new(42) : error C2809:
'operator new' has no formal parameters
\vc98\include\new(42) :
error C2065: '_P' : undeclared identifier
Error executing cl.exe.
99>98 :2000/10/16(月) 18:04
>>CStringを継承したPathStringという自作のクラスを愛用していたところ、

愛用していたとゆー事は、以前まではキチンと動いていたという事ですか?

>>これはVCそのものに問題があると確信しました。

これはたぶん違うと思います。
ぼくも試しに class pathString : public CString{};
なんてやってみたけど、すんなりコンパイルは通りましたが。。。
100>98 :2000/10/16(月) 18:13
PathString.hで、<afx.h>をインクルードしているか確認してみてください。
101名無しさん@お腹いっぱい。 :2000/10/16(月) 22:35
98です。さっそくのお答えをありがとうございます。
afxもincludeしてますし、それはもともとキチンとうごいてました。
それにしても、なんでnew.h内にエラーが起きるんでしょうね。
でも、ファイルが壊れているわけではないはずです。
102名無しさん@お腹いっぱい。 :2000/10/16(月) 23:49
PathString公開キボソ
103アンポンタン :2000/10/17(火) 02:06
ビジュアルC自体ひつようですか?
エディタで書くよりいいですか?
104名無しさん@お腹いっぱい。 :2000/10/17(火) 04:47
プリコンパイルヘッダ(.pch)が壊れてるとか(たまにある)。
リビルドしても駄目?
10570>やさしい人 :2000/10/17(火) 06:27
error C2018: unknown character '0x81'
cこんな感じのが102個もあります。すべて、char buff と、whileのあとの
{ エラーがでています。
106優しい人 :2000/10/17(火) 11:36
>>96さんの“全角スペースが入ってるから”です

エディタで全角スペースを半角スペースに置き換えてみてください
VCのエディタなら ctrl+H で 置換
全角スペースは、MSIMEならshift+スペースででます

って俺って優しくない??
107優しい人(訂正) :2000/10/17(火) 11:47
> エディタで全角スペースを半角スペースに置き換えてみてください

これ、訂正
全角スペース2個→タブ(\t)にね
正規表現にチェックをいれる
108クエ :2000/10/17(火) 12:47
OnKeyDownでシフトを押しながらの方向キーと押さない方向キーを
分けて処理をしたいのですけどやり方がわかりません
109>108 :2000/10/17(火) 13:48
GetKeyState(VK_SHIFT);
110PathStringうんたら :2000/10/17(火) 14:46
ヘッダのインクルード順を変えたら動いたりしませんか?
以前、STL+DDrawでこけるとか何とかというのを聞いたことが・・・。
111クエ :2000/10/17(火) 15:14
>>109
感謝します
112名無しさん@お腹いっぱい。 :2000/10/17(火) 18:51
>>98
クラスPathStringに、operator系のメンバ関数の宣言を
追加したらどうよ?

おれは以前、VC5で
#include <algorithm>
を使ったとき、使用しないoperatorでも宣言しとかないと
コンパイルエラーになったぞ。
113VCLer :2000/10/17(火) 19:02
CStringは継承できてよいなぁ ヽ(´ー`)ノ
114名無しさん@LV3 :2000/10/17(火) 19:37
C++あまり使わないので、常用する方に質問。

CStringクラスのインタフェイスを見る限りでは
仮想関数が一つもなく、特にデストラクタが仮想でないため、
そもそも継承を全く考慮していない(恐らくは効率重視の)
デザインに見えるのですが、どうでしょうか。
それとも、このようなクラスであっても、地雷を踏む覚悟で継承して使うのが
通常のやり方なのでしょうか。
つーかなんでStringクラス継承するの?
そこまで設計者にさからわんでも、、、
コンポジションして委譲してくんろ。
116すとろー先生 :2000/10/17(火) 23:32
CString は自己書き換えメソッドばっかりで使いにくいよ。
std::string の方が100倍良い。
117名無しさん@お腹いっぱい。 :2000/10/18(水) 03:54
>やさしい人
ほんとにありがとうございます。プログラム動きました!!!感謝します。
118114 :2000/10/18(水) 11:05
>115
それを聞いてやや安心。
private 継承ならば良いように思いますが
コンポジションにすべきですか。

>116
std::basic_string<TCHAR> や std::basic_string<wchar_t>
ではなくて string なのでしょうか。
TCHARを使いたがるような人は CString を使うのかな。

std::basic_string<unsigned char>
はあまりに不便で誰も使わなさそうですね。
119116 :2000/10/18(水) 14:25
char でも wchar_t でも unsigned char でも目的によって使い分けるだけで
別に不便とは思わないな。CString の唯一の利点はデバッガサポートがある事だけ。
120114 :2000/10/18(水) 15:58
std::basic_string<unsigned char>
  ucs(static_cast<unsigned char *>("bar"));
とか書かされるのは嫌じゃ。
という意味で(unsigned char版は)
「使いにくい」
と書いたのです。本当に不便とは思いませんか?

デバッガサポートは本当にそうすね。
それとVC++に限定して言えば、string系クラスの代入・アペンド演算の
効率が鬼のように悪いようなので、CStringユーザーはGetBufferを
多用しているのではと想像。
121名無しさん@お腹いっぱい。 :2000/10/19(木) 12:27
チャイルドフレーム(?)自体にボタンをくっ付ける方法ってありますか?
122名無しさん@お腹いっぱい。 :2000/10/19(木) 15:37
>>114
basic_stringや、STL辺りも全然仮想関数使ってないよ。
STLのコンテナは、継承したいと思うことがわりとあるんだけど名‥‥‥

>>116
確かに、自己書き換えばかりってのは使いづらいね。
しかも、戻り値がvoidなのが多いから、
dist = src.MakeUpper();
みたいなことができない。結構不便だよな‥‥‥

でも、std::stringもformatが欲しいなあ。
あるいは、ストリーム入力をサポートしてくれれば楽なんだけど。
123116 :2000/10/19(木) 18:12
>120
違う型で初期化するんだから回りくどい書き方になって当然です。
string<unsigned char>で普通の文字列処理を行なうのが間違ってます。
>122
>でも、std::stringもformatが欲しいなあ。
string format(const char *format, ...) みたいな関数作ればいいだけだと思う。
124名無しさん@お腹いっぱい。 :2000/10/19(木) 19:04
>>122
>STLのコンテナは、継承したいと思うことがわりとあるんだけど名‥‥‥
1. ラッパークラスを書く
2. 似たようなのを作る
しかないよね多分
125122 :2000/10/19(木) 19:56
>>123
>string format(const char *format, ...) みたいな関数作ればいいだけだと思う。
やっぱそうかね?ふむ、ちょっとやってみるか。

>>124
オーバーライドやデータメンバの追加がなければ継承で問題なかったりもするんだけどね。
ところで、ostreamクラスのラッパーを作ってみたんだけど、引数付きマニピュレータの
ラッピングのしかたがよくわからなくて困ってます。どうしたものかな?
126名無しさん@お腹いっぱい。 :2000/10/19(木) 19:58
>>124
>2. 似たようなのを作る
車輪の再発明はちょっとな。
それをやると、STLを使ってる意味がないし。
127120 :2000/10/19(木) 20:41
>>116
全然「当然」とは思わない。以下、
> 違う型での初期化
の例。
unsigned char s[] = "hello, world";
-----------------------------------------------

ところでVC++6のCLコンパイラは、上を文句も言わずに通すくせに
unsigned char *s = "world";
は頑強につっぱねますね。普段はC使ってるから気付かんかった。
だれかこの理由を説明をしてくれませんか。
128120 :2000/10/19(木) 20:45
今のは
>>123
でした。申し訳ない。
しかも
頑強じゃなくて頑迷。
129120 :2000/10/19(木) 20:45
失礼。上のは
>>123
です。
130名無しさん@お腹いっぱい。 :2000/10/19(木) 20:48
しかし、formatのニーズがこれだけあるということは、やはり
型安全だろうが何だろうがstrstreamは人気が無いのでしょうか。
マニュピレータがウザい、とか。
>string format(const char *format, ...) みたいな関数作ればいいだけだと思う。

stringstream じゃダメですか?(使いにくい?)
132116 :2000/10/19(木) 21:15
>127
char から unsigned char への代入はOK
char* から unsigned char* への代入はNG
ってことだな。
133116 :2000/10/19(木) 21:20
つまり unsigned char s[] = "hello, world"; は以下の簡略形式ということです。
unsigned char s[] = {'h','e','l','l','o',',',' ','w','o','r','l','d','\0'};
134120 :2000/10/19(木) 21:41
>>132
>代入 ×
初期化 ○

ていうかなぜそうなるかが知りたかった訳ですが、
C++の規格書は持っていないので情けないことにヘルプで
理解しました。
要はcharとunsigned charが異なるtypeである以上、それらに対する
pointerがC++的には可換ではないということですが、
自分としてはこれぐらい黙って変換してくれよの気持ちで一杯。
思い返せばC++ではvoid*が何のためにあるのかわかりゃしないという
ぐらい魅力半減なシロモノでしたね。

同じCLコンパイラでも、Cの場合はpointer to another typeへの
型変換をエラーとはしないが、問題ありげなものだけコンパイラが
気を遣って警告してくれるので自分的には嬉しい。
安全性には疑問が残りますが共用体つかえば
いくらでも変換はできます。(ポインタ)
もちろん自己責任で。
136名無しさん@お腹いっぱい。 :2000/10/20(金) 02:59
なんかちがうような。
文字列がconst char []だからじゃないのかな >>127
だからchar *への型変換はさせねえって話。

問題はunsignedの有無じゃなくてconstの有無。
137名無しさん@お腹いっぱい。 :2000/10/20(金) 07:00
C++は
func(char* p) {
 signed char用の処理
}
func(unsigned char* p) {
 unsigned char用の処理
}
って書けるから。
signed char*とunsigned char*の自動型変換を導入すれば
いいけれど、ただでさえ「あいまい」さがまとわりつく処理が
よりいっそう…
138120 :2000/10/20(金) 10:24
日本でプログラミングしている以上、UNICODEを使わないならば
皆さんmbstring系の関数を文字列処理で常用なさっているものと
思いますが、いちいち
mbschr(static_cast<const unsigned char*>(str.c_str(), '\\'));
などと書かされる訳でしょうか。
鬱だ。

>>136
しかし
char *s = "hello";
はOKですよ。厳密にはNGにしなければならないように思えますが
上のようなコードはウンザリするほど多いので通すようににしている
のではと推測。
139120 :2000/10/20(金) 10:28
上のカッコの位置間違ってますね。失礼。
mbschr(static_cast<const unsigned char*>(str.c_str()), '\\');
140120 :2000/10/20(金) 10:55
というか、
substr や
find 系のメンバ関数が役に立たない以上、デフォルトの
std::stringは使え(わ)ないのが普通なのでしょうかね。
::mbschrは本来findで処理すべき処理な訳ですが。

>>135
C++のポインタ間の型変換規則がCより厳しいのは
フールプルーフのためと考えますが、それのもたらすある種の
不便さへの対策として、unionのような危険なものを一々
持ち出さなければならないとしたら、本末転倒もいいところだと
思いませんか。
私はそのような言語設計を好きにはなれません。
無論、やむを得ず職務上C++を使用せざるを得ない人間にとっての、
その場しのぎの解決策としては役に立つと思いますが。
141122 :2000/10/20(金) 11:44
>>120
>mbschr(static_cast<const unsigned char*>(str.c_str()), '\\');
っていうか、static_castは使えませんよ。
mbschr(reinterpret_cast<const unsigned char*>(str.c_str()), '\\');
です。
signedポインタとunsignedポインタの違いはかくも根深いもののようでありますな。

どうでもいいが、意味もなくunsignedポインタや非定数ポインタを要求するライブラリ、逝ってくれ。
いちいちキャストするのが面倒なんだよ!
142120 :2000/10/20(金) 14:48
> mbschr(reinterpret_cast<const unsigned char*>(str.c_str()), '\\');
勉強になります。ていうかreinterpret_cast、こんなところで
使うのですね。
ますますイヤさに拍車がかかる...

unsignedポインタですが、それが「C向け」のライブラリ
であれば、"bad API"とは呼べないと思います。
const関係はANSI C的にもその通りですね。
143名無しさん@お腹いっぱい。 :2000/10/20(金) 14:57
>>138
>皆さんmbstring系の関数を文字列処理で常用なさっているものと
>思いますが、いちいち
>mbschr(static_cast<const unsigned char*>(str.c_str(), '\\'));
>などと書かされる訳でしょうか。

もしMFCを使ってるなら、CStringを使えばいいよ。
マルチバイト文字列に対応してるから。
144122 :2000/10/20(金) 14:58
>>144
> ますますイヤさに拍車がかかる...
確かに。
何というか、ソースから「ここはおかしなことをしています」という
雰囲気がにじみ出てるようでどうにも気分が良くない。
const_castも同様。

‥‥‥嫌いだ、「C向け」のライブラリ(むしろM$のライブラリ)なんて!
145名無しさん@お腹いっぱい。 :2000/10/20(金) 17:17
おかしな事をしてる部分が目立つようにするため、
あるいは、おかしさのレベル付けをするためにわざわざ異様な
形式のキャストを作ったんじゃないかな。
イヤなら旧式のキャスト使えばいいと思うんですけど。
146120 :2000/10/20(金) 17:34
>>143
そのようですね。
もっとも私はC++以上にMFCが大嫌いなのですが....

basic_stringは、ナナメ読みした感じから言って
MBCS用のtraitsを作るぐらいではMBCSに対応できなさそうに見えます。
そのようなことをやってみた方、おられますか?

>>144
私としては単純に、いよいよもってC++が嫌いになるだけの話です。
147122 :2000/10/20(金) 17:54
>>145
いや、static_castはむしろ、旧式のキャストに比べて、「何も問題ありません」
という雰囲気がにじみ出る感じがするから、特に抵抗はないです。
少々、記述が面倒だという欠点はありますが。
むしろ、旧式のキャストは「何かおかしなことをしているかもしれません」って
雰囲気で、そっちの方が抵抗があります。

>>146
いや、C++は好きです。基本的に。
やっぱり、Cとの互換のためにおかしなことになってるところがあるって
ことなのかな?
148名無しさん@お腹いっぱい。 :2000/10/20(金) 22:00
>MBCS用のtraitsを作るぐらいではMBCSに対応できなさそうに
>見えます。
wstringでWCSを使って下さい。
私に言わせれば今やプログラムの内部でMBCSを使うメリットなど
皆無です。1バイト目と2バイト目の泣き別れや、
パターンマッチングの性能の劣化など百害あって一理なし。
通信やディスクへの書き出しの際にMBCSへ変換しましょう。
149145>147 :2000/10/21(土) 09:53
「おかしな」っていうのは安全かどうかという意味もあるけど、
たとえ安全でもキャストは本来排除すべきものであるという
教育的指導の意味合いが強いと思う。あの書式はね。
だから私はstatic_castで「何も問題ありません」とは思わない。
dynamic_castも含めて、なんとか排除してやろうと考えます。
150み鶴 :2000/10/22(日) 03:03
プロパティシートにやっと3ページできました
プロパティページの2ページ目から表示させたいの、ですが
どうすればいいですか。
151名無しさん@お腹いっぱい。 :2000/10/22(日) 18:13
>>148
で、UNICODE にすればすべての問題が解決すると誤解する人が
増えるんだな。UNICODE つかうなら上から下まで全部使わないと
「ー」「−」とかの区別が付かなくなるんで心しておくと良い。
152122 :2000/10/23(月) 12:50
ま、キャストなんかないにこしたことはないというのは激しく同意。
ただ、使用するライブラリの関係上多用せざるを得ない場合があるというのがネックなんだよな。
153俺も考えてみた>150 :2000/10/24(火) 04:44
ま猿。た樫。か罪。
154122 :2000/10/24(火) 13:04
>>123
と言うわけで、適当に作ってみた。
もっと、スマートな方法ってある?

const string& Format(const char* format, ...)
{
   static string ret;
   va_list   argptr;
   va_start(argptr, format);
   char *buffer;
   int   size = 256;
   buffer = new char[size];
   while(_vsnprintf(buffer, size - 1, format, argptr) == -1){
      delete [] buffer;
      size *= 2;
      buffer = new char[size];
   }
   ret = buffer;
   delete [] buffer;
   va_end(argptr);
   return ret;
}
155名無しさん@お腹いっぱい。 :2000/10/24(火) 13:34
スレッドアンセーフにしてまで参照を返す利点はないと思う。
156名無しさん@お腹いっぱい。 :2000/10/24(火) 13:39
varargはね、キャストが増えるという弱点があるから、
避けるのが理想だと思うね。
printf("value = % 3d", 100);
を、
cout << "value = "
<< setw(3) << setfill(' ') << 100 << endl;
157122 :2000/10/24(火) 14:47
>>155
ごもっとも。早速修正してみた。
大した修正じゃないから、ソースは出さないけど。
158初心者ですみません :2000/10/24(火) 15:29
CDC *pDC;
pDC=GetDC();
pDC->なんたらかんたら;
ReleaseDC(pDC);

を、単に

GetDC()->なんたらかんたら;

にするのはアリですか?

それと
CBitmap *tempbitmap= new CBitmap;
の破棄は、deleteとDeleteObjrct()とどちらを使えばいいのでしょうか?
159名無しさん@お腹いっぱい。 :2000/10/24(火) 15:32
>>158
>GetDC()->なんたらかんたら;
>にするのはアリですか?
リリースできなくなるからナシです。

>deleteとDeleteObjrct()とどちらを使えばいいのでしょうか?
delete

160初心者ですみません:2000/10/24(火) 15:44
早速ありがとうございます。
>>GetDC()->なんたらかんたら;
>>にするのはアリですか?
>リリースできなくなるからナシです。
たとえば「現在のDCにビットマップを送るだけ」とかに
GetDC()->BitBlt(0,0,100,100,tempDC,0,0,SRCCOPY);
とかやりたいんですけどダメですかね?
イメージ的には取得してないので破棄する必要もないのかな、と。
161read MSDN.:2000/10/24(火) 18:28
>>150
SetActivePage()
162名無しさん@お腹いっぱい。:2000/10/25(水) 18:47
MFCであたらしいクラスを作ろうと思うのですが、
どういったものに どんな基本クラスをつかえばよいのかわからないです〜。
163名無しさん@お腹いっぱい。:2000/10/25(水) 19:02
>>162
どんなクラスを作りたいのかわからなきゃ、こちらとしても答えようがありません。
そもそも、わざわざMFCを使おうと思った理由は何?
164名無しさん@お腹いっぱい。:2000/10/25(水) 19:05
仕事でそうなったんです〜
165163:2000/10/25(水) 20:34
>>164
いや、そんなことより何を作りたいの?
166名無しさん@お腹いっぱい。:2000/10/25(水) 21:54
>>158

>とかやりたいんですけどダメですかね?
>イメージ的には取得してないので破棄する必要もないのかな、と。

仮に解放する必要のないとしても関数がエラー値を返した時に対応できないのでやっぱりナシです。
167初心者でした:2000/10/26(木) 11:25
>>166
GetDC()->ButBlt();
で何度も繰り返し描画したらリソースがどんどん減っていきました。
やっぱり解放しないといけないみたいです。
ちなみにヘボプログラマなのでエラーの対処はたいして考えていませんでした。
ごめんなさい。
168超初心者:2000/10/26(木) 11:52
はじめまして、こんにちは。
少し分からないところがあるんで、どうかお願いします。

「データの読みこみ方」についてなんですけど
データ(例:suti.dat)
 11 90
 80 100
 30 80
   ・
   ・
   ・
って書かれてあるものをオープンして読みこみたいんですけど
どうすればいいのかヘルプを読んでもよく分からなかったんです。
読みこんだあと配列の値(a[1][0]=11 a[1][1]=90)としたいのですが、
何かアドバイスお願いします。

169名無しさん@お腹いっぱい。:2000/10/26(木) 15:20
>>168
っていうか、具体的にどこがわからないの?
それがわからないと答えようがないんだけど。
170名無しさん@お腹いっぱい。:2000/10/26(木) 23:06
たまにはマジレス

返り値 関数(ファイル名やら、配列のアドレスやら)
{
  ファイルをオープンする
  if (失敗) {
    エラー処理orエラーコードを返す
  }
  while (一行読みこんでファイルの終りじゃなかった) {
    読んだ文字列を数値に直し、配列に格納する
  }
  ファイルを閉じる
  エラーが無かったら成功コードを返す
}
171名無しさん@お願いっぱい。:2000/10/27(金) 12:54
ドキュメントデータを圧縮して保存したいのですが、
JAVAのjava.util.zip.Deflater クラスみたいな
便利な道具は、ありますか?
172名無しさん@お腹いっぱい。:2000/10/27(金) 12:58
>>171
lzh とか zip とかのDLLは使えんの?
173名無しさん@お腹いっぱい。:2000/10/27(金) 13:00
>>169
たぶん、なにもかもさっぱり分からないのだと思う。
174171:2000/10/27(金) 13:07
どちらかといえば、内蔵したいのです。>>172

関連して、DLLを使用する場合のライセンスとかは、
どうなっているんでしょうか?
175名無しさん@お腹いっぱい。:2000/10/27(金) 13:40
>>174
ライセンスは、使いたい DLL のドキュメントを参照してください。
アーカイブ系のDLL は↓のサイトが便利です。

http://csdinc.co.jp/archiver/lib/main.html
176171:2000/10/27(金) 13:59
ありがとうございます>>175
177名無しさん@お腹いっぱい。:2000/10/27(金) 16:24
VC6です。あるウィンドウを、ウィンドウができてからどの他のウィン
ドウをアクティブにしても、常にトップレベルウィンドウになるように
固定するには、どうしたらよいのでしょうか…。
よろしくおねがいします。
178>177:2000/10/27(金) 17:28
WS_EX_TOPMOSTな
179名無しさん@お腹いっぱい。:2000/10/27(金) 19:06
細かい事だけど、トップレベルウィンドウは
違う意味だよ。
180177:2000/10/27(金) 19:51
え゛・・・。トップレベルウィンドウとは画面上で一番上になっている
窓のことだと思ってました。どう違うんですか?
181179:2000/10/27(金) 20:49
ヘルプにかいてある。

画面で一番上になっているのはフォアグラウンドウィンドウ。
トップレベルウィンドウはいわゆる一般的なウィンドウ全部をさす。
そうじゃないのは子ウィンドウ(ボタンとかね)
182179:2000/10/27(金) 20:56
フォアグラウンドウィンドウの説明間違い。ヘルプ読んで。
183名無しさん@お腹いっぱい。:2000/10/27(金) 21:15
>181
それも違う
フォアグラウンドはアクティブなフォーカスのあるウィンドウのこと。
フォアグラウンドも通常は最前面にあるが例外もある。
177のいう他のウインドウをアクティブにして非アクティブに
他のウィンドウよりも前面に位置するウィンドウはトップモストだ。
ステイオントップなんていわれることもある。
>177
CreateWindowExを見よ。
184( ´∀`)さん:2000/10/27(金) 23:06
厨房でスミマセソ
CDCのTextOutとかで文字列を書き込む時に使う
フォントを指定するのはどうやってやればいいでスか?

185名無しさん@お腹いっぱい。:2000/10/27(金) 23:27
CFontをつくって、SelectObject()なъ( ゚ー^)
186( ´∀`)さん>>185:2000/10/27(金) 23:40
・・・了解
鬱だけど逝きよう…
187名無しさん@お腹いっぱい。:2000/10/28(土) 19:08
初心者です。
ある文字列を別の文字列に置換する関数を作りたいのですが難し過ぎて
手が出ません。
CString::ReplaceのようなものをSDKだけを使って作りたいのです。
どなたか教えて下さい。
188名無しさん@お腹いっぱい。:2000/10/28(土) 23:15
なぜ既にあるものを作ろうとするのか? >187
勉強のためというならわかるが‥
189名無しさん@お腹いっぱい。:2000/10/28(土) 23:25
strstr()を駆使してがんばれъ( ゚ー^)
190名無しさん@お腹いっぱい。:2000/10/28(土) 23:25
http://piza.2ch.net/test/read.cgi?bbs=tech&key=972707778
勉強するつもりなら、ここ逝け>初心者
191つーか:2000/10/28(土) 23:35
>SDKだけを使って
ってなんぞや?
192名無しさん@お腹いっぱい。:2000/10/28(土) 23:52
188>>MFC依存から脱皮したいからです。まあ勉強の為です。
190>>Cの標準関数にはありませんのでそのスレにはふさわしくないです。
191>>MFCを使わずにということです。
193名無しさん@お腹いっぱい。:2000/10/29(日) 00:04
バーカ、そのスレを読んで勉強しろって言われてんだよ
194名無しさん@お腹いっぱい。:2000/10/29(日) 00:09
193>> 了解。逝ってきます。
195名無しさん@お腹いっぱい。:2000/10/29(日) 00:32
>187
VCにまつわる問題というのではなさそうなので
他の初心者スレに行く事をお勧めします。
196名無しさん@お腹いっぱい。:2000/10/29(日) 00:35
あ、遅かった。スマソ
197名無しさん@お腹いっぱい。:2000/10/29(日) 01:47
VCの参考書でこれだけは買っとけみたいな
物はありますかね?
198無名選手@投げたらアカん!:2000/10/30(月) 14:47
卒業研究でテキストエディタを作っているんですけど、下のソースが上手く動かない
んです。教えて頂けませんか?

/////////////////////////////////////////////////////////////////////////////
// ファイルを開く
void CMainFrame::OnMenuOpen()
{
CString cstTemp, cstTarget ;
CFileDialog cfdgLoad(TRUE, "txt", NULL, NULL,"テキスト文章|*.txt|HTML(*.html,*.htm)|*.html,*.htm|全てのファイル(*.*)|*.*|") ;
CString filename;

if(cfdgLoad.DoModal() == IDOK){
TRY{
CStdioFile cstdLoad(cfdgLoad.GetPathName(),CFile::modeRead);
while(cstdLoad.ReadString(cstTemp)!=NULL){
}

}
CATCH(CFileException, e)
{
AfxMessageBox(cfdgLoad.GetPathName() + "の読み込みエラーです。") ;
}
END_CATCH
}
}
/////////////////////////////////////////////////////////////////////////////
// ファイルに名前を付けて保存
void CMainFrame::OnMenuSaveAs()
{
CFileDialog cfdgSave(FALSE, "txt", NULL, OFN_OVERWRITEPROMPT,"テキスト文章|*.txt|HTML(*.html,*htm)|*.html,*htm|全てのファイル(*.*)|*.*|") ; CString filename;

if(cfdgSave.DoModal() == IDOK){

TRY{
CStdioFile cstdSave(cfdgSave.GetPathName(),CFile::modeCreate|CFile::modeWrite);
}

CATCH(CFileException, e)
{
switch(e->m_cause) {
case CFileException::diskFull:
AfxMessageBox("ディスクの容量不足です。") ;
break ;
case CFileException::hardIO:
AfxMessageBox("ハードウエアエラーです。") ;
break ;
default:
AfxMessageBox(cfdgSave.GetPathName() + "の書き込みエラーです。") ;
}
}
END_CATCH
}
}
199無名選手@投げたらアカん!:2000/10/30(月) 14:51
198です。
保存は問題がありつつ出来るんです。しかし、読み込みが出来ません。

教授に怒られちゃってブルーです
200名無しさん@お腹いっぱい。:2000/10/30(月) 17:04
VC6です。以前に、ウィンドウの開閉を繰り返しているとどんどん
リソースか何だかが減っていって、最後にはクラッシュするという
話を聞いたことがあるんですが、これは、しっかりとDestroyWindow
などをしても、ウィンドウの開閉を繰り返すのはよくないということ
でしょうか…。
201名無しさん@お腹いっぱい。:2000/11/01(水) 05:30
誰か答えてやれよ。VC屋は
202名無しさん@お腹いっぱい。:2000/11/01(水) 05:50
>>200
普通に作っていれば、ウインドウの開閉だけでリソースは減ったりしない。
203名無しさん@お腹いっぱい。:2000/11/02(木) 04:52
>>198=199
なにを教えて欲しいのかちゃんと書いてくれ。
ソース出されただけじゃ意味不明だよ。
そもそもインデントもされてないソースなんて読む気もしないが。
204名無しさん@お腹いっぱい。:2000/11/02(木) 05:02
>>200
どこかでメモリか、リソースのリークしてるの。
ありがちなのはGDIオブジェクトとかだな。
規模がデカくなると、こういうバグは取り難くなるから、ほっとかずに早めに対処した方が良いよ。
モジュール毎に分けて、単体テストやるなりすれば、何処がおかしいかいずれわかるよ。
205名無しさん@お腹いっぱい。:2000/11/02(木) 05:08
>>200
>最後にはクラッシュするという話を聞いたことがある
そんな事話したバカ逝ってよし!
だな(藁
206名無しさん@お腹いっぱい。:2000/11/02(木) 06:39
>>198
>CFileDialog cfdgLoad(TRUE, "txt", NULL, NULL,"テキスト文章|*.txt|HTML(*.html,*.htm)|*.html,*.htm|全てのファイル(*.*)|*.*|") ;

CFileDialog cfdgLoad(TRUE,"txt",NULL,NULL,"テキスト文章|*.txt|HTML(*.html,*.htm)|*.html;*.htm|全てのファイル(*.*)|*.*||");
フィルタの記述が間違ってるんじゃないの?
っーか、「読み込みが出来ません」だけじゃなぁ・・・

207無名選手@投げたらアカん!:2000/11/02(木) 12:13
198です。

>203さん
インデントって何ですか?。全く分からなくて申し訳ありません。


>206さん
大幅にソースを書き換えましたこれでも、読み込めなかったです。
仕方がないのでstring_tableを「\n\nテキスト\nテキスト(*.txt)\n.txt\n」
にして応急処置をしました。


// ファイルを開く
void CMainFrame::OnMenuOpen()
{
CFileDialog dlg(TRUE, NULL, NULL,OFN_EXPLORER,"テキスト文章|*.txt|HTML(*.html,*.htm)|*.html,*.htm|全てのファイル(*.*)|*.*|") ;

if(dlg.DoModal() == IDOK)
{
//読み込むファイルのパスを取得する
CString strFilename=dlg.GetPathName();
CFile textFile;
//ファイルを開く
textFile.Open(strFilename,CFile::modeRead);
//Carchiveオブジェクトarchibeを生成する
CArchive archive(&textFile,CArchive::load);
//Serialize関数を呼び出す
Serialize(archive);
//Carchiveオブジェクトarchibeを閉じる
archive.Close();
//CFileオブジェクトtextFileをクローズする
textFile.Close();
//クライアント領域を更新する
Invalidate(TRUE);
}
}


// ファイルに名前を付けて保存
void CMainFrame::OnMenuSaveAs()
{

CFileDialog dlg(FALSE, NULL, NULL, OFN_OVERWRITEPROMPT,"テキスト文章|*.txt|HTML(*.html,*htm)|*.html,*htm|") ;

if(dlg.DoModal() == IDOK)
{
//ファイル選択ダイアログで選択されたファイルをstrFilenameに設定する
CString strFilename=dlg.GetPathName();

CFile textFile;
//CFileオブジェクトtextFileをオープンする
textFile.Open(strFilename,CFile::modeCreate | CFile::modeWrite);
//Carchiveオブジェクトarchibeを生成する
CArchive archive(&textFile,CArchive::store);
//Serialize関数を呼び出す
Serialize(archive);
//Carchiveオブジェクトarchibeを閉じる
archive.Close();
//CFileオブジェクトtextFileをクローズする
textFile.Close();
}
}
208無名選手@投げたらアカん!:2000/11/02(木) 12:18
再び198です

>203さん
とにかく上のソースを正常に動作させたいんです。
今の段階では満足いってません(涙)
209無名選手@投げたらアカん!:2000/11/02(木) 12:29
          ___/ 冫   ∧_∧
 ∧_∧  _ __ (_    /   (´∀` )
 ( ´∀`)/ ) )  |   |    //   \
 (  ⊃/ //  ∧_∧    (__(_/`  |
  \__//    ( ´∀`)       _///
       ̄     ∪ ̄∪      (__(__)

   「レ」       「イ」       「ク」
210名無しさん@お腹いっぱい。:2000/11/02(木) 13:06
>>198
もう少し、いやもっと大幅に自分で調べる習慣をつけろ。

>インデントって何ですか?。全く分からなくて申し訳ありません。
Yahoo! で「インデント」で検索するだけでもいくつかヒントは得られるだろ?
アスキー デジタル用語辞典 http://www.ascii.co.jp/ghelp/ とかで
調べてもいいんじゃないの?
それでもわかんないときになって、はじめて人に聞きなさい。

>保存は問題がありつつ出来るんです。しかし、読み込みが出来ません。
「出来ません」ってどうなるのよ? 途中でエラーがおきて異常終了する、
ファイル選択ダイアログが出てほしいのに出てくれない、ファイル名は
指定できて関数も正常終了するけど読み込まれたデータがファイルの内容
と一致しない、etc. 最低限そんくらい説明しろ。

友達を家に読んだときショートメールで「そっちの家までいけません。
どうすればイイですか?」としか聞かれなかったら「あなたはいま
どこにいるの? 家の場所がわからないの? それとも最寄り駅が
わからないの?」とかいろいろ聞き返さなきゃいけなくて、メンドウだろう?
最初から「いま最寄り駅にいるけど南口と北口のどっちで降りるのか?」
みたいに質問されれば答える方もラクだろう?

なにやるにしても、他人の善意の上にあぐらをかくな。
211名無しさん@お腹いっぱい。:2000/11/02(木) 14:06
↓こんなのはアリなのでしょうか?
thisはParent構造体を指してると思いこんで良いのでしょうか…。
一応動作しているのですが…。

typedef struct {
  char a[100];
} Parent;

class Child : public Parent
{
public:
  Child() {
    //↓問題部分↓ 構造体Parentを0クリアしているつもり...
    memset( this, 0, sizeof(Parent) );
  };
};
212211:2000/11/02(木) 14:16
すみません。質問がアホでした。一眠りします。終了。

typedef struct {
char a[10];
} Ojiji;

typedef struct {
char a[10];
} Obaba;

class Aho : public Ojiji, Obaba
{
public:
Aho() {
memset( (Ojiji*)this, 1, sizeof(Ojiji) );
memset( (Obaba*)this, 2, sizeof(Obaba) );
};
};
213無名選手@投げたらアカん!:2000/11/02(木) 14:51
198です

>210さん
不愉快にさせてしまい申し訳ありませんでした。氏にます。。。

ダイアログは出せます。エラーは全く出ないんですけど、保存したファイルを
表示させる事が出来ないんです。
214無名選手@投げたらアカん!:2000/11/02(木) 14:55
たびたび198です
保存したファイルを選択して開こうとしても、何も反応してくれないんです
215名無しさん@お腹いっぱい。:2000/11/02(木) 15:39
>>198
読み込みの途中でハングアップするってことか?
デバッガでどこで止まってるのか調べてみたか?

#デバッガの使い方は、ヘルプで調べること。
216無名選手@投げたらアカん!:2000/11/02(木) 15:55
198です。

>215さん
ハングアップしないです。
読み込む動作まではできますが、肝心な保存した文章が出てこないんです
217名無しさん@お腹いっぱい。:2000/11/02(木) 17:47
>>198
「読み込む動作まではできる」とは?
意図したファイルの内容が、意図したとおりのバッファに書き込まれている
ことを確認したということ?
「文章が出てこない」とは?
バッファに文字列が書き込まれているのに、画面にその文字列が出ないということ?

もしそうなら、ファイル読み込みの問題ではないのでは?
218無名選手@投げたらアカん!:2000/11/02(木) 18:14
198です。

>217さん
画面に文字列は出てきません。その原因は分かりません。スイマセン

基本的に保存は出来るのですが、ウインドウの左上に保存したファイル名
が反映されないです。
219名無しさん@お腹いっぱい。:2000/11/02(木) 19:04
>>198
.........

そこまで手取り足取り教える気になりません。自力でやってください。
2chを頻繁に見る時間はあるようですから、初歩的な教科書を探して買って
勉強する時間や、ヘルプとサンプルを読む時間は作れるでしょう?
220203:2000/11/03(金) 00:45
>>198
だめだこいつ…。
219はよく付き合ってあげたな。
もういいと思うよ。198には無駄な努力だったみたい。
221名無しさん@Cプログラマ、C++は専門外:2000/11/03(金) 02:08
ならば私が引き継ごう。
>>198

while(cstdLoad.ReadString(cstTemp)!=NULL){
}

ってなんだ?
cstTemp にファイルの最後まで読むのは分かるが cstTemp に読みつづけたら読んだ内容がクリアされるだろ?
ReadString って1行ずつ読みこむんだろ?
ループ中で cstTarget かなんかに追加コピーするんじゃないか?

保存する方は全く保存の処理がかかれていないような気がするが俺の見間違いか?
眠いから目がかすんでるんだよ!

それとファイルアクセスの最後で Close しなくても良いのか?
俺が言えるのはこれくらいだ!!
222名無しさん@お腹いっぱい。:2000/11/03(金) 03:00
>>221
いいよもう。
198も、どうせ教授に怒られるだけだろ。
いっそのこと、その教授ぶん殴って学校やめちまえば?
223ぱくぱく名無しさん:2000/11/04(土) 16:43
ポインターの意味が全くわかりません。だれか教えてください。
どういう風に使うか、例とかもだしてください。
224名無しさん@お腹いっぱい。:2000/11/04(土) 17:02
>>223
入門書よめ。
225名無しさん@優しい人:2000/11/04(土) 17:39
>>223
pointer: n.指示する人〔物〕;(時計・計器の)指針;教鞭(べん);〈話〉ヒント,示唆(しさ);ポインター〈猟犬〉;(pl.) (the P‐)《天》指極星〈大熊(くま)座中の二星〉.
これでいいですか?(冗談です
ちなみにポインタを学習する場合、アセンブラも同時に覚えると上達が早いです。
逆にアセンブラが書ける人はポインタの事を理解してると言えます。
226ぱくぱく名無しさん:2000/11/04(土) 18:58
入門書読んでもわからないから、聞いてます。ただ、私がバカなだけ。
227名無しさん@優しい人:2000/11/04(土) 19:13
>>226
読んでもわからないバカに何言っても、無駄。
228名無しさん@お腹いっぱい。:2000/11/04(土) 20:03
読んだだでわかんないなら、いろいろ試してみれ。
229名無しさん@お腹いっぱい。:2000/11/04(土) 21:10
//じゃあ、ポインタの使い方。

int main()
{
char *buf;

buf = malloc(11);

printf("10文字入力してください:");
gets(buf);
printf("あなたの入力した文字は [%s] です(ワラ", buf);
}

230名無しさん@お腹いっぱい。:2000/11/04(土) 21:14
ポインタ 参照 アドレス 別名 と4つの言葉を日本語と英語で100ペン
唱えながから筆ペンでCRTの4隅に書くと、なんか啓示を受けるそうです。
231>229:2000/11/04(土) 22:26
必要不要論はここでは無用として
とりあえず サンプルなんだからfreeは入れとこう。
232231:2000/11/04(土) 22:28
あとは暴走させていろいろ考えさせてみようという事なんだろうから
まあやってみたらと言う事で
233名無しさん@お腹いっぱい。:2000/11/04(土) 23:20
>>229
freeはともかくreturnは入れとけ
234名無しさん@優しい人:2000/11/04(土) 23:25
>229,230,231,232
あんな質問にいちいち付き合おうとするおまえらに乾杯!
235名無しさん@お腹いっぱい。:2000/11/04(土) 23:36
>>229
(char*)malloc キャストも氏とけ!
236名無しさん@優しい人:2000/11/04(土) 23:49
>>235
揚げ足になってしまうが、ANSIだったらキャストは必要ないよ。
キャストが必要だったのは(void *)の無かったANSI以前の時代だ。(K&Rとか)
237名無しさん@お腹いっぱい。:2000/11/04(土) 23:52
malloc(sizeof(char)*11)で逝け
238名無しさん@お腹いっぱい。:2000/11/04(土) 23:56
>>236
VC++6.0の場合、Cで malloc をキャスト無しで使うとワーニングがでて
C++の場合はコンパイルエラーになる。
239名無しさん@優しい人:2000/11/05(日) 00:01
>>237
揚げ足になってしまうが、sizeof(char)はどうやっても1なので冗長です。

>>238
わたしも普段VC6.0ですが?
240名無しさん@冷たい人:2000/11/05(日) 00:18
229を修正してやるぜ!

int main()
{
char *buf;
long buflen = 11;

buf = (char*)malloc(buflen);

printf("10文字入力してちょ♪:");
fgets( buf , buflen , stdin );
if( buf[ strlen(buf) -1 ] == '\n' )
buf[ strlen(buf) -1 ] = '\0';
printf("彼方が入力した文字は [%s]ですよぉ〜(10文字以上は切り捨てよん)\n", buf);
return 0;
}
241名無しさん@お腹いっぱい。:2000/11/05(日) 00:28
>>240
だから free しろよ!
242名無しさん@お腹いっぱい。:2000/11/05(日) 00:34
#include しろよ!
243名無しさん@優しい人:2000/11/05(日) 00:40
>>241=242か?
んなことより本質的な事忘れてるよ…

>>240
テストしたか?
#それにしても気持ち悪い書き方だな。
244名無しさん@お腹いっぱい。:2000/11/05(日) 01:30
>>240
>10文字以上
以上じゃないぞ!
245名無しさん@お腹いっぱい。:2000/11/06(月) 17:37
VC6使ってますけど、いまいち、CRuntimeClassからCreateObjectしてできた
インスタンスの開放の仕方が良くわかりません。これは、deleteでもなくfree
するものでもなさそうなんですが、どうやるんですか?
すいません。おねがいします。
246名無しさん@お腹いっぱい。:2000/11/06(月) 18:41
DestroyObject()
247名無しさん@お腹いっぱい。:2000/11/06(月) 18:54
>>243
何だよ、本質的なことって?それを言えよ。
全く、何で上からわかった気になって悦に入ってるだけなんだ、こいつらは。
248名無しさん@お腹いっぱい。:2000/11/06(月) 19:04
サンプルなんだけど、とりあえずNULLチェックはしておけ。
249>245:2000/11/06(月) 19:17
deleteでいいんじゃない?
CView派生とかCFrameWnd派生の場合はDestroyWindow()で
250243じゃないけど:2000/11/07(火) 00:42
>247
もしかして、9行目はたまにアロケートされた外を書き換える
可能性があるのでは?アロケートしたメモリの、11文字目が
たまたま\0なら問題ないだろうけど…
251名無しさん@お腹いっぱい。:2000/11/07(火) 01:22
fgetsはlen-1バイト入力されたら終りナリ。
252名無しさん@優しい人:2000/11/07(火) 02:35
>>247
気付かないのか?
テストシロ。(藁
253VCのプロファイラが動かない。:2000/11/07(火) 14:10
っていうか、プロジェクト→設定→リンクのタブ→一般カテゴリ→「プロファイルを行う」
のチェックボックスをONにしてOKを押しても、なぜか次に設定ダイアログを開くと、
このチェックボックスがOFFになってる。
なめてんのかMS。
これの対処法知ってる人教えてプリーズ。
254>253:2000/11/07(火) 15:06
FAQだね
255名無しさん@お腹いっぱい。:2000/11/08(水) 00:22
 245です。ありがとうございます。でも、もう一度質問させてください。
 たとえばCRuntimeClassからCFrameWndを作ったとして、DestroyWindow
します。このとき、CRuntimeClassのインスタンスがまだ生きている
ようなのですが、これは、どうやったら完全に消滅させることが
できるのですか?
 よろしくお願いします。
256名無しさん@お腹いっぱい。:2000/11/08(水) 01:29
>255
CView派生とCFrameWnd派生はWM_NCCREATEのとき
PostNcDestroy()で、delete thisするので、
DestroyWindow()で完全に消えます。多分ね
257名無しさん@お腹いっぱい。:2000/11/08(水) 01:30
それからCRuntimeClassはstaticなので、消えません。
258名無しさん@お腹いっぱい。:2000/11/08(水) 16:26
ダイアログにピクチャコントロールを貼って、ビットマップを
貼りつけてます。
プログラムでこのビットマップを別のビットマップに変えたい
んですが、どうしたら、よいのでしょーか!
259>258:2000/11/08(水) 17:20
どうやって貼り付けたかによって答えがかわる。

簡単に言えば、別のビットマップを貼り付ければいい。
260名無しさん@お腹いっぱい。:2000/11/08(水) 18:15
最初のやつはダイアログエディタで貼りつけています。
これをほかのビットマップにしたいです。
ビットマップはリソースにあってサイズは同じです。

よろしくお願いします
261名無しさん@お腹いっぱい。:2000/11/08(水) 18:19
最初のやつはダイアログエディタで貼りつけています。
これをほかのビットマップにしたいです。
ビットマップはリソースにあってサイズは同じです。

よろしくお願いします。
262名無しさん@お腹いっぱい。:2000/11/09(木) 14:19
マルチスレッドでADO(データベースはAccess97です)を使ってると、スレッド数が増えるにつれ
ハングる確立が増えるんですが、同じような経験をなさった方は
おられますか?
263名無しさん:2000/11/09(木) 16:33
Doc::Serialize(CArchive& ar)で、ファイルの取込・保存を行っています
自分のアプリのファイル形式でないファイルをドロップされたとき、
ファイルの中身を判定して自分のファイルでない場合、そのアーカイブを
破棄したいのですけど、やり方が分かりません、ご存知の方教えてください

何が問題かというと、bmpのみを開くアプリにa.gifを落としました。
エラーで、弾きました。docmentを変更しました(絵を書く)。
上書き保存を選択すると、その時a.gifに対して、そのデータを保存して
しまうことが発生しちゃうんです(困った困った)
264名無しさん@お腹いっぱい。:2000/11/09(木) 16:57
ウィンドウ(CFrameWnd派生)を、ウィンドウの枠の右上のボタンで閉じない
ようにして、アプリ本体からのみ閉じられるようにしたいのですが、
ウィンドウを閉じるのはDestroyWindowを使うとして、枠のボタンを
無効にするにはどうしたらいいのでしょうか
よろしくお願いします。
265名無しさん@お腹いっぱい。:2000/11/09(木) 17:12
255ですけども、DestroyWindowについて
"The DestroyWindow function destroys the Windows window
without destroying the object."(MSDNから)とあるんで、
DestroyWindowだけではインスタンスは消えないみたいですね。
これは、完全に消し去るにはfreeでしょうか、deleteでしょうか…。
266名無しさん@お腹いっぱい。:2000/11/09(木) 18:23
>263
WM_DROPFILESで.gifだったら蹴るとか・・
.bmpのGIFファイルが来たら困るけど。

>264
GetSysMenu(FALSE);してからSC_CLOSEをディスエーブルにする。

>265
CFrameWnd派生ならDestroyWindow()呼び出しから帰るまでに
デストラクタが呼ばれるはずですよ。
267263:2000/11/09(木) 18:30
Windows付のペイントもそうなんで、ちょっと安心しました・・
とりあえず、AfxThrowArchiveException(CArchiveException::badIndex);
で、弾くことにしましたけど。。。。。
268名無しさん@お腹いっぱい。:2000/11/10(金) 01:17
すこし趣旨からはずれるかもしれないけどVC++のMFCで作ったプログラム
ってランタイム不要のだとすごくサイズが大きくなってしまいますよね?

これを配布するときってどうしてますか?VC++のランタイムはない人の
ほうがほとんどでしょうし、VBランタイムならたいていはいってるのに。

そのせいでフリーソフトはVBで作られてるのが多いような気もするんですが・・
VCランタイムをVBランタイムみたいに一般化させようという動きはないん
しょうか。
このままだとフリーソフトとか作る人はVC++を避けつづけてしまうような
気がして・・・

269名無しさん@お腹いっぱい。:2000/11/10(金) 01:36
MFCのランタイムはIEに付属です。
MFCのオンラインソフトいっぱいあるよ。
270名無しさんi486:2000/11/10(金) 01:39
>>268
ワラタ
271名無しさん@お腹いっぱい。:2000/11/10(金) 01:44
MFCのランタイムって、Win98以降なら最初から入ってなかった?
272>268:2000/11/10(金) 09:22
すげえ厨房。
弐ch編者なみだな。
273名無しさん@お腹いっぱい。:2000/11/10(金) 12:48
最近のVBはVCのランタイムが必要です。
274名無しさん@お腹いっぱい。:2000/11/10(金) 14:27
本当にスレが趣旨から外れて相談室として機能しなくなってる.
厨房に見せかけた高度なあらしか(ワラ
275KKK:2000/11/10(金) 15:45
>Detected memory leaks!
>Dumping objects ->
>d:\other\cv\cv03\cvview.cpp(339) : {174} normal block at 0x018F4238, 147864 bytes long.
> Data: <MMMMMMMMMMMMMMMM> 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D
>Object dump complete.

F5で実行すると↑が出てきます。
ちゃんとメモリをdeleteしてんのに、なんでこうなるんでしょうか?
だれか教えてください。

スクリーンをJPEGでチャプチャするプログラムを作成しており、
unsigned char *pPixelData = new unsigned char[NbBytes];
にしてメモリを動的確保しています。
実行するとちゃんとJPEGのファイルができるんでとりあえずはいいんですが、
気になっています。

(VC6 / Intel Jpeg Library)
276名無しさん@お腹いっぱい。:2000/11/10(金) 17:38
delete[]しとけ。
277KKK:2000/11/10(金) 22:45
>276
ええ、最後に
>delete [] pPixelData;
ってやってます。これでリークしちゃうんで困っています。
アプリケーション終了時にリークが起こるなんてことがあるのでしょうか?
278名無しさん@お腹いっぱい。:2000/11/11(土) 01:11
>ええ、最後に

最後ってプログラムの最後っていうわけじゃないよね(汗)
279KKK:2000/11/11(土) 08:30
全部書くと長くなっちゃうんで大体の流れを書きます。
よろしくお願いします。

void CCVView::OnJpgSave()
{

 file.Open(szFile, CFile::modeWrite | CFile::modeCreate);

 // Alloc pixel bytes
 int NbBytes = 3 * size.cx * size.cy;
 unsigned char *pPixelData = new unsigned char[NbBytes];
 unsigned char *pPixelData2 = new unsigned char[NbBytes];

 //ピクセルデータを入れ替える
 //pPixelData2 <= pPixelData

 // Compressing in jpeg
 pPixelData2 = (unsigned char*)jpeg.Compress(pPixelData2, size.cx, size.cy, 3, len, quality);
 file.Write(pPixelData2, len);

 // Cleaning memory
 delete [] pPixelData;
 delete [] pPixelData2;
}
280名無しさん@お腹いっぱい。:2000/11/11(土) 08:42
VC++でEUCのソースって読めないですかねぇ?
281名無しさん@お腹いっぱい。:2000/11/11(土) 11:45
ある線分とある線分の交点を求める関数ってありますか?
多角形を描画したとき、内部に隙ができちゃうのを埋めたいので
利用しようと思いまして。
282名無しさん@お腹いっぱい。:2000/11/11(土) 15:59
>>281
英文だが...これでも嫁。
comp.graphics.algorithmのFAQだ。
http://FAQs.jmas.co.jp/FAQs/graphics/algorithms-faq
283281>282:2000/11/11(土) 18:39
ありがとぅーね。
284Visual名無しさん:2000/11/11(土) 21:31
>>279
大体の流れと言っておきながら pPixelData を一度も使ってない
ソースを示されても困るんだが、とりあえず pPixelData2 に代入はまずいだろ。
285名無しさん@お腹いっぱい。:2000/11/12(日) 02:47
とりあえず、つーか、問題の核心の気がする<pPixelData2に途中で代入
286名無しさん@お腹いっぱい。:2000/11/12(日) 03:02
「あぁ、ポインタ(変数)を全く理解せずにnewを使う者がここにも」
ってのが結論なのか?
287名無しさん@お腹いっぱい。:2000/11/12(日) 05:48
そゆこと。
288名無しさん@お腹いっぱい。:2000/11/13(月) 22:40
Win32APIでHeapAllocなどのメモリ割り当て関数がありますが、new char[xxx]
などと比べて、どっちがいいのでしょうか。c++になれてしまっていてnewばかり
つかっているのですが、どんなもんなんでしょう。
289名無しさん@お腹いっぱい。:2000/11/13(月) 23:30
newもHeapAlloc等で実装されてるんじゃない?
よりプリミティブにやりたければ、APIでやると
290名無しさん@お腹いっぱい。:2000/11/14(火) 00:49
ライブラリにもよるけど、ふつーはnewの方が速い。
291名無しさん@お腹いっぱい。:2000/11/14(火) 03:50

    / ̄ ̄ ̄ ̄ ̄ ミ
    /   ,――――-ミ
  /  /  /   \ |
  |  /   ,(・) (・) |
   (6       つ  |
   |      ___  |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   |      /__/ /  <  …教えないよ!!
 /|         /\   \____________
292名無しさん@お腹いっぱい。:2000/11/14(火) 03:53

    / ̄ ̄ ̄ ̄ ̄ ミ
    /   ,――――-ミ
  /  /  /   \ |
  |  /   ,(・) (・) |
   (6       つ  |
   |      ___  |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   |      /__/ /  <  …教えられないよ!!
 /|         /\   \____________

293名無しさん@お腹いっぱい。:2000/11/14(火) 15:32
VirtualAlloc って何に使ってる?
294名無しさん@お腹いっぱい。:2000/11/14(火) 18:00
malloc()の中身とか。
HeapAlloc()だとアドレス空間の解放までコントロールできないし。
NTならHeapCompact()が使えるけど。
295名無しさん@お腹いっぱい。:2000/11/14(火) 21:02
あまりに初歩的な質問で申し訳ないんですが、MFCでのマウス操作の検出がなぜか、
うまくいかないんです。スケルトンに、クラスウィザードからOnLButtonDown関数
を付け加えただけの物でやってみて
Void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{MessageBox("左クリック検出");

CView::OnLButtonDown(nFlags,point);
}

としただけのものすらうまくいきません。コンパイルとビルドは問題
なく終わるのに左クリックしても反応がありません。何か考えられる
原因はあるでしょうか?
296初心者:2000/11/15(水) 00:28
abcde と入力したら cdefg と出力されるプログラムって
どう書くんでしょうか。
297名無しさん@お腹いっぱい。:2000/11/15(水) 00:54
宿題は自分でやりましょう
298>296:2000/11/15(水) 00:59
char *foo(char *s)
{
 if(strcmp(s,"abcde")==0)
  return "cdefg";
 else
  return "イッテヨシ";
}
299名無しさん@お腹いっぱい。:2000/11/15(水) 01:08
リテラルをchar *で返すな。
300298>299:2000/11/15(水) 01:33
まだ文句あっか?
char *foo(char *s)
{
 char *ret = (char*)malloc(256);
 if(strcmp(s,"abcde")==0)
  strcpy(ret, "cdefg");
 else
  strcpy(ret, "イッテヨシ");
 return ret;
}
301名無しさん@お腹いっぱい。:2000/11/15(水) 01:50
>>299
別にいいじゃん。問題ないっしょ。
302名無しさん@お腹いっぱい。:2000/11/15(水) 01:59
MFCをつかってMDIのときなんですが。
下になってるウインドウをクリックしたときの挙動は
どうされていますか?
初回は選択動作であるべき、ってのは俺の思い込みだから
どうでもいいんですが、皆さんどうされているのかと
思って。
303名無しさん@お腹いっぱい。:2000/11/15(水) 02:00
>302
すいません補足。
選択動作=一回目は下のウインドウが上にくるだけ、
という意味。
304こういう問題だったりぃ:2000/11/15(水) 02:30
dst[0] = src[2] ;
dst[1] = src[3] ;
dst[2] = src[4] ;
dst[3] = src[0]+5 ;
dst[4] = src[1]+5 ;
305>300:2000/11/15(水) 02:31
299の書き込みは多分そういう意味じゃなくて、
const付きで関数定義しろと言ってるんじゃないの?
306名無しさん@お腹いっぱい。:2000/11/15(水) 02:53
『static でとってもいいね』なんて言ってみる。
307>306:2000/11/15(水) 03:02
文字列定数をわざわざstaticでとる意味あんの?
308307:2000/11/15(水) 03:16
>306
ごめん、300のmalloc()の事ね。
staticだとまずいケースを考慮してるのかもよ。
戻り値チェックが抜けてるのはご愛敬かな。
309ひまつぶし:2000/11/15(水) 03:47
int 茶昆布(int c)
{
 if(isalpha(c)) {
   c += 2;
   if(!isalpha(c)) c -= 26;
 }
 return c;
}
void 紐昆布(char *dst, const char *src)
{
 while(*src)
   *dst++ = 茶昆布(*src++ & 0xff);
 *dst = 0;
}
310名無しさん@お腹いっぱい。:2000/11/15(水) 05:30
1:18]
おまえらいつまで
■▲▼
1 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/09(木) 12:16
C言語の話してんだよ。同じ話何遍も繰り返して。。。
ボケたオヤジか?
そんなんだったらVBの話のほうがまだまし(ワラ
311:2000/11/15(水) 12:43
つまんねー煽り。
もっと考えたら?
312298,300:2000/11/16(木) 02:16
質問です
ネタ^2にマジレスされちゃった場合どうすればよいでしょうか?
鬱で氏ぬべきでしょうか?
313マジレスされて悲しい時は:2000/11/16(木) 04:46
次はもっとネタだとわかりやすいように書こうと心に誓う。
314優しい名無しさん:2000/11/16(木) 06:55
質問です。
VC++6.0のテキストエディタなんですが、
DirectX7のメンバ関数とかが自動で表示されません。(DirectX5までしか)
設定の仕方教えて下さい。
315名無しさん@お腹いっぱい。:2000/11/16(木) 07:28
>314
プロジェクトにDirectX7のヘッダファイルをあえて
直接加えてみるとうまくいくよ
316>310:2000/11/16(木) 07:32
そうか?
なら言わせてもらうが・・・

1:18]
おまえらいつまで
■▲▼
1 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/09(木) 12:16
C言語の話してんだよ。同じ話何遍も繰り返して。。。
ボケたオヤジか?
そんなんだったらVBの話のほうがまだまし(ワラ
317優しい名無しさん:2000/11/17(金) 05:27
>315さん
すみません。ヘッダファイルを追加してもだめなんですが(泣
318315@帰りたい:2000/11/17(金) 06:23
>317
うーん、自分の場合、ここのだと・・・
DX7関係のヘッダファイル(ddraw.h等)を適当なフォルダにまとめ
(まとめる必要無いけど)、プロジェクト>プロジェクトへ追加>
ファイル、で片っ端からさっきのフォルダの.hを追加
・・・でうまくいくのだけど。

「オプション」のディレクトリ設定、一番上はちゃんと
・・・\DirectX7sdk\includeとかになってますよね?
      ~~~~
319名無しの笛の踊り:2000/11/17(金) 11:41
VC++でDictionary オブジェクトを引数として受け取り、処理する
には、どうすれば良いでしょうか?
aspのVBScriptからDictionary オブジェクトを引数で
渡したいのですが。
320海溝:2000/11/17(金) 17:36
あのーハート型を書いて、赤く塗りたいのですけど、
どーすればいーのでしょーか
321KoReDeYoShi:2000/11/17(金) 18:25
 ■■■   ■■■
■■■■■ ■■■■■
■■■■■■■■■■■
 ■■■■■■■■■
  ■■■■■■■
   ■■■■■
    ■■■
     ■
322名無しさん@お腹いっぱい。:2000/11/17(金) 20:58
すいません。

Afx って何の頭文字なんでしょうか?
それとハンガリアンnotationとかいう慣習で変数の前に型名をつけますが
'z' ってなんですか? lpzStr とか良く見ませんか?
323名無しさん@お腹いっぱい。:2000/11/17(金) 21:13
>>322 zeroのz
324名無しさん@お腹いっぱい。:2000/11/17(金) 23:43
>>320
CDC::Polylineでハートを描いてCDC::FloodFillで塗りつぶす。
なつかしのBASIC風味。
325名無しさん@お腹いっぱい。:2000/11/17(金) 23:56
>>322
Application Frameworks かなぁ
326名無しさん@お腹いっぱい。:2000/11/17(金) 23:58
>>322
Application Frameworks かなぁ
327325:2000/11/18(土) 00:00
げ。ダブりスマソ。
328名無しさん@お腹いっぱい。:2000/11/18(土) 00:03
>>322
Application Framework
Xはおまけ。
329名無しさん@お腹いっぱい。:2000/11/18(土) 03:07
MSXとかXBOXのXだな
あーDirectXのXかも
330名無しさん@お腹いっぱい。:2000/11/18(土) 03:59
日本ではダメな場合にペケをつけるってことを知らんらしい‥
331名無しのエリー:2000/11/18(土) 06:26
18歳以下(厨房含む)お断りの時にXがつくんだろ?
332名無しさん@お腹いっぱい。:2000/11/18(土) 09:49
>>330

え、バッテン印に否定の意味って
日本だけなんですか。
知らなかった…
333名無しさん@お腹いっぱい。:2000/11/18(土) 14:49
VC6.0のMFCでプログラムを組んでいます。
MDI形式のプログラムで、プログラム起動時に2つのビューを出して、
それぞれに違う内容を描画することって出来ますか?
334名無しさん@お腹いっぱい。:2000/11/18(土) 15:35
>333
出来ます。
335名無しさん@お腹いっぱい。:2000/11/18(土) 19:46
>332
あるチェックボックスを選択すると、四角の中に×がつくのって、見たことない?
336名無しさん@お腹いっぱい。 :2000/11/18(土) 20:43
//--------------------------------------------exe.cpp

#include <windows.h>
#include <iostream>
#include <string>

#define TESTCASE 3

int main()
{
  ::HMODULE hModule = ::LoadLibrary( "dll.dll" );

  std::string ( __stdcall *GetString )() = reinterpret_cast<std::string ( __stdcall * )()>( ::GetProcAddress( hModule, "_GetString@4" ));

#if TESTCASE == 1

  std::string *a = new std::string;
  *a = GetString();
  std::cout << a->c_str() << '\n';
  delete a;

#elif TESTCASE == 2

  std::string a( GetString());
  std::cout << a.c_str() << '\n';

#else

  std::cout << GetString().c_str() << '\n';

#endif

  ::FreeLibrary( hModule );

  return 0;
}

//--------------------------------------------dll.cpp

#include <string>

#pragma warning( disable : 4190 )

extern "C" __declspec( dllexport ) std::string __stdcall GetString();

std::string __stdcall GetString()
{
  return std::string( "hoge" );
}

上のソースですが、exe.cppが exeのソース、dll.cppが dllのソースです
debug でビルドしてます

TESTCASE 1,elseの時は、debug assertion とかいうのがでて、
TESTCASE 2の時は、アクセス違反が起こります

その辺はいいのですが、

実際のソースでTESTCASE 1の時と同じようにコーディングしているというのに、
終了コード3で終了してしまいました

何故でしょうか…
337名無しさん@お腹いっぱい。:2000/11/19(日) 00:31
X-BOX -> マイクロソフトX-BOX -> MSX-BOX 〜> MSX
338名無しさん@お腹いっぱい。:2000/11/19(日) 02:11
突然ですがVC++で
rcファイルをエディタで編集するにはどうしたらいいですか?
ダブルクリックしても開かないんですが。
339>338:2000/11/19(日) 02:21
テキストエディタにD&D
340338:2000/11/19(日) 02:35
>339
早速のレスありがとうございます。
しかし、試してみましたが出来ませんでした。
(D&D禁止マーク?が出ます。ソースでもヘッダファイルでも。)
341名無しさん@お腹いっぱい。:2000/11/19(日) 03:36
>338
「開く」でrcファイルを選択し、用途でテキストを選択。
342338:2000/11/19(日) 03:46
>341
おお!出来ました!
おかげでやっとエディタで編集出来ます。
ありがとうございました。
343名無しさん@お腹いっぱい。:2000/11/19(日) 07:47
えーと、VC++初心者です。
現在Cの本を読んでコマンドライン引数のとこの勉強しています。
そこでこんなプログラムがたくさんあるんですがこういうのはどうやって使うんですか?
コマンドライン上でどうのこうのって書いてあるんですが・・
まったくわかんないです。
本当に初心者なのでわかりやすく教えてください。
よろしくお願いします。
例)
#include <stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[])
{
double pounds;

if(argc!=2){
printf("使用法:<ctraning><ounces>\n");
printf("もう一度やり直してください");
}
else{
pounds=atof(argv[1])/16.0;
printf("%f ポンド",pounds);
}
return 0;
}
344名無しさん@お腹いっぱい。:2000/11/19(日) 08:08
>>343
例えばそのコマンドがcmdという名前だったとします。
だったら
cmd 2.3
こんなふうに使います。
345名無しさん@お腹いっぱい。:2000/11/19(日) 08:17
>>343
VCのメニューの「プロジェクト」→「設定」→「デバッグ」→「プログラムの引数」に、
5.4とか適当な数値を設定してみてください。

本来はコマンドラインから使うのですが、そちらは説明が大変なので
「MS-DOSプロンプト」や「DOS窓」で検索して、解説サイトをでも見つけてください。
346343:2000/11/19(日) 08:19
>344
それはどこでcmd 2.3 とかくんですか?
コマンドがcmdだったらってコマンドはどこで設定するんですか?
347SAGE:2000/11/19(日) 09:42
>346
スタートメニューのどっかにある「MS-DOSプロンプト」起動して、
cd 作った実行ファイルのあるフォルダ名 (ここでReturn)
cmd 2.3 (ここでReturn)
と打て。
VC++ のデフォルトなら、abcde.c をコンパイルするとコマンド名は abcde みたいになるはず。

でも >>345 の方が簡単。
348343:2000/11/19(日) 23:45
DOSひらくとC:\WINDOWS>ってでますよね。
開きたいフォルダはC:\ProgramFiles\MicrosoftVisualStudio\MyProjects\ctraining
なんですがどうやってするんですか?
ほんっとに初心者なんでよろしくお願いします。
349名無しさん@お腹いっぱい。:2000/11/19(日) 23:52
cd "C:\Program Files\MicrosoftVisualStudio\MyProjects\ctraining"
と入力。
350名無しさん@お腹いっぱい。:2000/11/19(日) 23:54
追加して言うと。
cd "progra ‥ でフォルダがWindows上で開くわけではなくて
カレントディレクトリがそこに移るだけ。
351名無しさん@お腹いっぱい。:2000/11/20(月) 00:17
VisualC++のHTMLViewクラスを使って
IEベースのブラウザを作ろうかと思っているのですが、
ユニシスさんの所のライセンスを取らないといけないんですか?
352名無しのエリー:2000/11/20(月) 02:23
>>351
シェアなら必要。
フリーならこっそりと・・・
353名無しさん@お腹いっぱい。:2000/11/20(月) 10:04
>351
一気に有名になる可能性があるから、気をつけたほうがいい。
354名無しさん@お腹いっぱい。:2000/11/20(月) 12:12
ふと思ったんですが、VC++上からデバッグ実行してるときに、
shift+F5(デバッグの中止)を選択すると、通常の終了制御
(WM_DESTROY等)を行わずにいきなり終了しますよね。

これでメモリリークがでないって言うことは
VC側でデバッグ中のアプリケーションの
メモリアロケート状況を監視してるって事ですよね。

そういうことならメモリーリークの報告とかも
出来てしまう気がするんですが、
なぜVCにはそのような機能がないのでしょうか?
355名無しさん@お腹いっぱい。:2000/11/20(月) 12:29
プロセスが死ねばOSが全部開放するんでないの?
いや、良くしらんが。
356名無しさん@お腹いっぱい。:2000/11/20(月) 14:34
>354
VC++でできるじゃん。メモリリークの報告。
357名無しさん@お腹いっぱい。:2000/11/20(月) 15:53
GDIとかも含めていってるんじゃない
358354:2000/11/20(月) 20:25

>>356
それってDEBUG_NEWじゃないやつですか?

>>357
そういうのも含めて。
DirectX系のも普通に終わりますよね。
359ふと思ったんだけど:2000/11/20(月) 20:25
VC++5.0で、システム時刻をプログラム中で変更するってどうやるんだろうか?
360>359:2000/11/20(月) 21:08
SetLocalTimeは?
361359:2000/11/20(月) 21:13
>360
ありがとう、なんかすっきりしたよ
362>361:2000/11/20(月) 21:38
安易にシステム時間変更するなよ。
363名無しさん@お腹いっぱい。:2000/11/21(火) 00:57
リソースエディタを作りたいんですけど、
他のEXEやDLLにリソースを書込むにはどうすればいいんでしょうか?
364名無しさん@お腹いっぱい。:2000/11/21(火) 01:53
msdn onlineを丸ごと落とせる巡回ソフトないかな?
365名無しさん@お腹いっぱい。:2000/11/21(火) 04:52
http://search.cpan.org/ みたいに 目的別のクラスライブラリを集めてるサイトはありませんか?
366名無しさん@お腹いっぱい。:2000/11/22(水) 01:21
VCでファイル A.txt を開きます。
その後テキストエディタで同ファイルを編集後
VCにもどると、編集された旨のメッセージボックスが
ちゃんと表示されます。

これと同じことをしたいんですがどうしたらいいのでしょうか?
367名無しさん@お腹いっぱい。:2000/11/22(水) 02:28
自分のアプリにフォーカスが来るたび
(または一定時間ごとに)
開いているファイルのタイムスタンプを確認する
そんな程度で何とかなりそうだが‥
368名無しさん@お腹いっぱい。:2000/11/22(水) 02:29
アプリがアクティブになるたびに編集しているファイルの
更新日時が変化していないか調べたらいい。
369368:2000/11/22(水) 02:34
(^^;
370名無しさん@お腹いっぱい。:2000/11/22(水) 02:36
FindFirstChangeNotification

この辺調べてごらん。
371365:2000/11/22(水) 07:46
ありがとうです。タイムスタンプの比較でやって
見ようと思います。
372名無しさん@お腹いっぱい。:2000/11/24(金) 23:04
これからVC++を覚えようと思ってる初心者ですが、
お勧めの入門書などありましたら教えてもらえませんか?
一応C言語は使えますが、Windowsのプログラムを書いたことはありません。
373名無しさん@お腹いっぱい。:2000/11/25(土) 06:06
C使える上に、これからMFC使う気が無いなら、解説サイトとMSDNが
あれば十分な気がする。んで「C++の」良書を購入するとか。

自分、VC++の入門書ってMFCの解説ばっかだから好きじゃないです
374名無しさん@お腹いっぱい。:2000/11/25(土) 12:00
表を使ったソフトを作りたいのですがFLEXGRID(or FLEXHGRID)で
セルをマージ可能にするとマウスでセルを選択した時に色が変わらなく
なるようです。これはバグなのでしょうか。
375名無しさん@お腹いっぱい。:2000/11/25(土) 13:52
>>352
特許に関しては有償、無償に関係なく侵害になる。
詳しいことは弁理士に相談して。

IEは消尽理論で問題ないかもね。これでも一般論だけど。
http://www.forest.impress.co.jp/article/2000/03/16/lzw_license.html

376名無しさん@お腹いっぱい。:2000/11/25(土) 15:17
CreateWindowを呼び出して、スタテッククラスを作成した時のスタイル
でくぼみのあるコントロールをこしらえたいのですがうまくいきません。
リソースエディターなら可能ですのでできるようなきがするのですが。
くぼみをつけるパラメータは存在しないのでしょうか。
377名無しさん@お腹いっぱい。:2000/11/25(土) 15:49
CreateWindowEx()
378376:2000/11/25(土) 17:19
>>377

おお簡単にできた!!!(ノ ̄▽ ̄)ノ⌒( ̄▽ ̄⌒)(¬ ̄▽ ̄)¬
WS_EX_CLIENTEDGEを使えばいいんですね。
こんなことに気がづかなかったとは・・・
377さんありがとう。
379名無しさん@お腹いっぱい。:2000/11/25(土) 21:35
APIは
Hoge(...) で困ったら
HogeEx(...) が無いか調べてみよう。
けっこうあるぞ‥
380372:2000/11/26(日) 03:04
>373
MFCはダメですか?
381名無しさん@お腹いっぱい。:2000/11/26(日) 03:42
やめとけ‥
382373:2000/11/26(日) 06:18
Windowsプログラム、ってことならMFC使えた方が便利かもしれません。
MSDN、日本語の方のWinAPIの解説が不十分なこともあって、コントロ
ール周りとか結構面倒だし(難しくはないです)。

でもですねぇ、個人的には381さんと同意見です。勉強ならとくに。
どうしても・・・ならMFC抜きで一通りやってからの方が
振り回されずにすむかと。
383名無しさん@お腹いっぱい。:2000/11/26(日) 06:22
またやってる・・・382は
>>380です
384名無しさん@お腹いっぱい。:2000/11/26(日) 11:51
理解を深めたいなら、MFCを使うだけじゃなく、
MFCのソースを読んでみるといいと思いますよ。
SDKのサンプルより役に立つことが多いです。
385>:2000/11/26(日) 14:05
勉強つー意味ならVCLのソースもいいと思う
が、pascalなのでCの勉強にはならん‥
386>384:2000/11/26(日) 19:41
そうか、いいなあ、あまりにもdefineの山で目がチカチカする
387>386:2000/11/26(日) 20:59
プリプロセッサ通してから読め(藁
388名無しさん@お腹いっぱい。:2000/11/26(日) 23:50
プロパティシートを作ったんですが、
OKボタンを押したときに、プロパティページに
IDOKメッセージが飛んできてくれません。何ででしょうか?
389名無しさん@お腹いっぱい。:2000/11/27(月) 02:27
OKボタンはページではなくシートにあるからだ。
各ページにはPSN_APPLYメッセージが来る。
ドキュメント読めよ。
http://msdn.microsoft.com/library/psdk/shellcc/commctls/PropSheet/PropSheet.htm#OK__Cancel__and_Appl
390388:2000/11/27(月) 03:01
>389
おまえ頭いいな!
391ぱくぱく名無しさん:2000/11/27(月) 09:41
誰か私の宿題を手伝ってください。int dealの後Return文を書かなければ
ならないのですが、書き方がわからないのです。(今までVoidしか使った事がなかったので。)
これは英語のプログラミングですが、よろしくおねがいします。一応、
ブラックジャックを学ぶためのプログラミングです。

#include <conio.h>
#include <iostream.h>
#include <stdlib.h>

/*
int deal(void)
//ここに1から11のランダムナンバーがでるようなファンクションを入れる。
*/


void main(void)
{int Knowledge[31],Card1, Card2, Hit, Score, Previous, Games, P;
char Answer;

for(P=0;P<31;P++) Knowledge[P]=1;

cout<<" カードのナンバーを2つ入れよ。真中にスペースを忘れずに。"<<endl;

for(Games=0;Games<16;Games++)
{cout<<"私のカードは何?";cin>>Card1>>Card2;
Card1=rand()%11+1;
Card2=rand()%11+1;
cout<<"私のカードは"<<Card1<<" "<<Card2;
Score=Card1+Card2; Previous=Score;

while ((Score<22) && (Knowledge[Score]>0)) // Ask for hit if not busted,
// or have not yet learned to stand on this score
{cout<<"Hit me";cin>>Hit;
Hit=rand()%11+1;
cout<<" "<<Hit;
Previous = Score;
Score = Score + Hit;
}
cout<<endl;
if (Score<22)
Answer='y';
else
Answer='n';

cout<<"I stand, 私は勝った? (y/n)"; cin>>Answer;

if (Answer == 'y') Knowledge[Previous]++;// Reward the machine
else Knowledge[Previous]--; // Punish the machine
}
cout<<"My knowledge base contains the following numbers "<<endl;
 for (P=0;P<22;P++) cout<<"Cell "<<P<<" contains "<<Knowledge[P]<<endl;
for (P=0;P<22;P++) cout<<Knowledge[P]<<" ";
cout<<endl;
}
392:2000/11/27(月) 09:45
宿題は専用スレでお姉さんにきけ!
393Visual名無しさん:2000/11/27(月) 09:45
int deal(void)
{
int number;
// ここで rand() とかを使って number に1〜11のどれかを入れる。
return number;
}
394名無しさん@お腹いっぱい。:2000/11/28(火) 02:19
デュアルCPUの場合、ある処理を2つを分散させたいのですが、
どうやればよろしいのでしょうか?

知人から2つ起動すれば、OSの方で勝手にやってくれると聞き
テストプログラムを作ってやった所それはできました。

で、今回は、内部で平行して走らせて、A側とB側で、データを
検索させて、片側でもデータを検出したら、検出中の一方の検索
を終了させたりしたりしたいんです。
while(どちらかが見つかるまで){
  A = DataSearch(.A側) ;  // 同時
  B = DataSearch(.B側) ;  // 同時
}
if(まだ片方検索中なら)
  検索やめなさい(検索中の方) ;
てな、感じで。よくわかりません。
どういうキーワードで調べるかのヒントでもいいので、教えてください。
395名無しさん@お腹いっぱい。:2000/11/28(火) 02:52
>>394
スレッドを作ってスレッド1でA、スレッド2でBを検索するようにすれば
OSが勝手に分散させるよ。
データが見つかった場合、もう片方のスレッドにメッセージを送って検索を終了させる。
例えばBOOL型変数でループを作っておいてTRUEの間は検索。
どちらかで見付かったらFALSEに書き換えてループから抜けて終了。
終了時にはスレッドの同期(両方終了するのを待つ)をとったほうが良いかもね。
396394@感謝:2000/11/28(火) 04:06
>>395
早速のレスありがとうございます。

取り敢えず、まだよく解らないけど、調べながらやってみます。
解らないこと:
・スレッドプロセスの作成方法
・スレッドプロセスの終了方法
・スレッドプロセスにメッセージ送信/受信
397名無しさん@お腹いっぱい。:2000/11/28(火) 04:49
>>396
CreateThread をMSDNで調べれば多分分かる。
398名無しさん!uucp:2000/11/28(火) 15:08
>>396
スレッド終了を監視するには、WaitForMultipleObjects()を、
スレッドを強制的に終了させるには、TerminateThread()を
使いましょう :-)
399名無しさん!uucp:2000/11/28(火) 15:11
>>396
A,Bのスレッドを作成して、いずれか一方が完了したときに
他方を終了させるサンプル。

---
/* Aを検索するスレッド */
DWORD AThread(DWORD parm)
{
/* Aを検索するにょ〜 */
}

/* Bを検索するスレッド */
DWORD BThread(DWORD parm)
{
/* Bを検索するにょ〜 */
}

int main(int args, char *argv[])
{
HANDLE hThread[2];
DWORD ReturnValue;

hThread[0]=CreateThread( (途中パラメータ略), (LPTHREAD_START_ROUTINE)AThread, (パラメータ略));
hThread[1]=CreateThread( (途中パラメータ略), (LPTHREAD_START_ROUTINE)BThread, (パラメータ略));

ReturnValue=WaitForMultipleObjects(2, hThread, FALSE, INFINITE);
if (ReturnValue == WAIT_OBJECT_0)
{
/* Aスレッドが終わった */

/* Bスレッドを終わらせる */
TerminateThread(hThread[1]);
}
else if (ReturnValue == WAIT_OBJECT_0+1)
{
/* Bスレッドが終わった */

/* Aスレッドを終わらせる */
TerminateThread(hThread[0]);
}
}
---

ちなみに #include とかエラー処理とかは省略してるので、必要に応じて加えてください :-)
400名無しさん@お腹いっぱい。:2000/11/28(火) 15:45
>>399
TerminateThread() は良くないよ。
スレッドの強制終了だから、スタック解放しない、ハンドル閉じない。
タイミングによってはプロセスごとこけるおそれあり。
イベントなどで終了を通知するべし。
401名無しさん@お腹いっぱい。:2000/11/28(火) 16:30
こんな感じで、如何でしょう。

typedef struct{
 HANDLE hAbort;
 char * SearchPath;
}TSearchParam;

DWORD SearchThreadEntry(LPVOID param)
{
 HANDLE hAbort = ((TSearchParam *)param)->hAbort;

 while(WaitForSingleObject(hAbort,0) == WAIT_TIMEOUT && bDone == FALSE){
  /* 検索処理 */
 }
 return(0);
}

int EnterSearch(HANDLE hUserAbort)
{
 HANDLE hAbort = CreateEvent(NULL,TRUE,FALSE,NULL);
 HANDLE hThread[3];
 TSearchParam sp[2];

 sp[0].hAbort = hAbort;
 sp[1].hAbort = hAbort;
 hThread[0] = CreateThread(...,SearchThreadEntry,&sp0,...);
 hThread[1] = CreateThread(...,SearchThreadEntry,&sp1,...);
 hThread[2] = hUserAbort;
 WaitForMultipleObjects(3,hThread,FALSE,INFINITE);
 SetEvent(hAbort);
 WaitForMultipleObjects(2,hThread,TRUE,INFINITE);
 CloseHandle(hAbort);
 return(0);
}
402394:2000/11/30(木) 04:29
皆さま、いろいろありがとうございます。
処理の方は、思い通り動きましたです。
本当にありがとうございました。
403名無しさん@お腹いっぱい。:2000/11/30(木) 19:17
ボタンを押下しても、イベントが発生してないのか関数に飛んでくれません。

ちゃんと動くやつとの違いを考えてたのですが、
ウィンドウをスプリット(画面分割)させてて左側にEditView。
右側にFormViewを置いてあり、そのFormViewに貼り付けたボタンが
機能しないんです。

どこらあたりを調査すればよいのでしょうか??
404名無しさん@お腹いっぱい:2000/11/30(木) 19:51
ちと書く場所が違うかもしれないけど、純粋?なC++の
仕様書って、何処に行けばあるんですか?
MFCとかいろいろあるけど、どれにも汚染されてない奴が欲しい.

いやーなんでかってstatic_castはC++のキャストだと思ってたんだけど
上司に否定されて、(MFCのキャストじゃないの?とか言いやがった!)
悔しいから調べてるんだけど、わかんないんだよね.
405404:2000/11/30(木) 20:19
ギコ猫に聞きます。
406名無しさん@お腹いっぱい。:2000/12/01(金) 17:47
アプリ内からShellExecuteとかで他のアプリをを起動すると、
自プロセスの占有メモリが徐々に増えていきますが、そういうものなのでしょうか?

ランチャー作ってるんですが、これのせいでメモリ多く消費してるように見えて
なんかイヤなんです。起動直後はそうでもないのに。

ShellExecuteで指定する親ウィンドウをデスクトップとかにしてもダメでした。
回避する方法をご存知でしたら教えてください。
407ハガ>406:2000/12/01(金) 17:53
ランチャって何ですか?
408406:2000/12/01(金) 18:07
アプリをたくさん登録しておいてすばやく起動するためのソフトです。
参考スレ http://yasai.2ch.net/test/read.cgi?bbs=win&key=965622016
409406:2000/12/01(金) 18:08
もしかして、launcherはロンチャと読めゴルァ!というネタ振りなのだろうか…。
410名無しさん@お腹いっぱい。:2000/12/01(金) 18:14
>これのせいでメモリ多く消費してるように見えて
何をみてるですか?
411406:2000/12/01(金) 18:27
Win2000のタスクマネージャのプロセスです。
この方法じゃだめでしょうか。
412名無しさん@お腹いっぱい。:2000/12/01(金) 21:42
おれもランチャ作ってるぞゴルァ (`Д´)
オマエのランチャの起動時の最大メモリ使用量いくつだ!

#たしかにShellExecute()するとでかくなるな
413メガテンフリーク:2000/12/02(土) 03:49
カワンチャー
414名無しさんi486:2000/12/03(日) 12:52
>>412
アプリ50個登録した状態で3,500KBぐらいだゴルァ。
でかい?
415名無しさん@お腹いっぱい。:2000/12/03(日) 14:54
ロケットランチャーの作り方を教えてください
416名無しさん@お腹いっぱい。:2000/12/03(日) 18:44
>414
おんなじくらいダゾ(`Д´)

417名無しさん@お腹いっぱい。:2000/12/04(月) 02:22
MFCを使わずにドラッグドロップを実装しようとしています。
DoDragDrop関数を使えばいいという所までたどり着きました。
IDropTargetインターフェイスのポインタは取得できたのですが、
IDropSourceインターフェイスのポインタの取得方法がわかりません。
どなたか教えていただけないでしょうか。
418名無しさん@お腹いっぱい。:2000/12/04(月) 03:20
www.nakka.com(だっけ?)のサンプルが参考になるかと>417
419初心者:2000/12/04(月) 08:36
プログラムが大きくなってくると
プロシジャー関数がやたらに大きくなって、
そしてどのにWM_PAINTがあるやらと
いつも探すはめになってしまします。

プロの方々はどのように対処されているのでしょうか?
420名無しさん@お腹いっぱい。:2000/12/04(月) 11:01
>>419
検索する。
421名無しさん@お腹いっぱい。:2000/12/04(月) 12:22
>>419
>プロシジャー関数がやたらに大きくなって、
いわゆるWinProcの事?
違う処理するウインドウなら、別のウインドウクラス登録して、
ウインドウプロシージャを分ければいいだろうし、
そうでなければ、ウインドウハンドルに対応する管理テーブル作って、
WM_PAINTから呼び出し先とかを変えれば問題ないと思うけど。
ウインドウの数が多い場合は、管理テーブルへのマッピングに、
ハッシュテーブルをかますのがベターです。
422名無しさん@お腹いっぱい。:2000/12/04(月) 14:23
>>419
WindowProcに全部詰め込むと汚くなるので、
メッセージ処理部分は関数にしよう。
423419:2000/12/04(月) 16:10
みさなんいろいろなご助言ありがとうございます。
自分はいままで別に関数を作って処理してました。
ただこのやり方が一般的かどうか心配だったもので・・・
421さんがおっしゃるやり方も試してみようと思います。
424名無しさん@お腹いっぱい。:2000/12/04(月) 20:01
> SQLExecDirect(stmt, "SELECT ...", SQL_NTS);
C++で上記のように書くと、
> error C2664: 'SQLExecDirect' : 2 番目の引数を 'const char *' から 'unsigned char *' に変換できません。 (新しい機能 ; ヘルプを参照)
> 指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
の様なコンパイルエラーが出るのですが、できる限りソースのこの部分に手を付けずにエラーを消す方法はないですか?
一応、/Jオプションは試してみたんですが、効果がありませんでした。
425名無しさん@お腹いっぱい。:2000/12/05(火) 13:21
"x1.h"
template <typename T>
class x11{
public:
x11();
};
class x12{
private:
class x121{
public:
x121(){}
};
public:
x12();
x11<x121> xx;
};

"x1.cpp"
#include "x1.h"
template <typename T>
x11<T>::x11(){}
x12::x12(){}

"main.cpp"
#include <string>
using namespace std;
#include "x1.h"

int main(){
x11<string> xx;
return 0;
}

このコードコンパイルしたら、リンクでエラーがでる。
x11のデフォルトコンストラクタの実装がないとか言う。
あるやん、なんでぇ?

コンストラクタ・デストラクタ以外ならうまくいく。
コンストラクタをインラインにしてもうまくいく。
x11の実装をmain.cppに書いてやるとうまくいく。
VC++6.0だけど、これってコンパイラのせい?

誰か助けて。
オ ネ ガ イ!
426名無しさん@お腹いっぱい。:2000/12/05(火) 14:20
>>425
templateの使い方を勉強しなおせ
全然意味を理解しないでtemplateを使ってるだろ
427名無しさん@お腹いっぱい。:2000/12/05(火) 15:26
>>426
コードの中で、テンプレート型をいっちょも使ってないってこと?
千行以上あるコードをここでアップするわけにはいかないから
問題の箇所を抜き出して、最低限のコードにしたからこうなったのですが。
templateの意味は分かってるつもりです。
イジワルしないで、教えてください。
428名無しさん@お腹いっぱい。:2000/12/05(火) 15:41
>>427
テンプレートはマクロの一種だということを考えれば
自ずと答えは出てくると思うが
型が違うテンプレートは当然リンクできない
429名無しさん@お腹いっぱい。:2000/12/05(火) 16:28
"x1.h"
template <typename T>
  class x11{
public:
  x11();
};
template <typename T>
x11::x11()
{}
class x12{
  ・・以下略
こう使うのが筋だと思うがどうよ?>427
430429:2000/12/05(火) 16:29
インデント間違えたー
431427:2000/12/05(火) 17:39
>>428
うーん、大きなヒントのような気がしますが、理解できません。
もう一声お願いします。
>>429
実装も、"x1.h"でしちゃえ、って事ですか?
そうすると、"x1.h"を複数モジュールでインクルードすると
実装が重複しちゃいます。
432名無しさん@お腹いっぱい。:2000/12/05(火) 18:59
>そうすると、"x1.h"を複数モジュールでインクルードすると
>実装が重複しちゃいます。

そうか?templateだぞ?
433名無しさん@お腹いっぱい。:2000/12/05(火) 19:10
inlineにするかはともかく、
template <typename T>
x11<T>::x11() {}
にしないとコンパイルできない。
434427:2000/12/05(火) 20:20
>>432
おぉぉぉ、わかりました。うまくいきました。
ありがとうございます。
つまり、テンプレート型の実装は実際に宣言したモジュールで
行われるわけですねー。つまりマクロだと。
このおかげで、>>428 も理解できました。

ぬぉー、なんてこった、こんなのに3日もかけたなんて。
>>426 の言うとおり、全然理解してなかったようです。
ショボン
435>434:2000/12/05(火) 21:03
そう落ち込むな、これで君もtemplateを少し理解出来たじゃないか。
以前より進歩したということだ。未来は、明るいかもしれないぞ。
436名無しさん@お腹いっぱい。:2000/12/06(水) 10:40
SetPixel()を使って点をプロットしたいのですがほとんど見えません。
円を書いて点を描くと問題ないのですがもう少しスマートにコーディネートしたいです。
点の大きさを変えるようなAPIは無いのでしょうか?
437>436:2000/12/06(水) 10:51
PENを変えればよかろう。
438名無しさん@お腹いっぱい。:2000/12/06(水) 18:09
cout << setw(7) << setfill('0') << num << endl;

このコードが、Releaseバージョンだと問題ないのですが、Debugバージョンだとコンパイルが通りません。
以下のようなエラーメッセージが出ます。

error C2679: 二項演算子 '<<' : 型 'struct std::_Fillobj<unsigned char>' の右オペランドを扱う演算子は定義されていません。(または変換できません)(新しい動作; ヘルプを参照)

何で、Debugだとコンパイルが通らないんでしょうか?
<iostream>と<iomanip>はインクルードしてあります。
VC++6.0 Professionalです。
439438:2000/12/06(水) 18:20
とりあえず、簡単なテストプログラムを書いてみたらちゃんとコンパイルが通りました。
何が原因なんだろう???
440名無しでGO!:2000/12/06(水) 19:00
>>438
charのデフォルトがsignedなのかunsignedなのかの違いのせいでしょう
441438:2000/12/06(水) 20:44
>>440
その通りでした。
他で出た不具合のために、charの型をunsignedにしたまま戻すのを忘れていました。
おかげで解決できました。ありがとうございます。
442Rs:2000/12/07(木) 01:35
VCを使いつづけるメリットはなんでしょう?
MSはVBをメインに開発してるようにおもえるのですが。。
ていうかC#まで出てきたらほんとになくなりそうです。。
443>442:2000/12/07(木) 02:09
VCがどうとかと言うより、VBじゃOSは組めないよ。
まっとうな売りもんになるアプリも組めないと思うが。
ちょっと、無茶なこといってるよ君。
444名無しさん@ネタじゃないよ、まじまじ:2000/12/07(木) 03:08
映画のスタッフロールみたいな動きをするクラスってありますか?
445名無しさん@お腹いっぱい。:2000/12/07(木) 08:26
>442
リアル厨房?
446名無しさん@お腹いっぱい。:2000/12/07(木) 15:48
ヘッダのいらんC++作ってくれんかなー。

#JAVAは嫌・・・

447名無しさん@お腹いっぱい。:2000/12/07(木) 16:44
ANSIで標準化されているC++にMSが独自仕様を追加する事はできないからC#を作ったんだよ。
448名無しさん@お腹いっぱい。:2000/12/07(木) 17:12
?VCは結構ANSI C++と違うが?
449てんてん:2000/12/07(木) 18:21
#define ぐるぐる回る for(;;)
という使い方をしたいです。
やり方教えて!!
450名無しさん@お腹いっぱい。:2000/12/07(木) 18:30
InteliSense で自分で作ったメンバ関数他ワークスペース上の
関数・変数しか出てきません。
「::」を入力しても同様で、とっても困ってます。なにかのヘッダファイルを
プロジェクトに追加すればいいのでしょうが、そのヘッダファイルの名前を
教えていただけませんか?
451ε:2000/12/07(木) 19:10
>>447
んじゃ、MSDNによく出てくる
> Microsoft 固有の仕様 →
> ← Microsoft 固有の仕様
って、何?
452。>451:2000/12/08(金) 01:01
それって、無いとは言わないけど、C++そのものより、
標準ライブラリに多いと思ったけど。
まぁ、ライブラリ抜きで考える事って少ないから、
確かに独自部分は多い事にはなるね。
453名無しさん@お腹いっぱい。:2000/12/08(金) 02:06
>>451
そういう拡張って、 gcc でも使えたりするよね。
いやだから何ってわけじゃないけど。
454名無しさん@お腹いっぱい。:2000/12/08(金) 17:37
>>453
たしかに
void func(int i)
{
 int array[i];
...
なんて書き方ができるCコンパイラはgcc以外にしらないな。
455名無しさん@お腹いっぱい。:2000/12/09(土) 03:19
>>454
え。
malloc 出番減るなあそれ。
すごい(嬉しい)拡張だ。
456名無しさん@お腹いっぱい。:2000/12/09(土) 03:28
つーか、実質allocaだべ?
457名無しさん@お腹いっぱい。:2000/12/09(土) 03:50
システムのプログレスダイアログボックスを表示させないで
ごみ箱へファイルを移す(仮削除)簡単な方法は無いでしょうか。
(別スレッド上で移動させたいので、ダイアログが出ると不都合なんです。)
環境はVisualC++ で、MFCは使っていません。
よろしくお願いします。
458名無しさん@お腹いっぱい。:2000/12/09(土) 04:20
>454
どうでもよいけど i が -1 だったりしたらどうなるのだろ?(わ
しかしスタック上に確保されるのはいいね〜
オーバーフローには注意しなきゃだけど。
459名無しさんi486:2000/12/09(土) 04:24
>>457
SHFileOperation()じゃ駄目なの?
460457です:2000/12/09(土) 04:38
>459
SHFileOperationに、
ダイアログを出さないオプションって、あるんでしょうか。
461457です:2000/12/09(土) 04:43
あ、FOF_SILENTってのがありますね。
これ使って試してみます。
462名無しさんi486:2000/12/09(土) 04:52
>>460
>FOF_NOCONFIRMATION Respond with Yes to All for any dialog box that is displayed.
>FOF_SILENT Does not display a progress dialog box.
>FOF_SIMPLEPROGRESS Displays a progress dialog box but does not show the file names.

好きなの選べ。
463名無しさん@お腹いっぱい。:2000/12/09(土) 05:02
>>458

負の値を入れたら逝ってしまいました。
0も危ないと思っていたのですが
1要素として扱われたみたいです
464名無しさん@お腹いっぱい。:2000/12/09(土) 06:39
>463
ありゃりゃ、逝っちゃいますか。
でも、そのブロック内の配列の宣言の直前とかに条件式(?:)とか入れられる
仕様なら、リカバリは出来そうですね。↓
void func (int i) {
  size_t anum = i > 0 ? i : 1;
  char a[anum];
  /* ... */
  { /* 途中のブロックもokなのかな〜 */
    char b[anum];
    /* ... */
  }
}
465457です。:2000/12/10(日) 15:15
ダイアログを出さずにごみ箱への移動の件、うまく行きました!
あともう一つだけお願いします。
プログラムから、ごみ箱の中のファイルを削除する方法が
ありましたら教えてください。

環境は前述しましたが、VisualC++ で、MFCは使っていません。
よろしくお願いします。
466名無しさん@お腹いっぱい。:2000/12/10(日) 16:03
DeleteFile;
SHFileOperationの必要なし。
少しは自分で調べましょう。
初心者の私でもわかるよ。
467名無しさん@お腹いっぱい。:2000/12/10(日) 16:28
MFCなどはプログレスバーやスピンコントロール作成できるなぅていまあす。
APIからは作成できないのでしょうか。
468名無しさん@お腹いっぱい。:2000/12/10(日) 16:55
>466
初心者らしい浅知恵だね。
SHEmptyRecycleBin
469名無しさん@お腹いっぱい。:2000/12/10(日) 22:24
前からの素朴な疑問なんですけど、

MFC&APP wizardで作ったアプリをGPLで公開していいの?
コード的にMSが作ったものが混じってしまうので問題なのかな?と考えていますが。

識者の方、教えてください。

470名無しさんi486:2000/12/10(日) 22:32
MSDNっていくらするの?
今はVC proに付いてくるライブラリ入ってる、学生の内にVS買うつもりだから
あと1年半は大丈夫なんだけど。
471( ´∀`)さん:2000/12/10(日) 23:27
MSDN入れば?
最新のが手に入るぞぬ
472466:2000/12/11(月) 02:26
>>466
これはどうも。また1つ勉強しちゃった
473466:2000/12/11(月) 02:28
あ、間違えちった。
>>468
474名無しさん@お腹いっぱい。:2000/12/11(月) 12:50
初心者です。
ひとつのダイアログ上に255個以上のコントロール配置できないんですか?
475名無しさん@お腹いっぱい。:2000/12/11(月) 16:33
SDIアプリのクライアント領域(CViewのとこ)を凹ませずに
表示したいのですが、どうやったらいいのでしょうか?
Dialogベースのアプリのようにのっぺりしたウィンドウに
したいんです。
476>475:2000/12/11(月) 20:57
GetSysColorで、ボーダーの色を取得して、
その色から、ソリッドブラシを作る。
作成したブラシをWNDCLASSのhbrBackgroundに設定して、
RegisterClassを呼べば設定できる。
SetWndowLongでブラシを変更しても出来る。
477名無しさん@お腹いっぱい。:2000/12/12(火) 05:20
↓のようなプログラムを作りました。
----------------------------------------------------
void  pre処理(int count)
{
  int  *p[3] ;

  p[0] = (int *)malloc(count) ;
  if(p[0] == NULL)  goto err_return0 ;
  p[1] = (int *)malloc(count+256) ;
  if(p[1] == NULL)  goto err_return1 ;
  p[2] = (int *)malloc(count+16) ;
  if(p[2] == NULL)  goto err_return2 ;

  処理(p[0],p[1],p[2]) ;

  free(p[2]) ;    //  <- ここで暴走
err_return2:
  free(p[1]) ;
err_return1:
  free(p[0]) ;
err_return0:
 
  return ;
}
----------------------------------------------------
メモリを開放する時にプログラムが停止してしまいます。
なぜだか解らず、困っています。どうかこのバカ者に
教えてください。
478名無しサソ:2000/12/12(火) 05:39
>>477

 ?自分はCは使わないから、mallocはほとんど
使ったことは無いけど、mallocってこれでいいんだっけ?

p[0] = (int *)malloc(sizeof(int)*count);

とか書くのではないの?これでpを処理できているのが
かなり疑問なのだけど。的外れだったらスマソ
479名無しさん@お腹いっぱい。:2000/12/12(火) 05:42
>>477
処理()でオーバーランが起きている可能性がある。
480名無しサソ:2000/12/12(火) 05:44
補足ね
 countでバイト数そのものを定義しているのなら、的外れ。
でも、わざわざバイト数を直接指定してどうするの?変な数
を指定して、暴走の原因になるような・・・。
481477:2000/12/12(火) 05:55
助言いろいろ有難うございます。
もう一度考え直して出直してきます。
でわ。
482名無しさん@お腹いっぱい。:2000/12/12(火) 09:58
>>474
直接貼り付けられるのはコントロールIDが255までだからそのとおり。
483名無しさん@お腹いっぱい。:2000/12/12(火) 13:55
Cのreallocの機能をnew された変数で実現するにはどうしたら良いでしょうか?
具体的には
classのインスタンスを配列で管理して数を増減させたいです
484名無しさん@お腹いっぱい。:2000/12/12(火) 14:09
DLLの作成方法なんですが
ClassをexportしたDLLをinportする場合
気をつけなければいけないところとかありますか?
メモリーまわりの制約があったら教えてください

実際の問題は
DLL内のクラスに実体もたせてその関数をコールした時
戻り値(TRUE)がを返す時にエラーが出ます
(DLLにする前は正常に動いたClassとプログラムなんですが
ClassをDLLにしたらエラーが発生するようになりました)

DLLはクラスをexportしているだけで実体まで持たせていません
485名無しでGO!:2000/12/12(火) 15:19
>>483 newしてコピーしてdelete
486名無しさん@お腹いっぱい。:2000/12/12(火) 15:24
実行時自分が作ったプログラムがどれぐらいのメモリをしめているのか、どの部分が処理に時間がかかっているのかを調べたいんですがいい方法はないでしょうか?
487>86:2000/12/12(火) 16:13
profilerを使う。
でもlearning(standard?)にはついてないかも。
488名無しさん@お腹いっぱい。:2000/12/12(火) 23:39
なんでこのソースがコンパイルできないんだろう???
#include<iostream>
#include<vector>
#include<string>

using std::vector;
using std::string;
using std::cout;
using std::cin;
using std::endl;

int main( int argc , char **argv )
{
vector<string> vs;
vs.push_back( "ギコネコ" );
vs.push_back( "モナー" );
vector<string>::iterator ite = vs.begin();

while( ite != vs.end() )
cout << *ite++ << endl;

cin.get();
return 0;
}
489名無しさん@お腹いっぱい。:2000/12/12(火) 23:58
>>483
std::vectorを使う。
490名無しさん@お腹いっぱい。:2000/12/13(水) 06:20
>>488
どこでどんなエラーが出るかくらい書けよな
491474:2000/12/13(水) 09:14
>>482
やっぱ無理なんすかねぇ・・・?
そういう場合どうします?
492>491:2000/12/13(水) 10:13
1、わける
2、いくつかの機能を統合した新しいコントロールを作る
3、EDITコントロールなんかは直接貼り付けず、必要な場所に移動して表示させる
493名無しさん@お腹いっぱい。:2000/12/13(水) 10:39
継承(仮想関数)
仮想関数を使うとき親のクラスポインタに子のインスタンス当てますよね?
そのとき、ポインタ当ての行で
'type cast' : 'class KO *' から 'class OYA *' の変換は存在しますが、アクセスできません。
というエラーが出るのですが、原因がわかりません
仮想関数部分を消してただの親子クラスにして試しても同じエラーが出ます
親子の関数、変数を全部publicにしても駄目でした

どなたか、同じような経験のある方いないですか?
494名無しさん@お腹いっぱい。:2000/12/13(水) 11:35
>>493
問題のコードを見せて。
495名無しさんi486:2000/12/13(水) 12:07
>>493
OYAを継承するときpublicにしました?
class KO : public OYA{
496名無しさん@お腹いっぱい。:2000/12/13(水) 13:04
VCでデバッグ中に変数の値が変わったら止める、
ということをしたいのですが、こんなことってできますか?
497名無しさん@お腹いっぱい。:2000/12/13(水) 13:27
MYCLASS *A;
A=new MYCLASS[10];
delete A;
これで実行時にエラーなんですけど
こんなときどうやって開放してやれば良いのですか?
それとも、取り方が悪い?
498名無しさん@お腹いっぱい。:2000/12/13(水) 13:52
>>497
× delete A;
○ delete [] A;
499名無しさんi486:2000/12/13(水) 14:02
>>496
編集->ブレークポイント
500496:2000/12/13(水) 14:18
>>499
ありがとうございます。
501名無しさんi486:2000/12/13(水) 14:20
>>500
もっと手応えあるやつ頼むぜ(笑)
502493:2000/12/13(水) 16:50
私が馬鹿でした・・・
503名無しさん@お腹いっぱい。:2000/12/13(水) 17:20
バイナリデータ(データ中に0を含む)を配列のまま
ファイルに書き込む方法ってあるんでしょうか?
(NULL文字として認識されてしまうため)
504名無しさんi486:2000/12/13(水) 17:25
>>503
fwrite
もっとだ、もっと手応えあるやつぅ〜
つか、もう帰ろう。
505名無しさん@お腹いっぱい。:2000/12/13(水) 17:55
_T()マクロってどういう時に使ってます?
こだわると""で囲まれた文字列全てに対してやりたくなってしまうので
これは見切る、これは付けるといった境界線を教えて下さい。
506名無しさん@お腹いっぱい。:2000/12/13(水) 18:16
>>505
あくまで俺の個人的意見であるが。
建前としては、同じソースをSBCS/MBCS/UNICODE全てに渡って
#defineの切替だけで使えるようにしたいとき。
ただ、現実問題としてはMBCSの場合は同じアルゴリズムが使えず
汎用テキストマッピングの機械的な置き換えだけではどうにも
ならない場合が多いことと、3パターン分テストするだけの余裕および
意味があることは普通はないので、通常はTCHARの使用は
無駄
以外の何者でもなく、むしろ最初からUNICODE決めうち、などで
やったほうが分かりやすいし効率的でもあると考えている。
507505:2000/12/13(水) 18:41
NTってUNICODEですか?
508名無しさん@お腹いっぱい。:2000/12/13(水) 19:59
調子こいてSTLがんがん使ってたら
古いマシンで動作確認しようとした時に
「MSVCP60.DLLがない」と怒られてしまいました。
対象動作環境をしぼろうと思うのですが
どう限定(95+IE5で入る?)したらいいか分かりません。
教えてください。
509名無しさん@お腹いっぱい。:2000/12/13(水) 20:49
>>508
STLは関係ないよ。
InstallShieldってついてるだろ。あれでインストーラ作ったら。
面倒なら、DependencyWalkerで依存関係調べて、必要なファイル
まとめてコピーとか。
著作権に気をつけろよ。
510509:2000/12/13(水) 20:53
そうそう、コピーするなら実行時ディレクトリな。
systemに入れると危険だぞ。
511名無しさん@お腹いっぱい。:2000/12/13(水) 21:55
コンストラクタとInitInstance()ってどっちが先に
呼ばれるんでしょうか?
512名無しさん@お腹いっぱい。:2000/12/13(水) 22:00
>>511
なんじゃそりゃ?
コンストラクタが先にきまっとろー!
ところでInitInstance()ってなに?
513511:2000/12/13(水) 22:00
デバッガで追ったらコンストラクタでした。
2つの違いってなんでしょう?
514511:2000/12/13(水) 22:03
>>512
CWinAppとかCWinThreadのメンバ関数です。
515名無しさん@お腹いっぱい。:2000/12/13(水) 22:07
>>514
そりゃ、あんたマイクロソフトが勝手に作ったMFCじゃねーか
ANSI標準のコンストラクタと一緒にするなっ!
516名無しさん@お腹いっぱい。:2000/12/14(木) 00:21
>>508
STL より std::*stream と std::string が怪しい。
( STL はほとんどヘッダだけだし。テンプレートだけに。
517名無しさん@お腹いっぱい。:2000/12/14(木) 01:19
508さん,516さん,ありがとうございました。
DependencyWalkerで見たところ string のせいと分かりました。
幸い使用箇所が少なかったので使用をやめたところ
MSVCP60.DLL に依存しなくなりました。
518名無しさん@お腹いっぱい。:2000/12/14(木) 01:23
↑508は自分でアドバイス頂いたのは509さんでした。
DependencyWalkerで見た様子では(自分がよくわかっていない)
「allocator」がらみでMSVCP60.DLLに関係してくるようでした。
519名無しサソ:2000/12/14(木) 04:07
 デバッグ時の質問を良いでしょうか。STLでベクタやセットを
使っているのですが、これらのイテレータの先は評価式では見る
事が出来ないのでしょうか?見ようとすると、
「オーバーロードされた演算子は見つかりません」
と言われてしまいます。
520名無しさん@お腹いっぱい。:2000/12/15(金) 02:44
jstring.hって知りませんか?
MSCにはこれがあったんですけど。
521名無しさん@お腹いっぱい。:2000/12/15(金) 03:31
>>520
mbstring.h
522名無しさん@お腹いっぱい。:2000/12/15(金) 04:31
>521 サンクス
523アセンブラを勉強したい:2000/12/17(日) 16:34
__asm()を使ってアセンブラの勉強をしたいと考えてます。
でも初心者なため何から手をつけたらいいかわかりません。
参考書なり参考にあるホームページがございましたら
教えてもらえないでしょうか。m(_ _)m
524名無しさん@お腹いっぱい。:2000/12/17(日) 16:45
>>523
上左の お勉強ページをクリックしなさい
編集されてるのは
http://piza.2ch.net/test/read.cgi?bbs=tech&key=967778156
525523:2000/12/18(月) 09:57
ありがとうございます。
勉強してきます。
526名無しサソ:2000/12/18(月) 11:36
 一応理由がわかったので報告までに。
識別子が255文字を超えている状態だと、デバッガ上で
値の確認が不可能になってしまうらしいです。仕様ですね。
VC++7.0で改善してくれないものか。
527名無しさん@お腹いっぱい。:2000/12/18(月) 20:57
簡単な会計ソフトを作ってみようかと思っているのですが
出来上がったときに金額の入力するためにテンキーで数字を入れると
自動的に"\12,345,678" のように'\'記号や','が自動的に入るように使用と思っています。
どこを探してもそんな便利な関数を見つけることが出来なかったので
結局、自分で関数を造ってするしかないのかと思い、入力用だけは何とか
作ることに成功したのですが、結構めんどくさいのでそんなこと他の人もしているのかどうか。
不安になって皆さんにお尋ねしたいと思い書かせていただきました。
どうなんでしょうか、やはり自作で行くしかしょうがないのでしょうか。
教えてください。
528名無しさん@お腹いっぱい。:2000/12/18(月) 21:54
>>527
その程度たいして難しくもない
ここに9行も書き込んでいる時間があれば十分作れるだろ
529優しい名無しさん:2000/12/19(火) 01:37
MFC使ってみても全然意味不明なんですが、
MFCの本買えば解るようになりますか??
530名無しさん@お腹いっぱい。:2000/12/19(火) 09:09
>>529
あなたが初心者ならWinAPI+C言語の組み合わせをお勧めします。

プログラミングWindows第5版 (上)(下)
マイクロソフトプレス

なんかがおすすめ。
531( ´∀`)さん:2000/12/19(火) 11:42
WM_CAPTION | WM_SYSMENU を持たないウィンドウを作ると、タスクバーの
アイコンを右クリックしても、システムメニューは出ませんが、システム
メニューを表示する方法 or NC領域にボタンなどのコントロールを配置する
方法を教えてください。
532名無しさん@お腹いっぱい。:2000/12/19(火) 14:47
WebBrowser Controlで

IWebBrowser2 IE_CNTRL;
IE_CNTRL.GoBack();

一行目にエラーが出ます。
>C:\Program Files\Microsoft Visual Studio\MyProjects\IE\IEDlg.cpp(141) : error C2259: 'IWebBrowser2' : 抽象クラスあるいは構造体のオブジェクトが宣言されています。
VC++6.0です。なぜでせうか??
533デフォルトの名無さん:2000/12/19(火) 15:02
>532
ローカルやグローバルに取ることは出来ません。
 つまりポインタにしてからね
534532:2000/12/19(火) 15:14
おお!
ポインタに宣言し直したらとおりました。
ありがとうございました。
535名無しさん@お腹いっぱい。:2000/12/19(火) 16:40
どなたかSUSIEプラグインの使い方を教えて下さいませんか。
渡辺某氏のサンプルはSDKみたいなのでよくわからないです。
(「ワークスペースを開く」では*.dswや*.mdpがないので開けない)
SDKのサンプルのIDEでの閲覧方法か、
MFCでのSUSIEプラグインの使い方、説明のある場所を探してます。
こちらは、Win9x、Win2000、VC++6.0proの環境です。
536名無しさん@お腹いっぱい。:2000/12/20(水) 16:22
どうもMFCを使う気は起きない。
でもVSの開発環境自体は素晴らしいと思う。
どっかにソース公開してるC++でかかれたクラス集ないかのぉ。
537名無しさん@お腹いっぱい。:2000/12/20(水) 20:41
MSVC++6.0でUINTとintの違いは何ですか?
UINTで定義するのと、intで定義するのでは違いがあるのでしょうか?
初歩的な質問ですが宜しくお願いします。


538>537:2000/12/20(水) 21:03
intはC/C++の組み込み型で符号つき。
UINTはMSが勝手に作った型で符号なし。
普通はintを使う。
ただし、UINTを要求する関数,APIに渡す場合はUINTを使う。
539名無しさん@お腹いっぱい。:2000/12/20(水) 21:26
MFC難しいか?良いライブラリだとは言わないが。
WindowsでMSっぽいアプリを組もうと思ったらMFCしかなかったし、
勉強したものだ。
MFCごときでつまづくような厨房プログラマは周囲にいなかった。
ユーザーはMS風がデフォルトとして飼いならされているMS信者ば
かりだから、そこに売り込むためにはMFCでMS風ルック&フィール
にすることはそれなりに重要だった。
最近はそうでもないね。
540名無しさん@お腹いっぱい。:2000/12/20(水) 21:33
COMとATLをみっちり勉強したいんですけど、まずはじめにMSDNから読もうと思っているのですが、おすすめの個所はありますか?
なにぶんキーワード検索してもヒットが多すぎるので…。よろしくお願いします。当方、ATLはほとんど何も知らず、COMはMFCでオートメーションのクライアントが書ける程度の厨房プラグラマーです。
なにとぞご指導を。
541名無しさん@お腹いっぱい。:2000/12/21(木) 01:41
MFCはまずダイアログベースでやってみるといいよ。
最初にDocument/Viewなんて言われても(その手の知識がある奴以外には)
は? だから。

AppWizardで雛形を作ったらリソースエディタで適当に画面を作る。
ここまでは誰でもできるだろう。

問題はこの後で、VBだったらコントロールの変数が勝手に割り当てられて、
ダブルクリックでイベントハンドラの編集になるけど、VC++の場合はその
辺が手動になってる。

だから、ClassWizardでコントロール変数割り当てて、イベントハンドラ
を作って...というのがわかると、結構VBライクにいじれるようになるはず。

SDI/MDIでDocument/Viewが絡んでくるとまたちょっと面倒くさいけど。
542名無しでGO!:2000/12/21(木) 04:31
>537
どうせtypedef unsigned int UINT;なだけでしょう。
543名無しさん@お腹いっぱい。:2000/12/21(木) 09:09
Document/Viewモデルのどこが難しいのか分かりません。
すごく合理的でシンプルな構造だと思うのですが。
煽りじゃなくて、難しいと思う人は具体的にそう思う
理由を教えてください。
544名無しさん@お腹いっぱい。:2000/12/21(木) 10:18
わからない人じゃないけど、
押し付けられるのがウザイと思うことはある。
ControllerとViewがいっしょになってるのが使いづらい。
View=Windowなのも結構ヘン。
C++には適切なコールバック方法がないので、
「ない」ということに気づくまで使いづらい。
(気づけば対処できる)
結論として、中途半端だと思う。

まあそれなりに利点があるのは確かなので、
わからない人は頭悪いだけだと思うけど。
と2chっぽく煽ってみる。
545名無しさん@お腹いっぱい。:2000/12/21(木) 15:22
Document/Viewモデルは、ワープロやデータベースの様にGUIから
分離できるデータ層とプレゼンテーション層にくっきり分けられる
時はよいが、それ以外の構造では(ツール類とかマルチメディア系とか)
では大抵邪魔なだけ。
使わなきゃいいのだけどね。

データ層とプレゼンテーション層に明確に分けられる場合でも、
Viewの方はMFCにおとなしく従っても良いが、Documentの方は自前で
やりたいのだよ。いろいろ都合もあったりしてな。
ところが、MFCのDocument/ViewではDocumentがコア部分で絡んでし
まっていて外しにくい。
結局エンジン/Document/Viewの三層に分かれてしまうが、この場合
Documentは実は意味がないので、すっとばしてしまうというか邪魔
になっているだけ(藁
ま、自分に都合の悪い部分を煽っただけなんで気にしないでくれ。
今はDocument無しにも出来るしな。(でも中途半端に不都合が)
546名無しさん@お腹いっぱい。:2000/12/21(木) 17:08
質問っす!!!

画面と印刷のマッピングモードを別々に使いたいんですが、
何処でsetmapmodeしたら良いんでしょう?
現在、画面にOnDrawからTextOutとLine○○で表を書いていますが、
同じマッピングモードだとどうしても帳票に入らないんです。
ちなみにドキュメント/ビューのSDIでやってます。
547名無しさん@お腹いっぱい。:2000/12/21(木) 17:17
>543
 一部のCView派生がDocument/Viewの例外になってる
のはちょっと情けない。

>542
備後。
548名無しさん@お腹いっぱい。:2000/12/21(木) 17:56
>スタック解放しない
ハァ?
>タイミングによってはプロセスごとこけるおそれあり。
ハァ?
549名無しさん@お腹いっぱい。:2000/12/21(木) 20:55
>>548
ハァハァって、そんなに興奮するな。クリスマスはもうすぐだ。
550名無しさん@お腹いっぱい。:2000/12/21(木) 21:53
548ってバカですか?
551名無しさん@お腹いっぱい。:2000/12/22(金) 01:40
はあはあ
もうすぐだよ
552名無しさん@お腹いっぱい。:2000/12/22(金) 11:34
VCのエディタって、viでいうところの%みたいに、
対応した{と}を参照するコマンドってないですか?
553名無C:2000/12/22(金) 12:39
>>552

曖昧だが、たしか、
ctrl+ '[' or ctrl+ ']' のどっちか。
554400:2000/12/22(金) 14:53
>>548
おーい、それって>>400へのレスか??
ハァハァ言う前に、MSDNでも何でもいいから、TerminateThreadの
説明ぐらい読んでから、逝けよ。
555名無しさん@お腹いっぱい。:2000/12/23(土) 02:09
MFCでダイアログの上にリッチエディットを置いているのですが
そこにDrag and Dropしてもダイアログのほうにドロップイベントが起きたことが伝わらない
ようです。
どうすれば伝わるようになりますか?
556C--:2000/12/23(土) 07:05
>>555
リッチエディットからダイアログにドロップイベント送ってやったらダメ?
試してないのでなんとも言えませんが・・・
557名無しさん@お腹いっぱい。:2000/12/23(土) 14:35
えーと、どうやって送るんでしょう?関数とかあるんですか?
558555:2000/12/23(土) 14:43
というかドロップした時に何の反応もしないのでどのイベントが
起きてるかわからないんですけど・・・
はじめからダイアログ(親ウインドウ)にイベントを渡すように設定できるんですかねぇ?

だからイベントが起きた時に渡すんだと今度はどのイベントなのかわからん・・
どのイベントが起きてるのかってデバッグ実行とかでわかるんですかね?
559名無しさん@お腹いっぱい。:2000/12/23(土) 16:01
SPY++で探れ。
560名無しさん@お腹いっぱい。:2000/12/23(土) 16:11
int vprintf(const char *format, va_list ap);
の"ap"を自分で自由に中身を作りたいのですが、
どうすればいいのでしょう?
561555:2000/12/23(土) 17:51
>559
それがそうだったんですかぁ・・・やってみます
562デフォルトの名無しさん:2000/12/27(水) 15:03
MFCのメリットって何でしょう?
自分はSDKから組んでたんでMFCを勉強すればするほど
かゆい所に手が届かない感じがするんですが・・・
勉強不足からの錯覚ですか?
563名無しさん@お腹いっぱい。:2000/12/27(水) 17:33
>>562
主にOLE/COMがらみのドロドロした部分を何らかの
フレームワークの助け無しに触るのは地獄だと思うが。
要するに何らかのActiveXコントロールやActiveXコンテナを
手作りで作る奴は多分誰もいないだろう。
564C**:2000/12/27(水) 18:07
>562
SDK(というかAPI)あってのMFCなので、SDKオンリーも否定はしないけど、
アプリケーションフレームワークとしてのMFCはサイズや動作の重さ以外の点では
皆が言うほど悪いものではないと思う。
MFCをマトモに習得しているのであればSDKオンリーで開発するより
MFCを使用した方が、かなり開発効率上がるはず。
あとWinSockアプリもMFC使うとかなり楽。
但しMFCは肥大化が問題視されてるし、MSの路線ではなくなってきてるので、
今となっては「過去のものとなりつつある」という感じ。
今からMFCを覚えるならATL、JAVA、C#あたりを
覚えた方が良いという感じも個人的にはしてる。
565名無しさん@+*/%-:2000/12/27(水) 18:59
なんでMSは設計のやり直しをしないんだろう。
「おれのやったことには間違いなどなかった」
というお偉いさん的発想なんだろうか。
MFC2とか出せばいいのに!

566デフォルトの名無しさん:2000/12/27(水) 19:01
単にめんどくさいんでしょ。
567デフォルトの名無しさん:2000/12/27(水) 19:26
>>565
ハンガリアンはC#で捨てたようなので
今後に期待しましょう。ゲヘヘ。
568デフォルトの名無しさん:2000/12/28(木) 01:41
楽をしたいのならVCLくらい徹底してほしいものだ。
569デフォルトの名無しさん:2000/12/30(土) 01:09
WTL期待age
570デフォルトの名無しさん:2000/12/31(日) 06:45
WM_RBUTTONUPの発生が遅れてしまうのですが、なぜでしょうか。

 この問題が発生している状況は、フローティングメニューが表示されている状態で、フローティング
メニューの外を右クリックした時です。
 この時、WM_RBUTTONDOWNは即座に発生しているのですが、WM_RBUTTONUPが発生してくれません。
 この後、何秒たっても何もしなければWM_RBUTTONUPは発生しません。ただ、キーボード入力やマウス
入力を起こすと、その時にWM_RBUTTONUPが発生します。
 あと、このウィンドウには子ウィンドウがあり、それはエディットボックスとチェックボックスなの
ですが、エディットボックスにフォーカスがある時はこの問題は発生してません。

TrackPopupMenuExは第2引数に TPM_LEFTBUTTON | TPM_RIGHTBUTTON を指定して呼び出してます。

 ついでなんですが、左クリックでも同じ現象が発生してました。
571visualC++初心者:2001/01/01(月) 01:11
ええとなにから手をつけてよいのかさっぱりなのですが、
しょっぱなはなにをやっていけばよいのか教えてください。
572デフォルトの名無しさん:2001/01/01(月) 01:19
付属のチュートリアルを一通りヤレ>571
573visualC++初心者:2001/01/01(月) 01:33
visualC++プログラミング入門というやつですか?むつかしいんですが。
574デフォルトの名無しさん:2001/01/01(月) 01:43
>573
それは理解しようとしないからだ。
アレが難しいようじゃお手上げだな。
もうVisualC++はあっても無駄だから、中古屋にでも売ってこい。
575visualC++初心者:2001/01/01(月) 02:17
嫌だ。
576デフォルトの名無しさん:2001/01/01(月) 02:25
>575
なにもやりたい事が無いのなら、無理して覚える必要はない。
577名無しさんi486:2001/01/01(月) 02:51
どうせ割れずで拾ったんだろ。
578デフォルトの名無しさん:2001/01/01(月) 03:01
そういう勘繰りは確認する術が無いからやめとけ。>577
追求すると暴れ出すからナー。(藁
579>570:2001/01/01(月) 03:08
良く分からんが・・・
TrackpopupMenu()のあとにWM_NULLをポストしてみるのは
どうでしょう。
580デフォルトの名無しさん:2001/01/01(月) 03:17
その方法、タスクバーのポップアップメニューの時に使ってる。>579
581visualC++初心者:2001/01/01(月) 04:21

おまえらみたいな意味のわからんやつらにとやかく言われる筋あいわない
あーうっとーしー。
582デフォルトの名無しさん:2001/01/01(月) 06:24
>>581
じゃあ質問なんかするなよ。
おまえの反応の方が意味不明。
展開は予想通りだけど(藁
583デフォルトの名無しさん:2001/01/01(月) 17:02
>>581
取りあえず、VC++で「Win32 Console Application」を作成する方法
だけを学んで、以後差し当たってはVC++な部分は忘れて、

#include <stdio.h>
main() { printf("hello, world\n"); }

からはじめたまえ。Win32 Console Applicationとは、要するにいわゆる
DOS窓で動くプログラムのことだ。
市販のVC++本は君には役にたたない。環境によらない標準的なC言語の
プログラミングの教科書を使って勉強しなさい。
584デフォルトの名無しさん:2001/01/02(火) 00:31
>582
おまえしつけーよ死ね
585デフォルトの名無しさん:2001/01/02(火) 00:40

だれも582みたいなうんこやろーに聞いてないぞ。
おまえに人にアドバイスするくらいの能力あるのか?
586デフォルトの名無しさん:2001/01/02(火) 00:45
>585

口ダケ厨房ダロウカラキニスルナ
587デフォルトの名無しさん:2001/01/02(火) 03:12
はいはい。くだらんレスすんなら下げて書きましょうね。>>584-586
ま、visualC++初心者だろうけど。(藁
588デフォルトの名無しさん:2001/01/02(火) 12:00
vcどころか人間として未熟者。
589デフォルトの名無しさん:2001/01/02(火) 23:36
おまえがだろ?ぜんぜん面白くねーのに藁とかかくな。さみーぞ。
590570:2001/01/03(水) 00:04
>>579

やってみたのですが、駄目でした。

あれから、Spy++ 使って見たのですが WM_RBUTTONDOWN も反応が遅いみたいでした。
マウスの右ボタンを離した時に、WM_RBUTTONDOWN が発生していました。

 自分は勉強の為にリソーススクリプト使わずに CreateWindow( "BUTTON", ...
とかやって書いているのですが、これって邪道でしょうか。実務ではこういうこと
しませんか…。
 それというのも、リソーススクリプトで作ったダイアログではこんな現象は起き
なかったからなんですけど。
591デフォルトの名無しさん:2001/01/04(木) 01:58
>>590
ボタンクリックしたままボタンのそとにマウス移動して離してみ?
結果が知りたい
CreateWindowのパラメータ(引数)がおかしいんじゃない?

ついでに、visualC++初心者どころかPC初心者臭いので
激打でもやっていたほうが良い人がちらほら・・・
しかし、9分もかかるかね〜
592デフォルトの名無しさん:2001/01/04(木) 04:53
590見て思い出したんだけど、
ダイアログでCreateWindowしてボタン作った場合、「画面のプロパティ」とかでフォントの大きさを変更された場合同期してくれなくて困るんですが、なんとかなりませんか?
593>590:2001/01/04(木) 06:03
じゃーTrackPopupMenu()のまえに
SetForegroundWindow()を呼んでみるのは同でしょう
594>592:2001/01/04(木) 06:10
WM_SETTINGCHANGEかWM_SYSCOLORCHANGE
が飛んでくんじゃなかったかな。
595590:2001/01/05(金) 04:53
>>レスして下さった方々

 すいません、解決しました。くだらない低レベルなミスでした。
理由書かないのも失礼な気がするので、一応書いておきます。

while(1)
{
  if( ::PeekMessage( &message, NULL, 0, 0, PM_NOREMOVE ))
  {
    if( !::GetMessage( &message, NULL, 0, 0 ))
      return message.wParam;
    ::TranslateMessage( &message );
    ::DispatchMessage( &message );
  }
  else // ここを忘れてた…
    ::WaitMessage();
}

 上のループで、::WaitMessage(); の前の else を書き忘れてました。

エディットボックスにフォーカスがある時に現象が発生していないと思ったのは、
エディットボックスにフォーカスがあると、0x118 というメッセージが絶えず発生
していたからです。

リソーススクリプトでつくった場合大丈夫だったのは、マクロの DialogBox を使っ
ていたからです。

Spy++で遅れて表示されていたのは、メッセージフックのタイミングが GetMessage
の時だからです。(少し自信無い)

スレ汚しすいません。
596デフォルトの名無しさん:2001/01/05(金) 15:08
>>592
WM_PAINTでもなんでも好きなの拾えば良い
597デフォルトの名無しさん:2001/01/08(月) 04:59
if (GetTickCount()>mytimer)
mytimer=GetTickCount()+10;
else
return;
...
...
という処理をやっています。
GetTickCountの戻り値はunsigned int型なのですが、
unsigned intの最大値をmaxとしたときに、
この関数がmax-10のような値を返した場合、
次にこの処理を通過するまでに11ms経過した場合は
どうなるのでしょうか?
598デフォルトの名無しさん:2001/01/08(月) 05:03
オーバーラップします。>597
599デフォルトの名無しさん:2001/01/08(月) 05:08
すると困るので597のような処理はしない方がいいのでしょうか?
それともめったに起きないので気にしなくてもいいかな?
600デフォルトの名無しさん:2001/01/08(月) 05:12
大小で比較するのではなく、差を取る様にすれば解決すると思います。>599
601デフォルトの名無しさん:2001/01/08(月) 05:24
すいません。ちょっと具体的にどうするのか分かりません>600
602デフォルトの名無しさん:2001/01/08(月) 05:28
curtimer = GetTickCount();
if (curtimer - mytimer > 10)
 mytimer = curtimer;
こんな感じになると思います。>>601
603デフォルトの名無しさん:2001/01/08(月) 05:38
認識違いでしたらすいません。
例えばunsigned型ではmaxを超えるとまた0から始まると思っていました。
上の例でmytimer=max-5 の時にGetTickCountがmaxを超えてcurtimer=5と
なってしまうとif文以降の命令が実行できなくなってしまい、解決したよう
には思えないのですがどうでしょうか?
604デフォルトの名無しさん:2001/01/08(月) 05:40
では実際に確認してください。>603
605デフォルトの名無しさん:2001/01/08(月) 05:45
この処理で値がmaxを超えることはめったに起きないので
似たようなもので実験してみます。
606デフォルトの名無しさん:2001/01/08(月) 05:50
unsigned int curtimer, mytimer ;
mytimer = 0xfffffffdUL; //適当なオーバーラップしそうな値
curtimer = 10; //オーバーラップしたと仮定する。
mytimer = curtimer - mytimer;

この時点でmytimerはいくつになっていますか?>>605
607デフォルトの名無しさん:2001/01/08(月) 05:59
最初にmytimer=max-5とすると最後はmitimer=15になります。
unsignedの計算だからif文の中でやってもこうなるのでしょうか?
大きなマイナスになると勘違いしていました。
608デフォルトの名無しさん:2001/01/08(月) 06:05
まともな実装をした処理系であれば、ifの中でも同じ結果になる筈です。>>607
609デフォルトの名無しさん:2001/01/08(月) 06:07
1時間もつきあってもらってありがとうございます。
610デフォルトの名無しさん:2001/01/08(月) 06:11
いえいえ。がんばってください。>609
611マジレスさん:2001/01/08(月) 14:16
つぎのVCはMFCがなくなり、なんかやわなVB
と同じCLRとかいうのを使わなければいけない
と聞いたのですがMFCの知識はまったく無駄に
なるんですか?
612奥さん、名無しです:2001/01/08(月) 14:25
無くなりはしないでしょ。
613マジレスさん:2001/01/08(月) 14:57
いやMFCは亡くなる予定らしい。
614デフォルトの名無しさん:2001/01/08(月) 15:08
次のVCではMFCはなくなりません。
しかし、いずれはADOの陰に隠れたDAOのようになるでしょう。
615マジレスさん:2001/01/08(月) 16:00
>>614
でもMFCが隠されるということは
もうMFCを学ぶ価値は無いのとちゃうの?
616デフォルトの名無しさん:2001/01/08(月) 16:59
VC++とMFCはnative Win32アプリ用という位置づけで残るみたい。
手元の雑誌を見ると

MFCの変更点:
* CTime::GetTime64()等の、Y2038対応
* DHTML編集機能をサポートしたCHtmlEditView/Doc/Ctlの追加
* DHTMLサポートのダイアログクラスCDHtmlDialog, CMultiPageDHtmlDialogの追加
* OLEコントロールコンテナのウィンドウレスコントロールのサポート
* HTMLヘルプサポートの強化
* Win2000用プリントプロパティシートのサポート
* STLからiostream.h等の古い実装が削除された
* STLにhash_map, hash_setのテンプレートが追加

だそうだ。長くなるけどついでにVBの方も。

VBの構文周りの変更点:
* Set/Let構文廃止(入力してもIDEに消される)
* Function/Subroutine問わず ret = func(param) の構文に統一
* 引数のデフォルトはByVal(VB6まではByRef。これも省略するとIDEがByValを自動
付加する)
* 多重宣言(Dim a,b As Integerで両方ともIntegerとする)のサポート
* 配列の添え字は0オリジン(Option Baseステートメントは廃止)
* 配列の宣言で指定する値を要素数に変更(VB6までは最大値の指定だった)
* Integer,Longのサイズ変更
* Variantは廃止。かわりに(CLRの)Objectを使う
* Currencyも廃止。かわりにDecimalを使う
* 宣言時初期化のサポート
* オプション引数にはデフォルト値設定が必須になった
* キャストが必須になった
* 自己代入演算(i += 1みたいの)のサポート
* 条件節の評価順が明文化された(左から評価して偽となった時点で中止する)
* 条件演算子とビット演算子を分けた(ビット演算にはBitAnd, BitOrを使う)
* 条件節に書ける条件はBool値のみ
* 構造化例外のサポート(Try, Catch, Finally, End Try)
* デフォルトプロパティへのアクセス禁止(Label = "hoge"みたいのは駄目)
* 1つのプロパティ宣言内にSet/Getを書くようになった
* 変数のスコープがブロックになった(ただし外側で定義している変数名を内側
で使うと構文エラーになるらしい。使えん)
* ファイルの拡張子は全て.vb

.NET関係既にいくつか日本語の書籍が出てきてるんで、いざ.NETが出てから
ハマらないよう、今のうちから情報収集しといた方がいいと思う。
617マジレスさん:2001/01/08(月) 17:10
>>616
つうことは今までの知識じゃ.NETは使えへん
ちゅうことか?
618616:2001/01/08(月) 17:15
>>617
今までの知識っていうのは、Win32 APIの知識とかMFCの知識って事?
だとすればYES。.NET対応のプログラム書くなら、C++であってもCLRのクラス
を使うことになる。
619616:2001/01/08(月) 17:24
補足。今までと違うのは、C++だろうがVBだろうがC#だろうがJScriptだろうが、
サードパーティが対応させた言語(富士通はCOBOLを対応させるようだが笑。
あとInpriseがどう動くのかわからんけど、仮にBCBとかDelphiとか対応したら
そこでも)全て同一のクラスが使える、という事。
# もちろん自分で作ったクラスもどの言語からでも使えるようになる。

まぁpremitiveな所はもうCLRに用意されてしまっているので、その辺を作る
楽しみはなくなってしまうけれども。
620デフォルトの名無しさん:2001/01/08(月) 17:32
どーせ、ActiveXとおんなじだよ。
過度の期待はしないほうがいいと思うね.
621マジレスさん:2001/01/08(月) 17:43
じゃ今必死こいて勉強しているSDKプログラミングはもうすぐ
無用の知識になっちゃうわけ?
この前SDKに詳しくなったほうがいいよと
いわれたばかりなのに(涙
622マジレスさん:2001/01/08(月) 18:15
でも.NETって簡単には普及しないと思うよ。
だって開発方法がかなり変わるから
ついてこれない人もたくさんいると思うもん。
623名無しさん@お腹いっぱい。:2001/01/08(月) 18:58
.NETではpythonみたいに動的にクラスを修正するとかはできるんかいな
624名無しさん@お腹いっぱい。:2001/01/08(月) 19:00
あとC#は多重継承やfriend機能がないけど、.NETクラスは対応してるの
かな。(連続カキコスマソ)
625616:2001/01/08(月) 20:55
>>620
俺は別にMS派って訳ではないんだけど、今までのCOM/ActiveXと同列に考えちゃ
うのはすごく損してると思うよ。

まぁMSの事だからしばらくはバグのオンパレードで使い物にならんかもしれない
けど、色々資料読んだり.NET SDKのBeta触ったりしてる限りでは、従来必須だっ
たCOMの糞面倒くせえ手続きやレジストリ/バージョン管理に悩まなくて済むよう
になるのは大歓迎。

ただ、全てを.NETに移行させる必要はないと思う。
例えば(例が偏ってるが)cd2wavだのgogoだのと言ったパフォーマンス重視のアプ
リとか、ひたすら軽さを追求したいような場合、COM/ActiveXとは無縁の世界では、
従来通りC/C++でSDKなりMFCなりで作ればいい。

# VB.NETは完全にCLR環境向けになってしまうようだけど

.NET使って便利そうな分野は、今までperlやらpythonやらrubyやらでお手軽プロ
グラミングしていた分野とか、業務系アプリ/業務フレームワーク構築とか、今
まで苦労して.ocx作っていたようなコンポーネント関係、あとMSが特にpushして
るWeb関連かな。

# 個人的にうれしいのは、好きな言語でお手軽プログラミングできるようになる
# って所かな

>>623
不勉強でpythonの動的クラス修正ってのがどんなものなのか知らないのだけど、
Javaのreflectionみたいな感じなのかな? C#にもreflectionはあるみたいだね。
詳細はまだ把握してないけど。

>>624
資料読む限りでは対応してなさそうな感じ。というか、CLRが対応してるんだっ
たらC#の仕様に盛り込むんじゃないかな。
626デフォルトの名無しさん:2001/01/08(月) 21:04
> 従来必須だっ
> たCOMの糞面倒くせえ手続きやレジストリ/バージョン管理に悩まなくて済むよう
> になるのは大歓迎。

つまり、ActiveXやCOMでめんどくさい手続きが
なくなったもんってだけでしょ?

.NETって単にそれだけなん?
そしたら、ActiveXが登場した時と触れ込みは同じじゃない?
それの何が変わるの?

なんも状況変わらないと思うんだけど?
>>625詳しそうだから教えて。
627not 625:2001/01/08(月) 22:49
>>626
つーか今回は言語仕様そのものが変わるんだけどね。
何が云いたいのかもう少し具体的に書かないと。
MS叩き大好き厨房じゃないんだろ?
628質問厨房:2001/01/11(木) 19:52
VC++を使った
Winアプリの作成方法が
詳しく解説されている
ホームページってありますか?
本を買うのも良いんですが
その前に少し基本的な事を勉強したいんです、
教えてください、お願いします。
629デフォルトの名無しさん:2001/01/11(木) 19:59
猫でもわかるプログラミング
URLは検索エンジンでしらべよ。
630質問厨房:2001/01/11(木) 20:24
>>629
そのHPってSDKとC++を使った
Winアプリの作り方を説明してますよね?
そうじゃなくて、VC++を使ったアプリ作成方法が知りたいんです。
VC++の使い方からツールの説明とかも、
できればチュートリアル形式で説明してくれると嬉しいんですが…
そんなHPなんて無いですかね?
631ヘボ学生:2001/01/11(木) 20:49
くそすれを建てたようなのでこちらでお聞きします。
VC++,VBの学割版と標準版の違いは何ですか?
値段以外に何がちがうのでしょうか。
作れるソフトの性能の限界に差があるのでしょうか?
632デフォルトの名無しさん:2001/01/11(木) 20:49
>630
MFCはマゾヒスティックな迄のトレースが基本。苦行。
SDKとバックグラウンドの動作を片っ端から知ってないと
誤動作した時に鬱になります・・・
けど苦痛もそのうち快感に変わってくるので大丈夫
難しいのは最初だけでそのうち麻痺して忘れます
633625:2001/01/11(木) 21:41
>>627
いや、確かに全体を見た場合、決定的に違うのはそれだけだとも言える。
ただCOMの最大の弱点(というか欠陥と言ってもいい)がなくなれば、もちっと
安心して使えるようになるだろう、という話。それを「なんだ今までと変わら
ねーじゃん」と思うか「これでやっとコンポーネントプログラミングを本格的
にやれる時代になるかな」と思うかは人それぞれだろう。

# 2番目の弱点は、後付けだった為にヘボすぎたセキュリティ周り。これは今
# 出回ってるC#/.NETの書籍だとほとんど触れられてない(まぁちょうちん記事
# に毛が生えたようなもんだし、書いてる方もまだそこまでチェックしきれて
# ないんだと思う)んで、ちょっと後回しにしてる。

俺が今色々調べてるのは、例によって「それで何ができて何ができないのか。
どこに問題があるのか」というのを把握しないで「COMはもう古い。これからは
.NETだ」とかアホな理由で最先端を突っ走ろうとする馬鹿から自分を守る為な
ので、.NETの正式版がリリースされたからと言ってすぐに使う事はないと思う。

例によって最初は盲目的なMS信者が突っ走るだろうから、問題があった時に
最初にハマる役はそいつらに任せておけばいい。俺は(COM/ActiveXの時もそう
だったけど)後ろから状況を観察して「これならいけそうだな」「駄目だこりゃ」
を判断する予定。

で、それを判断する為にも今のうちから情報収集はやっとくと。
634デフォルトの名無しさん:2001/01/12(金) 12:23
MFCのCViewにスクロールつけるために
こんなクラス作る僕は逝ってよしですか?
実装部は想像つくと思うので省略、全部CView::(Set||Get)ScrollInfo()使ってます

class CScroll
{
public:
CScroll();
virtual ~CScroll();
CPoint GetScrollPosition();
CSize GetScrollPage();
CSize GetScrollRange();
BOOL SetScrollPosition(CPoint ptPos, BOOL bRedraw = TRUE);
BOOL SetScrollPage(CSize sizePage, BOOL bRedraw = TRUE);
BOOL SetScrollRange(CSize sizeTotal,BOOL bRedraw = TRUE);
BOOL Create(CView* pView, CSize sizeTotal=CSize(1,1), CSize sizePage=CSize(3,3));

private:
SCROLLINFO m_siVert;
SCROLLINFO m_siHorz;
CView* m_pView;

};
635デフォルトの名無しさん:2001/01/12(金) 12:55
>値段以外に何がちがうのでしょうか。

他人に譲渡不可
636デフォルトの名無しさん:2001/01/12(金) 18:42
同志>>634、CScrollViewではダメでしょうか?
MFC、ハラショー!
637634:2001/01/12(金) 19:20
>CScrollViewではダメでしょうか?
CScrollViewって16bit範囲しかスクロールできませんよね?
ScrollInfo使うと32bit範囲で出来るっぽいし、スクロール単位を変えれば
いいんですが、そんなことするよかこっちのが手っ取り早いかなと(^^;
638デフォルトの名無しさん:2001/01/12(金) 19:21
メニューバーのアイテム編集について教えてください
環境はVC++6.0 です
GetMenuItemInfo関数ですが
下のような書式で失敗します
どうしたら良いのでしょう?
もしかして、渡す構造体の中身を編集しなきゃならないのでしょうか?

hMenuについては、EnableMenuItemは機能しているので
確実に取れていると確信しています

---------------以下問題部分抜粋-----------------------------

MENUITEMINFO MenuItemInfo;
HMENU hMenu=GetMenu(hWnd);

GetMenuItemInfo(hMenu,0,TRUE,&MenuItemInfo);
EnableMenuItem((hMenu,0,MF_BYPOSITION | MF_GRAYED);//確認用
639デフォルトの名無しさん:2001/01/12(金) 22:23
MenuItemInfoのcbSizeをセットしましょう。

>確実に取れていると確信しています
ちょっと笑った。
640638:2001/01/12(金) 22:29
セットしてみたんですけどダメでした
最終的にdwTypeDataを変更したいので
構造体のサイズを変更してもみたんですが
MenuItemInfo=(tagMENUITEMINFO*)malloc(sizeof(MENUITEMINFO)+??);
で問題ありますか?
641デフォルトの名無しさん:2001/01/12(金) 22:50
MENUITEMINFO MenuItemInfo;
TCHAR szT[256];
ZeroMemory(&MenuItemInfo, sizeof(MenuItemInfo));
MenuItemInfo.cbSize = sizeof(MenuItemInfo);
MenuItemInfo.fMask = MIIM_DATA;
MenuItemInfo.dwTypeData = szT;
MenuItemInfo.cch = sizeof(szT);

GetMenuItemInfo(hMenu, 0, TRUE, &MenuItemInfo);

だと思う。未確認。
642デフォルトの名無しさん:2001/01/14(日) 14:55
寂しいのでage
643...:2001/01/14(日) 21:59
COMがエラーした時にイベントビューアに出てくる呼び出しスタック
はデバッグにどう役立てるのでしょうか。
644デフォルトの名無しさん:2001/01/14(日) 23:28
だれか教えてください。
ダイアログベースでソフトを作っているんですが、
そいつを起動したままWindowsを終了させるとデストラクタが呼び出されません。
Windows終了時によびだされる関数ってありませんか?
645デフォルトの名無しさん:2001/01/15(月) 00:02
>>644
CWnd::OnQueryEndSession

WM_QUERYENDSESSION

らしい。
使ったことないから分からないけど
646デフォルトの名無しさん:2001/01/15(月) 04:10
WinMe/2K で GetOpenFileName ダイアログの左側に
「履歴」「デスクトップ」「マイコンピュータ」などの
でかいアイコンが表示されるようになったようですが、
フック関数を設定するとそれらが表示されません。

フックが必要なものと不要なものとで見た目が著しく
異なってしまい困っています。全てフックしてアイコンを
出さないのも可能ですが、なるべく全てのダイアログで
アイコンを出したいと思います。何か手段はご存知ないですか?
647644:2001/01/15(月) 07:47
>>645
ありがとうございます!!
さっそく試してみます
648デフォルトの名無しさん:2001/01/15(月) 17:12
リッチエディットで、現在表示されている行数を得るにはどうしたら良いんでしょう?
クライアント領域をフォント高さで割る・・・しか無いのかなぁ?
649ァボン学生:2001/01/16(火) 00:55
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
650デフォルトの名無しさん:2001/01/16(火) 21:20
age
VisualC++って人気ないのね(^^;
651完璧な入力補助機能付きEditBox:2001/01/16(火) 23:21
CEditから派生してEditBoxを作っています。
IEのアドレスの部分のように、途中まで入力すると残りが表示される
入力補助機能をつけようとしているのですが、うまくいきません。
文字が増えていく、所謂通常時の処理はできるのですが、
文字が減っていく、所謂削除していく時の処理が難しいです。
IEのアドレスの部分も完璧ではありませんでした。
hと入力すると
h ttp://www.2ch.net/2ch.html
と出ますが、
tp://www.2ch.net/2ch.html
の部分をマウスで選択して
右クリック->削除
とすると一回目は削除された後、もう一度補助機能が起動してしまい、
正しく動作しません。
完璧な入力補助機能付きEditBoxを作るにはどうすればいいのでしょうか?
652IEのアドレス:2001/01/16(火) 23:25
http://www.2ch.net/2ch.html
が出てきた後
tp://www.2ch.net/2ch.html
を削除すると
ht
と入力されたのと間違えられ、誤動作するということです。
653IEのアドレス:2001/01/16(火) 23:29
http://www.2ch.net/2ch.html
が出てきた後
tp://www.2ch.net/2ch.html
を削除すると
ht
と入力されたのと間違えられ、誤動作するということです。
654デフォルトの名無しさん:2001/01/16(火) 23:35
全体の長さと入力された所までの長さを比べて、
減ってたら補助機能を実行しないってんじゃダメ?
655651:2001/01/16(火) 23:41
>>654
普通に
ht
と入力しても
http://www.2ch.net/2ch.html
より短いですからダメです。

キーダウンイベントを検知して
「入力された」を判断するようにしても
IEと同じあやまちをおかすだけでした。
656デフォルトの名無しさん:2001/01/17(水) 01:24
どこに書こうか迷ったのですが、ここに書かせていただきます。
PDFフォーマットの文章で印刷禁止のものがありますが、
これをプログラム的に読み込んで印刷する方法はないのでしょうか?

一回AcrobatReaderを起動した後に、自分のウィンドウに描画する
ビューワーをみたことがあるのですが、そこまで出来れば印刷も出来そうな気がするのです。

657デフォルトの名無しさん:2001/01/17(水) 10:03
リストボックスに出力する文字列の色をかえるってことは
できますか?
658デフォルトの名無しさん:2001/01/17(水) 16:44
VC++って評価版とか無償ダウンロードできないの?
VBはできるけど・・・。
659デフォルトの名無しさん:2001/01/17(水) 17:12
>VBはできるけど・・・。
そうなの?教えてれくれです。
CCEのことじゃ無いよね。
660C303ユーザー:2001/01/17(水) 18:52
>>658
WindowsCE 版の VC&VB(英語)なら、無償ダウンロード可能
http://www.microsoft.com/mobile/downloads/emvt30.asp
WindowsCE の日本語版なら、送料かかるけど、入手可能。
http://www.microsoft.com/japan/windows/embedded/ce/tools/emvt30order_J.asp
661デフォルトの名無しさん:2001/01/18(木) 15:46
サービスへ登録(インストール)する時、
「手動」でなく「自動」で登録できる?
662デフォルトの名無しさん:2001/01/18(木) 16:02
CreateServiceのdwStartTypeにSERVICE_AUTO_STARTを指定すべし。
663デフォルトの名無しさん:2001/01/18(木) 16:05
VCからExcelのワークシートを読み込みたいんですが、参考になるサイトとかありませんか?
664デフォルトの名無しさん:2001/01/18(木) 16:15
uzeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
665デフォルトの名無しさん:2001/01/18(木) 16:16
はやくさげろ!
666秀樹:2001/01/18(木) 16:44
虚数の入った行列計算をしてるんですけど
jをどのように扱えばよいのでしょうか?教えて下さい
667秀樹:2001/01/18(木) 17:00
#include <stdio.h>
main()
{
unsigned char j;
int x,y,z,a[4][4]= {1,1,1,1,1,-j,-1,j,1,-1,1,-1,1,j,-1,-j},
b[4][1]={1,1,0,0} , c[4][1]={0,0,0,0};

for(x=0; x<4; x++)
for(y=0; y<4; y++)
for(z=0; z<1; z++)
c[x][z] += a[x][y] * b[y][z];
for(x=0; x<4; x++) {
for(z=0; z<1; z++)
printf("%3d",c[x][z]);
printf("\n");
}
}
これからわかりません
668デフォルトの名無しさん:2001/01/18(木) 17:29
データ構造が間違ってる
typedef struct DATA{
 int real ;       //値
 int imaginary;    //虚数
}DATA
最低でもこれくらいだろ?
もっとも、Bit演算使えばもっと楽にできる

また、Cには
complex型というものもあるが
どうせ、宿題かなんかだろ?
669デフォルトの名無しさん:2001/01/18(木) 20:29
CTreeCtrlって難しくてわからないんですが。。
どなたか教えて頂けませんか?教えて君で申し訳ないと思うんですが、
教えて君にならざるをえないほどわからにゃい。。
670ageあし鳥:2001/01/18(木) 20:32
>また、Cには
>complex型というものもあるが
また、C++には
complex型というものもあるが
671デフォルトの名無しさん:2001/01/18(木) 20:44
>>669
何処まで分かってるのか何がわからないのか
それを提示するのが礼儀、ってか常識
672669:2001/01/18(木) 21:02
そうですね。。。スマソ
とりあえずサンプルを見ながらツリーの中に自分の好きな項目を
列挙することができた。コピペなのがさびしいが。。。
 すぐに詰まると思うんでまた現れます。
673デフォルトの名無しさん:2001/01/19(金) 01:45
どうもCStringで納得いかない点が・・・
なんでGetAtで最後の文字取得が出来ないんでしょ?

nIndexが0以上はわかるけど、なんでGetLength()より小さくないといけないの?
674デフォルトの名無しさん:2001/01/19(金) 01:52
GetLength()-1
675デフォルトの名無しさん:2001/01/19(金) 01:52
GetBufferの方が納得逝かん
676デブの名無しさん:2001/01/19(金) 01:56
VC++7っていつでるの?
677デフォルトの名無しさん:2001/01/19(金) 01:59
>>675
いまHELP見たけど・・・
引数がよくわからん・・・・
678デフォルトのゲイツさん:2001/01/19(金) 02:05
>>676
C#に移行しなさい!!
679でるpはい:2001/01/19(金) 02:07
delphiとどっちがいいの?難しさとかじゃなくて、機能性。
作ったプログラムの動作の軽さ
680デフォルトの名無しさん:2001/01/19(金) 02:15
MSDNライブラリのお気に入りは、どこに保存されてますか?
いちど消えちゃったんで、バックアップろとっときたいのですが、、、
681デフォルトの名無しさん:2001/01/19(金) 02:51
>>679
作るの簡単+見た目も綺麗がD。
実行速度が若干速いのがCらしい。
自分はVCしか使ったことないけど。
まあDの方が作られたの新しいから優れているのは当り前?なんじゃない?
682673:2001/01/19(金) 10:32
CStringの続き・・・
なんで一文字の文字列にDelete使えないの??
はぁ・・・文字列クラス自前で準備したほうがいい??
CStringListつかってるけど、全部自前の方が良いのかな・・・・
683デフォルトの名無しさん:2001/01/19(金) 10:41
ダイアログベースのアプリを作っています。
エディットコントロールを張り付け複数行にメッセージを書きたい(プログラム側から)のですが
改行してくれません。。
エディットコントロールの方は「スタイル」タブの"複数行"、"改行を許可"にチェックしてあります。
CEditはceとして、
CString cs = "一行目\n二行目\n\r三行目";
ce.SetWindowText(cs);
としてあります。

結果は「一行目・二行目・・三行目」です。。教えて下さい。
684デフォルトの名無しさん:2001/01/19(金) 10:46
>>683
改行は
\r\n
じゃなかったっけ??
685デフォルトの名無しさん:2001/01/19(金) 10:53
サービスでスタートアップ時から「開始」に設定するにはどうすれば
いいの?
686683:2001/01/19(金) 10:54
>>684
すいませんん。。\r\nでしっかり改行されました。。
MSDNを探したんですが、見つからなくて。どうもありがとうございます!
687673:2001/01/19(金) 12:13
>>674
あ・・・・
もしかしてGetLengthは'\0'含めてる??

もしそうだったらただのアホだ・・・
688673:2001/01/19(金) 12:19
そうだよ・・・・[文字列の長さ-1]までに決まってるよ・・・
MS様ごめんなさい、逝って来ます
689名無しさん@お腹いっぱい。:2001/01/20(土) 15:51
pDC->BitBlt(省略);←ビットマップを連続して書き込むとチラつくけど、
ゲームとか大量のスプライトを使っているのにぜんぜんちらついてないのは
なぜ?ちらつかない解決方法おしえて。
690SAGE:2001/01/20(土) 19:41
>689

いったん裏画面に描いてからそれをBitBlt一発で転送。などなど。
691デフォルトの名無しさん:2001/01/20(土) 20:52
>690さん 裏画面の最初だけでもソースで教えてください。
バグがあるらしく画面に描画できないんです。(コンパイルは通る)

692SAGE:2001/01/20(土) 22:00
CDC subDC;
CBitmap subBmp, *pOldBmp;

subDC.CreateCompatibleDC( pDC );
subBmp.CreateCompatibleBitmap( pDC, width, height );
pOldBmp = subDC.SelectObject( &subBmp );

つーかゲームなら素直に DirectX 使った方が。
693デフォルトの名無しさん:2001/01/20(土) 22:53
692さん できました。ありがとうございます。
     
694デフォルトの名無しさん:2001/01/20(土) 23:30

 ゲームの裏画面としてはDIBSectionが良いと思う。
CBitmapだとフレームバッファベースでないから画像
処理がほとんど出来ないし、DirectXは扱いにくいか
らね。
695スポックの耳:2001/01/21(日) 01:21
MFCを使ってダイアログベースのアプリを作っています。
メニューの扱い方が分からないので誰か教えてください。

ダイアログリソース作成時にメニューリソースを関連付けて、メニュー
バーを張り付けているのですが、いざメニューの処理を実装しようと
する段階で行き詰まってしまいました。
メニュー項目の有効/無効、チェックを切り換えるためにMSDNのサンプル
にならって メニュー項目の ON_UPDATE_COMMAND_UI ハンドラを作った
のですが、メニューがプルダウンしたタイミングに呼び出されず、項目を
選択した際に呼ばれます。
更新ハンドラを使った方法はダイアログ(CDialog)ベースの場合は使えない
のでしょうか?
696デフォルトの名無しさん:2001/01/21(日) 02:26
>更新ハンドラを使った方法はダイアログ(CDialog)ベースの場合は使えない
>のでしょうか?
そうらしい。
ひどいもんだね。
自分でWM_INITMENUPOPUPで処理するしかなさそう。

>メニューがプルダウンしたタイミングに呼び出されず、項目を
>選択した際に呼ばれます。
これは正常な動作。本当に実行していいかチェックしている。
697激・初心者:2001/01/21(日) 14:11
MFC(ダイアログベース)にActiveX(OCX)を埋め込み、
MFCからOCX内の関数にアクセスしようとすると例外が発生してしまいます。
MSDNの通りに処理してるはずなんですが・・・。

CoCreateInstanceするだけじゃocxは使えないのでしょうか?

#ついにここに書き込んでしまった・・・。

698デフォルトの名無しさん:2001/01/21(日) 14:20
>>697
ソース見ないと分からないな
699激・初心者:2001/01/21(日) 15:32
>698
えー私が行ったやり方は
クラスウィザードで「クラスの追加→タイプライブラリから」を行い。
ダイアログにOCXを貼り付けます。

そしてオブジェクトの生成部分は以下の通りです。

HRESULT hr = CoInitialize(NULL);
if (FAILED(hr)) {
MessageBox("CoInitialize Failed");
MyExit(); //終了関数に・・・
}
else {
MessageBox("CoInitialize succeeded\n");
}

IFoo * pIFoo;
hr = CoCreateInstance(CLSID_MyObject, NULL, CLSCTX_ALL,
IID_IFoo, reinterpret_cast<void **>(&pIFoo));
if (FAILED(hr)) {
MessageBox("CoCreateInstance Failed");
MyExit() //終了関数に・・・
}
else {
MessageBox("CoCreateInstance succeeded");
}

pIFoo->Func1(); //OCX内の関数へアクセス ←ここで例外エラー

多分なにか初歩的なミスをしているんでしょうね^^;
700698:2001/01/21(日) 23:26
ごめん。流石にこれじゃ分からない。
とりあえずIUnknown->AddRef()は動くのか?
701激・初心者:2001/01/22(月) 10:42
AddRef()ですか?
すみません、pIFoo->AddRef()のことでいいのでしょうか^^;
普通はOCXのインスタンスだったらAddRef()はサポートされてるはずなんですよね?
やはり、基本的なところが出来てないのでしょうか?

702デフォルトの名無しさん:2001/01/22(月) 19:50
質問させてください

現在SDIで2つのView(CEditViewの派生)を持ったエディタを作っていますが、
View1(エディタ部)で起きたイベントに対応してView2(メッセージ表示部)にメッセージを表示させるにはどうしたらよいですか
具体的にはVisualCのコンパイラのように
「エラーのあった箇所をView2に表示」みたいな処理をしたいのです
View1でのエラーチェックに引っかかった場合、
その場所からView2のSetWindowText等を呼んでやったら
"protectedメンバにはアクセスできないよー"と言われてしまいました

この処理を実現させるにはどうしたらよいですか?
助けてください
703698:2001/01/22(月) 23:39
>701
とりあえずこーやってみては。

IUnknown* pUnk = NULL;
hr = CoCreateInstance(CLSID_MyObject, NULL, CLSCTX_ALL,
IID_IUnknown, reinterpret_cast<void **>(&pUnk));

hr = pUnk->QueryInterface(IID_IFoo, reinterpret_cast<void**>(&pIFoo));
pIFoo->Func1();
704デフォルトの名無しさん:2001/01/23(火) 00:20
きえあげ
705>702:2001/01/23(火) 00:41
CEditViewの派生クラスを仮に
CFoo1(編集用)
CFoo2(表示用)
とさせてください。

まずCFoo1クラスにCFoo2クラスのポインタを格納するメンバ変数を用意します。
例:CFoo2 m_CFoo2;
後はCFoo1のコンストラクタでCFoo2のポインタを格納してやればOKです。
後は普通にCFoo1の中で
m_CFoo2->SetWindowText(〜);
ってやってください。
706705:2001/01/23(火) 00:44
あ、CFoo2のポインタの格納は別にコンストラクタにこだわらなくても平気ですよ。
CFoo2のポインタにアクセスがかかる前に格納されていれば。
逆に言うとCFoo2にポインタが格納される前にm_CFoo2->ってやっちゃうと
致命的エラーになります
707705:2001/01/23(火) 00:47
705の例に記述ミス。
×:CFoo2 m_CFoo2;
○:CFoo2* m_pCFoo2;
ごめんなさいね…
ところで
m_pCFoo2 = &this;
みたいにポインタを入れてやる方法はわかりますよね?
708>707:2001/01/23(火) 00:49
thisはポインタ。
&thisはポインタのポインタだろ。
またミス。
709702:2001/01/23(火) 01:01
702です。レスどうもです
えーと現在実行中なのですが・・
エラーでまくりました。

概論はわかったのですが、肝心なところがいまいち分かってないかもしれないです

CFoo1のコンストラクタでCFoo2のthisポインタを取得するってことですか?
そんなアクロバットな事ができるんですか??
ていうか勉強不足です。すみません・・・

現在奮闘中・・・
710702:2001/01/23(火) 01:03
702です。レスどうもです
えーと現在実行中なのですが・・
エラーでまくりました。

概論はわかったのですが、肝心なところがいまいち分かってないかもしれないです

CFoo1のコンストラクタでCFoo2のthisポインタを取得するってことですか?
そんなアクロバットな事ができるんですか??
ていうか勉強不足です。すみません・・・

現在奮闘中・・・
711デフォルトの名無しさん:2001/01/23(火) 01:20
>>702
View2のEditに表示するための公開メンバ関数をView2のクラスの中に作ればいいのでは?
712>702:2001/01/23(火) 01:29
>そんなアクロバットな事ができるんですか??
CFoo2をCFoo1より先に宣言して

CFoo2 cfoo2;
CFoo1 cfoo1;
cfoo1.m_pCFoo2 = &cfoo2;

ってやればなんとかなるのでは?
コンストラクタ使うなら

CFoo1::CFoo1(CFoo2* cfoo2)
{
m_CFoo2 = cfoo2;
}
Foo::Init()
{
CFoo2 cfoo2;
CFoo1 cfoo1(&cfoo2);
//・・・後の処理・・・
}

みたいな感じでどう?
713デフォルトの名無しさん:2001/01/23(火) 01:34
class CFoo2 : public CEditView
{
public:
void SetWindowText2(LPCSTR lpText);
}

void CFoo2::SetWindowText2(LPCSTR lpText)
{
SetWindowText(lpText);
}
714702:2001/01/23(火) 01:45
702です
完全に自分の実力不足ですね・・

>>712さん
CFoo等を呼び出すのはMFC側ですよね?
自分で呼び出した記憶が無いので・・・
それとFoo1のコンストラクタをFoo2のポインタを受け取るように書き換えてみましたが、
MFCの生成したマクロに引っかかってエラー出ました
結局CFoo1の中でCFoo2のオブジェクトが作成できません・・・

>>711さん
>>713さん
試してみましたが、
CFoo1の中でCFoo2のオブジェクトが作れないので失敗しました
最後の手段としてCFoo2のコンストラクタを(MFCが生成した)protectedからpublicに変えてみましたが
いろんなところで引っかかって駄目でした
でもCFoo2のオブジェクトさえ作れればこれで実現できますね!
ありがとうございます
715デフォルトの名無しさん:2001/01/23(火) 09:29
>>702
ぱっと思いついたんですけどメインフレームかどっか上位Windowを経由して
通信できないですかね?
716デフォルトの名無しさん:2001/01/23(火) 17:44
VC++6.0 参考書を買ったばかりなのですが、
オススメの参考書なんかありますか?
717まじめな話:2001/01/23(火) 17:46
MSDN。。。いや、言いたいことはわかる。が。。。
718デフォルトの名無しさん:2001/01/23(火) 18:46
↑ほんとの話
マジで無い
中途半端なグラフィック関連に逃げていく本バッカ
719デフォルトの名無しさん:2001/01/23(火) 18:59
>>716
無い。>>717が正しい気がする。
なんか一冊本買って、ダメだとおもったらMSDNとwebで検索しよう。
新境地でコーディング出来るゾ!
720デフォルトの名無しさん:2001/01/23(火) 19:12
>>716

2ちゃんねる掲示板
721デフォルトの名無しさん:2001/01/23(火) 20:07
>>716
VC++を云々言うより、
CとかC++の文献を探した方がいいんじゃない?いい文献も多いし。
VC++から始めるのはキツイよ
とりあえずCからね。
#もし君がCかC++を既に習得してるならスマソ
722名無しさんi486:2001/01/24(水) 01:37
>>716
MFCのソース。いやまじで。
723名無しさんi486:2001/01/24(水) 01:39
あれ?MFCの事じゃないんだね。氏のう。
724702:2001/01/24(水) 03:38
ども。702です
自己解決しました
MSDNやら参考書やらでドキュメント・ビュー・アーキテクチャを勉強してやっとできました
みなさんお世話になりました(感謝)

では
725デフォルトの名無しさん:2001/01/24(水) 11:03
再起動後にファイル及びフォルダを削除するという事をしました。
まずWinNTでは、MoveFileExでファイル&フォルダを削除する事が
出来たのですが、
Win98では、対応していないためできません。
そこでWindowsディレクトリのWININIT.INIへ
[Rename]セクション、
NUL=削除したいファイルのフルパス
としたのですが、フォルダは消えません。
どうしたらいいのか教えて下さい。
726デフォルトの名無しさん:2001/01/24(水) 11:14
超初心者的質問です。

MFCのdoc&viewをやろうとしていますが、xxxView.hの、

class CxxxView : public CView
{
protected://....

の部分の、
//アトリビュート
//オペレーション
//オーバーライド
//インプリメンテーション

ってなんですか?
自分で新たにCxxxViewクラスで使うメンバ変数なんかを書き加えるときは、
オペレーションの部分でいいのでしょうか?
727デフォルトの名無しさん:2001/01/24(水) 13:28
>>726
お好きにどうぞ。コンパイラはコメント文は読まない。
728デフォルトの名無しさん:2001/01/24(水) 15:25
コメントにSunマンセー糞M$死ねとか書くと原因不明のエラーがでたりして。
729名無しさん@お腹いっぱい。:2001/01/26(金) 00:03
AfxBeginThreadでスレッドを作って、そのスレッドの中からウインドウを操作したいのですが、どうしたら良いのでしょうか?
スレッドないの変数をTimerで定期的に読み出す方法以外に良い方法があれば
教えてください。
730デフォルトの名無しさん:2001/01/26(金) 00:34
>>729
その thread に「操作されるウィンドウ」のハンドルを渡しておいて、thread 内からウィンドウメッセージを投げる。
731デフォルトの名無しさん:2001/01/26(金) 00:48
ウルトラ初心者な質問です!
外部依存関係の中にファイルを追加したいのですけど、どうやって追加すればよいのでしょうか?かれこれ一時間悩んでいます。
732デフォルトの名無しさん:2001/01/26(金) 00:51
何の話だ?makefile書けやw
733デフォルトの名無しさん:2001/01/26(金) 01:05
>>731
ファイルをプロジェクトに追加してください
734デフォルトの名無しさん:2001/01/26(金) 10:18
教えてください。
ダイアログベースで自由に描画(SDIのドキュメントのように)出来るように
するにはどうしたら良いのでしょうか?
735名無しさんi486:2001/01/26(金) 10:49
>>734
OnPaint()に書けや
736デフォルトの名無しさん:2001/01/26(金) 10:52
>>735
On_Paintじゃダイアログごと書き直す事にならないですか?
737名無しさんi486:2001/01/26(金) 11:47
>>737
ダイアログウィンドウ内に描かなきゃどこに描くんだ?
って言うか、やってみた上での指摘だろうね?
738デフォルトの名無しさん:2001/01/26(金) 11:58
>>737
オブジェクトとして、その中を書き換えたいんですが、
ダイアログごと描画しなおすと、ボタンや描画しなおさなくて良いものまで
描画しなおすでしょ。
オブジェクトとしてです。734での言葉が足りてませんでした。
すみません。
ボタン操作やタイマー等で、オブジェクトの内容を描画しなおしたいのです。
今はダイアログ自体に描画してみたりしてるんですが、
描画しなおすときにダイアログごと描画しなおすのがどうも嫌なんで。
739デフォルトの名無しさん:2001/01/26(金) 12:21
MFCの話になってるの?

SDKなら
オブジェクトをサブクラス化すれば解決
ぬぬ?そんな面倒なことしなくても
ハンドル取ってきてメッセージなげればできそうな気がしてきた

MFCの知識はないんでそっちの方はだれかに任せます
740デフォルトの名無しさん:2001/01/26(金) 13:25
画面上に実物大で表示したいのですが、画面の解像度を取得するには
どうすればいいのでしょうか。CDC::GetDeviceCaps で取得できる値は
なぜかフォント(コントロールパネルで設定するやつ)によって変わる値
のようなのです。
741デフォルトの名無しさん:2001/01/26(金) 15:08
できました。
742デフォルトの名無しさん:2001/01/26(金) 15:29
クラスビューの グローバル の中に新規フォルダを作るにはどうすればいいのでしょうか?
743名無しさんi486:2001/01/26(金) 16:25
一連の名無しが同一人物では無いことを祈るが...

>>734
解決したんか?すまんが、やりたい事がいまいち掴めない。表現技法の向上を切に望む
なんで全部書き直したくないんの?ちらつくから?
CDC* pDC = GetDC();
でデバコン取って描いちゃえば?そーゆー事じゃなくて?
あとはクリップリージョン使うとか?

>>742 作れないんじゃない?
744デフォルトの名無しさん:2001/01/26(金) 16:53
>>743
言葉足らずで本当に申し訳ないです。
きちんと書くと、最初SDIでドキュメントを状況に応じて表を描画
(ボタンはツールバーを改造して)、しかしそのドキュメント上に
時計を貼れとか言われて、ダイアログベースにする事になり、
ダイアログ上で表を描画したいのです。
最初全部オブジェクトでやろうとしたら表の中身が255を超えるので
ダメでした。
745名無しさんi486:2001/01/26(金) 17:04
>>744
ごめん、まだわかんないや。オレの方がヴァカなのか?

整理すると
・255以上のコントロールを張ってNGだった
・代わりにクライアントへ直書きしたい
ここまでは合ってる?
で、何がわからないの?OnPaint()以外からの描写方法?

リストコントロールでも使ったら?
746デフォルトの名無しさん:2001/01/26(金) 18:39
WinMeでVC使ってるの俺だけか?
Meじゃ使えない筈なんだがな・・・・・。
747デフォルトの名無しさん:2001/01/26(金) 19:53
>>743
>>742 作れないんじゃない?

 C 言語のみのですと、クラスビューは、無力という事でしょうか?
 C 言語のみの人は、どうやって、ソースの中を移動するの?


748ヘボ学生:2001/01/26(金) 21:52
私は今は学生でVC++は学割で1万ちょっとで買えるんですが、それ以外のものって学割版に比べるととても高いですが、社会人の方々は、それらをちゃんと何万円も出して買われてるのでしょうか?
749>748:2001/01/26(金) 22:18
多くの社会人は会社が買ってくれます。
多くのフリーや自営業の方は自分で買ってます。

一部の社会の底辺よりさらに下に位置している会社や人間は違法行為で入手しています。
750VC++ VB 安いかな?:2001/01/26(金) 22:21
751デフォルトの名無しさん:2001/01/26(金) 22:41
ホント学生って危機感ないよな。
752デフォルトの名無しさん:2001/01/26(金) 23:33
>>746
俺もMeで使えてるよ。
753ヘボ学生:2001/01/26(金) 23:39
>750
CDとCDケースのみって、これが違法コピーって奴ですか?
754729:2001/01/27(土) 00:14
>>730
それは試したことがあるんですが、ASSERTが出てしまった記憶があります。
別スレッドのウインドウハンドルをいじる時も、ちゃんとウインドウハンドルに
ロックをかけてやらなければならないのかなーと思っているのですが、
相手がListViewとかだと、いつロックをかけてよいのやら、わかりません。
755デフォルトの名無しさん:2001/01/27(土) 06:58
>>754
それは君のやり方が悪いのでは?
メッセージ送れるはずだよ。
#define MY_MW_TIMER (WM_USER)
とかユーザー定義のメッセージを使ってメインウィンドウにメッセージを送る。
メインウィンドウにそのメッセージが送られたら
>スレッドないの変数をTimerで定期的に読み出す方法(729より抜粋)
でやってる方法で読み込めばできるはずだよ。
756デフォルトの名無しさん:2001/01/27(土) 07:55
 MFCのDOC/VIEWアーキテクチャのツボみたいのがなかなか掴めていない厨房プログラマですけども、とりあえず始めるにあたって、一つ教えていただけませんか。
 MFCアプリをウィザードで作るとC***App, C***Doc, C***View, CMainFrame, CChildFrame(MDIの場合)が作成されますが、これに、例えば画像処理や各種デバイスからの入出力を扱うクラスを加える場合、一体どういった形で組み込むのが常道なのでしょうか。C***AppあるいはC***Doc内に埋めこむのがいいのか・・・、グローバルでインスタンスを作ってどこからでも参照できるようにするのか等等、一つ教えていただけないでしょうか。
 よろしくおねがいします。
757デフォルトの名無しさん:2001/01/27(土) 08:45
CDocumentの派生クラスに画像データクラスを持たせて、
それを返すメソッドを追加して、
操作はCViewの派生クラスからCDocumentへのポインタを取って、
CDocumentのデータクラスを返すメソッドを呼ぶ。
CDocumentに直接データを持たせると移植がめんどくさくなるのでアウト
758hreo:2001/01/27(土) 13:45
今、課題でオセロゲームをCで作っているんですが、
ぜんぜん強くありません。
一応、なるべく角はとらせる、そして、その角の横三つを相手にとらせる、
で、あとは出来るだけ多くとれる所に置くっていう思考ルーチンです。
この思考ルーチンをどのように改良すれば、強くなるのでしょうか?
どなたか制作経験のある方、御教授頂けたら幸いです。
759デフォルトの名無しさん:2001/01/27(土) 14:04
製作経験は無いが・・
相手の打てる手が少なくなるような手を打つ。
とういうのはどうでしょう。(根拠無し)
760デフォルトの名無しさん:2001/01/27(土) 14:15
>>758
オセロは定石がいくつかあるから、単純にパターンで持ってもいいかもね。
有名な中央の4*4から出ないように打って、
相手が出たらその部分を潰すというのだけでも結構有効かも。
あとは置ける場所に優先順位つけるというのはどうかな?
例えば、相手が手だし出来ない、いつでも取れる部分は
優先順位低くするとか。
出来たらアプキボンヌ。
761デフォルトの名無しさん:2001/01/27(土) 15:17
出来るだけ多く取れる手でも次の相手の手がより多く取り返される。
少なく取る手だが次の相手の手がより少なくしか取れない。
要は先読みでしょう。局面の評価関数を作って、相手の手も含めて
再帰的に計算し、もっとも有利な場所に置く。
序盤・中盤・終盤で評価関数の内容を変える。残り手数が一定数に
なったら最終手まで読み切る。
762デフォルトの名無しさん :2001/01/27(土) 15:28
クラスをスタックの中に作らないようにする方法を教えてください。
具体的には、デストラクタでdelete thisを行っているので、
必ずクラスをヒープに作らせるようにしたいのですが、
それが出来ないように制約を加えたいのです。

newを行うのではなく、デザインパターンのfactoryパターンを使うのがいいのでしょうか?
私が読んだ本と少し適用例が違ってくるのですが
763デフォルトの名無しさん:2001/01/27(土) 15:41
コンストラクタをprivateにして、
そのかわり生成関数を用意する。
764hreo:2001/01/27(土) 19:26
>>759-761
どうも、レスありがとうございました。
これらの考えを組み込んで、作り直してみます。
765デフォルトの名無しさん:2001/01/27(土) 21:05
代表的なプログラム言語を5個あげろという課題が出たのですが分かる方
教えてください。本を見てもいまいちわかりません・・・。
766デフォルトの名無しさん:2001/01/27(土) 21:11
>>765
パターン1: C, Perl, Scheme, Java, C++
パターン2: sed, AWK, Perl, C, sh
パターン3: COBOL, Fortran, BASIC, C, VB
パターン4: Ruby, Python, Perl, PHP, C
パターン5: Java, Smalltalk, C++, Ruby, Scheme
好きなの使え。
767766:2001/01/27(土) 21:12
shはプログラム言語か?という議論が出てきそうだな。
と予測sage。
768766:2001/01/27(土) 21:13
Pascal忘れてた。
769デフォルトの名無しさん:2001/01/27(土) 21:15
代表的って有名ってことか?
有名なのといったらJAVAとかC/C++、BASIC
あとHTML(ワラ

#間違ってたらスマソ
770デフォルトの名無しさん:2001/01/27(土) 21:19
アセンブラもわすれちゃいやん
771デフォルトの名無しさん:2001/01/27(土) 21:27
>>765
Eiffel, Sather, Dylan, Oberon, Sisal
772デフォルトの名無しさん:2001/01/27(土) 22:12
どうでもいいが、765はスレちがい。
773デフォルトの名無しさん:2001/01/27(土) 22:23
765です。参考になりました。答えてくださったみなさん、どうもありがとうございます。
774744:2001/01/29(月) 10:51
>>745さん
どうもありがとうございました。
結局InvalidateRect()で対応しました。
わざわざありがとうございました。
775デフォルトの名無しさん:2001/01/29(月) 12:22
VisualStudio.NETの正式版はいつごろ発売されるのでしょうか?
776デフォルトの名無しさん:2001/01/29(月) 18:32
初心者的質問で恐縮なのですが、VC6でDOC/VIEWを使ってMDIのアプリをウィザードで作るのですが、アプリを起動するとデフォルトでwindowが一枚開きますよね。アプリ起動時にchild windowが一切開いていないmain frameだけの状態にしたいのですが、いったいどこを変更したらよいのでしょうか。よろしくお願いします。
777デフォルトの名無しさん。:2001/01/29(月) 19:04
>>775
今年の年末らしいよ777わーい
778デフォルトの名無しさん。:2001/01/29(月) 19:05
>>776
Cから逝ってみよう!!
779デフォルトの名無しさん:2001/01/29(月) 20:44
>>776
CWinApp から派生したクラス(仮に CHogeApp) の メンバー関数 CHogeApp::InitInstance() の中に、
以下の部分がありまっしゃろ。

  // コマンドラインでディスパッチ コマンドを指定します。
  if (!ProcessShellCommand(cmdInfo))
    return FALSE;

これをコメントアウトしなはれ。

  // コマンドラインでディスパッチ コマンドを指定します。
  //if (!ProcessShellCommand(cmdInfo))
  //  return FALSE;
780デフォルトの名無しさん:2001/01/29(月) 20:53
>>779

if(cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew)
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;

このように書き換えてくれ。
781779:2001/01/29(月) 22:07
>>780
いやじゃ!
782780:2001/01/29(月) 22:40
>>781
明らかに間違いなんだよ。
783デフォルトの名無しさん:2001/01/29(月) 23:11
自分で作った関数がどこで定義されているのかわがんね。
class がない。教えれ。
784デフォルトの名無しさん:2001/01/29(月) 23:28
>>783
「ファイルから検索」しなさい
785デフォルトの名無しさん:2001/01/29(月) 23:42
>>784
なるほどめっかった。ありがとう
786デフォルトの名無しさん:2001/01/31(水) 21:42
MFC使ってます。
クラスAのメンバにクラスBを入れています。
クラスBのメンバ関数からクラスAのメンバを
参照したいのですが、どうすればよいでしょう。
787デフォルトの名無しさん:2001/01/31(水) 22:01
B::setRefToA(classA *pa)

を作る(w
788ボログラマー:2001/01/31(水) 22:03
>>786
クラスBのメンバにクラスAのポインタ追加して、
クラスAの初期化時にクラスBに追加したポインタにクラスAのthisを代入。

この場合、クラスB定義する時にクラスAが未定義とか言われるから、
クラスB定義前に、
class クラスA;
とするように。
789名無しさん:2001/02/01(木) 05:36
C言語初心者です。
VisualC++を使っています。
実行結果がDOSプロンプトに表示された時、すぐDOS画面が閉じて
しまって実行結果をよく見ることが出来ません。
DOS画面を閉じないようにしたいのですが、どうすればいいのですか?
教えてくださいませ
790デフォルトの名無しさん:2001/02/01(木) 06:16
22 名前:初心者投稿日:2001/01/23(火) 03:29
2つ疑問があるのですが
VC++6でDOS画面での実行結果がすぐに閉じてしまう。
あと、コマンドライン引数を打ち込むことができない。
よかったらおしえていただけますか。


23 名前:>22投稿日:2001/01/23(火) 03:36
[プロジェクト]-[設定]-[デバック]-[プログラムの引数]
で設定できると思う。24 名前:>22投稿日:2001/01/23(火) 03:45
>VC++6でDOS画面での実行結果がすぐに閉じてしまう。
!ボタンなら閉じないと思う。
それか、main()の最後に、_getch()とでも書いておく。
791スレッドクン:2001/02/01(木) 10:59
AfxBeginThreadでワーカスレッドを生成して、スレッドを途中で殺したい場合はみなさん
どのようにしているのでしょうか?

へぼいやり方ですが、メインスレッドからフラグを立てて、ワーカスレッド
内からAfxEndThreadをすることにしました。

ワーカスレッドの自殺まちは以下のコードです。

DWORD dwCode;
LONG ret = ::GetExitCodeThread( m_pThread->m_hThread, &dwCode );
if ( ret && dwCode == STILL_ACTIVE )
{
// スレッドが動作中。
WaitForSingleObject( m_pThread->m_hThread, INFINITE );
MessageBox("スレッド死んだ・・・");
}

この場合ですと、
「// スレッドが動作中。」のところでワーカスレッドが自殺した場合、
そのハンドルも消えるんですよね?
そしたら、やはりWaitForSingleObjectのパラメタm_pThread->m_hThreadは
例外エラーになりまずいですよね・・・。

Afx****Threadを使ったのが間違い?
792デフォルトの名無しさん:2001/02/01(木) 11:28
>>791
try/catch で例外を隠す
793デフォルトの名無しさん:2001/02/01(木) 11:45
>>786
つーか、もうちょっと構造を考えたほうが・・・
参照する必要が有るなら
ひっくるめて1つのクラスが正解なのでは
どうしてもってんなら、Virtualかな?
794786:2001/02/01(木) 12:44
>>788

サンクス。何とか逝けました。ついでに質問。

>クラスB定義前に、
>class クラスA;
>とするように。

クラスBを定義しているヘッダにクラスAを定義しているヘッダを
インクルードするのはダメ?何故か未定義エラーが出るんだけど。
classキーワードを付けてやることにより、コンパイラは
プロジェクト内のすべてのクラスをサーチするのでインクルードは
必要ないってことですかね。
でもclassキーワードでなくインクルードじゃないと通らない場合も
ありますよね。その辺が今混乱してて分からないのです。

変な事いってたらスマソ。
795ボログラマー:2001/02/01(木) 13:20
>>794
>クラスBを定義しているヘッダにクラスAを定義しているヘッダをインクルードするのはダメ?
(a_src.h)
#ifndef __A_SRC_H__
#define __A_SRC_H__
..実装..
#endif
みたいな事すれば通る。

クラス内に実体がある場合は、
>class クラスA;
とかしてもダメ。
上の例だとポインタだけだったからOK。
関数のプロトタイプ宣言と同じ感じ。
796786:2001/02/01(木) 13:38
>795

素早いレスサンキュ。よー分かりました。
797デフォルトの名無しさん:2001/02/01(木) 18:35
常に手前に表示ってどうやるのですか?
798デフォルトの名無しさん:2001/02/01(木) 18:36
age
799デフォルトの名無しさん:2001/02/01(木) 18:38
>>795
何階層まで慰けるんだっけか?
800ボログラマー:2001/02/01(木) 19:29
>>799
ワオ!ヘッダのネストに制限あんの!?猫耳だよ。違った、初耳だよ。
コンパイラに依存すんの?それともANSI規格関係?教えてplz.
801ボログラマー:2001/02/01(木) 20:48
>>797
SetWindowPos()。詳しくはMSDNで。
ただ、Win2000で期待した動作しないとかfj.os.ms-windows.programmingで
語られてるので、興味があれば覗くべし。
802デフォルトの名無しさん:2001/02/01(木) 21:46
>>800
ANSIで保証されてるネストは8までらしい。
803デフォルトの名無しさん:2001/02/02(金) 00:24
>>801

あんがと。でけた。
804デフォルトの名無しさん:2001/02/02(金) 09:48
Spyの解説サイト きぼんぬ。
805デフォルトの名無しさん:2001/02/02(金) 10:53
806デフォルトの名無しさん:2001/02/02(金) 11:53
>805

Sorry, I can't read English.
807デフォルトの名無しさん:2001/02/02(金) 13:07
>>806
    | ̄ ̄ ̄ ̄|
  _|____|_
   / /  \_ヽヽ
   |ノ /   \ ハ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    (| ・  ・ |)  < 逝ってよし!!
   丿ゝ  o ノ    \________
    厂 ̄ ̄ ̄|
   /  ̄ ̄厂/丶
   / )  ○  | \
  ○丿     丶○
   (⌒⌒⌒⌒⌒)
    ⌒|⌒|⌒|⌒
     |vv|vv|
    /_T_ \
808ボログラマー:2001/02/02(金) 13:08
>>802
鬱だ・・・これからは気をつけてコーディングします。
>>806
記述は出来るのか(藁
809デフォルトの名無しさん:2001/02/03(土) 02:43
ge
810デフォルトの名無しさん:2001/02/03(土) 02:52
Spy++ (SPYXX.EXE) is a Win32-based utility that gives you a graphical view of the system?s processes, threads,
windows, and window messages.

Spy++(SPYXX.EXE)はWin32ベースのユーティリティでシステムプロセス、スレッド、ウィンドウ、ウィンドウメッセージの
グラフィカルビューアをあなたに提供します。

811タイマー:2001/02/05(月) 02:45
無知な初心者です。
SetTimerの使い方がわかりません。

SDIのプログラムを作ってます。
ファイルから読み込んだ数値データを、動画グラフとして描画しようと思ってます。
データをドキュメントクラスに読み込んだあと描画するので、描画はOnDrawではなく、
ビュークラスにDrawGraph()という自作関数で行います。
それで、データを読み込んだ後、メニューバーの「スタート」をクリックして動画を始めたいのです。
DrawGraphで1枚描き、タイマーで全域をクリアして、DrawGraphを呼び出し次の1枚を描く、、、
というのを繰り返したいのです。

SetTimerは、どこに記述すれば良いのでしょうか?
DrawGraphの定義の中ですか、それとも違う場所ですか。
そして「スタート」で呼び出す関数は、SetTimer、DrawGraphのどちらでしょうか?

どーぞよろしくお願いします。
VC++6.0、
812デフォルトの名無しさん:2001/02/05(月) 10:27
>>811
>SetTimerは、どこに記述すれば良いのでしょうか?
「スタート」ボタンのイベントハンドラ。

>そして「スタート」で呼び出す関数は、SetTimer、DrawGraphのどちらでしょうか?
初っ端に描画したければDrawGraphとSetTimer。
最初の描画は最初の大麻イベントのときでよければ、SetTimerのみ。
813デフォルトの名無しさん:2001/02/05(月) 12:28
Visual C++で画面だけは、表示しっぱなしで、
ある時間になると、内部処理を開始するという事は、
どのようにしたらよろしいでしょうか?
814オートメ:2001/02/05(月) 12:42
ActiveX ControlWizardでOCXを作成中に
クラスウィザードでいきなりオートメーションの追加(プロパティと
メソッド)が出来なくなった・・・なんでー???

815デフォルトの名無しさん:2001/02/05(月) 13:16
>>813
ワーカスレッドを走らせといて、指定時間になったら、適当にシグナル上げるl。
816超初心者:2001/02/05(月) 13:29
たくさんエディットボックスが配置された画面で、
エディットボックスに入力された値をソース内で使用するため、
メンバ変数に取り込む・・・というのは、基本中の基本だと思うのですが、
この場合、皆さんはどのような手法を用いて、メンバ変数に
取り込まれているのでしょうか?

色々と勉強用のホームページをまわってみたのですが、それぞれ特色のある
手法が公開されていて、超初心者の私としては、どれがスタンダードなのか
分かりません。

手法と、それを使っている理由なんかも教えてほしいのです。
よろしくお願いいたします。
817オートメ:2001/02/05(月) 14:33
>814
すんません。
ソースセーフで読み取り専用になってました^^;
818デフォルトの名無しさん:2001/02/05(月) 14:54
>>813
SetTimerを使え。
819デフォルトの名無しさん:2001/02/05(月) 15:10
>>816
GetWindowTextってそれ用のAPIがあるんあから、それを使う。
MFCだったらClassWizardを使って、メンバ変数とコントロールを関連付けする。

というくらいしか思いつかないけど、コレ以外になにかあるんかな?

820デフォルトの名無しさん:2001/02/05(月) 15:15
>>816
819さんみたいにしてコントロールじゃなくて値にしてUpdateWindowでも良いと思う。
この方が楽かも。
821デフォルトの名無しさん:2001/02/05(月) 15:47
>>820

オレはUpdateWindowって再描画させるAPIって認識なんだけど、
どう使えばエディットコントロールからテキストをひろえるの?
822デフォルトの名無しさん:2001/02/05(月) 15:54
>>821
すまん、 UpdateData(TRUE); だ。
823デフォルトの名無しさん:2001/02/05(月) 16:00
819>>822
いや、俺の言ってる「ClassWizardコントロールと変数を関連付ける」ってのは
DDX/DDVあたりのことを言ったつもりなんだけどね(~_~;)
824デフォルトの名無しさん:2001/02/05(月) 16:02
>>823
×ClassWizardコントロール
○ClassWizardでコントロール
825名無しさん@お腹いっぱい。:2001/02/05(月) 16:39
VC++で初めてGUIプログラム組まされるのですが、
まずはscrible(?)からなんでしょうか?
826デフォルトの名無しさん:2001/02/05(月) 16:48
>>823
マップするってことだよね?
そこで、コントロールじゃなくて、値に設定する。
で、EditBoxならたとえば、m_str(DDX用変数)
UpdateData(FALSE); //DDX変数からダイアログにデータ設定
UpdateData(TRUE); //ダイアログからDDX変数にデータ設定
827デフォルトの名無しさん:2001/02/05(月) 16:57
トレイアイコンを作るダイアログベースのアプリケーションで、
起動時にダイアログを不可視にしておく方法はないでしょうか?
InitDialog()でShowWindow(SW_HIDE)しても消えてくれません。
828win歴2週間:2001/02/05(月) 17:06
以前linux+gccで動かしてた
標準入力とsocket sdの入力を待つ、というコードを
windows(dos prompt)で動かしたら
何も入力してないのにstdinの方で必ず引っかかってしまいます。
selectの返値をみたらSOCKET_ERROR(-1)になってました。

解決策、もしくは何か間違っているところがあれば、
ご教授願います。

fd_set rd;
for (;;) {
FD_ZERO(&rd);
FD_SET(fileno(stdin), &rd);
FD_SET(sd, &rd);
select(FD_SETSIZE, &rd, NULL, NULL, NULL);
if (FD_ISSET(fileno(stdin), &rd)) {
/* stdin */
}
if (FD_ISSET(sd, &rd)) {
/* socket sd */
}
}
829デフォルトの名無しさん:2001/02/05(月) 17:07
oninitDialog()でTimerまわして、ontimerである程度の時間HIDEしまくる・・・・
ごめん、これくらいしか思い付かない。
830827:2001/02/05(月) 20:28
>>829
それも考えたんですが、どーにもスマートじゃない気がして…
831SAGE:2001/02/05(月) 20:58
>>827
試してないからうまくいくか知らんけど、モードレスダイアログにしちゃえば?
832デフォルトの名無しさん:2001/02/06(火) 00:50
ボタンやテキストボックスを画面に貼り付ける際に選択する
アイコンがいろいろ並んでいるウィンドウを消しました。
元に戻す方法がわかりません。これでは画面に何も貼り付けられないです。
833デフォルトの名無しさん:2001/02/06(火) 01:19
>832
ツールバーの上で右クリック。
出てくるメニューのリソースをチェックする。
834デフォルトの名無しさん:2001/02/06(火) 01:38
>>828
1. Winsockのselect()はUNIXにおけるようにファイル記述子一般を対象とする
システムコールではなく、socket descripterにしか使えない。端的に云って、
windowsでは「ソケット」は「ファイル」の一種ではない(のだが、ReadFile
やWriteFileのようなAPIで読み書きすることも出来るのでややこしい)。

2. fileno()により得られる「ファイル記述子」は、UNIXとは違いkernelレベル
の資源ではなく、ファイルポインタ同様Cランタイムにより管理される
資源に過ぎない(同様にopen/read/write/...等もシステムコールではなく、UNIX
システムコール風のI/Fをエミュレートする単なるライブラリ関数である)。

一般にWinsockの世界はWinsockの世界で閉じていて、ソケットは専用のWinsock
APIを使ってアクセスするものだと思っておいた方が無難。
835デフォルトの名無しさん:2001/02/06(火) 01:42
>>827
ダイアログのプロパティで不可視にしてもだめ?
やっぱり試してないのでなんとも言えないけど
836デフォルトの名無しさん:2001/02/06(火) 01:44
どうもありがとうございます〜。>833
いろいろやったんですがわかりませんでした。
ツール->カスタマイズ->ツールバーでもでますね。
837デフォルトの名無しさん:2001/02/06(火) 01:46
サブクラス化したリストボックスのプロシージャで
初期化を行いたいのに、WM_CREATEでひっかかりません。
なにか良い方法はありませんか?
838デフォルトの名無しさん:2001/02/06(火) 01:51
サブクラス化したリストボックスのプロシージャ内で
初期処理を行いたいのに、WM_CREATEやWM_INITDIALOGでは
引っかかってくれません。
何か良い方法はありませんか?
839デフォルトの名無しさん:2001/02/06(火) 06:37
>838
プロシージャの外でも初期化できると思うけど。
具体的にどんな処理したいの?
840デフォルトの名無しさん:2001/02/06(火) 06:39
プログラムフォルダ(c:\Program Files)を取得する方法ってある?
GetWindowsDirectory みたいなので一発で取れる方法が見つからない。
今は GetWindowsDirectory で取得したフォルダのドライブ部分(c:\)に
自分で Program Files をくっつけて作ってるんだけど。
APIで何かないもんですか?
841デフォルトの名無しさん:2001/02/06(火) 07:15
Program Filesは特別なフォルダじゃないから
無理じゃないのかな(違うかも)。
842SAGE:2001/02/06(火) 08:17
>840
俺もそれ知りたい。

レジストリには書いてあるから、そこから取ってくりゃ
いいんだけど、スマートじゃないしなぁ。
843デフォルトの名無しさん:2001/02/06(火) 08:39
>>840
SHGetSpecialFolderLocation でとれなかったっけ?
844win歴2週間:2001/02/06(火) 08:55
>>834
大変勉強になりました。
当分UNIXのことは忘れます。
845デフォルトの名無しさん:2001/02/06(火) 09:05
レジストリ \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir じゃないか?>>840
ここ書き換えると大抵のインストーラは従ってくれるみたいだけど。
95年頃の古いソフトだとそこの値に関わらず C:\Program Files にインストールしようとするのもあるみたいね。
一発で取れるAPIがあるかどうかは知らない。
846827:2001/02/06(火) 09:30
自己レス

dlg.DoModal()

の代わりに

dlg.Create(IDD_DIALOG);
dlg.ShowWindow(SW_HIDE);
dlg.RunModalLoop(MLF_NOKICKIDLE);

で解決しました。
847デフォルトの名無しさん:2001/02/06(火) 11:59
>>839

プロシージャに送られてきたウィンドウハンドルから
親のウィンドウハンドルを得たいのです。
848デフォルトの名無しさん:2001/02/06(火) 12:14
データベースをオープンして、テーブルからレコードを検索し、
フィールドの値をリストビューに表示したいのですが、
レコードから読んだ値がCStringに入っています。
リストビューに値をセットしようとしたら、リストビューの値は
テキスト(?)char(?)のようでエラーが出てしまいます。
データベースから読んだ値を設定するフィールドの型を変える
とか、CStringの値をリストビューの値に設定するときか、
どちらかで対応したいのですが、その方法を教えて下さい。
849デフォルトの名無しさん:2001/02/06(火) 12:15
自己レス

サブクラス化した直後に、自作メッセージ送る事で解決させました。
でも、ちょっとスマートじゃない。。。
>>848
CStringで直接かけると思うんですけど。
だめならcharにキャストしたら良いのでは?
851848:2001/02/06(火) 12:45
リストボックスにはCStringで書き込めるようなのですが、
リストビューだと、エラーが出ます
すみません、キャストの仕方がわからない厨房なもので、
教えていただけるとありがたいのですが
じゃ、charにコピーしてそれを使うとか。

CString str; //ここに文字列がはいってるとします。
char szBuf[1024]; //1024はバッファのサイズね。適当にとってください。
ZeroMemory(szBuf, 1024);
lstrcpyn(szBuf, str, 1024);//lstrcpynを使うのは念のためね。
で szBufを使うと良いと思います。
853デフォルトの名無しさん:2001/02/06(火) 14:53
いきなりですが課題が分からなくて出来ないので
訊いてもいいですか?
これできなかったら進級が…
854848:2001/02/06(火) 15:41
>>852
ありがとうございます。無事、リストビューに内容が表示されました。
型は理解できるのですが、VC++(C言語)でのキャストの仕方が
分かっていません。
キャストの仕方も分からないくせに・・・と思われるとおもうのですが、
なにぶん、数日前にVCを買ったところなのです。
初歩的な質問に答えていただいてありがとうございます。
>>854
charにキャストって言い方はまずかったです。ごめんなさい。
C言語では、voidポインタとほかのポインタとの代入は相互に可能だったけど、
C++になって明示的なキャストを使わない限りvoidポインタと他の方のポインタに
変換できない。
たとえば、
char* psz;
void* pv;
pv = psz; //CでもC++でもOK
psz = pv; //CではOK、C++はダメ
psz = (char*)pv; //こうすると、CでもC++でもOK

今回のお話とはちょっと関係ないけど・・・

856デフォルトの名無しさん:2001/02/06(火) 17:24
>>853
学校の課題を丸投げすると確実に叩かれます。
訊き方に注意しましょう。
857デフォルトの名無しさん:2001/02/07(水) 02:56
>>856
そうそう。学校の課題と言わずに丸投げすれば良いでしょう。かしこい大人になりましょう。
858デフォルトの名無しさん:2001/02/07(水) 03:06
学校の課題です。
教えてください。
学校をサボりすぎて出席日数たりません。
サボった原因は2chに来すぎて眠いからです。
出席日数は学校のコンピュータで管理されてます。
うまくやれば記録を書き換えて進級できる気がします。
どうすれば学校のコンピュータにアクセスできますか?
自分のIDとパスワードでは出席日数の参照はできますが更新はできません。
このままでは進級できないのでどうかよろしくお願いします。
859デフォルトの名無しさん:2001/02/07(水) 03:17
>>858
英語のウォーゲームを見てみましょう。
あれの主人公が成績を書き換えてるので、同じ事をやればOKです。
860デフォルトの名無しさん:2001/02/07(水) 04:02
英語じゃなく映画じゃないのか。
861859:2001/02/07(水) 04:16
>>860
すまん、打ち間違えた。
862名無しさん@お腹いっぱい。:2001/02/07(水) 05:22
MFCからはじめると大きな壁にぶち当たるのか?
863デフォルトの名無しさん:2001/02/07(水) 06:22
>>841 >>842 >>843 >>845
どうもありがとうございます。

SHGetSpecialFolderLocation は C:\WINDOWS\スタート メニュー\プログラム が取得されうまく行きませんでした。

レジストリから読み込めは良いようですがこれでいいですか?
レジストリの使い方良く分からないんですけど。
一応動作することは確認しました。(ちゃんと取得できました。)
エラー処理は省略してあります。


char filder[MAX_PATH];
DWORD type;
DWORD size;
HKEY key;

RegOpenKeyEx(HKEY_LOCAL_MACHINE , "SOFTWARE\\Microsoft\\Windows\\CurrentVersion" , 0 , KEY_READ , &key);
type = REG_SZ;
size = MAX_PATH;
RegQueryValueEx(key , "ProgramFilesDir" , NULL , &type , (LPBYTE)folder , &size);
RegCloseKey(key);
864デフォルトの名無しさん:2001/02/07(水) 09:16
SHGetFolderPathでできるはず。やったことはない。
http://msdn.microsoft.com/library/psdk/shellcc/shell/Functions/ShGetFolderPath.htm
865デフォルトの名無しさん:2001/02/07(水) 09:38
ごめん。NTと2000じゃないとだめみたい。
>>865
Windows NT/2000: Requires Windows NT 4.0 or later.
Windows 95/98: Requires Windows 95 or later.
だから95以降でも行けるみたい。
Header: Declared in shfolder.h なんだけど
shfolder.h がないみたいなんだけど・・・
867 デフォルトの名無しさん :2001/02/07(水) 12:58
『プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。』
このエラーメッセージを回避したいのですが
どのような処置を行えばいいのでしょうか?
リビルドしても直らず、プリコンパイルを使用しなければビルドは成功します。
868867:2001/02/07(水) 13:00
すいません。
>プリコンパイルを使用しなければ
プリコンパイル済みヘッダーを使用しなければの間違いです。
869デフォルトの名無しさん:2001/02/07(水) 13:13
>>867
プリコンパイル済みヘッダーファイル (たぶん stdafx.h) をエラーが出ているソースにインクルードしましょう。
        #include "stdafx.h"
870デフォルトの名無しさん:2001/02/07(水) 15:08
PrintDialog.DoModalで出す、印刷ダイアログの初期値で用紙を横に
設定したいのですが。
871デフォルトの名無しさん:2001/02/07(水) 15:45
プロパティページのタイトルを変更する方法ってありますか?
pPropPage = new CPropertyPage;
pPropSheet = new CPropertySheet;
pPropSheet->AddPage(pPropPage);

pPropSheet->Create(...);
の後に
pPropPage->SetWindowText();
をやってもタイトルはかわりません。
どなたかよろしくお願いします。
872名無しさん:2001/02/07(水) 16:29
>>871
プロパティページのタイトルというのは、タブコントロールで
表示されてる部分のこと?

CPropertyPageでは実装されてないみたいなので、
PSM_GETTABCONTROL メッセージを使ってタブコントロールの
ウインドウハンドルを取得してそこからGetWindowText()
するのが良いのでは。
873教えてください。:2001/02/07(水) 16:52
1次元配列中のデータの中で最大値と最小値を求めるプログラムです。
データは最大10個で、キーボードからデータの数を何個にするかを
入力してその個数分のデータを更にキーボードから読み込むということ
なんですが一応自分なりに下記のように作ったんですが、やはり
だめでした。


#include<stdio.h>

void main()
{


int i,i1,i2,max,min,idata[10];


printf("データを何個にしますか?: ");
scanf("%d",&i1);

for(i=0;i<i1;i++)
{
printf("データを入れてください: ");
for(i2=0;i2<=i1;i2++);
scanf("%d",&idata[i]);
max=min=idata[i];
if(max>idata[i])max=idata[i1];

}

printf("%d",”ここもわかりません。”);
}

ぜんぜん的外れなソースかもしれませんが、自分ではもうよく分からな
いのでよろしくお願いします。
874教えてください。:2001/02/07(水) 16:54
873です。
長くなってすいませんでした
875名無しさん:2001/02/07(水) 17:10
>>873
添削モード。

> for(i2=0;i2<=i1;i2++);
ここの最後のセミコロンは何?
というか、そもそもi2のfor()って何?

単にnを入力させてn個のうちの最小値と最大値を出したいなら、

{
int i, Count, Data, Min, Max;

printf("データを何個にしますか?: ");
scanf("%d", &Count);

for(i=0;i<Count;i++)
{
printf("%d 番めのデータを入れてください: ", i+1);
scanf("%d", &Data);

if (i == 0) { Min=Data; Max=Data; }
else
{
if (Min > Data) Min=Data;
if (Max < Data) Max=Data;
}
}

printf("最小値: %d", Min);
printf("最大値: %d", Max);
}

// エラー処理とか範囲外の数値チェックは略。

if (i == 0) 以下がポイントで、最初の1回めの
数値入力のときは最小値と最大値は無条件で入力した数値そのもの
なのでこのようになる。それいがいの場合(else)は現時点での
最小値と最大値を比較し、それぞれより小さいものやより大きいもの
であればそれを入れる。
876教えてください。:2001/02/07(水) 17:28
>>875
ありがとうございます。
forの最後のセミコロンはただのまちがいです。

もうちょっと教えて欲しいんですけど
配列を使わなければいけないんで、出来れば配列関係で
教えて欲しいんですけど…
何度もすいませんがお願いします。
877デフォルトの名無しさん:2001/02/07(水) 17:35
>>875
>if (i == 0) { Min=Data; Max=Data; }
>else

変数の初期化のために、ループ中で毎回処理を振り分けるのって美しくないと思う。
オレだったら、ループに入る前に初期化して、ifを無くす。

Min = INT_MIN;
Max = INT_MAX;
878鈍亀:2001/02/07(水) 17:46
>>630

VC でプログラミングする手順がサクッと知りたいなら
“「新 Visual C++ 6.0 入門 スーパービギナー編」林 晴比古 著 ソフトバンク”
買え。1,900円だからWebで探す手間と電話代考えれば本買ったって似たようなもんだろ。
ただし、この本(というかこの著者の本)でプログラミングの勉強しようなどとは
思わないこと。
879デフォルトの名無しさん:2001/02/07(水) 18:01
int main(void)
{
  int i, count, min, max, data[MAXDATA];
  scanf(..., &count)
  if (count <= || count > MAXDATA)
    エラー/もう一回
  for (0からcountまで繰り返し) {
    scanf(..., &data[i]);
  }
  min = max = data[0];
  for (1からcountまで繰り返し) {
    if (データがmaxより大きい) {
      ...
    } else if (データがminより小さい) {
      ...
    }
  }
  表示
  return 0;
}
880デフォルトの名無しさん:2001/02/07(水) 19:18
レジストリの復元の仕方について質問です。
RegSaveKeyでバックアップをとり、
レジストリ変更後
RegReplaceKeyで復元しようとしています。
API自体は返り値から成功しているのですが、復元されていません。
実行後、backupとして作成されるファイルもできています。
ちなみに、NT系も9x系もだめでした。
権限もNTの場合、SE_BACKUP_NAME SE_RESTORE_NAME
もつけています。
RegSaveKey の方は間違いなく成功していると思うので、
RegReplaceKeyの方に問題があると思うのですが、これをやる前に何かやっておくこととか、
何かあるのでしょうか?
ご存知の方以内でしょうか?
881867:2001/02/07(水) 22:56
>>869
レスありがとうございました。
その様に修正します。
882デフォルトの名無しさん:2001/02/07(水) 23:58
intの値をcharとして利用するとき、みなさんはどんなコードを
書いてますか?
私は_itoa使ってます
883デフォルトの名無しさん:2001/02/08(木) 00:00
sprintf。
884デフォルトの名無しさん:2001/02/08(木) 00:01
>>882 そのまま代入する。itoa使うと0が0x30になっちまう。
885デフォルトの名無しさん:2001/02/08(木) 00:10
クラスによってメッセージを使い分けたいのですが
どなたかWndProcの効率良い使い方を教えてください
クラスAでのGetMessageとクラスBでのGetMessageで
独立したWndProcを持たせたいと思っています(または同等の処理)

WndProcをvirtualで持っているクラスからクラスA、Bを派生させてオーバーライド・・
も考えたのですがうまくいきませんでした

どなたか実現させてる方がいたら教えてください

SDKです
886882:2001/02/08(木) 00:18
>>884
え?そのまま代入って?
itoaって、そんなことになってるとは・・・
887デフォルトの名無しさん:2001/02/08(木) 00:41
>>886
バカ?
コードかいたことないんじゃないの?
888デフォルトの名無しさん:2001/02/08(木) 00:49
>>884,>>887
揚げ足とりって楽しいかい?
>>882
「intの値を文字列として使用するとき」って言っとけば
誤解されなかったかもね
889デフォルトの名無しさん:2001/02/08(木) 00:52
>>884,>>887
揚げ足とりって楽しいかい?
>>882
「intの値を文字列として使用するとき」って言っとけば
誤解されなかったかもね
890デフォルトの名無しさん:2001/02/08(木) 00:56
Windows2000導入に当たって久々にVC再インストールしたのですが
インストール直後にオンライン登録なんてできたんですね。

質問なのですがユーザー登録するとなにかいいことありますか?
891名無しさん@お腹いっぱい。:2001/02/08(木) 03:43
プログラムしかできない理系最下層軍団早く氏んでくれ。
892名無しさん@お腹いっぱい。:2001/02/08(木) 03:45
プログラムしかできない理系最下層軍団早く氏んでくれ。
893名無しさん@お腹いっぱい。:2001/02/08(木) 03:45
プログラムしかできない理系最下層軍団早く氏んでくれ。


894名無しさん@お腹いっぱい。:2001/02/08(木) 03:47
まあ馬鹿だろうからプログラムもろくにできないだろうけどね


895デフォルトの名無しさん:2001/02/08(木) 09:49
ダイアログベースのダイアログ上のボタンとF1〜F12キーを
結び付けたいんですけど・・・・・
896デフォルトの名無しさん:2001/02/08(木) 10:07
>>895
アクセラレータを定義すれ。
(リソースに'Accelerator'を挿入して、ボタンの ID とキーの ID の結びつきを定義する)
897デフォルトの名無しさん:2001/02/08(木) 10:46
初心者質問ですいません。
COMポートで相手の機械にデータを流したいのですが、
どのような関数を使えばいいのですか
ちなみに整数値(int)をわたしてあげたい!
898895:2001/02/08(木) 11:19
>>896
他にもいっぱいかかにゃ逝かんじゃないかっ・・・デモ出来たありがd。
ついでにF1押してもヘルプ動かなくするには?
>>897
CreateFileとWriteFile で良いかな?
第一引数を"COM1"とかね。


900898:2001/02/08(木) 11:58
出来た。ありがと。
901ぷぷぷーっ:2001/02/08(木) 12:28
>892
ぷぷぷぷぷーーーー!!ぷぷっ!!くっ・・・ぷぷぷ!!!
902デフォルトの名無しさん:2001/02/08(木) 13:53
897です。899さん、ありがとうございました。
出来ました!
で〜もう一つ質問なんですけど
同じような事を
GP-IBでやるにはどうしたらいいですか?
教えて下さい。
>>902
GP-IBって何かわからない・・・
904>>901:2001/02/08(木) 19:50
(・ε・)プップクプー
905いさましいチビの女:2001/02/08(木) 20:13
900を超えたので引っ越してください。

↓引越し先
http://piza.2ch.net/test/read.cgi?bbs=tech&key=981630730&ls=100
906なまお:2001/04/15(日) 08:45
僕のサイトにC言語会話講座と言うのを作ったので、見にきてください!

http://web.kyoto-inet.or.jp/people/namao/index.html
907デフォルトの名無しさん:2001/04/16(月) 11:52
>>897
もし BuildCommDCB 使うことがあるなら、

ttp://support.microsoft.com/support/kb/articles/Q201/3/72.ASP

これ気をつけておかないと、
持っていった先のPCで原因不明の GPF が出る。
908教えてください:2001/04/20(金) 16:52
動物園の動物に関するデータを入力すると、
そのあとにゅうりょくされた数字に応じてデータを表示する
プログラムの作成でどこがおかしいか教えてください。

/*動物園*/
#include <stdio.h>
#define number 10A
struct zoo{

char syurui;
char namae;
int nenrei;
int taijyu;
}
main()
{
struct zoo doubutu[number];
int n,i,j;
printf("何種類か入力してください\n");
scanf("%d",&n);


for (i=0;i<n;i++){

printf("動物の種類を入力してください\n");
scanf("%s",&doubutu[i].syurui);
printf("そいつの名前も入れてくれ\n");
scanf("%s",&doubutu[i].namae);
printf("年はいくつやねん\n");
scanf("%d",&doubutu[i].nenrei);
printf("そいつ何キロやねん\n");
scanf("%d",&doubutu[i].taijyu);

}

printf("何番目にすんねや\n");
scanf("%d",&j);

j=j-1;

printf("%s\n",&doubutu[j].syurui);
printf("%s\n",&doubutu[j].namae);
printf("%d\n",doubutu[j].nenrei);
printf("%d\n",doubutu[j].taijyu);

}

詳細きぼ〜ん!
909デフォルトの名無しさん:2001/04/20(金) 17:50
struct zoo の syurui, namae は1文字分しか格納できないのに、
scanf("%s", ...) で複数文字を格納しようとしているからでしょう。
char syurui[100];
char namae[100];
とかに変えれば良いでしょう。(でも99文字以上入力すると破綻する)

あと、scanf は危険なので、テストプログラムで使うのは良いが、
実用プログラムには使用しないように。
910引っ越せってば:2001/04/21(土) 01:00
あとstruct zooの}の後に;がないとか、これはさすがにへんだろとか。
> #define number 10A
911デフォルトの名無しさん:2001/04/26(木) 00:09
良いスレッドですね。
上げ。

新しいスレッド作っていいですか??
912>911:2001/04/26(木) 00:16
913デフォルトの名無しさん
ネタか。