VisualC++相談室 5

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

旧スレッド
http://pc.2ch.net/test/read.cgi/tech/1002165477/l50
2デフォルトの名無しさん:01/11/27 13:18
2げっと
3デフォルトの名無しさん:01/11/28 01:20
早速質問。
Aが CreateProcessでアプリBを起動し、Bにメッセージを送信しました。
と、ここまでは良いのですが、そのBが、メッセージを処理し終えるまで、
Aを待機させるには、どうしたら良いのでしょう??
パイプとかイベントとかをWaitFor〜で待つってのは駄目かい?
SendMessage で送れば、処理が終わるまで待たされる
メッセージを処理したことを伝えるイベントオブジェクトを使え。
>4
そ、そのやり方が分からない。何を待てば良いのですか?

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

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

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



Wait〜復帰までの間UIが固まって困るとかいう場合は
タイマーをセットしてWM_TIMERでWaitしろ。
待ち時間はゼロでな。
Waitするときはイベントだけではなくて
子プロセスのプロセスハンドルも同時に待機しとけよ。

念のため。
10 :01/11/28 02:12
漏れのIDおしい
114:01/11/28 02:13
もしかしてこういう事をきいているんじゃないだろうな。
wait.c
#include <windows.h>
main()
{
HANDLE hEvent = CreateEvent(NULL, FALSE,FALSE,"test");
PulseEvent( hEvent );
CloseHandle( hEvent);
}

pulse.c
#include <windows.h>
int main()
{
HANDLE hEvent = CreateEvent(NULL, FALSE,FALSE,"test");
WaitForSingleObject( hEvent, INFINITE );
CloseHandle( hEvent);
}
WaitするまえにPulseしちゃうと、受け取られないままイベントが消えるんで、
そこんとこよろしく。

WAIT_ABANDONEDが変える可能性もあるんでWaitの戻り値チェックもよろしく。
ポーリングするなら、ロックファイルみたいなの作る、って手もあるな
>11
おー、なんか道が見えてきた。Thanksっす。
15デフォルトの名無しさん:01/11/28 02:37
なんでSendMessageだとハングするのでしょう?

WM_DROPFILEは別プロセスには送れないと思うのです。
ふつーのポインタを別プロセスに持っていってはいけません。
17デフォルトの名無しさん:01/11/28 02:48
>16がSendMessageがハングした原因ですか?

...
PostMessageでも駄目だと思うのです。
18のの:01/11/28 03:05
質問です
API使って、独自のGUI作りたいんですけど
いいサイトありませんでしょうか?
APIとかの説明とかじゃなくて、
ノウハウというか、効率のいいやり方というか、
こつというか。
>>18
王道はない。
20のの:01/11/28 03:34
>>19
そうですか、
作るGUIのタイプにもよるのでしょうしね、

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

短い無音のwavに設定したらイイんだけど、なんだか泥臭いなあ
>>21
スピーカーの音量を最小にする。
>>21
無音のwavに設定する。
とりあえず、WM_DROPFILES って何を送るのかわかってないだろ・・・
ファイル名文字列へのポインタじゃないぞ。
HDROP だぞ。ちゃんと HDROP 送ってるか?
あと HDROP って解放しちゃだめです。勝手に解放してくれます。
28初心者:01/11/28 08:44
非常に初歩的なことですいません。

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

どういうことなんでしょうか?? 
そのまま「ハンドル」を「ID」に置換して
「メンバ変数にIDを持つクラス」じゃダメなんでしょうか
30初心者:01/11/28 08:59
>>29
えっと・・・それって・・とあるクラスに「ハンドル」というものを受ける用のメンバ変数が定義されているんですってことでしょうか???
>>28
それ、単に

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

みたく、メンバ変数にハンドルを持ってるクラスのことなんじゃないの?
32初心者:01/11/28 09:07
>>31
えっと、、>>30とはちがうのですか?よくわかりません
>>32
あんたは日本語で喋れ。

「でしょうか???」

と適当な文章を疑問形で振らずに、何がわかって何がわからないのか明記しろ。
34初心者:01/11/28 09:11
CBitmap bp,*pb;
CDC MDC;
・・
・・
pb=MDC.SelectObject(&bp);

前の状態(オブジェクト??)を保持する為にこうかくって書いてありましたが、このpbてなんですか?ハンドルとは別物ですか?
(意味不明な質問ですいません)
35デフォルトの名無しさん:01/11/28 09:12
>>32
すいません、、、。
えっと>>31を、具体的に「***」のメンバ変数に「****」を持っているのようにいってもらえないでしょうか?
36初心者:01/11/28 09:13
>>35
「初心者」です。
さらに>>32ではなく>>33でした。すいません、、
>>28
IDを何だと思っているのだ?
38デフォルトの名無しさん:01/11/28 09:30
質問です。
MFCを使わずにタスクトレイに常駐するアプリを作ってるんですが、
トレイ上のアイコンにカーソルを乗せた時にでてくるポップアップの文字列を
値によって変化させたい時はどうしたらいいでしょうか?
39初心者:01/11/28 09:35
>>37
固有の識別子のようなとらえかたをしましたが・・・・
40初心者:01/11/28 09:51
今、色々ネットで調べているんですが、
「オブジェクトへのポインタ=ハンドル」
のような記述を見つけました。どういう意味なのでしょう?具体的説明がほしいです。
41デフォルトの名無しさん:01/11/28 09:59
>>40
http://yougo.ascii24.com/gh/15/001551.html
http://yougo.ascii24.com/gh/66/006631.html

広義には、実体を指し示す、何らかのIDやポインタなど。
42デフォルトの名無しさん:01/11/28 11:17
>>41
ありがとうございます。読ませていただきました。

でも

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

CBitmap bp,*pb;
CDC MDC;
bp.LoadBitmap(name);
MDC.CreateCompatibleDC(pDC);
pb=MDC.SelectObject(&bp);
pDC->BitBlt(0,0,100,100,&MDC,0,0,SRCCOPY);
MDC.SelectObject(pb);
bp.DeleteObject();
43デフォルトの名無しさん:01/11/28 12:04
>オブジェクトが生成される瞬間とは具体的にどのようなときなのでしょうか?

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

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

1 bpはオブジェクト(インスタンス)の生成
2 CDCはオブジェクト(インスタンス)の生成
3 リソースからビットマップを読み込んで(生成して)、そのハンドルbp内部に持つ
4 デバイスコンテキストのハンドルを作ってそのハンドルをMDC内部に持つ
4443:01/11/28 12:12
すまん>>43は書き方が変だね。
453:01/11/28 13:47
>>26,27

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

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

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

なんですが、問題ありありですか?
受け側の DragFinishで解放するメモリと、ReleaseStgMediumで解放する
メモリってどういう関係?
なんか、DragFinish でグローバルメモリが解放されるらしい?ので、
複製を作って送ればいいんじゃないでしょーか
47初心者:01/11/28 16:10
>>44
「ハンドルを内部に持つ」という話がイマイチわかりません。ハンドルはオブジェクトの内部に持ったりするんですか??
>>47
だから、ハンドルをIDみたいに捉えればいいんだろう?
単なる整理番号みたいなものと思えばいい。
ビットマップだのウィンドウだのを新しく作るたびに、整理番号が割り当てられる。
後でこの番号が必要になるから、メンバ変数に代入して憶えておくってだけの話。
あー。47が何が分かってないかがわかった。
キミはこう考えて矛盾にはまった気がしてるんだろう。

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

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

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

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

印刷はやったことないので俺はわからん。スマソ。
52初心者:01/11/28 19:11
>>48
なんとなくわかってきましたが、少しわからないのが、そのメンバ変数っていうのは一体どれなんでしょうか・・・もすこし具体的に教えてもらえないでしょうか。
>>49
はまってます・・・・・・
53デフォルトの名無しさん:01/11/28 20:26
MFCのソース嫁!
と言うかソース読まないと使えないのがMFCの出来の悪いところ
もっとうまく抽象化されたライブラリ使ったほうがええよ
54デフォルトの名無しさん:01/11/28 20:50
プロセスの優先順位なんですが、
BELOW_NORMAL_PRIORITY_CLASSとABOVE_NORMAL_PRIORITY_CLASS
はWin2000から使えるようになったとの事なのですが
(http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_createprocess.htm)
実際これを使おうとすると、そんなのないよ(未定義エラー)となります。
どうしたら使えるようになるのでしょうか?
環境は、Win2000 + VC++6.0(SP4)です。
VS6のSPは今5まで出てるが
56デフォルトの名無しさん:01/11/28 21:04
>>55
5以上です(5が出ているのは確実に知っています)
SPっすか?
>>54
PlatformSDK入れれ。
58デフォルトの名無しさん:01/11/28 21:37
今作っているプログラムでNKFを呼び出しているのですが、

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

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

どうすればいいのでしょうか。
59aaa:01/11/28 23:09
すみません。

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

の間違いでした。
60aaa:01/11/28 23:12
エラーメッセージを書き間違えただけで
疑問は解決してないです、すみません。
ライブラリはCでコンパイルされてるのにC++の関数として
呼び出してるんじゃないか?
extern "C"で解決しそうな気もするが。
62aaa:01/11/29 00:37
>>61さん、解決しました。
ありがとうございます。
nkf.hを書き換えたら、解決しました。
自分で書いたソースばかり見ていたのでわかりませんでした。
63デフォルトの名無しさん:01/11/29 05:03
初歩的な質問ですいません。
ビルダーからVCへ移植しているのですが、ビルダーでの(TstringList)
と同じ機能の関数はVCで言うと何になるんでしょうか?
ちなみにMFCは使わない方向です。すいません、お願いいたします。
std::list< std::string > あたりではないかな?
65デフォルトの名無しさん:01/11/29 10:39
VC++で作成したアプリケーションの起動時パラメータ、DOSアプリで言う『main(int arc char** argv)の

の取得の方法を教えてください
66デフォルトの名無しさん:01/11/29 11:01
>>65です。
自己解決しました。
__argc、__argv マクロを使えばよいのですね・・・
67デフォルトの名無しさん:01/11/29 20:45
GetProfileString(__TEXT("windows") , __TEXT("device") , __TEXT("") , szTemp , sizeof(szTemp));

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

汎用テキストマッピングをつかうなら、いっそのこと
テキストはリソースで管理してみたら?
69デフォルトの名無しさん:01/11/29 21:18
>>67
普段、ワイドキャラクタを使わないんで、よく分からないんだけど、
バッファの長さをAPIに渡すのに
sizeof(szTemp)
でいいの?
ワイドキャラだったら、文字数の二倍の値になるような気がするんだけど。
70 :01/11/29 21:40
あるURLを開きたいのですが、たとえば、
ShellExecute (m_hWnd,"open","http://???",NULL,NULL,SW_SHOW);
とすれば開けますがURLがばれてしまいます。(IEが表示されてしまうため)

で、最後のSW_SHOWをSH_HIDEにすれば表示されないのでOKなんですが
そうするとメモリにIEが残ったままになってしまって都合悪いです。
どうすればいいでしょう?
71デフォルトの名無しさん:01/11/29 21:43
>70
スパイウェアですか?
72デフォルトの名無しさん:01/11/29 21:50
WinNTで動作するサービスを作成したいと思ってます。
Googleでサーチしても全然、関連するサイトが見つかりません。

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

ASPと入れれば検索できるかも・・・
7473:01/11/29 21:52
Application Service ProviderじゃなくてActive Server Pagesの方ね。
75 :01/11/29 21:52
スパイウェアがどういうものなのかしりません。
最悪、ASPで作ります。トホホ。
>>75

使用状況を密かに作成者に送るソフトのことじゃないの?
>>69
それなら
sizeof(szTemp / sizeof(TCHAR))
もしくは
sizeof(szTemp / sizeof(szTemp[0]))

sizeof(szTemp / sizeof(*szTemp))

すきなのにすれば?
78初心者:01/11/29 22:02
誰か>>47を具体的に話して・・・・
7972:01/11/29 22:07
すみません、検索してみたのですがおっしゃってる意味がわかんないです。。
ログオンしなくても動く、UNIXのデーモンみたいなやつを作りたいのですが・・・。
>>77
カッコのくくり方が間違ってる。
81デフォルトの名無しさん:01/11/29 22:15
>78
では混乱させるお話をば・・・
ハンドルとはロッカーの鍵のようなものです。
ロッカーはWindows&174;サービスです。
ロッカーの鍵を開けると(Createなにやら関数)、
鍵をWindows&174;からもらいます。
そしてオブジェクトは鍵を内部に持つのです。
そして何かをしたいときにはこの鍵を
つかって、Windows&174;に働きかけるのです。
82&174;:01/11/29 22:17
鬱だ
®
こうかな?
84デフォルトの名無しさん:01/11/29 22:19
>>78
ウインドウとか、いろいろOSが管理してるリソースが
あるんだけど、生で扱うのとプログラミングが煩雑に
なるから、C++の機能(クラスやライブラリ)でラップして
簡単にプログラムを組めるようにしてるの。

初心者のうちは、ライブラリの下で、どういう操作が
おこなわれているかピンと来ないだろうけど、慣れてくると
「ここでCWndクラスを構築しても、中身は空。
Createをコールして、OSの管理するウインドウハンドルが
確保される」
というかんじで、内部の動きが見えるようになる。
85>78:01/11/29 22:29
例えば MFC。ウィンドウオブジェクトの CWndはメンバにウィンドウハンドル m_hWndを
持っている。Windowsのウィンドウは HWND というハンドル(=ID)を使って操作されるので、
そのIDを記憶しておく必要がある。そのIDに相当するのが、HWND型の m_hWnd。

何かの関数で、引数で CWndへのポインタ pWnd を受け取って、
何かの関数でその HWNDを渡す必要が有ったら、
void function1(CWnd* pWnd)
{
function2(pWnd->m_hWnd);
...
みたいに使う。
86デフォルトの名無しさん:01/11/29 22:35
GUIを作るにはMFCを使うのが一般的なのでしょうか?
>>86

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

アイコンがMFCのデフォールトアイコンだったアプリがあったぞ(マジ
90デフォルトの名無しさん:01/11/29 22:52
実際MFC無しで1からやると、最小のMFCアプリと同じラインに
達するまで色んな小道具を付けるのは物凄い作業量のような
気がするのですが... それとも自前のスケルトンやフレーム
ワークでも持ってるのかな>普通のWin32APIオンリーな方
C言語の技術だけでVC++でWindowsプログラミングってできる?
MFCってクラスじゃない。そんなの分からないのよ。
Delphi&BCBならWinのサービスプログラム作るテンプレあるよ
93デフォルトの名無しさん:01/11/29 23:04
MFCのランタイムって普通スタティックリンクするの?
バージョンによって互換性があるとかないとか。
プロの方々、おせーて。
>>93

ううん。
Windows98以降はOSについているみたいだし。
>>91
当然、出来る。一度やってみるよろし。
>>95

ありがとう。

まずは必要なヘッダーと使える関数を調べないとだな・・・・
>>72
ていうかVC++のATLウィザード使えばサービスできるよ
>>96
ヘッダは当分 windows.h だけでおっけー。
ここへどうぞ。Windows SDK 編、第1部から。
ttp://www.kumei.ne.jp/c_lang/
99デフォルトの名無しさん:01/11/29 23:37
質問。
二次元配列で要素を,a[1024][512]、とすると
エラーになっちゃうんですけど、どうにかなりませんか?
最低でも512*512の配列が必要なんすけど。
>>99
グローバル変数か静的変数(static)にしませう。
>>99
関数から出してグローバル領域で宣言してみれば?
102≒99:01/11/29 23:47
>100,101
なんでそうすると良いのでしょーか?
103デフォルトの名無しさん:01/11/30 00:01
今更だけど、ISAPIフィルタ作りたい。
良い資料/WEB等、無い???
作りたいのは、認証システム。
doc, xlsファイルとかだと、直にURLたたかれたら、ユーザチェック
できないでしょ?普通。
あ、win統合認証とかは使えない。
ユーザIDとパスワードたちは、DBに入ってるし。。。

MSのUSサイトいっても、イマイチ情報が古いし。
104>>102:01/11/30 00:05
ローカル変数はスタックという狭いメモリ領域にとられるから。
>>102
スタックが足りないから。
デフォルトの設定ではスタックが1MBしかないので、
1MBを超えるローカル変数は作れません。
106初心者:01/11/30 00:09
>>81
その「内部に持つ」というのの形がイマイチ・・

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

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

内部に持つっていうのは
「m_hWndにハンドルを持つ」ということなのかな???
>>106
いくらここで聞いても、これ以上は分からないと思われ。
入門書でもみて、経験を積むのが近道。
まず、ビットマップやらウィンドウやらの実体は、
Windows が内部で管理してます。

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

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

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

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

pDC->BitBlt(0,0,100,100,&MDC,0,0,SRCCOPY);
MDC.SelectObject(pb);
bp.DeleteObject();
81を書いたんですが、更にややこしく書くと、
あなた(=プログラマー)は、使用人(=オブジェクト、例えばMDC)に
ロッカー(=Windowsサービス例えばデバイスコンテキスト)に荷物を
預けて来いと命令できます。(=例えばMDC.CreateCompatibleDC(pDC))
すると使用人(=MDC)は、ロッカーを操作して(=もろもろのWinAPI)、
鍵(=ハンドル)を手に入れます。
すると今度はあなた(=プログラマー)は、荷物をロッカーから出せという命令
(=例えばMDC.SelectObject(&bp))が使えるわけです。使用人(=MDC)が
鍵(=ハンドル)をもっていますから。
>>109
> SelectObjectは前に持っていたオブジェクトへのハンドルを渡すみたい
それが勘違い。MSDN か MFC のソース読みましょう。
CDC.SelectObjectが返すのはハンドルじゃないよ
>>109
それは、MFCの汚い面の現れだな・・・
Windows API をラップしてるだけだから。
Windows API を学ぶべし。

#このあたりは OWL や VCL の方が綺麗で好きだ
>>113
MFC がきれいじゃないのは同意だが、今回の問題は全然関係ないぞ。単に

CBitmap* CBitmap::SelectObject(CBitmap*)

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

#あまりズレた返答は Borland 厨の烙印を押されかねんので、気をつけてくれ。
::SelectObjectとCDC::SelectObjectの違いが分かってないのか?

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

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

CBitmap *pbに CGdiObject *のポインタを代入しているけど
このとき、CBitmap*はCGdiObjectから派生したクラスへのポインタなので
自動的に、ポインタの型が変換されて正しく代入される。
OWLはヘタレクラスだらけ。
>>100>>101
thanks!出来ました。
ついでにVC++初心者(cは多少判る)にお勧めの参考書あったら
教えたってください。
付属のはわかりづらい
とりあえず、付録で付いてくるScribbleチュートリアルをやろう。
最初のステップだけでもいいよ。
119113:01/11/30 01:10
うゅ。ごめんなさい。言動には気を付ける。

CDC::SelectObject のソース追ってみて、動作を理解した。
SelectObject ひとつで、これだけ大変なことやってたんだ。。。
なんか素質有りそうだから、
MFCの前にSDKプログラミングをやってみれ。

深いとこまでやらなくても、
MFCを理解する助けにはなる。
121114:01/11/30 01:24
>>119
俺もボケたこと書いてるね。>>115 が正しいです。
122初心者:01/11/30 02:12
>>120
すごい質問ですが、SDKってMFCと何が違ってなんなんですか?
123初心者:01/11/30 02:18
あ、それと、
大きなBMPの一部分だけを読み込む方法ってありますか?
CBitmap bp,*pb;
CDC MDC;
bp.LoadBitmap(name);
MDC.CreateCompatibleDC(pDC);
pb=MDC.SelectObject(&bp);
pDC->BitBlt(0,0,100,100,&MDC,0,0,SRCCOPY);
MDC.SelectObject(pb);
bp.DeleteObject();
のような風に、BilBltで表示範囲を指定しても、元のBMPは全体が読まれているわけですよね?
これだと、たとえば640*480の画面にスクロールして動いていく画像を出したいと思って、
640*3000くらいの画像を作って(x,y)から(x+640,480)まで描画させるなどとしても、やっぱり元の大きな画像を読み込んでからになるんですよね?
やってみたら、ものすごい動きが遅かったんで・・・
どうすればいいのかな
>>122
MFC を使わず、Win32 API だけを使ってプログラミングすることを指して、SDK
プログラミングと呼ぶ(人もいる)。

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

DirectX を使って構わないのなら、DirectDraw, あるいは Direct3D を使って、ビデオ
メモリ上に画像を置いてしまうのが最速かと。
125デフォルトの名無しさん:01/11/30 02:39
>>124

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

>>123に対する返答に対して
すいません・・・・・・・毎回ビットマップ読み込んでました。
127デフォルトの名無しさん:01/11/30 03:02
>>125
そうそう。自分で WndProc を書いて、WinMain で

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

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

「人もいる」と書いたのは SDK プログラミングと言う用語が、それほどいい名前だと
思ってないし、一般的でもない気がしたから。あまり気にせんで下さい。
生APIプログラミングって呼ぶのはどうかな?
あまり流行りそうには見えないが、意図してる事は分かりやすいかと。
130初心者:01/11/30 04:15
>>126について
毎回ロードしないようにしようとしたんですがうまくいきません。
CBitmap bp,*pb;
CDC MDC;
bp.LoadBitmap(name);
MDC.CreateCompatibleDC(pDC);
pb=MDC.SelectObject(&bp);
pDC->BitBlt(0,0,100,100,&MDC,0,0,SRCCOPY);
MDC.SelectObject(pb);

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

> bp.LoadBitmap(name); の部分だけを一回実行するだけにしたんでは駄目なようですが、
少なくとも >>130 のコードではそれが分からんよね。どうやって「一回だけ」実行する
ようにしたのか、それが分かる程度に編集してね。
132初心者:01/11/30 04:30
>>131
えっと、CBlockView::OnDraw(CDC* pDC)のなかに、上記のようなコードを書いて、bp.LoadBitmap(name); はif文で一回だけ実行するようにしました。
アニメーションさせる(画像を移動させていく)のでタイマーを使って常に一定間隔で再描画するようにしています。InvalidateRectで。
>>132
コード抜粋しなよ。口で説明するより、実物を見たほうが早い。
134初心者:01/11/30 04:41
>>133

BOOL first=TRUE;
void CBlockView::OnDraw(CDC* pDC)
{
CBlockDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: この場所にネイティブ データ用の描画コードを追加します。
CDC MDC;
      MDC.CreateCompatibleDC(pDC);
      CBitmap bp, *pobp;
if (first){bp.LoadBitmap(bmpback);first=FALSE;}
      pobp=MDC.SelectObject(&bp);
pDC->BitBlt(0, 0, 800, 600, &MDC, 0, 0, SRCCOPY);
MDC.SelectObject(pobp);
}
のような形です。これが繰り返されます。(本当はこの後表示位置を変数で置いて色々したい)
135初心者:01/11/30 04:42
>>134
ああ、なんか空白部分が変になってしまった、、、
>>134
ああ、それだとダメです。

CBitmap bp, *pobp;
CDC MDC;

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

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

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

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

のが良いかと。あと MFC スレが別にあるので、MFC に関してはそちらで聞いた
方が詳しい人がつかまると思います。
137初心者:01/11/30 04:52
>>136
ありがとうございます、、、、、
ちょとやってみます
SDKだけでやる場合に、マウスでカット&ペーストとか
自分で実装するの考えると頭痛くなるんだけど慣れてる
人はそうでもないのか?
OLE絡みとCOMは、慣れても頭が痛い。
140初心者:01/11/30 09:38
>>136
ありがとうございます、解決しました。無事動くようになった様です。
141初心者:01/11/30 09:39
GetPixelを使って色の取得をしてみたんですが、これを一連の動作を絡めて関数化しました。ところが
CDC MDC
////
////
////
iro(MDC,mona.x,mona.y,mona.xx,mona.yy,128,0,0);
MDCをGetPixelで使うのでCDC MDCを第一引数に取ったんですが、こうすると

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

と言われてしまいます。何故でしょう?
142乗換初心者:01/11/30 09:54
このスレの頭のほうの関連なんですが、
VBでいうところの、DoEvents()
BCBでいうところのApplication->ProcessMessages();
(待ちループの間、他のアプリケーションに制御を渡す)
っていうのはVCではなんと書けばいいんすか?
>>141
関数 iro の宣言を見せてみ
144デフォルトの名無しさん:01/11/30 10:33
>>143
MDCが登場する部分と周辺
int iro(CDC MDC,int x,int y,int xx,int yy,int red,int green,int blue)
{
struct color{
int r;
int g;
int b;
}ref;
COLORREF CRefBuf;
CRefBuf= GetPixel(MDC,x,y);
ref.r = GetRValue(CRefBuf);//R
ref.g = GetGValue(CRefBuf);//G
ref.b = GetBValue(CRefBuf);//B
***
***様々
***



}
145初心者:01/11/30 10:33
>>144
初心者。また、名前を入れ忘れた。スマソ
146デフォルトの名無しさん:01/11/30 10:47
COLORREF GetPixel(
HDC hdc, // デバイスコンテキストのハンドル
int nXPos, // ピクセルの x 座標
int nYPos // ピクセルの y 座標
);

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

CDC& にしてみそ。
148初心者:01/11/30 11:23
>>146
え!?何がおかしいんですか?上のやつ、普通に関数じゃなくて直接(OnDrawなんですけど)書き込んだら正常に実行でたんですけど・・・。引数で渡そうとするとおかしく・・・
>>142
>>128の3
150デフォルトの名無しさん:01/11/30 11:24
>>144
これも

CRefBuf= GetPixel(MDC,x,y);

CRefBuf= MDC.GetPixel(x,y);
151初心者:01/11/30 11:24
>>147
あ、はい。
152初心者:01/11/30 11:30
>>147
できちゃいました。ありがとうございます、、、
153初心者:01/11/30 11:42
まだよくわかっていないところがあるようなので少し勉強してきます、、、
154デフォルトの名無しさん:01/11/30 16:02
VC++6の
ダイアログベースでBMPを読み込んでウィンドウに表示はできたのですがその読み込んだbmpを
unsigned char image[3][i][j]の配列に入れたいのですが、どのような式が必要でしょうか?
bmpがはいってる変数はm_bmpBitmapで変数のタイプはCBitmapです
155デフォルトの名無しさん:01/11/30 16:07
このスレ立てた
いさましいチビって誰?
>>154
unsigned char の配列って、256色限定ですか?
読み込んだBMPがたまたまフルカラーだったらどうします?
157デフォルトの名無しさん:01/11/30 16:36
すいません256色で考えてください.実際にはモノクロでunsigned char image[i][j]
で配列に入れることを考えてます.モノクロで無いとそれを加工する式が思いつかないので。
初心者なもので状況説明がうまくできなく申し訳ありません.
158デフォルトの名無しさん:01/11/30 16:37
ものすごく限られた用途で使用しようと考えているプログラムです.
159デフォルトの名無しさん:01/11/30 16:43
>>154
ニュースで取り込むと、インデントも崩れないよ。

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

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

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

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

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

dc.SelectObject(old_bm);
160159:01/11/30 16:49
勘違いしてた。ニュースでもインデントがつぶれてたね。
161乗換初心者:01/11/30 17:22
>>149
って処理ループを書かなきゃならんのすか?
vbやbcbみたく、1行で済ませて楽する方法はないのでしょか?
AfxGetApp()->PumpMessage();
フォルダ選択ダイアログで、長いフォルダを指定すると、SHGetPathFromIDList 関数が失敗してフォルダを取得できません。
実際に第2引数のバッファには文字列が設定されているのですが、途中で切れた文字列になっています。
終端文字列(NULL)も付いていないようです。
ヘルプやいろんなサイトを検索してみましたがどうしても分かりません。
だれかご存知の方、ご教示お願い致します。
ソースは下記です。
BOOL SelectFolderDialog(const HWND& m_hWnd, const CString& strTitle, const CString& strDefaultFolder, CString& strSelectFolder)
{
BOOL nFuncRet=TRUE;
BROWSEINFO bi;
TCHAR szDir[1024];
LPITEMIDLIST pidl;
LPMALLOC pMalloc;

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

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

if (pidl){
if (SHGetPathFromIDList(pidl,szDir))
strSelectFolder=szDir;
pMalloc->Free(pidl);
pMalloc->Release();
}
else
nFuncRet=FALSE;
}
return nFuncRet;
}
// SelectFolderDialog()の再帰関数
int CALLBACK
BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lp, LPARAM pData)
{
switch (uMsg)
{
case BFFM_INITIALIZED:
if(pData!=NULL)
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)pData);
default:
break;
}
return 0;
}
>>163
IShellFolder の GetDisplayNameOf は?
>159
すいません、ニュースって何ですか?
>>165
SONYのワークステーション。
167デフォルトの名無しさん:01/11/30 22:56
>>165
news://toc.dyndns.org/2ch.pc.tech
168 ◆toc/CX1g :01/12/01 00:01
>>160
> 勘違いしてた。ニュースでもインデントがつぶれてたね。

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

今はブラウザと見え方をなるべく合わせようとして
連続するスペースをひとつのスペースで置き換えてます。
>167
ありがと
>168
おねがいします。
えっと、あと159のプログラムを貼り付けると配列に取り込めるんですか?
(たとえば、ボタンを作ってそれにメッセージハンドラのコード追加のところにかく)
それと、このプログラムはリソースに登録しといたBmpをよみこんでますよね?
リソースに登録していないファイルから読み込んだbmpにもそのままでつかえるのでしょうか?
170奈々Cさん:01/12/01 09:00
どなたかすみませんが、IEをプラグイン的に拡張するActiveXのサンプルコード
があったら、ポインタで結構ですから教えていただけないでしょうか。

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

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

よろしくお願いします。
171奈々Cさん:01/12/01 09:03
わがままですみません。サンプルのソースコードはVC++を希望です。
VBは扱えませんので・・・。
172デフォルトの名無しさん:01/12/01 12:03
またVC++で開発中にソースが逝きました。こんどはプロジェクト名のcppファイルが焼失しました。
でもオブジェクトは生きてる。
オブジェクト指向やっててよかった
>>171
ATLのチュートリアル(多角形を表示するもの)を見れ
n
>>170

ポインタで結構?
じゃあ、
char *activex;
これでいいね。
どうしよう。まったく面白くない。
>>176 せめてこのぐらい書いてやれや。
CComPtr<IWebBrowser2> pWebBrowser;
178170:01/12/03 06:49
>>173
ありがとうございます。

で、冗談のセンスがない人はプログラムのセンスも無いと思いますが、どうです
か? >>175
179デフォルトの名無しさん:01/12/03 13:23
RS232Cのデータ取り込むのにReadFileを使ってます。
abcdefgというデータでテストすると
ある程度時間たつと受信データが乱れます
順番が変わったり、受信しなかったりすることあります
Sleepで待ち時間を設定すると正確に受信できる時間が
伸びますが、結局は受信データが乱れます。
何が原因なのでしょうか?
ハード的に限界があるのでしょうか?
180デフォルトの名無しさん:01/12/03 14:11
デバッグだと問題ないのにリリースで動かすとAccess Violationで止まっちまうぞゴルァ!!
助けてプリーズ。
181デフォルトの名無しさん:01/12/03 17:13
Windowsだったら、
try {} catch (...) { MessageBox(NULL, "死んだごめん。", NULL, MB_OK | MB_APPLMODAL); exit(1); }
で囲んでおけば?
>>180
とりあえず、コンパイラのメッセージの未初期化なんとかってやつ、
全部調べ直せ。
183デフォルトの名無しさん:01/12/03 17:27
今、再帰でちょっとした計算をしているのですが、
Windowsでスタックを食いつぶした場合って、どうなってしまうのでしょうか?

試しにちょっと無茶をさせてみた所、計算終了後、5分くらいは何の変化も
なかったんですが。その後、エラーメッセージもなく突然PCが落ちました。
スタック食いつぶしが原因かどうかもよく分かりません。
184デフォルトの名無しさん:01/12/03 17:30
>>183
NT系のWindowsで同じこと試してみな。
185デフォルトの名無しさん:01/12/03 17:33
>>184
環境は一応Windows2000なんです(T-T)
なにか俺、見逃してるっぽいですね…
186デフォルトの名無しさん:01/12/03 18:49
初めてVC++6.0Proを買ってきてインストールしました。
SPを探してみたところ、MSのHPにSP5があったのですが、
Wideband-FullとFullがあります。
何が違うのでしょうか?どちらがお勧めですか?
>>186
初心者なのなら、そのままにしといてもいいんじゃ?
188デフォルトの名無しさん:01/12/03 20:05
ReleaseとDebugで明らかに動作が違うのだけれど、
こういうのはどうしたら良いんでしょうか?
ウェブを検索したらそれで困っている人がいくらか引っかかった・・・。
>>188
>>182読め
190デフォルトの名無しさん:01/12/03 21:14
ん〜 lightwaveで作ったキャラをC言語で動かすことってできるの?
なんとなく気になった!
>>179
フロー制御していないに一票

>190
理屈上できないはずが無い
192デフォルトの名無しさん:01/12/04 13:42
すいません,以前も質問したのですがVCで
BMP画像を配列に格納する方法がわからないのですが,
モノクロ画像をunsigned char image[x][y]に格納するにはどのようにコードを書けばいいのでしょうか?
ボタンをつくり関数を追加してそこにメッセージハンドラを記述する形でコードを書く形です.
又,その逆に配列にしたものをBMPに戻すにはどのようにすればよろしいのでしょうか?
193デフォルトの名無しさん:01/12/04 13:45
BMPは二種類あるけどどっち?
194デフォルトの名無しさん:01/12/04 18:21
コマンドライン引数について。
 >test.exe "c:\windows\" 123
とやると、

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

期待する解釈:
 argv[1]→ c:\windows\
 argv[2]→ 123
実際:
 argv[1]→ c:\windows" 123
196>>194:01/12/04 18:26
>test "c:\windows\\" 123
とやれば良いに1票
197デフォルトの名無しさん:01/12/04 18:29
同時にファイルの複数開きたいと考えています。
WinAPIのGetOpenFileName()を用いて複数ファイル名を
取得するにはどのようにすればいいですか?
198194:01/12/04 18:30
>>196
そりゃ、そうだが。そういう入力があったときの話し。
199196:01/12/04 18:53
>>194 そういう入力をユーザがする場合は、
ユーザは argv[1] = c:\windows" 123 を期待しているのだから
それで問題なかろう。そういう仕様なんだから。

194のプログラムだけが仕様を改善(?)しても、
他のプログラムと一貫性がなければ、ユーザにとっては改悪やん。
200超初心者(*゚ з゚; ポ:01/12/04 19:11
参考書に書いてあったのですが、この条件式の意味が判りません!

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


ちなみに
int j;
char buf[100];
FILE *fp です。
特に「?」とか「:」とか判りません。
よろしくお願いします!
201194:01/12/04 19:12
>199
はぁ、そういう見方もできるわけだね。世の中広いわ。

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

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

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

copyはそれでは動かんよ。やってみろ。
205デフォルトの名無しさん:01/12/04 19:45
>>201
はcopy使ったこと無いヴァカ。
>>200

if(j>0){
  j = j-1;
  c = buf[j];
}else{
  c = getc(fp);
}
if (c!=EOF) ...
>>206
 ありがとうございます!そんな意味だったんすか!
 むずかしい。。。でも判りました!

>>203
 Cのリファレンス的本はこれしかモッテないんす。。。
 捨てられません(^^;
>193
すいませんBMP2種類あるってBMPの種類ですか?
読み込み方ですか?種類ならよくわからないんですが、読み込み方はリソースにもとからBMPを割り当てたやり方です。
どうか、よろしくおねがいします。

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

 BITMAPFILEHEADERやDIBをキーワードにサーチエンジンで調べてみよう。
BMP内にモノクロビットマップがカラーテーブルで格納されているなら、
その値を持ってくるだけ。フルカラーRGBならBMPに記録されているピクセ
ル列のRGBの一つをそのまま読み込めばよい(ただし4バイト境界に注意)。
BMP内に記録されているピクセル列の位置は、BITMAPFILEHEADERを参照。
211211:01/12/04 22:35
マウスのドラッグで長方形を描くにはどうすればいいのでしょうか?
Windowsのデスクトップとかで出来るやつです。
onMouseDownとMoveの間に四角をかくと途中の線も書いてしまって汚い。
 
212デフォルトの名無しさん:01/12/04 22:59
>>211
途中の線消せよ。
213デフォルトの名無しさん:01/12/04 23:03
>>209 間違い過ぎです。
214211:01/12/04 23:04
>>212
どうやって消す?厨房ですまんがけし方だけ
具体的に教えて〜〜。
215デフォルトの名無しさん:01/12/04 23:51
質問です。VC++6.0です。
人からもらったプロジェクトなんですが、これを開いてコンパイルするとincludeファイルが見つけられないエラーが続出です。
これをくれた人は自分の環境ではちゃんとコンパイルできていると思うのですが、何故かうまくいきません。
具体的には、ユーザー定義のヘッダで、ファイル自体はあるし、プロジェクトにも追加されてます。
仕方がないので#include "aaa.h"を#include "aaa\aaa.h"の様に打ち変えてコンパイルしてます。
これでコンパイルは出来るのですが、いまいちスマートではないですよね?
こういうケースはみなさんどのように対処してますか?
プロジェクト>設定>C/C++>プリプロセッサ。
217Kusakabe Yokaichi:01/12/04 23:57
>>215
まだプログラマとは言えないレベルですね。
>>214 ヒントはXORです。
同じ図形を2回XORで描画すると元に戻ることを利用すると楽ちん。
219デフォルトの名無しさん :01/12/05 10:17
Internet Transfer Controlの使い方教えてください
220デフォルトの名無しさん:01/12/05 10:29
どこをどう勘違いすればここで使い方が教えてもらえると思ったのか教えてください。
221デフォルトの名無しさん:01/12/05 11:10
コマンドプロンプトでビルドできるようにするための
メイクファイルって自動で吐き出せないんでしょうか?
>>221
[プロジェクト]->[メイクファイルのエクスポート]
223211:01/12/05 13:32
できたー! 完徹してしまった。
>>218ありがとう!
onMouseMoveに以下を書いた。
if(m_bLButtonDown )//ドラッグされたら・・・
{
//描画準備
CDC *pDC = GetDC();
//Rectを定義し、FocusRectを描く
CRect Rect;
Rect.SetRect(m_dx,m_dy,point.x,point.y);
Rect.NormalizeRect();
pDC->DrawFocusRect(Rect);
//前に描いたやつを消す
Rect.SetRect(m_dx,m_dy,m_x,m_y);
Rect.NormalizeRect();
pDC->DrawFocusRect(Rect);
//消すポイントをとっておく
m_x = point.x;
m_y = point.y;
ReleaseDC(pDC);
}
>>204,205
NT4では動くぞ。
225デフォルトの名無しさん:01/12/05 18:32
EnumThreadWindowsで、外部アプリケーション(ダイアログベース)の
メインウィンドウ hMainWnd を得たい。が、トップレベルウィンドウとして
複数列挙される。そこから hMainWndを区別する方法として、どんなものが考えられます?

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

なんか、FAQっぽいけど、ご教授願います。
owner NULLがダサすぎるのでそのアプリは捨てる。
iniファイルをexeと同じディレクトリに保存したいのだが
VC作成中はReleaseの下にexeがあり、ユーザーの環境では直接置かれる。
どうやるのが正しい一貫性のあるやり方でせう?
今はGetCurrentDirectory()を使っているが
ルートディレクトリにインストールされたりするとC:\
と最初に\がついてうまく動かない場合あり。
>>227
CString strAppDir; // アプリケーションが起動されたディレクトリ
TCHAR szFull[_MAX_PATH];
TCHAR szDrive[_MAX_DRIVE];
TCHAR szDir[_MAX_DIR];
::GetModuleFileName(NULL, szFull, sizeof(szFull) / sizeof(TCHAR));
_splitpath(szFull, szDrive, szDir, NULL, NULL);
strAppDir.Format(_T("%s%s"), szDrive, szDir);

CString strINIfile;
strINIfile = strAppDir + _T("hogehoge.ini");
Release/Debugそれぞれに
Release/Debug用のiniファイルをおいとけ。

\は自分でなんとか処理すれ。
>>228
Thanks
ドライブとディレクトリを分割するのか・・・。結構面倒ですね。
しかしこれだとiniファイルをReleaseの下に作ってしまわないでせうか?
開発時はReleaseの下には作りたくない・・・のだがそれはワガママ?
_splitpathってUNCも正しく処理できたっけ?
>>229
それぞれ置くのは混乱するのでパス。
\は漢字コードの2バイト目とかもあり、スマートな処理が面倒そうなのです。
なんでReleaseの下に作りたくないの?
開発時にはReleaseを起動しない。これで良し。
>>232
_mbsleadとか_tcsleadの使い方を覚えなさい。
>>235
それって検索しても見つからないぞ。自作の関数か?
ごめん is 付け忘れた。

MSDNで探してくんろ
238デフォルトの名無しさん:01/12/05 23:49
でかいビットマップファイルをメモリに読みこみたいんですが、
CreateFileで開いてからサイズ調べてGlobalAllocしてそこに全部一気にReadFileするのと、
ファイルマッピング使ってマップするのと
どっちが(効率とか速さとか考えると)良いのでしょうか?
ふぁいるまっぴんぐ
240デフォルトの名無しさん:01/12/06 00:21
ファイルの大きさやその後の処理によりけりだと思います。
ただ読んで表示するだけなら、ファイルマッピングに一票
>>227 に、なぜVCのプロジェクト設定で
デバッグ時のカレントディレクトリを弄らないのか
小一時間問いつめるYO
>>241
デバッグ用のexeを置くディレクトリをソースと同じところにしろ、と言ってる?
デバッグタブの中をよーくみてみろ。
作業用のディレクトリを\Debugにしろ、と?
カレントディレクトリの問題じゃないのだが。
なんかこう、灯台元ヒグラシってやつ?
なんでReleaseの下に作りたくないのか回答がないな。
いちいちDebugとかReleaseとか面倒だから同じディレクトリにして、
ファイル名変えたら?Debug版はhogehoge-d.exeみたいにd付けるとか。
もしかしたらカレントディレクトリって、常にexeのある場所と一緒だと思ってるかわいそうな人なのかも。

いたわってあげよう!
>>247
>iniファイルをexeと同じディレクトリに保存したい
と言って
>GetCurrentDirectory()を使っている
そうなので、案外そうかも。
>>246
iniファイルを2つ作りたくないから。
ディレクトリを同じにすれば確かに解決するがあまりスマートな方法ではないと思うが。
>>247,248
質問読んでそれぐらいの認識もできない?
レベルの低い奴からはその程度の回答しか得られんな。
250デフォルトの名無しさん:01/12/06 16:38
BeepMessage使ってビープ音を出してます
繰り返し再生したいのですがうまくいきません
どうしたらいいのでしょうか?
Wave再生APIとかを使わないとうまくいかないのでしょうか?
OSはWin98です
251247:01/12/06 17:00
どうしようもない間抜けっぽいので教えてやる。

カレントディレクトリのiniファイルを見に行け。
デバッグ時もリリース時も作業用のディレクトリを
ソースと同じディレクトリ(かテスト環境用のディレクトリ)に
しておけ。

iniファイルは一つで済む。

VBのApp.Pathみたいのを期待しているようだが、
「実行モジュールと同じディレクトリのiniファイル」を見に行くのは
VB厨のやり方だ。
>>249
> 質問読んでそれぐらいの認識もできない?
煽るな。

俺には書き方が悪いようにしか見えん。何をやりたくて、何を避けたいのかのトレードオフが
分からんぞ。

1 exe と ini ファイルを「常に同じ」ディレクトリに置きたい
2 ini ファイルを複数用意するのは嫌だ

ってのが前提条件なら、そりゃ exe を同一ディレクトリに置くしかないだろ。状況によっては
1 を譲歩して良いが 2 は譲歩できん、ということなら、「状況」と「譲歩」について、詰めて書
け。それはキミにしか判断できないことだ。

#書いてないけど、exe のフルパスを取得する方法はわかってるよね?
>>251
現在の状況はそうなっている。

>>252
確かに書き方が悪かったのは認める。

1 ユーザーの環境では常にiniファイルをexeと同じディレクトリに置きたい。だが
2 開発中の環境ではソースが置いてあるディレクトリにiniを置いて
 ReleaseとDebugのexeで共通に読み込みたい。

exeの置いてあるディレクトリに置くのは>>228で教えてもらった
GetModuleFileName()を使えばできる。が、これでは 2 が解決しない。

カレントディレクトリに置くようにすれば同時に解決するが
"C:\" とかのルートディレクトリレクトにインストールされると
通常、"C:\Program Files\foo" とかにインストールされた場合と
異なり、最後に "\" がつくので特殊な処理がいる。
ルートだけ処理を加えればいいが、日本語のディレクトリや
ネットワークにインストールされた場合、矛盾しない処理方法が分からない。
かれんとならディレクトリ名の処理は必要なかろうに...
>>254
ディレクトリ名つけずにファイル名だけで open すれば飯竹だよね。謎だ。

>>253
> 開発中の環境
これとユーザの環境の区別を、どうつける? 俺が考えつくのは、

1. インストール時にインストーラで特定の値をレジストリに書き込む
2. その値が書いてあればユーザ環境、なければ開発環境と見なす

とか、

1. 開発環境にはカレントディレクトリに特定のファイルを置いておく
2. そのファイルが存在すれば開発環境、しなければユーザ環境

ってところだが、いずれにせよマーフィーの法則により

1. 開発環境では問題が出ない
2. ユーザに渡した主観、ユーザ環境でのみ使うコードにバグが見つかる

ことが保証されているから、やめたほうが良いと思う。
ユーザーが途中でファイルを開いて読み行くとカレントは変わってしまうので
プログラムの起動時のカレントを記憶している。
かれんとを元の位置に戻せよ。
おもしろいな、お前のプログラム
>>257
なるほど・・・。
ファイル処理の後に全部戻せばいいのか。
だがそれだと、深い所に保存したファイルに何度もユーザーが触る時に不便だろう。

ただ、Win2000あたりからアプリが前回の最後のディレクトリを覚える仕様に
変わった?のでよく分からんのだけど。
余談だがVC++ではプロジェクトを切り替えてもディレクトリが前回のプロジェクトのまま、
とかなって不便なのだが。
いや、やっぱりフルパスでのディレクトリの処理をする必要がある。
ファイルのオープン中にも画面の書き換えが発生すると
所定の位置のデータベースを読みに行く仕様なので。
つかなんで開発中にReleaseとDebugのiniを同じにすんの?
開発中はDebugだけでテストすりゃいいんじゃ?
>>260
速度が違いで発生するバグとかに対処するため普段はReleaseで動かしてる。
Debugは問題が発生した時の追跡のみに使用。
放置しても(・∀・)イイ?
確かに我ながらうざいな。消えるわ、荒らして悪かったな。
とりあえずbuild_path()とかなんとか関数つくっとけ。
で、カレントディレクトリはころころ変えるな。
265デフォルトの名無しさん:01/12/06 21:14
>>263
初めていいこと言った
266デフォルトの名無しさん:01/12/06 22:07
☆WinXPに新しく追加されたAPI☆
267デフォルトの名無しさん:01/12/06 22:11
↓のプログラムはウインドウを表示するプログラムなおですが、どこが悪いのかわりません
どこが悪いのでしょうか?

#include <windows.h>

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
HWND hWnd;
MSG message;
WNDCLASSEX wc;

wc.hInstance = hInstance;
wc.lpszClassName = "DDraw";
wc.lpfnWndProc = WndProc;
wc.cbSize = sizeof(WNDCLASS);
wc.style = 0;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wc.lpszMenuName = NULL;

if(!RegisterClassEx(&wc))
return 0;

hWnd = CreateWindow(
"DDraw",
"DirectDraw",
WS_OVERLAPPEDWINDOW,
300,
200,
200,
200,
HWND_DESKTOP,
NULL,
hInstance,
NULL);


ShowWindow(hWnd, nShowCmd);
UpdateWindow(hWnd);

while(GetMessage(&message, NULL, 0, 0)){
TranslateMessage(&message);
DispatchMessage(&message);
}
return message.wParam;
}
268デフォルトの名無しさん:01/12/06 22:11
続き

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message){
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
269デフォルトの名無しさん:01/12/06 22:17
>267
エラーを報告白やヴォケ
俺の予想としてはHWND_DESKTOPって何打?ってかんじ。ペアレントがなぜペアレントを持つのかってかんじ。
270デフォルトの名無しさん:01/12/06 22:27
っていうか、プリプロセッサ使えば一発な気が・・・
win32_debugとかwin32_nodebugとかあるし
自分で作って設定してもいいし・・・
>>267
RegisterClassEx() に失敗してるやん。return 0 で終わらせずに MessageBox()
でエラーメッセージぐらい表示しとけよ。

WNDCLASSEX 使うなら wc.cbSize のサイズが間違ってる。
272デフォルトの名無しさん:01/12/06 23:05
int PASCAL WinMain(hInstance,hPrevInstance,lpszCmdLine,cmdShow)
ってなってるんですけど
PASCALってなんですか?
win*.hを検索して見ろ
274Kusakabe Youichi:01/12/06 23:11
In article >>272, デフォルトの名無しさん/272 wrote:

> int PASCAL WinMain(hInstance,hPrevInstance,lpszCmdLine,cmdShow)
> ってなってるんですけど
> PASCALってなんですか?

マニュアルに書いてありますよ。(ちゃんと買ったものなら)
マニュアル読んでも意味が分からない、に一票
>>267

1:WNDCLASSEXのcbSizeが間違ってる。
sizeof(WNDCLASS)は間違い。
sizeof(WNDCLASSEX) か sizeof(wc)に変更

2:hIconSmが設定されていない。
WNDCLASSにはないけどWNDCLASSEXにはhIconSmがある。
現在のやり方では構造体の初期化をしているわけではないので、大変イケナイ値が入っている。

>>269
HWND_DESKTOPはNULLで定義されていたような。
デスクトップを親にもつウインドウ(トップレベルウインドウ)のような抽象化をする為に
HWND_DESKTOPがあるものだと思っているのですが・・・
277269:01/12/06 23:36
>276
初耳。ありがとう。
>>272
MSDN Library 引きましょう。

今は PASCAL は obsolete だから WINAPI を使うのが推奨されてるけど。
279267:01/12/07 00:09
いろいろなレスありがとうございました。
なんとか解決できました。
っていうか、iniファイルを複数作りたくないなら、win.iniかレジストリ使うのが
普通だと思うが。もし箱売りのソフトならレジストリ使わないとWindowsロゴ取得で
ひっかからないか?
ReleaseとDebugを同じディレクトリにするのがスマートじゃないとか言ってるけど、
その根拠も示されてないし。なんか、ただのわがままにしか見えない。
そもそもGetModuleFileNameを知らなかったり、パス解析で悩むようなレベルだから
仕方ないのかもしれないが。あと質問してるくせに偉そうだし。レベル低いくせに。

_splitpathを面倒とか言ってたけど、このスレに書くために押したキーの回数よりも
ソースに_splitpathを追加する方がよっぽど少ないと思うが。

マルチ言語化とか考えてるなら、パス解析はAPIのパス関数を利用するのが一番安全。
ただしWin98以降限定になってしまうが。
調子に乗ってマルチ言語化してると台湾あたりから中国語でお礼とかバグ報告が来る
危険も伴なう諸刃の(以下略)。っていうか読めないっつーの。しかも中国人の書い
た下手な英語は中国語よりもわけ分からん。
知らない間に韓国語版が出てたりしてアゼーン
>>280
まぁまぁ。死体に鞭打ちうつなって。
283デフォルトの名無しさん:01/12/07 18:47
すいません、間違えてその4に書いてしまったのでもう一回書いちゃいます。

シリアル通信で、DCB構造体のfAbortOnErrorをTRUEにしても
エラーのときに処理を中断しないんです(FALSEと変わらない)。
Win2000だと設定通り動くんだけどWin98でやったらこうなってしまいます。

同じような人いませんか?どっちでもいいんだけどなんか気持ち悪いです。
284デフォルトの名無しさん:01/12/07 18:57
VC++6.0で質問です。

指定したファイルをZIPファイルに圧縮するプログラムを作りたいんですけど
zip32.dll、Unzip.dllをロードするのはわかるけど、肝心の関数がどういうもの
か?
GetProcAddress()で何を呼び出せばいいかわからない。

サンプルがあれば誰か教えてください。
285デフォルトの名無しさん:01/12/07 19:07
>>284
ライブラリやヘッダ付いてなかった?
今見てきたら、開発用は別に配ってるのね。
それ落とすべし。
287デフォルトの名無しさん:01/12/07 19:29
>>285

libファイルはありますがhファイルが無し。(それで困ってる)
DLLだけでもLoadlibrary()を使えばOKと思いますから。
>>287
ん?ちゃんと付いてたぞ。
289デフォルトの名無しさん:01/12/07 21:36
ちょっと質問
for (int i = 0; i < 5; ++i);
for (int i = 0; i < 5; ++i);
これがコンパイルできないんですけど普通ですか?
290デフォルトの名無しさん:01/12/07 21:37
#define for if (0) ; else for

FAQだ
>>289
i の2重定義ですな。 フツーフツー。
292デフォルトの名無しさん:01/12/07 22:44
現在VC6って、サービスパックいくつまで出てるんでしょう?
今3があたっていますが、これって古いですか?
SP6
294デフォルトの名無しさん:01/12/07 22:54
サービスパックって、いつまででるの?
誰も知りません
296284:01/12/08 09:22
>>288

どこのWebか教えてください。
297デフォルトの名無しさん:01/12/08 11:22
MFCで CHtmlView を使っているんですが
例外処理 (初回) は ***.exe (KERNEL32.DLL) にあります: 0xC0000005: Access Violation。
というメッセージがいっぱい出ます。
これってこういうものなんですか?
特別なことはしてないつもりですが CHtmlView が例外出しまくりです。

それと表示しているHTMLのリンクをクリックするとブラウザが起動してしまいます。
CHtmlView 内に表示したいんですがどうしたらいいですか?
べつにいいんでないの?
CString型からchar型に変換するにはどうすればいいですか?
一文字目だけでいいな
CString str = "aaaa";
char c = str[0];
301299:01/12/08 15:25
>>300
どもありがとうございました
>>299
CString str = "AAAA";
char *s = (LPTSTR)(LPCSTR)str;
汎用キャラクタマッピングをよく知らない人はキャストにLPTSTRは使っちゃいけません。
304syosinsya:01/12/08 17:07
Midi再生をしようと思って、
MCI_OPEN_PARMS open;
MCI_PLAY_PARMS play;
open.lpstrDeviceType = "Sequencer";
open.lpstrElementName = name;
mciSendCommand(0, MCI_OPEN,MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, ( DWORD )&open );
mciSendCommand(open.wDeviceID,MCI_PLAY,MCI_NOTIFY,( DWORD )&play );
のようにして再生できたのですが、連続再生がうまくいきません。
色々調べてみたところ、メッセージが送られたら、MCI_SEEKで戻す、というようにすればいいとのことでしたが、
その、MCI_SEEKで戻す、というのの具体的方法がわかりません。

上記のようなソースを元に関数化したいと思っているのですが、毎回呼び出される事に、はじめから再生するようにするにはどうすればいいのでしょう?
305( _ 。。) _ バタ。:01/12/08 21:10
>>303
#define LPTSTR unsigned short*
って安直な考えはしちゃいけなかったのか…(汗)

>>304
MM_MCINOTIFY のメッセージをトラップして
mciSendCommand(open,MCI_SEEK,MCI_SEEK_TO_START,(DWORD)&prm);
で先頭に戻してもっかいPlayを叩き込んで終りです。

あ。念の為にSEEK前にStop噛ました方が良いかな?
306305(ミス修正):01/12/08 21:12
mciSendCommand(open,MCI_SEEK,MCI_SEEK_TO_START,(DWORD)&play);
かな? 304さんの定義を使うとこうですな。                ~~~~~~
307デフォルトの名無しさん:01/12/08 23:19
GetBuffer()
308デフォルトの名無しさん:01/12/09 20:12
マウスエミュレーターみたいなのを作りたいのですが
(キーボードのスペースを押すとクリックになるみたいなやつ)
全然方針が立ちません。
情報持っている方がいらしたら、是非教えてください。
mouse_event
310デフォルトの名無しさん:01/12/09 20:17
他のウインドウに対してマウスイベントを送る事なんて
できるんですか?
余裕
くそめしまえだぜ
313デフォルトの名無しさん:01/12/09 20:35
Windows NT/2000:この関数は、SendInput 関数にとって代わられました。SendInput 関数を使ってください
となっていますが、98ではSendInput使っても動かないんですよね?
314デフォルトの名無しさん:01/12/09 20:36
SendInputのInput構造体の説明もなかったし・・・
315デフォルトの名無しさん:01/12/09 21:59
Windows2000 のOSの勉強したいのだが、
C++で実装して説明している書籍教えて
何いってのかわからんけどSDK読め
317( _ 。。) _ バタ。:01/12/09 22:52
>>313
MSDN読むべし、SendInputの項目、最後の方に
Windows NT/2000:Windows NT 4.0 SP3 以降
Windows:Windows 98
ヘッダー:winuser.h 内で宣言
インポートライブラリ:user32.lib を使用

<< http://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_sendinput.htm >>

>>314
INPUT as;
as.hi.uMsg;
as.hi.wParamH;
as.hi.wParamL;
as.ki.dwExtraInfo;
as.ki.dwFlags;
as.ki.time;
as.ki.wScan;
as.ki.wVk;
as.mi.dwExtraInfo;
as.mi.dwFlags;
as.mi.dx;
as.mi.dy;
as.mi.mouseData;
as.mi.time;
as.type

とりあえず、全部列挙してみたが…割り込ませるイベントの内容を記述するらしいな。
#KeyIvent / MouseIvent / じゃあ、hiって何のイベントだろ…(汗
>>315
お前はホントにWindows2000の"OSの勉強"がしたいのかと問いたい。
問い詰めたい。小一時間、問い詰めたい。
>>315
「Windows2000 アーキテクチャ徹底解説」

Windows2000 の実装まはやってないけど。
320デフォルトの名無しさん:01/12/10 01:27
ボーランドのCPPとマイクロソフトのCPPってどっちがよいの?
>>320
CPPって、プリプロセッサの話?
ANSI準拠してれば、どっちがどうとかってあんまり関係ないような気が。
処理系依存部分の優劣が問いたいのだろうか。
322デフォルトの名無しさん:01/12/10 02:01
いやいや、マイクロソフトにはヴィジュアルC++。ボーランドにはC++builderが
あるじゃないですか?買うならどっちかなって。
基本的にどちらが優れているか知りたいです。
>>322
判断基準が示されていないので、判断しようがありません。

「金閣寺と東京都庁があるじゃないですか? 観光するならどっちかって?」
知るかよ。
>基本的にどちらが優れているか知りたいです。
Rubyに決まっているだろっ!
>>324
C言語を#execしろYO!
#最近、セキュリティーの関係上 ダメなサーバー多いけどさ
つまらない質問で恐縮ですが、実行ファイルのアイコンに
何らかのファイルがドラッグ&ドロップされたとき、
それを無視して別のファイルを開きたい場合に
どうしていいか判りません。つまり以下のようにすると、

#include <windows.h>
#include <cstdio>

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
               LPSTR lpCmdLine, int nCmdShow)
{
 MessageBox(0,lpCmdLine,"コマンドライン引数",MB_OK);

 if(FILE *fp=fopen("./hoge.txt","r")) {
   fclose(fp);
   MessageBox(0,"ファイルの読み込みに成功しました.","OK",MB_OK);
 } else {
   MessageBox(0,"ファイルの読み込みに失敗しました.","ERROR",MB_OK);
 }
 return 0;
}

単体で起動すれば普通にhoge.txtを開いてくれるのですが、
何らかのファイルがドラッグ&ドロップされた場合、
つまりコマンドライン引数が存在する場合はhoge.txtを開いてくれません。
どなたか知恵を下さい。
>>326
てきとーにSetCurrentDirectoryしろ。
328326:01/12/10 08:27
>>327
ありがとう。
とりあえずSetCurrentDirectoryで検索してみます。
>>326
アプリケーションが起動されたときのカレントディレクトリ=.exeのある
ディレクトリだと勘違いしてない?
330326:01/12/10 13:42
>>329
さっきそうではないということと、
GetModuleFileName()なるものの存在を知りました。
てきとーにSetCurrentDirectoryを試み中です。
331326:01/12/10 14:35
うまくいきません。
下のようにしてカレントディレクトリのセットは出来たのですが、
相変わらず何らかのファイルをドラッグ&ドロップして起動すると
hoge.txtが開いてくれません。更なる知恵を・・・。

 char mpath[1024]; // 実行ファイルのパス名を入れるバッファ
 GetModuleFileName(0,mpath,1024); // 実行ファイル名混みのパス名を取得
 // パス名の後ろからサーチして最初の\まで(つまり実行ファイル名)を削除
 int i = strlen(mp)-1; while (mp[i]!='\\') --i; mp[i] = '\0';
 SetCurrentDirectory(mpath);

 if(FILE *fp=fopen("./hoge.txt","r")) {
   fclose(fp);
   MessageBox(0,"ファイルの読み込みに成功しました.","OK",MB_OK);
 } else {
   MessageBox(0,"ファイルの読み込みに失敗しました.","ERROR",MB_OK);
 }
hoge.txtをフルパスで指定するのがベスト。
_splitpath()でGetModuleFileName()の結果を分解して、_makepath()で結合
しなおすのが良いかと。
333326:01/12/10 15:26
>>332
どうもです。

char c_mp[1024];             // 実行ファイル名混みのパス名を入れるバッファ
GetModuleFileName(0,c_mp,1024);   // 実行ファイル名混みのパス名を取得
string mpath = c_mp;           // とりあえずstringに。
s.erase(mpath.rfind('\\'));        // おしりから\を探してそれ以降(つまり実行ファイル名)を削除
string readfile = mpath+"/hoge.txt"; // うぉんちゅう。

で出来ました。ありがと〜。
とりあえずファイルをドラッグした場合はカレントディレクトリが変わるということと、
ファイル操作には絶対パスが必要なときがあるということを勉強しました。m_ _m
おしりから\を消すのは問題あるよ。「表」とかは2バイト目が\だよ。
>>334
1.自分自身の.EXEファイルの名前には漢字を使わない。
2.漢字のファイル名にrenameされたときはあきらめる
ということでいかがでしょうか.
>>335
そんな運任せなんて……
337326:01/12/10 17:48
>>334
そうかぁ。でもそれを考え出すととても面倒そうなので
いずれまた考えることにします。
# VisualC++の相談というかWindows上でのCの相談でした。
# すみませんです。
>>337
おいおい。このぐらいで手を抜くなよ...

1 あたまから \ を探していって(ただし _ismblead() を使ってマルチバイト文字の一バイト目なら飛ばす)、
 一番最後の \ を見つける。
2 UNICODE 化してしまう。string ではなく wstring を使えば、悩まなくて良い。

とか、いくらでも手はあるぞ。
339326:01/12/10 19:35
>>338
wstringの使い方がまだよく判っていないのと
_ismblead()がcygwinで見つけられなかったので
_splitpathを使ってみました。表表.exeみたいな実行ファイルでも
うまくいってるみたいです。

char c_mp;
char c_drive[3], c_dir[256], c_file[256], c_ext[256];
_splitpath(c_mp, c_drive, c_dir, c_file, c_ext);
string mpath = c_drive;          // とりあえずstringに。
mpath += c_dir;              // ディレクトリ名を付けて
string readfile = mpath+"/hoge.txt"; // 出来上がり
340デフォルトの名無しさん:01/12/10 19:40
メニューに使われているフォントと同じフォントを使用したい場合どうしたらいいですか?
GetStockObject(SYSTEM_FONT) で取得したフォントはどういうわけかサイズがあいません。
かなり大きめのフォントが返ってきます。
教えてちょんまげ!
341デフォルトの名無しさん:01/12/10 21:56
>>292
SP5が正解。
342味噌醤油醸造株式会社:01/12/10 22:02
>>340
メニューのフォントって、MS UIゴシックじゃなかった?
(自信無し)
>>340
Getパラメーターイんふぉ(なんとか)って関数で取得できた気がするが。
MSDN参照
344デフォルトの名無しさん:01/12/10 22:19
質問。基本的なことで申し訳ないんだが、
CMyViewクラスのメンバ変数とか外部変数を
他のクラスで呼び出したり、値を代入するには
どうすればいいのでしょうか?
 逆は出来るんだけど・・・
345ppp:01/12/10 22:22
ええとVC6について質問ですがモノクロのBMPを配列に格納する方法ですが、
C言語の本に


/*--- BitmapToRgb --- 画像変換(Bitmap画像からRGB画像へ)----------------------
hBitmap: 入力Bitmap画像
pr: 出力R画像
pg: 出力G画像
pb: 出力B画像
-----------------------------------------------------------------------------*/
void BitmapToRgb(HBITMAP hBitmap, unsigned char pr[120][160],
unsigned char pg[120][160], unsigned char pb[120][160])
{
HANDLE hDB;
unsigned char *pdr, *pdg, *pdb, *ps, *ps0;
LONG i;

pdr = (unsigned char *)pr; pdg = (unsigned char *)pg;
pdb = (unsigned char *)pb;
hDB=GlobalAlloc(GMEM_MOVEABLE, (DWORD)160*120*4);
ps = ps0 = GlobalLock(hDB);
GlobalLock(hBitmap);

if (bitspixel == 16) { /* 16ビット/画素のフレームメモリ */
GetBitmapBits(hBitmap, (DWORD)160*120*2, ps0);
for (i = 0; i < (DWORD)160*120; i++) {
/* GGGBBBBB RRRRRGGG G成分が6ビット */
*pdb++ = (*ps << 3) & 0xf8;
*pdg = (*ps++ >> 3) & 0x1c;
*pdg++ = *pdg | ((*ps << 5) & 0xe0);
*pdr++ = *ps++ & 0xf8;
/* GGGBBBBB *RRRRRGG G成分が5ビット
*pdb++ = (*ps << 3) & 0xf8;
*pdg = (*ps++ >> 2) & 0x38;
*pdg++ = *pdg | ((*ps << 6) & 0xc0);
*pdr++ = (*ps++ << 1) & 0xf8;
*/
}
}
else if (bitspixel == 24) { /* 24ビット/画素のフレームメモリ */
GetBitmapBits(hBitmap, (DWORD)160*120*3, ps0);
for (i = 0; i < (DWORD)160*120; i++) {
*pdb++ = *ps++; *pdg++ = *ps++; *pdr++ = *ps++;
}
}
else if (bitspixel == 32) { /* 32ビット/画素のフレームメモリ */
GetBitmapBits(hBitmap, (DWORD)160*120*4, ps0);
for (i = 0; i < (DWORD)160*120; i++) {
*pdb++ = *ps++; *pdg++ = *ps++; *pdr++ = *ps++; *ps++;
}
}
GlobalUnlock(hBitmap);
GlobalUnlock(hDB);
GlobalFree(hDB);
}
346ppp:01/12/10 22:25
上のように乗っていたのですが、
これをボタンに割り当ててメッセージハンドらのコードに加えると
ローカル変数の定義がおかしいと出るのですがどのように変更すればいいのでしょうか?
>>344
まずC++の勉強から始めれ
348デフォルトの名無しさん:01/12/10 22:41
>>343
NONCLIENTMETRICS ncm;

ZeroMemory(&ncm, sizeof(NONCLIENTMETRICS));
ncm.cbSize = sizeof(NONCLIENTMETRICS);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);

で ncm.lfMenuFont を見ればわかると思う。
349デフォルトの名無しさん:01/12/10 23:13
リソースタブのdialogの項目をクリックしてダイアログボックスを
作成したのですが、誤ってコントロールパレットを消してしまい
新しくボタンを追加したりできないので、再び表示させる方法
を教えてください。
350デフォルトの名無しさん:01/12/10 23:33
ツールバーの空いてるところで右クリック。
「コントロール」という項目を選択する。
351349:01/12/11 00:01
>>350
ありがとうございます。
おかげで表示できるようになりました。

メニューの所全部調べてもパレット表示の項目がなかったんで
困っていましたが、右クリックツールバーを表示させればよかったわけなんですね。
でも最初違うウインドウを開いていたので、コントロールパレットが表示されませんでした。
このへんがちょっと混乱させられました。

まだVC++使い始めで付属の入門の本見ながらやってたんですが、
これで再開できます。
352ppp:01/12/11 13:30
レスがつきませんね、聞き方が悪かったのでしょうか?
お分かりになる方、どうかご教授願います。
353デフォルトの名無しさん:01/12/11 15:12
>>352 引数に配列の大きさなんか書いてよかったんか?
>>353
それは問題ないと思う。
>>352
ボタンに割り当てた部分のコードとか、どのローカル変数の定義が
どうおかしいと言われたのかを書いた方がいいかと。
356ppp:01/12/11 18:30
BitmapToRgbのローカル変数の定義がおかしいといわれました。
コードは下記のようになっています。ONCL2がボタンのBnClickedの変数です。
void CVcpictView::OnCl2()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
*--- BitmapToRgb --- 画像変換(Bitmap画像からRGB画像へ)----------------------
hBitmap: 入力Bitmap画像
pr: 出力R画像
pg: 出力G画像
pb: 出力B画像
-----------------------------------------------------------------------------*/
void BitmapToRgb(HBITMAP hBitmap, unsigned char pr[120][160],
unsigned char pg[120][160], unsigned char pb[120][160])
{
357Kusakabe Youichi:01/12/11 18:49
どうやら、あなたはCの初歩からやり直す必要があるようですね :)
本物の書いた本でも読んでみてはいかがでしょう?
358Kusakabe Youichi:01/12/11 18:54
In article >>357, Kusakabe Youichi/sage/357 wrote:

> どうやら、あなたはCの初歩からやり直す必要があるようですね :)
> 本物の書いた本でも読んでみてはいかがでしょう?

本物とは?
359ppp:01/12/11 18:57
レスを下さった方、どうもありがとうございます。
根本的に間違っているのでしょうか?
できたら、その個所の指摘をいただけたらうれしいのですが、
わたしはからかわれていることに気がつきました。
関数の定義、宣言と呼び出しを、きちんと理解しろやゴルァ
362bou :01/12/11 23:40
OnDraw内なんですけど画像表示の際LoadBitmapはかならずしていないといけないのでしょうか?
LoadBitmapというのは、メモリに特定の画像を転送するようなものだと認識していますが、これをしないと、”キャンパス”自体が作られないように見えます。
このキャンパスに対して別のところから描画してみてもまったく表示されません。なので、LoadBitmapで100*100ほどの白紙を読ませて実験してみたところ、
別のところから描画したものは100*100だけ描画されました。

LoadBitmapというのはキャンパス(受け皿)のようなものも作るのですか?
だとしたら、一旦MDC(CDC)に描画してからpDC.BitBltするような場合は一度希望の大きさの白紙を読ませないといけないのでしょうか????
363デフォルトの名無しさん:01/12/12 13:12
VC++ SP4 で、以下のコードをコンパイルすると、「error C2668: 'foo' :
オーバーロード関数の呼び出しを解決することができません」とかぬかしやがる
んですが、これってフツーですか。

namespace FOO {
void foo( int ch );
void foo( const char *s );
}

using namespace FOO;
using FOO::foo;

int main()
{
foo( "abc" );

return 0;
}
>>363 のソースがフツーじゃないざんす。

using namespace FOO;
using FOO::foo;

この2行のどちらかをコメントアウトしてみよ〜
>>364
あと文法上は問題ないが、ポインタと int を引数に取る関数の多重定義はやめたほうが
身のためと思われ。
366363:01/12/12 17:48
>>364
うーむ、やはり両方の using 宣言を混在させることはできませんか。
これは、C++ の規格上ダメなんでしょうか。それとも VC++ 独自の
問題?

>>365
らじゃ。引数として 0 を与えたときの曖昧性のことですね。
367デフォルトの名無しさん:01/12/12 19:03
質問というか素朴な疑問なのですが、
関数パラメータのデフォルト値に変数が使えない理由を知りたいです。

例えばブール変数をメンバに持ったクラスでトグル用のメンバ関数を定義するとき、
気持ち的には以下のようにしたいのです。

class my_bool {
public:
 bool elem;
 bool toggle(const bool& b!=elem) { // (*1)
  // 引数が指定されればelemを引数の値にセット
  // 引数が指定されなければelemを反転した値にセット
  elem = b;
  return elem;
 }
};

もちろんこれは(*1)のところでエラーがでます。
これが可能ならば上のような操作を簡潔に書けてハッピーなのですが、
デフォルト値に変数が使われると何かまずいことがあるのでしょうか?
368367:01/12/12 19:07
誤植です。正しくは(どうせ間違ってますが)
bool toggle(const bool& b=!elem) { // (*1)
でした。!=が=!
369中学2年生:01/12/12 21:38
>>367
最近C++を勉強し始めたばかりなので間違っていたらすみません。
引数が省略されたときの値がコンパイル時に決まっていないとコンパイラが困るからじゃないですか?。

>  // 引数が指定されればelemを引数の値にセット
>  // 引数が指定されなければelemを反転した値にセット

混乱しそうな仕様ですね。
370七誌:01/12/12 22:04
>>367
マルチポストすんなよ。馬鹿。
371367:01/12/12 22:20
あれ?

369辺りに
『VisualC++の質問じゃなかったですね。すみません。C++相談室に炒ってきます。』
とポストしたはずだったんですが・・・。
372367:01/12/12 22:25
>>369
ブール値をスイッチするtoggle()という関数のデフォルトの動作として
値を切り替える。もし値が明示的に指定されたならばその値に切り替える、
というのは感覚的には自然な気がするのですが・・・。

> 引数が省略されたときの値がコンパイル時に決まっていないと
> コンパイラが困るからじゃないですか?。

そういうもんなんでしょうか。
とりあえず今のところそういうもんだということで納得しておきます。
失礼こきましたです。
>372

頭悪すぎ。専用にSet関数作れ。
あとパラメータ渡したときとそうでないときの動作を変えたかったら
別々のtoggle関数作れ。
374デフォルトの名無しさん:01/12/13 10:44
>>372
感覚的に不自然
>>372
1つの関数に複数の機能もたせるのヤメレ
376いっぱいいっぱい:01/12/13 14:58
私は、VC1.0を使っています。
コンパイルしようとすると、
自動データセグメント+ヒープの大きさが64キロを越えています。
とのエラーが出ます。
どこがまずいのでしょうか?
困っています。どうかご教授ください。
377デフォルトの名無しさん:01/12/13 15:18
>>376
メモリモデル設定するオプションがあるはずだから、
さがして、ラージモデルとか、でかそうな名前のメモリ
モデルに変更してください。
378デフォルトの名無しさん:01/12/13 15:31
>>367
変数うんぬんの前に!=で代入はやめれ。
>>378
というか、代入になってないし
コレが仮に動いたとして…
どうやって「引数が指定されているかどうか」を判断できるんだ?って問題だし
いやいや、まてまて…それ以前にconstに代入するつもりか?

まあ、>>371 を見る限り、C++相談所に行ったよーなので この話は終りかな。
#C++ソウダンジョ…コイツノメンドウハタノンダゾ。
380いっぱいいっぱい:01/12/13 15:48
メモリモデルはどのようにして変更すればいいのでしょうか?
ご教授お願いします。
381デフォルトの名無しさん:01/12/13 15:52
>>380
1.0なんて、手元にないからわからないよ。
メニューにオプションって項目ない?
382いっぱいいっぱい:01/12/13 16:00
>>381
一応オプションという項目はあるのですが、その中にそれらしい
ものがないので。プロジェクト、デバッグ、ディレクトリ、エディタ、
ワークスペース、ツール、カラーという項目が入っています。
このうちのどれかにあるんでしょうか?
よろしくお願いします。
>>382
ヘルプで、メモリモデルって検索できない?
1.0使ってたのは、何年も前だから、まったく覚えてないよ。
384いっぱいいっぱい:01/12/13 16:19
HELPで検索してみたんですが、<メモリ>ですらヒットしないんです。
どうにがんばってみます。ご教授ありがとうございました。
3年ほどCをやっていて最近C++をやり始めたんですが例外処理ってなんですか?
普通に関数の返り値でエラーかどうか判別すればいいんじゃないですか?
例外をスローするメリットが分かりません。
それどころか例外を捕まえて例外を破棄(?)しないとメモリがリークするらしいのでウザイと思います。
それ以外(特にMFC)は便利だと思います。
例外をスローする関数なんて自分は絶対作りません。
以上です!
386デフォルトの名無しさん:01/12/13 16:32
>>384
そのころは統合環境つかってなかったから
わからないけどコンパイラのオプション指定の
辺りにないかな?後、リンカもべっこで指定
するんじゃないかな?
以上手元に無いので6.0から推測しました。

コマンドラインなら
cl -ms a.c
とか
cl -ml a.c
って指定するんだけどなぁ。
387Kusakabe Youichi:01/12/13 16:33
In article >>385, デフォルトの名無しさん/sage/385 wrote:
> 普通に関数の返り値でエラーかどうか判別すればいいんじゃないですか?

「かえりち」と読むのですか?
388デフォルトの名無しさん:01/12/13 16:34
>>384
メニュー「オプション」−「プロジェクト」でダイアログが出て
「コンパイラ」ボタンで、左側の「カテゴリ」にメモリモデルがある。
389デフォルトの名無しさん:01/12/13 16:37
>>385
ファイル操作なんかで使わない?
390デフォルトの名無しさん:01/12/13 16:51
>>385のコーディング

try {
 hoge1();
}
catch(...) {
 エラー処理
}
try {
 hoge2();
}
catch(...) {
 エラー処理
}
try {
 hoge3();
}
catch(...) {
 エラー処理
}
391役職名無しさん:01/12/13 17:02
>>390
 ワラタ
Windows2000でIOポートを制御するにはどうしたらいいのでしょうか?
393いっぱいいっぱい:01/12/13 17:49
>>386さん
どうもありがとうございます。
いろいろ試してみます。

>>388さん
アドバイスありがとうございます。
ですが、私はVer1.0を使用しています。
教えてくださった通りにやってみましたが、
ダイアログの中に、「コンパイラ」が見当たりません。
394デフォルトの名無しさん:01/12/13 19:43
すみません。質問です。
VisualC++のSocketAPIではIPv6ってサポートしてるのでしょうか?
395デフォルトの名無しさん:01/12/13 20:03
>>392
DDKでドライバを書く
396デフォルトの名無しさん:01/12/13 20:46
397質問:01/12/13 21:38
Win32 static libraryでプロジェクトを作った場合、MFCのクラスを使えるくせにクラスウィザードが使えないのにはどういう意味があるの?
398394:01/12/14 08:33
ギャー!英語だーー!!
・・・。
>>396
ありがとうございます。
・・がんばって読みます。
399デフォルトの名無しさん:01/12/17 16:51
APIが対応していないOSでAPIを使うプログラムを作った場合どうなりますか?
例えば GetLongPathName は Win95 に対応していませんが
Win95 で GetLongPathName を使った場合どうなりますか?

1.起動しない
2.APIのところでアプリが落ちる。
3.APIが失敗するだけ
4.その他

いずれにしろ正常に動かないわけですから Win95 では使えないとユーザーに警告する必要はあると思うのですが・・・
ユーザーのOSが分からない場合(オンラインソフトの場合)一般的にどのOSを対象にプログラムを作るべきですか?
Win95 に対応していないAPIは結構あるように見えますが Win95 ユーザーは切り捨てていいですか?
Win95 を使ってるユーザーなんて未だにいるもんですか?
>>399
>ユーザーのOSが分からない場合(オンラインソフトの場合)一般的にどのOSを対象にプログラムを作るべきですか?

OSバージョンチェックの方法は、検索したら出てくると思うよ。
>>399

うちのWebサーバーのログを見てると、95の人はほとんどいないみたい。
企業内で使われてるPCは95が割と残ってるという話もあるけど、
ネットからソフトを落とそうなんて人は、95は使ってないんじゃないの?
402I'm Win95.:01/12/18 00:26
>399
試してみた。
 「欠落エクスポート KERNEL32.DLLGetLongPathNameA にリンクされています」
 「システムに装着してあるデバイスは、動作していません」
うーん、合掌。
俺は、LFNに変換する時は、APIの FindFirstFileを使っている。

APIの OSごとの挙動を報告するスレみたいなの、誰か作らん?
MSDN見ればええやん
>403
いや、それが分からないもんだよ。
最近出くわした所では、例えば VirtualUnLockは、

 Windows 95/98/Me: Included in Windows 98 and later.

となっているが、
95でも「欠落エクスポート〜」のエラーにならず、起動できてしまう。
何で Windows 98 and later なんて書くんだ yo!
そもそも、9x系はこの APIは何もしないんだから、何で Unsupported に
しないんだ yo! VirtualLockは Unsupported と書いてあるのに。

まぁ、このあたりの挙動は、システム DLLのバージョンによるところが大きいのかもね。
405デフォルトの名無しさん:01/12/18 14:00
しょうもない質問で申し訳ないんですが、教えていただけませんか
Win2000+ADSLの環境でIPアドレスを取得したいのですが、
LAN内のIPアドレスが返ってきてしまい、WAN側?(インターネット側)の
IPアドレスを取得することが出来ません
ご存じの方取得方法をご教授ください よろしくお願いします
ADSLのルータがNATかましているなら外側のIPを自力では
取得できんはず。NATやめるか、外側にリフレクタを置い
てIPを知らせてもらえば?
407405:01/12/18 16:18
>>406
げふ... そうなんですか
その辺調べてみます ありがとう
ルータによってはAPI公開してて、それ使ってIP取得できる場合もある。
汎用性もクソもないけど。
409405:01/12/18 16:39
>>408
そうなんですか 流石に汎用性が無いのは困りますね
Win2000標準のipconfig.exeを使えばちゃんと表示されるんですけど
どうやってIP引っ張ってきてるんでしょうね...
410デフォルトの名無しさん:01/12/18 17:15
プロセスのセキュリティ関係について、分かりやすく解説したサイト
とか、無いですかね?

セキュリティ記述子だの、ACLだの、トークンがどうのだの...
訳が分からない。
411しいたけ:01/12/18 23:06
win32aplicationでエディットボックスを使ってキーボードから入力された文字を
画面に文字を表示させたいのですがエディットボックスを作るプログラムがわかり
ません。msdnコレクションを見たりもしてるんですが、何が何だかさっぱりわかり
ません(T_T)わかる人がいたら教えてくださ〜い。
VC6付属のfstreamの挙動でわからないところがあるので、教えてください。
まず、ソースは以下です(test.cpp, test.exe とします)。

#include <iostream>
#include <fstream>
using namespace std;

int main(int c, char **v) {
 istream *in = new ifstream(v[1]);

 int ch;
 int count = 0;
 for(ch = in->get(); !in->eof(); ch = in->get()) {
  count++;
  if (count == 50) {
   cerr << in->tellg() << endl;
   count = 0;
  }
 cout << (char)ch;
 }
 return 0;
}

また、以下の内容のファイルを作って
*** 改行コードを LF にして ***
保存しておきます(in.txtとします)。
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
dddddddddd
eeeeeeeeee
ffffffffff
hhhhhhhhhh
iiiiiiiiii
jjjjjjjjjj
kkkkkkkkkk
413412続き:01/12/19 05:13

で、
$ test.exe in.txt 1>sout.txt 2>serr.txt
とすると、sout.txtは、
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
dddddddddd
eeeeeeeeeeeeeeee
ffffffffff
gggggggggg
hhhhhhhhhh
iiiiiiiiiiii
jjjjjjjjjj
となっていました。
予定では in.txt と sout.txt の内容は同じになるはずだったのです。

in->tellg()の行をコメントアウトすれば、期待通りの動作をします。また、
in.txtの改行コードを CRLF にしても期待通りの動作です。
デバッガでみたところ、tellg()によってなぜかファイルポインタが少し前のところに
戻っているようです。

また、VC付属のものの代わりにSTLPortを使ったところ、tellg()の有無に
関わらず期待通りの動作をします。

これは使い方が悪いのでしょうか?それともVC付属のライブラリのバグ
ですか?
414デフォルトの名無しさん:01/12/19 10:13
ダイアログバーにリストボックスを埋め込もうとしているのですが、リストボックスのメンバ変数の取り方がわかりません。
ダイアログバーではDoDataExchangeは呼ばれないんですよね?
どうすればいいのでしょうか?
415デフォルトの名無しさん:01/12/19 13:52
厨房の質問です。
GUIなど使っていないプログラムで、ReleaseとDebugでコンパイルした
場合に挙動が違うんですが、同じプログラム書いていて挙動が違くなる
原因って一般的にはどんなことがあるんでしょうか。。。
宜しくお願いします。
>>415
GUI なアプリでも同じこと。

たとえばメモリを初期化せずに使っているとか、
解放したあと、まだそのメモリを参照してしまっている…とか、
まぁ、いろいろあるよな。
417415:01/12/19 14:07
>>416
デバッグ版だと初期化すべきところでしてなくても、
勝手に初期化してくれる(配列を零で初期化してくれるとか)ということが
あるということですか?
>>415
初期化してない変数を使った。
ReleaseとDebugでごみの値は違うことが多い。
419デフォルトの名無しさん:01/12/19 14:11
>>417
初期化しない変数は、何が入ってるかわからない。
DebugとReleaseで入っている値が違うということ。
420415:01/12/19 14:14
>>418 >>419
なるほど。デバッグ版で動いているのはたまたまってことですね。
白み潰しに見てみます。ありがとございましたー。
ワラタ
どうでもいいがモノスゴイ被り様だな。
422デフォルトの名無しさん:01/12/19 21:47
#ifdef _DEBUG
for(i=0 ; i<num ; i++)
{
 if(item[i] == 0)
 {
  MessageBox(hwnd , "バグってるぞ!" , "オラオラオラ!!" , MB_OK);
 }
}
#endif

といった具合にプリプロセッサでデバッグモードのときだけエラーを表示させているんですが
#ifdef _DEBUG の部分を "_" を書き忘れて #ifdef DEBUG とかやっててリリースモードで実行中に
メッセージボックスがでてビビリまくりな時があります。
#ifdef _DEBUG の記述を間違えてもコンパイラはエラーを出さないため
逆に恥ずかしいバグを発生してしまうことがあります。
#ifdef _DEBUG を間違わずに書く方法ってないですか?
デバッグモードの時だけコードが有効になって記述ミスした場合コンパイルでエラーか警告が出るようなやり方希望です。
423デフォルトの名無しさん:01/12/19 22:06
>>422 VC++なら、TRACEマクロ使えば良いでそ
424 :01/12/19 23:41
人の作ったプログラムを改造しているのですが
スタティックテキストのくぼみが、スクリーンセーバー解除後に
消えてしまいます。他のWINDOWで一度遮ってやると復活します。
FillSolidRect等を使って背景を描画しているみたいなのですが、
何が考えられるでしょうか。
>422

usertype.datに_DEBUGなどのキーワードをを登録しておくという方法はなかなか有効だったりする。

ただしやりすぎるとdatが1万行を軽く越えるけど。
>>422
const bool DEBUG = TRUE;
//...
if(DEBUG)
{
 HOGE();
}
みたいなのをプログラミング作法では推奨してたな。
427デフォルトの名無しさん:01/12/20 09:20
これってreleaseでfalse時には、きれいさっぱり無くなってくれるの?
>>427
VC++6では、最適化で削ってくれる。
他のコンパイラでも、このくらいやってくれると思う。
#ifdef _DEBUG
じゃなくって
#if _DEBUG
にでもすれば?
430デフォルトの名無しさん:01/12/20 11:54
当方初心者です。
EDITViewを基本クラスにして、メニューバーから
選択してFromViewを開く方法がわかりません。

プロジェクト追加しないといけないのですか?
431デフォルトの名無しさん:01/12/20 12:53
>>430
??FromViewってなんだ?何かの派生クラスか?
>431
CFormViewでしょう。
433431:01/12/20 15:16
>>430
ダイアログボックスじゃ駄目なのか?
434430:01/12/20 17:27
あ、ごめんなさい。CFormViewですね。
まだ先頭にCをつける癖すらついていません。

あれからいろいろやってみて、ダイアログボックス
なら開いた。という状態に持ってこれたのですが、
ダイアログボックスのID_EDITに入力された内容を
ボタンを押して、親ウィンドウに反映されるには
どのようにしたらよろしいのですか?

一部表現が変ですけど、ご容赦ください。
435万年カレンダー:01/12/20 22:56
年と月を入力するとカレンダーが出てくる予定です
y:年、m:月、d:出力する日付、n:マスの番号、l:最後の日
#include<stdio.h>
void main()
{
int y,m,d=1,w,n=1,l;
printf("年=");
scanf("%d",&y);
printf("月=");
scanf("%d",&m);
printf("[ %d年%d月 ]\n",y,m);
printf(" 日 月 火 水 木 金 土\n");
printf("---------------------\n");
if(m==1 || m==2){
y--;
m=m+12;
}
w=(y+y/4-y/100+y/400+(13*m+8)/5+d)%7;
if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12){
l=31;
}
else if(m==4 || m==6 || m==9 || m==11){
l=30;
}
else{
if(y%4==0 && y%100!=0){
l=29;
}
else if(y%400==0){
l=29;
}
else{
l=28;
}
}
for(w;w>0;w--){
printf(" ");
n++;
}
for(d;d<l+1;d++){
printf("%3d",d);
if(n%7==0){
printf("\n");
}
n++;
}
printf("\n");
}

閏年の判定がおかしい
else-ifもうまくいかない
436デフォルトの名無しさん:01/12/21 12:45
いや〜_allocaって便利ですね。
スタックからメモリを確保するのでメモリが断片化することなく嬉ピーです。
関数内で可変長のメモリが必要なときに重宝しております。
437デフォルトの名無しさん:01/12/21 13:32
>>434
ID_EDITってのはエディットボックスのIDか?
そうなら、そのIDとCEditあたりを対応させて、入力された内容を拾えばよろしい。
438デフォルトの名無しさん:01/12/21 13:48
if (y % 4) {
 l = 28;
} else if ((y % 100) != 0 || (y % 400) == 0) {
 l = 29;
} else {
 l = 28
}
439Kusakabe Youichi:01/12/21 14:00
In article >>438, デフォルトの名無しさん/438 wrote:

> if (y % 4) {
>  l = 28;
> } else if ((y % 100) != 0 || (y % 400) == 0) {
>  l = 29;
> } else {
>  l = 28
> }

28と29の2種類しかないのだから、2つに場合わけするか
もしくは4つにわけるかのほうが素直な書き方ですよね。
440万年カレンダー:01/12/21 14:07
判定部分のyをy+1に書き換えたらちゃんと動いたYO!

>>438
ifの条件式って0と1以外でもいいの?
441デフォルトの名無しさん:01/12/21 14:10
>>440
0と比較できればなんでもおげ
442万年カレンダー:01/12/21 14:20
if(m==1 || m==2){
y--;    ←これが原因だったみたい
m=m+12;
}
何度も修正してると
どんどんリソースが減っていくのはなぜ?

>>441
なる
443デフォルトの名無しさん:01/12/21 15:00
m==1じゃなくてm==13ね
444デフォルトの名無しさん:01/12/21 15:01
こういうことにならないように、その月の1日の曜日を求める関数とかを作るわけだ。
445デフォルトの名無しさん:01/12/21 15:03
こんいちは。
Cで書かれたプログラムをC++のプログラムから呼ぼうとしていますが
できません。Cのソースは10年前くらいのもので、VCを使って
コンパイルしてオブジェクトファイルを作りました。それを呼ぶ
メインがあるファイルを*.cにするとエラーなしで、*.cppにすると
LNK2001の未解決なんたらが出てリンクができません。拡張子が
違うだけで中身はまったく一緒です。どうしたら
いいでしょう?
>>445
C++のリンケージについて勉強する。
447デフォルトの名無しさん:01/12/21 15:16
extern "C"
だっけ?
448デフォルトの名無しさん:01/12/21 15:47
それ書きました。Cのヘッダファイルに。>>447
でもだめでした。。C++のメインの方では
何かすることありますか?
449デフォルトの名無しさん:01/12/21 16:17
ん〜でも今テストしててCで書かれた関数はコメントアウトして
あるんですが・・ヘッダに定義されてる変数を使おうとしただけで
だめなんです。おかしくないですか?
450デフォルトの名無しさん:01/12/21 16:19
あっできた
451デフォルトの名無しさん:01/12/21 16:21
をろ?
なにが悪かった?
452412:01/12/21 16:49
>>412の件ですが、ソースをみたところ、テキストモードで開くことを
想定しているのはCRLFなファイルだけみたいでした。ftell()が場所を
計算するときに、LFがあると、それは問答無用でCRLFからLFに変換
されたものだとみなされて、2バイト分として扱われていました。

STLPortと挙動が違うのは、VCのほうではpubseekoff()がtellg()のなかで
つかわれていたためでした。

では逝ってきます。
453デフォルトの名無しさん:01/12/21 16:55
C++のメインの方でCのヘッダをインクルードしているところを
extern "C"{}で囲ってみました。
最初はCのヘッダファイルのほうで定義を同じもので囲ってました。
454 :01/12/21 23:04
       HANDLE hWave=NULL;
hWave=LoadResource(AfxGetResourceHandle(),
FindResource(AfxGetResourceHandle(),
MAKEINTRESOURCE(name),"WAVE"));
LPSTR lpData=(LPSTR) LockResource(hWave);
sndPlaySound(lpData,SND_MEMORY|SND_ASYNC);
UnlockResource(hWave);
FreeResource(hWave);

SND_ASYNC;
SND_LOOP;

のようにしてWAVEファイルを今まで再生していました。これは、リソースに読み込んで(WAVEファイルを)使っていたんですが、
外部のWAVEファイルを、ファイル名を指定する形で用いることはできるのですか?
>>454
PlaySound()
456デフォルトの名無しさん:01/12/22 00:26
XPに対応してますか?VisualC++6.0
>>456
なんとか。 というか、 NT5.2 (だっけ) だから 2000 ベースで考えていいかと。
458デフォルトの名無しさん:01/12/22 01:30
>>457
ありがとう。ちなみに7.0はいつ?
>>457
Windows 2000 == Windows NT 5.0
Windows xp == Windows NT 5.1
98 と 98SE 程度の違いだ。

>>458
英語版はもうそろそろらしい。
日本語版は一月か二月遅れるだろ。

でも、7.0 から C# がメインになりそうな感じだし、
VC++7.0 ってあんまり意味ないかも。
VC++/C# Ver7.0 そのつぎは、やっぱ C# Ver1.0 ?
>>459
あ。 5.1だったか、 フォローサンクス。

>>459
この手の開発系アプリケーションって…
ちゃんとしたヴァージョンアップが5〜6あたりまで続いた後は…

1:無駄な贅肉がついていく(80%)
2:ほとんど変化が無い(30%)
3:まだまだ頑張っている(10%)

のうちのどれかになるよな……。 こぽこぽ。
人はそれを安定期と呼ぶ。
正直言ってVC++は5.0で実用上全く問題ないレベルなんで、そんなに頑張って
更新しなくてもいいかと。いまだに5.0の人多いし。
IDEの強化とコンパイラのtemplate対応強化を希望したいところなんだけど。
ISO標準C++を完全に満たしてから安定期に入ってくれぃ
>>462
> 正直言ってVC++は5.0で実用上全く問題ないレベル
ARM の頃のテクニックしか使わないと問題ないんだが template 使うと辛いこと多いんだよな。個人的
に困ってることを列挙。

1 partial specialization が使い物にならない。
 template <typename T, bool Threaded> Allocator {};
 template <typename T, true> Allocator {};
 template <typename T, false> Allocator {};
 とか書きたいことが、しばしば。

 あと引数の数を可変にした template メソッドを書く方法もあるんだが、これも parial specialization
 が使えないと実装できん。

2 foo<int>(), foo<float>() を呼び分けられない。

3 template<int N> struct X { int n[N]; }; が「要素数 0 の配列を定義している」と怒られて、コンパイル
 が通らないケースがある(もちろん N に 1 以上の数を渡してる)。どうもテンプレート化するタイミング
 に依存するみたいで、通ることもある。とりあえず n[N + 1] にしておけば回避できる。

4 void 型の関数で return (void型関数) とやると、コンパイルエラーになる。このため std::mem_fun_t()
 が void 型のメソッドでは使いものにならない。
466 :01/12/23 06:02
virtual long __stdcall IOleWindow::GetWindow(struct HWND__ * *)" (?GetWindow@IOleWindow@@UAGJPAPAUHWND__@@@Z)" は未解決です
Debug/VCapture.dll : fatal error LNK1120: 外部参照 1 が未解決です。

ってどのライブラリにリンクすりゃいいかなんてどこで調べるんだい?
msdn
なんで、IOleWindowの参照を、COMではなくてリンカが解決しようとするんだろう‥‥?
#undef _PURE
とか
470デフォルトの名無しさん:01/12/23 19:45
ダイアログベースで作成して、これにリソースエディタでメニューをつけました。
これを実行してみたらメニューのところだけへこんでるのですが
他のところと高さを合わせるようにできませんか?
471デフォルトの名無しさん:01/12/24 02:32
えくすきゅうすみぃ、ソースで読み込みたいライブラリ指定する方法が思い出せず、探しても見つかりません。たすけてくだされ
#pragma comment(lib,"hoge.lib")
473471:01/12/24 22:46
ありがとうございますだ。
474デフォルトの名無しさん:01/12/24 23:07
gogoをコンパイルしようとすると、
c:\windows\system32\cmd.exe の実行エラー
って怒られるんですけど、何でシステムファイルの実行エラー?
OSはWin XP使ってます。
475:01/12/25 05:54
ある構造体の中の様々な変数などに、外部のファイルから読み込んで初期値を与える、というようなことをしたいのですが、
どのようにするのが最も簡単でしょうか?
476 :01/12/25 06:01
SetTimer(NULL,MYID,wait,My_TIMER_PROC);
でさ、コールバック関数(static)内でthisポインタ使いたいんだけど、
パラメータでthis渡せないよね。
どうしたらいいっすかね?
477デフォルトの名無しさん:01/12/25 07:08
>>475
fread(buf,sizeof(構造体),1,fp);
>>476
staticメソッドにthisはねえよ。パラメータで渡しとけ。
>>477
だから、TimerProcにパラメータ渡す方法がねぇってんだろが。
ウィンドウに属さないタイマーの場合、Timerprocが属してるclassを
singleton化してstaticメンバにthis保存するぐらいしか思いつかん。
つーかコールバックするならマルチメディアタイマ使えば?
480デフォルトの名無しさん:01/12/25 07:57
>>478
nIDEvent(SetTimerの2番目の引数)で渡せるっぽい。
SetTimer(NULL,(UINT)this,1000,(TIMERPROC)TimerProc);
とかみたく。
481デフォルトの名無しさん:01/12/25 08:18
MFCを使って、中が透明な円を書きたいのですが。
どうしても塗りつぶされてしまいます。どうしたらいでしょうか?
482デフォルトの名無しさん:01/12/25 09:12
>>481
SetBkMode(TRANSPARENT)とかでできんか?
知らんが。
黒く塗れ!!
>481
SelectObject(GetStockObject(HOLLOW_BRUSH))
485デフォルトの名無しさん:01/12/25 11:47
>>481
MFCなら CDC::SelectStockObject(NULL_BRUSH) を呼んでから円を描け
486デフォルトの名無しさん:01/12/25 11:57
>>482 >>484 >>485
ありがとうございました。
487教えて君:01/12/25 16:34
CViewベースで作成して、メニュー欄からダイアログを
開いて、そのダイアログのエディット欄に入力された情報を
OKボタンが押されたときに、View側に反映させたいのですけど、
CXXXDoc.cppに
CXXXDlg dlg;
if(dlg.Create()==IDOK){
m_CurLett=dlg.m_text;
}
と入力した後、
CXXXDoc.hに
// アトリビュート
public:
CString m_CurLett;
と入力してm_CurLettに値を入れるところまで行ったんですけど、
この値をView側に表示させる方法が分かりません。
お願いします。この後どうすれば良いのか教えてください。
488デフォルトの名無しさん:01/12/25 16:53
InvalidateRectして、WM_PAINTのハンドラでTextOutしてください。
489デフォルトの名無しさん:01/12/25 23:47
質問です。
アクティブなIEが見ているURLを得る方法って有りますか?
>>489
やったことないけど Browser Helper Objects 書けば出来そう。MSDN Library に解説があります。
Google Toolbarみたいな独自のツールバーを作るにはどうしたらええんかのう
>>491
最近 ATL ML で紹介されてた。
http://www.cheztabor.com/toolband/
493デフォルトの名無しさん:01/12/26 11:52
MFCとSDK、どちらでプログラム書いている人が多いですか?

最初は入門って事でMFC使ってましたが、ゲームのプログラムとかを
作っていると、MFCでは重くて使い物にならないことが分かってきました。
配布するときも、ライブラリ依存になってしまうし......
最近では、SDKばっかりです。皆さんはどうでしょうか?
>>493
SDKってWin32APIのことでいいのか?
VCは趣味でゲーム作るくらいだから俺はAPIオンリー。
MFCもそのうちやろうかと思ってはいるが、あまりいい話聞かないし、
普通のアプリ作る予定もないから今のところ永久に保留中。
495デフォルトの名無しさん:01/12/26 13:49
>>493
>配布するときも、ライブラリ依存になってしまうし......

「ライブラリ」ってどれのことだろう。
入門ならSDKじゃないの?
俺と順番が逆だ。
497デフォルトの名無しさん:01/12/26 14:05
WinInetを使用してFTPクライアントを作っています。
パーミッションの取得・変更ってどうやるんですか?
ソケットレベルで自分で書かないと無理ですか?
498デフォルトの名無しさん:01/12/26 15:00
VB経験者なら、MFCの方が理解しやすいかも・・・
>>493
個人で書いてるプログラムには ATL/WTL 使ってます。

ATL/WTL はMFC よりも機能的に劣る部分もありますが「API の薄いラッパクラス」という感じで、
ゲームなどを作る場合には向いてると思います。テンプレートライブラリだから DLL の類も不要
ですし。

(唯一の問題は解説が少ないことか。規模が小さいライブラリだからソース読めば良いんだけど)
500デフォルトの名無しさん:01/12/26 16:07
指定したディレクトリの全ファイル名を取得する方法を教えてください。
SearchPathを使ってやりましたがうまくいきません。
よろしくお願いします
501デフォルトの名無しさん:01/12/26 16:10
本日VisualC++6.0を買った!けどなにからすればいいのかさっぱり
分からん!ということなので知ってる人教えてください。
てかVisualStudio6.0ってなんすか?初心者の俺にはC++のソフトに
なぜそのようなもののセットアップガイドがついているのか不思議
でならんかった。
>>501
何をしたいのかさっぱりわからん。
503デフォルトの名無しさん:01/12/26 16:26
とりあえずインストールしたい!
>>503
そんなもんここで聞くなよ。
字を読みながらボタンをクリックしろ。
505デフォルトの名無しさん:01/12/26 16:50
じゃあVisualStudio6.0がなんなのか教えてくらはい。
>>505
「じゃあ」ってなんだよ。
くそがき氏ね。
>>505
「分散企業システム対応 Windows & Web 高性能システム構築 統合型開発スイート」だそうです。
http://www.microsoft.com/japan/developer/vstudio/

…とマジレスしてみるテスト
508デフォルトの名無しさん:01/12/26 19:55
>>507
マジレス感謝
509デフォルトの名無しさん:01/12/27 00:06
自分の書いてるソフトで専用のウインドウズメッセージ(?)
(SendMessageとかで送れるやつ)を定義したいのですが、
その際気をつけなければならないことってあるでしょうか?
ダブらなければOKかなとも思ったんですがちょっと怖くて。
アドバイスお願いします〜〜m(_ _)m
510デフォルトの名無しさん:01/12/27 00:35
>509
しらべたよ
0 through WM_USER – 1 Messages reserved for use by the system.
WM_USER through 0x7FFF Integer messages for use by private window classes.
WM_APP through 0xBFFF Messages available for use by applications.
0xC000 through 0xFFFF String messages for use by applications.
Greater than 0xFFFF Reserved by the system for future use.
511デフォルトの名無しさん :01/12/27 01:03
アカデミックパックの買い方を教えて呉れ。
512デフォルトの名無しさん:01/12/27 01:12
>>511
学生手帳とお金と製品を持ってレジへ逝く
513509:01/12/27 01:16
>>510
おおぉ〜〜!助かります!!
φ(.. )メモシテオコウ
>>509
心配ならRegisterWindowMessageを使おう。
文字列を与えると、勝手に空いてる番号を返してくれるよ。
ただし、Cではcaseに変数使えないから、通常のswitch-caseを使ったメッセージ
処理が使えなくなるのが痛いが。
515509:01/12/27 02:13
>>514
ありがとうございます、MSDNで見てみました〜。
ちょうどC++で記述してるんで使えるようですね。
ふと疑問に思ったのですが、こういう関数があるってことは
異なるアプリケーション間では、たとえ同じ値で定義しても
オリジナルのWindowメッセージを送ることはできないって
ことなのかな・・・・初心者なのでうまくイメージできないけど。
516デフォルトの名無しさん:01/12/27 03:12
超超初心者です。
うざいかもしれませんけどお願いします。

visual C をしりたいと思い、教則本を本屋で見たところ、
「こうしたい時はここをこう書き換えて、、、」
とか、「『visual C』というソフト自体の使い方」など
「こうする時は有無を言わさずこうしましょう!」
みたいなことを中心に書かれていて、
いまいちC言語とのつながりがよくわかりません。

C言語も平行して勉強していこうかと思ってたんですが、
もしかして本に書かれている通りにやっていけばいいのだったら
C言語の知識はさほど必要ないのかなぁなんて思ったりしてしまいます。

実際、visual C を勉強する上でC言語は必須なのでしょうか?

厨房的な外れなこと聞いてるのかもしれません。すいません。
517デフォルトの名無しさん:01/12/27 03:16
「こうしたい時はここをこう書き換えて、、、」 程度で作れる以上のものが
作りたくなったら、C言語の勉強したくなるよ、たぶん。
518デフォルトの名無しさん:01/12/27 03:26
>>517
つまり入り口ぐらいはC言語の知識はさほど必要ではないけど
それ以上進む気があるのなら
C言語をしっかりやっといたほうがいいということでしょうか?

自分としては、それなりにvisual Cを学んでおきたいのですが、
それならC言語はみっちりやっといたほうが良いですか?
>>518
Visual C++を学ぶならC言語はただの通過点。
壁のレベルとしては路傍の石ころみたいなもん。
520517:01/12/27 03:35
乱暴に言うと、なにも作りたいものが無いなら、勉強する必要ないでしょ、って事です。
>>519
出来てて当然の物ということですか。
数学する前に九九を覚えとくのが当たり前みたいな?

やっぱり初めからちゃんと勉強しないといけないんですね。
わかりました。怠けずにやろうとおもいます。
ありがとうございました。
>>520
今は特に作りたいという物はないんですが
プログラムに少し興味がわいているので、
知識として知っておきたいと思ったんです。

で、やるんだったらさわりぐらいは使えるようになりたいなぁと思いまして。
とにかくありがとうございました。
VCって7.0がでることはない?
.NETでいっちゃうの?
だれか516に言語とコンパイラについて説明してやれって。
VisualC++とC言語は別の言語だと思ってるのではないかと、小1時間問い詰めて
やれって。

>>515
>異なるアプリケーション間では、たとえ同じ値で定義しても
>オリジナルのWindowメッセージを送ることはできないって
>ことなのかな・・・・初心者なのでうまくイメージできないけど。

普通はそれでも構わないけど、それだと同じ値を他のソフトが使っている可能性
があるんで。あまり独自のメッセージを他のアプリケーションに送りつける人は
そういないと思うが、IntelliMouseなんかは最初はそうやってホイールの処理
をしてたよ。もし、勝手に使っている値がそういうのと重複しちゃうと、誤動作
するので注意。

俺はもちろん、そんなAPI使った事ない(笑
>>525
っつーか、visual Cなんてプロダクト聞いたことないし。
527デフォルトの名無しさん:01/12/27 17:10
特定の条件の時に、チェックボックスを無効にしたいんですけど、
どのように指示してやればよいのか分かりません。

イメージとしては、テキストだと
「SendDlgItemMessage(hdwnd, ID_TEXT, EM_SETREADONLY, TRUE, 0 );」
と設定すると、グレーになって(当然ながら)入力不可になります。
チェックボックスを上記のようなイメージで使用不可にする方法を
教えてください。
528デフォルトの名無しさん:01/12/27 17:13
API : EnableWindow(GetDlgItem(hWnd,IDC_CHECK1),FALSE);
MFC : GetDlgItem(IDC_CHECK1)->EnableWindow(FALSE);
で、いけると思うが。
>>527
EnableWindow(GetDlgItem(hdwnd, IDD_CHECKBOX), FALSE)
とか。
530529:01/12/27 17:17
かぶった。スマソ
531デフォルトの名無しさん:01/12/27 17:44
>>528、529

ありがとうございます。
できました。
532476:01/12/27 18:54
>>479
ありがと、できたよ。
となると、SetTimerの存在意義って何だろ。
初心者用の関数ですか?

>>480
できなーーい。
マルチメディアタイマで解決したからいいけど、
ほんとにそれでもできるの?
533デフォルトの名無しさん:01/12/27 21:13
学生証を偽造してのアカデミックパックの買い方を教えて呉れ。
534デフォルトの名無しさん:01/12/27 21:44
>>533
偽造学生証とお金と製品を持ってレジへ逝く
で、そのままレジの前を通り過ぎる。
536480:01/12/27 23:09
>>532
俺もちょっとはまったんだが、SetTimerの場合、
自分でメッセージループ回さないとコールバックは呼ばれないよ。
SetTimerはあくまでもメッセージを定期的に送ってくれるようにする
ためのAPIだから。
ウィンドウ無くてもGetMessageとかにNULL渡せば来る。
>>533
お前は学生の知り合いもおらんのか?
ヤフオクで買えば
539Disca ◆NAfP6znE :01/12/27 23:49
暖炉でスマソ
ハンガリアン記法によれば、ポインタの場合、
p or lp
としているが、どちらが正しいのでしょうか?
LPCTSTR *lpszXXXName;
CWnd *pParentWnd
私が思うに、lpの場合は、文字列で、
p の場合は、その他のポインタって思ったのですが…。
M$のソースみても、あてまはらない事例とかあるし…
お願いします。
lp使ってるのは化石。
far と near を区別する必要のあった時代の区別やね
542Disca ◆NAfP6znE :01/12/27 23:52
533>
たしか、アカデミックは幼稚園からでも買えるらしい。
私は、2Ch総合スクールに通っていると、モナー証
を見せれば、ネタがわかる店員だったら売ってくれると…
そこらへん、ずさん。

OEMソフトも、メモリだけ購入しても買えるらしい…。
某パソショップでバイトしていた頃に教えてもらった^^;
学生時代に買ったアカデミックパックって
学生じゃなくなっても使っていいの?
VC++で
1.画面の明るさ・コントラスト・ガンマ値等を変更する
2.他のソフトウェアによる明るさ・コントラスト・ガンマ値等の変更を許可しない
プログラムを作ってみようと思っていますが、どの辺から手をつければいいのでしょうか?
DirectDraw、Direct3D、ビデオオーバーレイあたりを勉強すればよいのでしょうか?

本屋で何冊か読んできたのですが、ガンマ値等の記述が無かったので質問します。
適当な参考書に心当たりがありましたら、ぜひ教えて下さい。

ちなみに、VC++のレベルはウィンドウを一つ二つ作れるぐらいです。
それから、マルチスレッドを用いてポップアップをたくさん出せます。
まず、デバイスドライバっつーものを知ってください。
546デフォルトの名無しさん:01/12/28 17:22
::CreateFile(.., OPEN_EXISTING, ..) で既存のファイルを開いたとき、
ファイルポインタは常にファイルの先頭、ですよね?
そうでないことってあるんですか?
547デフォルトの名無しさん:01/12/30 02:11
>546
レギュラファイルだったらそーだと思う。
多分。
548デフォルトの名無しさん:01/12/30 04:43
VC++でDNSのMXレコード取得する方法教えて。
>>548
Windows 2000 以降でよければ DnsQuery()
550デフォルトの名無しさん:01/12/30 06:24
数値解析でプログラムを高速化したいのですが
VCでMMXまたはSSIを利用するにはどうすればよいのでしょうか?
void fooMMX()
{
 __asm {
  emms;
  pxor mm0.mm0;
  emms;
 }
}
とか?
552 :01/12/30 10:06
VS6のSP5(FULL)を当てているはずなんですが、VC起動時に何も
でません。これで正常なんでしょうか。
VBの場合は起動時にsp5と表示されます。
553_:01/12/30 13:12
STL使うと識別子が切り捨てられたとか言うwarning C4786がたくさんでて困ってます。
これを表示させないで無視するコンパイラ指令みたいのがあったような気がしたのですが分かりません。
教えてください。
554デフォルトの名無しさん:01/12/30 13:25
#pragma warning(disable:4786) //識別子が '255' 文字に切り捨てられました、を無視する

ただいSTLについてはココも参照
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q167355
555554:01/12/30 13:27
>>554 は、>>553 へのレスです。あと s/ただい/ただし/
>>552
正常
>>554
その URL、IE6 で見ると何も表示されないんだけど、何が書いてあるの?

もしかして「特定の条件で #pragma warning(disable : 4786) しても C4786 が報告されてしまう」バグに
対する hot fix が出てるのかな。
558デフォルトの名無しさん:01/12/30 17:33
質問です。
htmlのソースから、リンクされているアドレスを抜きたいのですが、
どのような方法でやれば、より簡単に出来るのですか?
よろしくお願いします。
559デフォルトの名無しさん:01/12/30 17:53
>>558 Perl でやったほうが早いと思われ。
560544:01/12/30 19:47
NS4.78でも、IE6でもフツーに見えるけどな
>BUG: C4786 Warning Is Not Disabled with #pragma Warning (Q167355)
>STATUS
>Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.
>Last Modifed May 7 2001 2:54PM
と書いてあるだけ。hot fix も何にもねーよ
561557:01/12/30 23:12
>>560
今試してみたら読めました。なんだったんだ?
562560:01/12/30 23:33
さー、MSのサーバが重かったんじゃないかい。
ちなみに 560 で 544 と名乗ったがあれ、554 の間違いな。
563553:01/12/30 23:33
>>554
こんな早くお答えしてもらってるとは思いませんでした。
ありがとうございました。表示されなくなりました。
お礼が遅くなってすいません。
564_:01/12/30 23:38
自分のVCは複雑なテンプレート関係が(メンバ関数のテンプレートとか)
処理できるようになってないけど、サービスパックをいれるとできるようになるのかな?
565デフォルトの名無しさん:01/12/30 23:48
>>564 VC6はSP入れたってテンプレート処理の能力は増さねーよ。
次の VC7.NETまでオアズケだよん。
566_:01/12/31 00:28
>>565
やっぱり駄目なのか。ありがとう。
STLやテンプレートを深く勉強しようと思ったけどやめようか。
逆にサービスパック如きで予想できない言語の扱いの変更が行われるのはコードへの影響が
無視できなくなる可能性があって危険だな
568あたー!!!!         :01/12/31 01:12
今日秋葉でVC++5エンタープライズ版
が7000円で売ってました。
違法コピーじゃなくて中古みたいだったけど。
買っても大丈夫かなぁ。
569a.out:01/12/31 01:51
ネットワーク上のプリンタを監視する方法として、MIBを使うという手がありますが、
実際アプリはどのように記述すればいいのでしょうか?
snmpを使ったプリンタ監視について御教授願います。
570565:01/12/31 04:18
>>566 STLを深く勉強するなら、VC6+STLPortでやっとけ
それから Modern C++ Design を読むとテンプレートの
奥義を極めることができるそうだぞ

>>567 SPで言語の振舞いが変るのは勘弁だが、VC6の
言語サポートにも追いついていないSTL周りは
SPできっちり更新して!と思うナリ
571548:01/12/31 05:47
>>549
あとがと

Win9x系,NTでVC++でDNSのMXレコード取得する方法ってないの?
なんだかんだ言って、VC++より良いコンパイラは存在しなかったり。
gccはコンストラクタ周りにバグあるし、IC++はデストラクタ周りにバグあるし、
CWやLSI-Cは論外だし。
動作がおかしいんじゃなくて、最初からそういう仕様になっているVC++が一番
癖が少ないと思う。その仕様が中途半端なんだけどさ。
>>572
用途による。

PS2 のソフト組むのに VC は使えんし。
揚げ足取られて可哀相な572に補足すると「Win32環境なら」ってことだろ。
俺もVC++使ってるのが一番幸せだと思う。
575VC++超超初心者:01/12/31 23:11
どうしてVC++で

int main(){
printf("test");
return 0;
}

のようなものを実行するとDosプロンプトが出てきてそこに表示されるのでしょうか?
いまいちどういうことなのかわかりません
>>574
ただし標準でついてくる STL は捨てた方が良い。SP5 を当てても、まだ致命的なバグが残ってる。
>571
RFC読んで、dns鯖にUDP投げろ。
>>575
ネタ…だよな? ネタだって言ってくれっ!
579名無しの2番:02/01/01 00:38
VisualBASICとVisualC++の違いってなんですか?
ちなみに現在VisualBASICの方を学んでます。VC++は初心者向けの本が見つかりませんでした。
糞と(;´Д`)ハァハァ。
>579
いっしょ
582デフォルトの名無しさん:02/01/01 01:46
API&c++でプログラムを組みたいと思うのですが(非MFC)、フリーで内容の公開されているライブラリー
か、それの解説をしているページって無いでしょうか...

MFCを使うと汚いプログラムでも自分に妥協してしまうので...(爆)
WTLとか?
584デフォルトの名無しさん:02/01/01 02:34
>>579
日本とアメリカの違いってなんですか?
くらい漠然とした質問だ。
答えようが無いぞ。
585VC++超超初心者:02/01/01 03:04
>>578
ほんとにはじめたばかりで何もわからないです。
本とか見てもそういうことには触れていませんでした
なぜ、と言われてもなー。Windowsの機能を使った方が、
ライブラリの実装が簡単だったからじゃないのか?
別に、Winのコンソールではないウインドウを出す
実装があっても良いし。
>>585
じゃあ、お前的には575のプログラムがどういう風に動くと思ってたんだ?
Windowsのウィンドウが表示されてそこに"test"と表示されるとでも思ったのか?
588Disca ◆NAfP6znE :02/01/01 03:40
VC= 医師国家試験並らしい…
VB= 英検2.5級位
って思ったら良いと思われ。(誰かが言っていた。
(言ったその当時は、VCのHowToが無かった時代かな…)
>>575には激しくワラタ。
たぶん、>>587の言ってることができると思ったんだろうけど、
>>575はどんな本を読んでるの?
何でそんな必死に突っ込みたがるんだろう  (^_^;
591589:02/01/01 03:57
>>590
>>575を混乱させる本がかなり気になります。
592VC++超超初心者:02/01/01 04:52
>>587
何もわからない初心者なのでなんとも言えませんが、さすがにWindowsのウィンドウが出てくるとは思いません。
でもなんでDos窓が出現するのですか?
>>591
特にその本は何も触れていません。ただ、実行すると、DOS窓がでてきて文字が表示されるっていう事実だけが書いてあったぽい

ていうか、ネタのつもりでないんで誰かマジレスしてほしいです
593589:02/01/01 05:25
>>592
つーことは、実行すればDOS窓が出てくるってことは理解してるんだよね。

DOS窓が出現するのはexeファイルを実行してるからじゃないの?
>>593
その exe に

 このプログラムは console subsystem を使う

と書いてあるからだと思うが。VC6 だとリンカのオプション /SYBSYSTEM で指定できる。
595デフォルトの名無しさん:02/01/01 16:01
すごい簡単なことを聞きます。

ボタンを使用不可にするにはどうすればいいんですか?
ボタンにメンバ変数を割り当てたのですが、どのコマンドで
使用不可になるかわかりません
596新年おめでたレス:02/01/01 16:41
EnableWindow(FALSE)
597デフォルトの名無しさん:02/01/01 17:05
お年玉でVCを買いました。
始めに何を作ったらいいですか?
ドラクエが作りたいです。
ネタの臭いが
プンプンするぜェェェェェェェ!
599デフォルトの名無しさん:02/01/01 19:19
>>595 MSDN のドキュメントもちゃんとインストールしておきなさい。
>>595
もう回答出てるけど。

とりあえず、ボタンだろうがエディットボックスだろうが、基本的に
どれもウィンドウである(ウィンドウハンドルhWndを持ってる)という
のを理解する事。

理解したらMFCのクラス図を眺めてみて、なぜCButtonはCWndの派生
クラスになっているのか、CWndとは一体何のクラスなのか、という
のを調べてみるといいだろう。
601o?:02/01/01 23:18
演算子の定義ってなんすか?

”特定の計算(比較)結果を返すもの”

ってのは正しいでしょうか?
演算
既知のもののゆるされた組み合わせに作用し、新しいものを生成する定義された動作。
既知のものがオペランドであり、動作を指定するのが演算子である。
603VCC:02/01/01 23:35
>>597
とりあえずファイル、新規作成、コンソールアプリ、
またファイル、新規作成、C/C++ソースファイルを作り、

#include <stdio.h>

int main()
{
printf("hello");
return 0;
}

を入力F7でコンパイルして、F5で実行これでDOS窓でhelloと表示される、いきなりMFCのスケルトンを使った
アプリも良いけど最初が肝心、if、forとかの基本的な制御文を覚えとかないと後でやるのは大変
604ウィルス職人:02/01/01 23:38
ウィルスを作りたいのですが、どうしたら良いでしょうか?
606572:02/01/01 23:57
別にWin32環境に限定したつもりはないんだが。
環境を限定せずに考えて、俺が一番マシなのはVC++だと思うって話。
それを573が厨っぽいレス付けるからおかしな流れになる。
607ウィルス職人:02/01/01 23:57
>>605 一応、Delphiで作りましたが…
ほしいですか?アゲマス。
608ウィルス職人:02/01/02 00:00
Report608 :=
" >>606
だいたいの奴は、自分が持っている言語に自信をもっていることが
君のレスのおがげで良く分かったよ。";
609566:02/01/02 00:19
>>570
どうもありがとうございます。
STLPortをいれてみようと思います。やっぱりVC付属のSTLはなんか少し変ですね。
普通にコンテナ・イテレーター使う分にはいいんですけどね。
Modern C++ Design もテンプレート勉強しようと思ってたので衝動買いしてたんだけど、
まだほとんど読んでません。
ATLに使われていて感心したテクニックがこの本のポリシークラスは関係あるみたいだけど、
VCだとこの本で解説されてる技法のすべては実践できなさそうで少し残念ですが。
はやくVC7.NETがでないかな。でも高そうだけど。
>>606
反論を食らうのは、自分の狭い世界でしか通用しない常識を一般化するから。
611Kusakabe Youichi:02/01/02 03:53
In article >>601, o?/601 wrote:

> 演算子の定義ってなんすか?
> ”特定の計算(比較)結果を返すもの”
> ってのは正しいでしょうか?

引用符の向きが違いますね。
612デフォルトの名無しさん:02/01/02 15:10
STLPortってDLLないと動かん?
613nana :02/01/02 15:20
ウイルス下さい!お願いします!
>>612
static linkすれば?
>>612
#define _STLP_STATIC

で static link できる。あと SGI iostream ライブラリを使わなければ、そもそもライブラリは不要です。
ヘッダだけで OK。

#define _STLP_NO_OWN_IOSTREAMS

stlport/stl/_site_config.h にオプションが列挙されているから、一度目を通しておくと良いですよ。
616デフォルトの名無しさん:02/01/02 17:38
おお、ありがとございます。
617初心者:02/01/03 08:36
pDC->TextOutとprintfの違いを教えてください。
クイックCぐらいしかやったことない僕には何が
なんだか分かりません。マジレス希望です。
クイックCってなんだ?
619anal fuck:02/01/03 12:45
617
クラスか関数かの違いでは?
クラスとは、構造体を拡張したものです。
620初心者:02/01/03 13:06
>>619
ありがとうございました!
>>618
正確にはQuickC2.0のことです。
なんというか、まず>>620には、ビットマップつーものから教えなくちゃいかんのかに?
622初心者:02/01/03 15:46
>>621
ビットマップってなんですか〜?(w
デバイスコンテキストじゃないの
624初心者:02/01/03 18:10
デバコンってなあに?
むじゅかしいなあ。。。
625 ◆ZVA2oc3Y :02/01/03 23:03
WinsockではなくWinInetでHTMLソースを持ってくるものを書いてます。

VC4.0なので、WinInet.dllからGetProcAddress()でInternetOpenUrl()
をインポートし、使っているのですが‥‥

InternetOpenUrl()を呼んだところで強制的にブレークがかかって
HEAP[Test.exe]: Heap block at 00158DF8 modified at 001591C6
                 past requested size of 3c6
というメッセージが出てしまいます。

どうやって解決すればよいのか教えてください‥‥
MSのページを見るとメモリリークらしいのです。
626前すれ924:02/01/04 22:43
ごめん、古いほうに書いちゃったよ。


924 : :02/01/04 22:42
FAQっぽいけど、、、
system("***.exe a.tex b.tex");
みたいなのをDOS窓を出さずにできる方法はないの?

教えて!
627 :02/01/04 23:22
CreateProcess
ShellExecute
_exec***
_spawnl***
>>626
system 関数について、もちっと、勉強せぃ。

GUI アプリなら CreateProcess か ShellExecute を使って、直接、起動しろ。
CUI アプリなら、キッパリと諦めろ。
629VisualC++に乗り換えた腐れ厨房:02/01/05 00:10
このたび、遂にVisualC++6.0を買いました。
「反MS原理主義」を掲げる職場の先輩に付き従って、TurboC++ for Windows で
今まで戦ってきましたが、製造元にも見放されたコンパイラに限界を感じ、遂に
投降しました。
現在、プログラムの変換作業中なのです。
が、TurboC++で使えていた関数がVC6.0では使えなくてエラーと格闘しております。

VCでは次の関数はないのでしょうか?
strncmpi()
jstradev()

またヘッダファイルも無い物があるようです
jstring.h
mem.h

ヘルプファイルを探しても、なかなか見つかりません。ご存知の方いらっしゃいましたら
ご教示ください。
630 ◆woDeLPHI :02/01/05 00:11
>>627
windows2000ならコンソール窓が必要無ければ
CreateProcessでCREATE_NO_WINDOW
631 ◆woDeLPHI :02/01/05 00:17
>>629
_strnicmp _mbsninc が似てたように思うけど 確認して

C++Builderを経由すれば多少苦労が減りそうに思うんだけどなあ
>>629
strncmpi()はだいたい察しがつくが、jstradev()って何する関数?
633デフォルトの名無しさん:02/01/05 14:23
てんで初心者なんですが、一つご教授を。
ダイアログに31個のボタンを配置して、押すと「今日は○○日です」とか。
どーすんでしょう?
無策にマウスでオブジェクトをぽちぽち31個置いて、関数も31個作りますか?

それともIDだけ31個作って、ループで回して31個CButton::Createして、OnCommandで仕分けますか?

どちらも面倒・・・と言うか保守性最悪。ボタンが2000個だったらどうしろと。

と言う訳で、何かいい方法ありませんでしょうか?
634デフォルトの名無しさん:02/01/05 14:27
>>633
クリッカブルマップ
635デフォルトの名無しさん:02/01/05 14:34
返事早っっっっっっっ
早速検索・・・。
636デフォルトの名無しさん:02/01/05 14:39
(・_・、)<全然わからなかったらしい
>>636
俺には>>634は少々投げやりな意見に聞こえたけどな。
それを読んで飛び出していく方もどうかと思った。
638 ◆woDeLPHI :02/01/05 14:52
>633 スマートじゃないかもしれないけど ボタンが並んだ絵を描いておいて
 ホントのボタンは1個だけ、マウスの移動につれてそのボタンを動かすというのはどう?
 VBでは良く使った方法だけど
639デフォルトの名無しさん:02/01/05 14:56
>>637
そこはそれ、当方初心者ですのでご勘弁を(;´Д`)。

>>638
かなり妖しい方法ですね。考えも付きませんでした。と言うかあり得ないw
でもそれって普通のDOSプログラムとコーディング変わらないんじゃ…。
クリックの割り込みがOnButtonになるだけで(^_^;)。
つうか、ボタンが全部違うなら31個作るしかないだろ。
それで、「今日は○○日です」って処理だけなら関数は1個で済むだろ。
それだけだ。
641 ◆woDeLPHI :02/01/05 14:59
ボタンらしい動きをさせるのがメンドクサイ時に使う方法であって

クリックして大幅に画面が変わるなら、それこそボタンの絵だけ描いて
クリックされた座標から判定すればいいだけだからさ
Delphiじゃ複数のオブジェクトのイベントを同じメソッドで処理できた。

procedure OnMouseDown(Object Sender)
begin
end;

Senderにそのイベントを発行したオブジェクトが入る。
VCにはないのかな?
イベントハンドラの共有なら
VCでもできたよーな?
>>634 = >>641 同じ考え
>>640 = >>642 同じ考え

どっちか選べ。
645デフォルトの名無しさん:02/01/05 15:10
>>641
最後の手段として検討させて頂きます。
いや、その手法ですとね。今回は確かに乗り切れるでしょうけど、
将来の為にも、正攻法で考えてみたく。

>>642
有るかもしれない。けど、いくら調べてもわからない(死
button[n] = CButton::Create(); の引数で、別途リソースIDを指定しなきゃなんなくて。
このIDを自動生成出来ればいいんですけど、仕様上無理そうな。
OnButtonで感知出来るのはこのリソースIDだけみたいで、ユニークじゃないと。
実体のアドレスをくれ、アドレスを・・・・・・。

未だ地道に検索中・・・。意地でも手作業でボタンは置きたくないんで。
実際150個弱だから、置いて置けない事は無いけど。
646 ◆woDeLPHI :02/01/05 15:14
>642 イベントという考え方は VB/Delphiの特異なものかも

>645
確かにボタンを150個並べても CDialogのメッセージ処理メンバで処理させるから
それはいいと思うんだけど?

でもリソースが少し勿体ないかもしれないよ。 win95とかだと
リソースメータ一挙にふりきらない?
>>645
昔話をしよう。
物理学者のファインマンさんの部下はある日を境にぷっつり仕事を上げてこなくなった。
不思議に思ったファインマンさんは部下の部屋に行くと彼は必死になってアークタンジェントを求めるプログラムを書いていた。

「アークタンジャントの表なら物理の教科書に載ってるから貸そうか?」
『いや、どうしてもPCでやりたい。』

その部下はクビになりました。

以前に150個のボタンってインターフェース的に問題がないか?
648デフォルトの名無しさん:02/01/05 15:23
>>645
それってリソースエディタでボタン150個置いて、関数も150作るって意味で?(^_^;)
そうじゃなくて、Createで作成した150個のボタン全てが同一の関数を起動、
>>642 みたいな仕分け方(典型的には内部で if (buttonId == 0) とか)が出来れば
一番スマートじゃないかと・・・。で、これをどうするのかと(死

しかしシステムリソースは盲点(と言うかまだそこまで考えが・・・)。今2000で組んでますから。
一山越えたら95で動作チェックしないと逝けませんね。
事と次第によっては将来的には>>638かも・・・(汗
649デフォルトの名無しさん:02/01/05 15:26
>>647
いや、150と言う値はともかく。
5個でも10個でも私は同じ方向で考えてるでしょうし。性格が粘着質なんで(ぉ
うざ。
>>633
等質なもの(ボタンなど)を格子状に並べるなら、
TableとかGridとか名づけられているコンポーネントを使うのが正攻法
一ヶ月分のカレンダーなどが典型的な例題になっている。
ON_CONTROL_RANGE じゃダメなん?<ボタン150個
せめてコンボボックスなんかで選択できるようにしたほうがいいと思うけどなぁ
654デフォルトの名無しさん:02/01/05 15:57
>>651
新しい案をどうもです。つか新境地。これはこれで調べてみます(;´Д`)。
いやだから、MFC初心者なんですってw。

>>652
私レベルでは良く解りませんが、かすったかもしれません(笑)。恐らく一歩前進しました。
いやはや、聞いてみるもんですね。
ユニークなIDを持つボタンを複数作成出来れば、それでOKなんじゃないでしょうか。
私は現在、CreateでのそのユニークなIDの付け方が解らず(死)。
そこに的を絞って調査続行してみます(;´Д`)。

>>653
いやそれが。仕様上グラフィカルでないと成立しないと言うか。
囲碁プログラムで、置く位置をX,Yのコンボボックスで指定、なんて誰もプレイしたくないと言うか。
そんなノリのブツなんですよこれが(^_^;)。囲碁でもゲームでもないですが。
>>654
>囲碁プログラムで、置く位置をX,Yのコンボボックスで指

それならクリッカブルマップつかえよ。何を考えてたんだか。
656デフォルトの名無しさん:02/01/05 16:01
>>655
それはそれで考慮中(・_・、)。
マジ、ウゼエ。答えでてるだろ。
もう上げんな。
まず何をするプログラムなのかを言ったほうが良いんでは?
そうすればUIに関するアドバイスからもらえると思うけど。
カレンダーならコンボボックスでもいいし、
囲碁ゲームならコントロールじゃなくて「絵」でもいいけど、
どちらでもないんでしょ?
開発者としてボタンが数百個置かれたプログラムを作るのはめんどうだけど、
ユーザとしてもそんなプログラムはあまり使いたくないなぁ。
659デフォルトの名無しさん:02/01/05 16:05
ボタンのIDについての答えはまだ出てない様な(藁
お馬鹿ちゃんのせいで荒れてきたな・・・。
>>659
どっかのヘッダに書けば?
662デフォルトの名無しさん:02/01/05 16:08
>>661
150個カキまくりますか。まあ考えるよりその方が早いかもしれん・・・・・・。
>>662
それは手動でもプログラム使ってでも好きなように。
ホントに日付ならCDateTimeCtrl で何の不満があるの?
665デフォルトの名無しさん:02/01/05 16:15
>>663
まあその方向で逝ってみますか。
MFCも何年かいじってれば正解も見えてくるだろうといふ事で。
お知恵をくださった皆様方、ありがとうございました。<とかいいつつまた覗きますが
特にTableに関しては近々本格的にチャレンジしてみたく思います。

>>664
いや日付じゃないです。カレンダーはモノの例えでして。

>>658
余りにダサいんで勘弁してください(涙

>>660
MFCでのソレの実装方法が全然見えてこなかったりして。因みにVC++5.0。
お暇でしたらお馬鹿ちゃんに愛の手を。
>>665
ダサいとかの問題じゃないんだよ。
中途半端な情報しか与えないで教えてくれと言われるほうが迷惑。
667sage:02/01/05 16:21
>>666
別にユーザーインタフェィスをどうしようかって質問じゃないんだから。
ボタン150個をどうするのかって話でしょ。
結論:力技
sage間違った。
この方がダセぇ。
>ボタン150個をどうするのかって
だからこのUIが問題なんじゃないのかって話しだろ
質問者はその様な事は一言も。
終始一貫、複数のボタンをどう実装するのか?って話ですよ。
アドヴァイスとして、テーブルやクリッカブルマップの話も出てきましたが、
質問者の期待した答えではないでしょうし。
それに対して迷惑は言い過ぎでしょう。
もうちょっとマターリ逝きましょう。
>>670
おい、笑わせんな。
テーブルだってクリッカブルマップだってそれなりの解決法なのに
それを実装できないって理由で他の方法求めてるほうがおかしいだろ。
よく読んでみろ。クリッカブルマップだって、「わからん」の一言で済ませてるんだぞ?
本来なら、>>634のレスで終わってる内容だろうが。
ここは質問スレですから。
わからないと言う人にはそれとなく教えてあげる方向で。
半端に作業を進めちゃってるから、
いまさらほかの方法に変えたくないんじゃない?
惰性は敵だ。
674デフォルトの名無しさん:02/01/05 16:36
>>673
大丈夫。まだリソースエディタでぽちぽちやってる段階ですし、コーディング
そのものは0に近いです。つか敵はMFCだけです。ぷ〜の内容はマジ簡単(藁
>>670
なにをするプログラムなのかわかれば
>>634
>>641
>>653
>>664
などのどれかで解決だろ。
でもどれもいまいちみたいなこと言うから、じゃあおまえの作ってるのは
どんなのなのかと。いまいちな解決法レスで埋める前にとりあえず
どんなのが好みなのか言えと。
676デフォルトの名無しさん:02/01/05 16:47
>>675
んじゃ全部ボタンで(懲りろ
なんか似たような事も書きましたけどね。このプログラムをどう仕上げるのかが問題じゃなくて、
複数個のコントロールから一つの関数を呼び出した時に、どう仕分けるかが疑問なのでありまして。
他のUI使えば仕分けなくていいよ、なるほどこれも確かに貴重なご意見ですが、
やはり質問者である私の期待する答えにはなってないと言う。
いやでも、みなさん親切に教えてくださいましたし。将来の課題でいいです、これは(笑)。
多分一般人は、余りやろうと考えないで、普通に5個10個関数を作るのでしょう。私がズレてました。

ま、それはそれとして。

さっきから検索かけまくったんですが、やはりVC++でのクリッカブルマップの実装方法が
全く見えてこないんで。どうでしょう675さん?
後学の為に、ちょっと実装法のヒントになるHP、ご存じでないですかね?|・)
enum忘れてた(照
MFCなんか使うからだ。
SDKならコントロールのハンドル→リストを線形検索で十分じゃい。
って俺がヘタレなだけか、
679デフォルトの名無しさん:02/01/05 17:02
誰か、ショートカットのプロパティダイアログで「リンク先を探す」を押したときの
動作を実現する方法、知らない? API無いっぽいし...
680デフォルトの名無しさん:02/01/05 17:03
もしや、
クリッカブルマップを使え発言 == MFCを捨てろ発言?
豪快すぎて言葉が有りません・・・・・・。
>>676
何でそんな卑しい文体なの?
顔文字使わなきゃ文章書けないとか
絵を描けってことだろ?
683デフォルトの名無しさん:02/01/05 17:08
>>682
あ、図解してくれると最高ですが(違
ナチュラルプチ陽ちゃんだな
>>680
クリッカブルマップとMFCを捨てるにどのような関係が?
豪快すぎて言葉が有りません・・・・・・。
RUBYにしろよ>>C厨のあfふぉ
RUBY!!!!!!!!!>>>>>>>MFC
687デフォルトの名無しさん:02/01/05 17:11
そうですかやはり豪快でしたか・・・私もそう思いました。
取りあえずこれも将来の課題といふことで。
力技で地道に進行中。
>>676
>複数個のコントロールから一つの関数を呼び出した時に、どう仕分けるかが疑問なのでありまして。

ID見て普通に仕分ける以外に無いと思うが、
なにか、ほかにあるんだろうか。
つうか、肯定的な意見は全部質問者の自作自演だな、これは。
>>682
ちがうよ!<MAP>タグを使えってことだよ!
691仕様書無しさん :02/01/05 17:14
>>650 何故その段階で気付いた? あんた何者だ  笑
692デフォルトの名無しさん:02/01/05 17:14
sageてないのはほぼ質問者ですが、何か?(藁
と言うかレスりすぎてコーディング進まねェし。バカ。
>>688
そこが彼の文章のわかりにくいところなんだよ。
彼が言いたいのは
「たくさんボタン置くのがめんどくせーから、いっぺんに
どばぁーっとボタンを置く方法知らねぇ?」
ってことなんだよ。
(゚Д゚)ポカーン
>>692
>と言うかレスりすぎてコーディング進まねェし。
まずやってからレスすれ。
だからこういう展開になる。
>>689
漏れもそう思った。張り付いてスレ見てるみたいだしな。
>>682->>683のタイミングとか。
しかも、クリッカブルマップが分かってないくせに>>687の豪快とは、これいかに。
>>680が自作自演だって事は明白だな。
MFCがどうのこうの言ってる時点で、クリッカブルマップが理解できとらんし。
697650:02/01/05 17:22
>>691
何者って言われても。うざいと思ったからうざいと書いたとしか言えない。
ちなみに>>634で速攻クリッカブルマップとレス付けたのも俺だよ。
俺の他にも色々と意見を出してくれてる人がいるのに、分からないだのなんだの
言ってるからうざいと思ったまで。
698デフォルトの名無しさん:02/01/05 17:23
>>693
それいいかも。

>>695
いやーなんか次々出てくるんで。次々やっては捨て。ああバカ。でも頑張る。

>>696
自作自演なんて話じゃないです。敢えて一人だけsageてないので丸わかりです。
つか解る様にしてます。心外な(藁
張り付いてると言うか、レスってリロード完了すると増えてんだもん。
と言うか自分でコーディングするのか?クリッカブルマップ。
まだ理解出来てないかも。
for(int i=1; i<3; i++){
  CRect rect(100*i, 100, 200*i, 150);
  CButton *b = new CButton();
  b->Create("button", WS_CHILD|WS_VISIBLE, rect, this, 5000+i);
}
じゃダメかね。座標はテキトー。
700デフォルトの名無しさん:02/01/05 18:58
>>699
逝けました、と言うかID以外は私もその手法だったのですが、
ID勝手に付けちゃって良かったんですかー。<ここら辺知らない辺りがモロ初心者
予約しとかないで大丈夫なのか?と言う疑問は残りますが、
そこら辺の処理は又別問題として、以後調査してみます。

>>652 さんの情報と組み合わせる事で、期待通りに動作致しました。やっとこさ。
併せて御礼申し上げます。

以上、しばらくはこのスレに来なくて済む事を祈って(笑)。どうもありがとうございました。
701699:02/01/05 19:20
そのまんまだとメモリリークするからそのへんちゃんとdeleteすれよ
それではみなさん、ここでもう一度最初の>>633の質問を見てみよう。

> ダイアログに31個のボタンを配置して、押すと「今日は○○日です」とか。
> どーすんでしょう?

たいていは「カレンダー作るんだろうなー」と思うよな。

> それともIDだけ31個作って、ループで回して31個CButton::Createして、OnCommandで仕分けますか?

こう言ってるんだからIDの作り方もループの回し方もcreateの仕方も
OnCommandの仕分け方もわかってるんだろうなーと思うよな。
で、これが嫌だから他の方法尋ねてるんだと思うよな。
そら>>634も即答するよな。

で結論が最初の方法(Create)ってどういうことやねん。
というわけでこの話題、めでたく終了。
>>702
すまんが吹き出してしまった。
笑わせてくれた礼を言うからそうカリカリすんな
705デフォルトの名無しさん:02/01/05 20:44
上の方で書いたんですが、落ち着いたところで(w 再度質問。

誰か、ショートカットのプロパティダイアログで「リンク先を探す」を押したときの
動作を実現する方法、知りませんかねぇ?
そういう APIというか、シェル関係のインターフェイスあります?
>>705
IShellLink::Resolve()
詳細はMSDN Libraryで。
707705:02/01/06 00:33
>706
>IShellLink::Resolve()
リンクターゲットはおっしゃるとおり、IShellLink::Resolve()で取得できます。
そうではなくて、「リンク先を探す」を押すと、新しいエクスプローラ窓が開いて、
リンク先オブジェクトが選択されますよね。これをやりたいんですが。
708705:02/01/06 01:07
IShellBrowser::BrowseObject というのを発見しましたが...
つ、使い方が分からない(鬱
709デフォルトの名無しさん:02/01/06 05:47
>>702
引用の通り、ダイアログにン10個のボタンを配置、これは譲れない線なので
まあ許して(笑)。
つまり私の言う所の「IDの作り方」は、DevStdioで普通にン10個予約するか、
或いは#defineをン10個並べて予約するかの問題で、
その辺が初心者。何分一昨日初インストした所なんで(苦笑

その後は快調、快調。
710デフォルトの名無しさん:02/01/06 06:07
あれ?
711706:02/01/06 13:09
>>707
それなら、
"explorer /n,/select,リンク先オブジェクトのパス"
をShellExecuteなりなんなりで起動すればよい気が。
712705:02/01/06 15:42
>711
感動した。
ShellExecuteレベルでできそうな気はしていたが、
explorer.exe にオプションスイッチがあったとは...
技術系掲示板・MLで嫌われるような典型的な厨房がいるな
714714:02/01/06 17:05
二次元配列の大きさを動的に操作したいんだけど、
vectorって二次元にできます?
できる。
716714:02/01/06 17:34
std::vector<int>(std::vector<int>Dim);
見たいな感じだとコンパイルエラーになるんですが(VC++)
ヒントだけども教えてください。
>>716
std::vector< std::vector<int> > Dim
718714:02/01/06 18:26
>>717
助かった。ありがとう。
具体的な使い方がよくわからんが、とりあえず宣言はできた。
719デフォルトの名無しさん:02/01/06 18:30
VC++プロにはスタンダード版のような入門書とかついてくるの?
また、スタンダード版はプロ版にバージョンアップ可?
ここにも出た。>>719
>>719
本屋壱って買え
722デフォルトの名無しさん:02/01/07 19:09
POPサーバーに接続してメッセージを取り出してくるプログラムを
VC++で作りたいのですが、参考になるHPや書籍があったら紹介して
もらえませんでしょうか
RFC嫁、UNIX系POP Clientのソース嫁。googleに訊け。
724デフォルトの名無しさん:02/01/07 23:51
IHTMLDocument2を使って今見ているURLを取り、それを加工してリダイレクトしようとしています。
とりあえず今見ているURLをもう一度開くコードを書いているのですが、
assert(m_pBrowser);のとこや、m_pBrowser->get_Document(&pDisp);でIEが落ちます。
なにか根本的に間違っているような気がするのですが、八方塞がりなのでご教授きぼんです。

IWebBrowser2* m_pBrowser;
assert(m_pBrowser);
IDispatch* pDisp;
m_pBrowser->get_Document(&pDisp);
IHTMLDocument2* pHTMLDoc;
pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDoc);
BSTR pURI;
pHTMLDoc->get_URL(&pURI);

_variant_t varURL = _bstr_t(pURI);
_variant_t varEmpty;
if (m_pBand)
m_pBand->m_pWebBrowser->Navigate2(&varURL, &varEmpty, &varEmpty, &varEmpty, &varEmpty);
725初心者?:02/01/08 02:22
すいません。教えてください。
m_pBrowser の中身って何なのでしょうか?
ATL/WTL スレって無いのかな?
ここでいいのかな?
727726:02/01/08 02:51
VC+MFCで質問してよろしいでしょうか。
読取専用のeditboxをIRCのようなチャットクライアントのウインドウにしたいのですが、

myED = (CEdit *)GetDlgItem(IDC_EDIT);
myED->GetWindowText(ss);
msg = ss + buf + "\r\n";
myED->SetWindowText(msg);

このようにして書き込んでいくと、
最初はいいのですが1画面の範囲を超えてスクロールが必要なときに
何か発言があるとスクロールが一番上に戻ってしまいます。
最初からスクロールが下にあるようにしたいのですが・・・
728724:02/01/08 11:03
>>725
はい、初心者です(「IEコンポーネントを使い倒すスレ」に書けば良かったかも)。
IWebBrowser2* m_pBrowser = NULL;
です。

昨晩ちょっと格闘してみたのですが、ごく単純に

IHTMLDocument2* pHTMLDoc = NULL;
BSTR pURI;
pHTMLDoc->get_URL(&pURI);

_variant_t varURL = _bstr_t(pURI);
_variant_t varEmpty;
if (m_pBand)
m_pBand->m_pWebBrowser->Navigate2(&varURL, &varEmpty, &varEmpty, &varEmpty, &varEmpty);

とやってもダメなんですねえ。
>>728
NULLだったらアサーションで引っかかるのは当然と思われ

「今見ているURL」がほしいなら、Browser Helper Objectsを使いましょう。
MSDN Libraryに、そのものズバリっぽい解説&サンプルがあります。
http://www.microsoft.com/japan/developer/library/jptech/MSDNNews/top.htm
730デフォルトの名無しさん:02/01/08 12:27
モードレスダイアログを使った場合、データの受け渡しは
ウィンドウ間通信じゃないといけないと聞いたけど、
どこかお勧めのサイトありますか?
731デフォルトの名無しさん:02/01/08 12:39
JPEG・PNGの保存ってどうしてますか?
OleLoadPictureでJPEGは読めるんですけど保存やPNGはどうしてますか?
有名なライブラリをリンクしてやってるんですけどプログラムサイズが大きくなって
ネットで配布するのに不便ですし何となく嫌です。
MS製でOSやIEなんかについてるActiveXとかないですか?
732725:02/01/08 20:30
>>728
もっと基本的なことから勉強しましょう。
貴方のやっていることは
  NULL->get_URL(&pURI);
と同じことです。

>>729 禿同
733デフォルトの名無しさん:02/01/08 23:36
クライアント/サーバシステムでクライアント側のアプリが起動中にサーバ側からプッシュ
したデータをリアルタイムで取得するプログラムを作成しようとしています。
そこで、質問があるのですが、以下の条件下でサーバとクライアントの通信方法、サーバ側
での使用言語等、アドバイスをお願いします。
(既出な話題でしたら、過去ログのだいたいの位置を教えてください)
  クライアントは Windows(95、NT4以降) で言語は VC++6。
  サーバは Solaris で言語は未定。
  データはサーバから送られてくる(クライアントから取得するのではない)。
>>733
言ってることが変だぞ

>クラインアントから取得するのではない
ふーん、では
>データをリアルタイムで取得するプログラム
はどこで動くの?クライアントじゃないのか?
それを普通はクライアントから取得するというのだが。
735デフォルトの名無しさん:02/01/09 00:01
>734
ごめんなさい。
サーバへの通信開始はクライアントから行うが、その後、サーバ側でデータに変更が
あった場合、リアルタイムにデータをサーバからクライアントに送信したいというこ
とです。
736デフォルトの名無しさん:02/01/09 00:10
>>735
それはネットラジオみたいな持続的なストリーミングデータかな。
ではなくて、サーバから間欠的にデータ更新がかかるのか?
後者なら普通のソケット通信で良いと思うがどうよ?
あと、クライアントの数は何桁かな?
その辺りをはっきりさせて、ネットワークプログラミング相談スレへ書け
ここではスレ違い
737デフォルトの名無しさん:02/01/09 00:26
>736
ありがとうございます。
サーバから間欠的にデータ更新で、クライアント数は1万を想定しています。
うーん。ソケットですか。では、その方向で頑張ってみます。
738デフォルトの名無しさん:02/01/09 00:40
サーバは受動的
739デフォルトの名無しさん:02/01/09 00:49
>>737 クライアント1万?それ同時接続で?
1台のサーバで1万接続をさばくのは無理な気がするけどな〜
マルチキャストならいけるかなぁ。
スレ違いだね。すまん。移動するべし。
740デフォルトの名無しさん:02/01/09 03:49
質問です。
CSVの形で書かれたファイルを読み込んで二次元配列に格納するのは
どうやればいいでしょうか。
>>740

コンマからコンマまでをコピー。
742デフォルトの名無しさん:02/01/09 15:32
XPでVCのデバッガを使うと固まってしまうのですが、どうすればいいでしょうか?
743デフォルトの名無しさん:02/01/09 16:00
i=j=0;
while(EOF!=c=fgetc(fp)){
switch(c){
case
s[i][j]='\0'
i++,j=0;
break;

default:
s[i][j++]=c;
break;
}
}
文字列の二次元配列?
整数の?
744デフォルトの名無しさん:02/01/09 16:01
>>742
Meを入れる。
XPはダサい。
寧ろXPのままVCをやめる
746デフォルトの名無しさん:02/01/09 16:18
>>742
Xpはもうちょっと待ちましょう。
でもMeはもっとださいぞ。

2000をいれなさい。
747デフォルトの名無しさん:02/01/09 16:19
>>744
XP上での動作チェックをしたいので、XPでデバッガを動かしたいのですが。
>>742
IME をタスクバーに入れると良い、と ML で聞いた気がする。あとアンチウィルス系のソフトを入れてあったら
外してみれば。

(俺は開発マシンはまだ 2000 なんで、自分では試してない)
WinMainCRTStartup() のソースが落ちている所を
ご存知でしたら教えていただけませんでしょうか。
インスタンスハンドルは GetModuleHandle(NULL) で
取得できるのですが、コマンドラインへのポインタの
取得などができないので・・。
昨日、MSのSTLがあんまりアレなので、SGIのSTL使ってみたんです、
で、STLはスコープから抜けると自動で確保したメモリ領域破棄するとおもうのですが、
よくみたら、メモリリーク検出してるんです。
なんか、宣言しただけでメモリリークしてるし、もうみてらんない。。
そんな俺の最新環境は、SGIのSTLは最新版(昨日ダウンロード)
で、listを宣言してVC++のDebugで実行したときののメモリリーク検出、これ最低。
VC++ってのはVC++6.0SP3。
そんな俺はCListでも使ってなさいってこった。
751デフォルトの名無しさん:02/01/10 03:42
>>750
何故STLportを使わないのか問いたい。問いつめたい。VC++がANSI C++に完全準拠するその日まで問いつめたい。
>>749
ほい。
file:///C:/Program Files/Microsoft Visual Studio/VC98/CRT/SRC/CRT0.C
>>750
node allocator 使ってるから。気になるようなら STLport 使って

#define _STLP_USE_MALLOC

しとけ。(ただし性能がかなり落ちるから、リリースビルドでは node allocator 使ったほうが良いぞ)。
754750:02/01/10 03:55
俺はメモリリークっていいたいだけちゃうんかと(いや違うんですが)

>>751
明日はSTL.port逝ってみるよ。
VC++がANSI C++に完全準拠するまで問い詰めるのは勘弁してください
もしからしたら永遠と問い詰められることに・・(ぉ
755750:02/01/10 04:09
>>753
なるほど、スキーリ、しました。

そんな俺は修行がたらないようなので出直せってこった。
STL age
>>755
まあSTLportでstd::auto_ptrつかう時は忘れずに#define OBSOLATE 1しとけってこった。
757749:02/01/10 06:08
>>752
>ほい。
>file:///C:/Program Files/Microsoft Visual Studio/VC98/CRT/SRC/CRT0.C

ありがとうございます。
でも見つからなかったです・・。
もしかして Enterprise Edition にしかついてないとか。
googleやinfoseekのようなツールバーを作りたいです
どうやって作るのか調べてもわからなかったのですが
何か参考になる資料などないでしょうか
>>757
インストールの時に選択しとかないとライブラリのソースは入らんぞ。
ちなみにコマンドラインへのポインタは GetCommandLine() だ。
760757==749:02/01/10 09:40
>>759
Malloc.c とか New.cpp、Xtree とかはあるんですが、
CRT0.C がないのもライブラリのソースをインストール
しなかったせいなのでしょうか…。
一応 MSDN Library Disk1 の Sample フォルダをガーっと
検索してみましたが、見つかりませんでした
GetCommandLine() ですね。ありがとうございました。助かりました。
将来的には WinMainCRTStartup() を自分で実装してみたいです。
file:///C:/Program Files/Microsoft Visual Studio/VC98/ATL/INCLUDE/ATLIMPL.CPP
ほい。
763760==757==749:02/01/10 13:04
>>761
あ・・ありがとうございます!
見つかりました。非常に参考になりました。感謝します。
"WinMainCRTStartup" などの文字列で HD を検索
してみなかった自分が迂闊でした。

しつこいですが(^^; 別の質問でございます。
ATLIMPL.CPP の WinMainCRTStartup() の最後で
::ExitProcess((UINT)nRet);
として終了していますが、これは意味があるのでしょうか。
入れたほうが良いと小耳にはさみましたが。
・・まぁ入れときます。
ExitProcess入れないと、いつまでもプロセスが終わらなかったような。
>>756
もしかしてコンテナに auto_ptr 突っ込もうとしてないか?
>>765
OBSOLATE定義しないとどういうときにコンパイル通らなかったのか覚えていないんだけど、コンテナにauto_ptr突っ込むことはあるな。何か問題あるのかな?
>>766
コンテナに auto_ptr 突っ込むのはまずい。規格書に書いてあるんだが STL のコンテナに格納する要素は

 CopyConstructive
 コピーコンストラクタで作ったインスタンスと、コピー元のインスタンスが等しい

 Assignable
 代入演算子で代入されたインスタンスと、代入したインスタンスが等しい

という二つの条件が要請されてるんだが T が auto_ptr だと

 T u;
 T t = u;

を実行すると u はポインタの所有権を放棄してしまうので t != u となるので NG。実際、値がコピーできる
ことを前提として書かれたソートアルゴリズムなんかもあって、それを適用するとコンテナの中身が破壊
されるそうだ。

俺も、最近 Effective STL, Exceptional C++ 読んで始めて知ったんだけど。
768758:02/01/10 19:45
>>762
ありがとうございました.
ちゃんと探したとおもってたんですけど,全然見逃してました
あとは自分でがんばってみます
766>>767
俺、επιστημηのSTL本でSTLはじめたんすよ。
で、それの中で参照ベースコンテナの例としてauto_ptrをコンテナに突っ込む
例が掲載されてるんすよ。
よーし、パパvectorにpush_back(auto_ptr<Animal>(new Dog("ポチ"))するぞーとか言ってんすよ。
もうね、アホかと。本を書くなら規格書読めと。VCMLで偉そうな事言う前にやることあるだろうが、と。
>>769 auto_ptr は標準化で機能が二転三転した経緯があるんで、
ISO C++の、どの時点のドラフトをベースにしているかによるな。
ま、正誤記事ぐらい書いとけよ>えぴすテメ〜ゴルァ
>>770
正直、彼の本はチェックが甘いと思う。「オブジェクト指向的日常」でも文章の誤記は多いし、コードでも

 「そもそもコンパイル通らん」
 「非ローカル static オブジェクトの初期化順序に依存するので、動作を保証できない」

なんてのがあった(もう本は捨てちゃったから正確なところは忘れたけど、シリアライズで出てきたオブ
ジェクト辞書に関して)。

別に STL の書籍は彼のものだけってわけじゃないし、さっさと捨てて別の本に乗り換えたほうが良いか
もね。
772769:02/01/12 03:23
>>771
「Generic Programming STLによる汎用プログラミング」っちゅー本を最近は使っている。
間違っても一冊目に買うような本じゃないが、リファレンスとして良い本。
STLを学ぶための一冊目としては何が良いのか、未だによくわからない。

・いろんな使い方が載っている読み物的性格の強い本=?
・リファレンス本=Generic Programming STLによる汎用プログラミング
773デフォルトの名無しさん :02/01/12 16:40
IMEで変換時の背景色やテキスト色を変更する方法
を教えてください。
774デフォルトの名無しさん:02/01/16 18:00
本当に知識ゼロの状態なのですが手元には「Visual Studio 6.0」があります。
これからVisualC++を勉強していこうと思うのですが
本当にゼロから解説してくれるサイトや本はありますでしょうか?
よろしくお願いします。
こんの割れ野郎がああああああああああ!!!
776774:02/01/16 18:18
スミマセン、叔父から譲ってもらった物です(汗
割れではありません。
それに、本気でプログラムを勉強しようと考え相談しました。
今までプログラムに触れる機会がなかったもので何もわかりません。
777デフォルトの名無しさん:02/01/16 18:31
Visual Studio 6.0を使っている者です。
Visual C++をつかってコーディングしているときに
[.]や[->]を入力すると自動でメンバを表示してくれる機能がありますが、
これが表示されなくなる事があります。
原因がよくわかりません。Visual Studioのバグでしょうか?
それともコーディングのまちがいか何かでしょうか。
思い当たる事があったら教えてください。お願いします。
「猫でもわかるプログラミング」
まったくおんなじ状況で
インテリセンスが動いたり動かなかったり?
780777:02/01/16 18:55
>779
全く同じ状況ではないです。
コーディングを進めていくと動いたり動かなかったりします。
コンパイルは通るのですが。
どこか気づきにくいコーディングの間違いでもあるかもしれません。
>>777
とりあえずワークスペースのフォルダにある*.ncb消せば直ると思うけど。
あれ、わりとよく壊れるらしい。
782777:02/01/16 19:41
>781
やってみましたところ、できるようになったみたいです。
ありがとうございます。
783774:02/01/16 20:08
>>778
レスありがとうございます。
それはサイトの名前でしょうか?
>783
yahooで検索してみ
785デフォルトの名無しさん:02/01/16 22:50
visual cはじめたばかりなのですが何か勉強のなるサイトおしえてください
>>785
参考図書スレにいくつかあがってるから、そっちをあたりましょう。

サイトといってるが、書籍につぎ込む金を惜しむようだと先が暗いぞ。
ほんと、
勉強しようとすると書籍代が
めちゃくちゃかかるよなあ・・・
788デフォルトの名無しさん:02/01/17 00:37
プログラムはあまり詳しくないのですが
3ケタの数字をランダムに0.3秒間隔で10回表示させる
プログラムはどう記述したらよいでしょうか?
わかりやすく言うと次々と現れる3ケタの数字を記憶するゲームを
作りたいと思っています。
最後に答えを表示できれば完璧なのですが。
わかる方いらっしゃいましたら、ご教授よろしくお願いします。
789デフォルトの名無しさん:02/01/17 01:02
>788
マルチやめれ!
言語書いてないし。
>>785
書籍で何がしたいのか調べた上で、サイト検索かけるよろし。
全体的な事を完璧にフォローしてるサイトは小難しくなってたり
どこか落ちてたりするんで、的を絞ってサイトを見つけるが良い。
791デフォルトの名無しさん:02/01/17 12:11
LineToを使い,線グラフの描画ソフト作ってます
a,bという2種類のデータの線グラフを描きたいのですが,
一つのグラフならLineTo(hdc,time,a[time])でできます。
ところが,二つのデータを同時に描画するときは
どのようにしたらよいのですか?

また,この描画はメモリデバイスコンテキストを使ってますが
描画されるのはその時点での点としか表示されません
その点以前の点が描画されないのですが
その前の点も表示したいときはどうしたらよいでしょうか?
792デフォルトの名無しさん:02/01/17 12:43

「マイドキュメント」フォルダはどうやって取得したらいいですか?
SHGetSpecialFolderLocation で取得できそうな気もしたんですがどうやら
無理っぱいです。

793デフォルトの名無しさん:02/01/17 13:02
>>791
MoveTo()も使えばいいじゃん
794793:02/01/17 13:03
Win32APIなら、MoveToEx()
>>792
CSIDL_PERSONAL指定して取得できなかった?
796デフォルトの名無しさん:02/01/17 14:21
>>795
デスクトップ統合してない環境だと駄目だったはず。
HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders
から取るべし。
>>796
へー、そんなとこにあったんだ。感謝。
でもあれだよね、それってあらかじめそのフォルダが存在しないと
取得できないんだよね?例えば初期のWin95だと存在しない
スペシャルフォルダがいくつかあるけど、そういうのは
SHGetFolderみたいなAPIで作って取得しないといけないよね?
>>797 「マイドキュメント」は初期Win95に存在しないが、
Word/Excel入れると存在するのでなんとも言えないね。
HKCU にエントリがなければ無いものとして扱えば良いんじゃないの?

俺のアプリは、HKCUにマイドキュメントの登録キー("Personal")が
無い場合はアプリインストール先フォルダで代替するようにしている。
勝手にスペシャルフォルダ作成するのは迷惑だしな。
>>798
> Word/Excel入れると存在するのでなんとも言えないね。
OfficeやIE入れるとDLLのバージョンが変わって新しい
スペシャルフォルダをサポートするようになるからね。

勝手にフォルダを作成するって言っても、MSが配布してるshfolder.dll
みたいなDLLを一緒に配布してIEが勝手に作るのと同じことしてるわけ
だからそんなに迷惑でもないと思うんだけどな。
800デフォルトの名無しさん:02/01/17 15:44
ダイアログボックスにあるエディットボックスの拡張スタイルを動的に変更できますか?
左揃えを右揃えに変更したいのです。
一応SetWindowLongを使ってみたのですが、画面上は何も変わらない・・・

style=GetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_EXSTYLE);
style=style & ~WS_EX_LEFT;
SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_EXSTYLE,style | WS_EX_RIGHT);

こんなコードなんですけど。
>>800
DestroyしてCreatしなおす、ってのじゃだめ?
802800:02/01/17 16:25
>801
ごめん。前提書いてなかったから、ちょっと無理かも・・・

何したいかっつ〜と、
エディットボックスって貧弱なんで、いろんな機能付けたものを
ActiveXコントロールにしようかと思ったのね。

最初はプロジェクトウィザードでEDITを基本にして作成。
プロパティシートで、アライメント選択させてそれを反映させたかったんだけど、うまくいかなかった。

PreCreateWindowで変更するのはOKだったんだけど、それってしょっぱなだけだし・・・
DestroyしてCreatしなおすってのも普通ならありだけど、
上記の方法で作成したから、無理っぽいし。

基本に帰って、単純にダイアログにあるエディットボックスに変更かけて見たけど、無理だったと

俺、基本的なとこで間違ってるかな・・・
自前のエディットボックスって他の方法で作れる?
>800
WS_EX_RIGHT ってのは右揃えじゃなくて、文字の並びを右から左に
するやつ(アラビア語サポート)じゃない?
右揃えにするんだったら通常スタイルの ES_RIGHT だよ。
ただし、複数行エディットでないと効果がなかったはず。
804デフォルトの名無しさん:02/01/17 17:28
シリアルポートの受信プログラム作っています
コンソールで10バイトのデータを受信し,
結果をファイルに出力してます
ReadFile使用して受信するようにしています

ここでシステムモニタでプロセッサ使用率を観察すると
プログラム前は40%ぐらい
プログラム起動後80%前後
受信しているときは10%以下
プログラム終了後80%
という結果になります
プログラムを終了した後もプロセッサ使用率が
高いままになっているのはどうしてなのでしょうか?

OSはWin98,VS6を使用しています
805800:02/01/17 17:32
>803
そうなのか?

まぁ、とにかく動的にアライメントは変えられないのかな?
リソースエディタ上で変更すれば出きるのに・・・

つか、MaskEditBoxが悪いんじゃ〜!!
2001年01月17日って入ってるところで(Maskは>9999\年 99\月 99\日)
頭の2を消したら、
0010年11月7_日 になるんじゃ〜気持ちわるっ!!

素直に
_001年01月17日 になりゃ良いのに・・・
>>804
プログラム前40%ってことはノートでないかい?
BIOSの設定とかで省電力モードになってるとシステムモニタは
0%にならんよ。
807デフォルトの名無しさん:02/01/17 19:01
UnZip32.dllのUnZipExtract()を使って正規表現文字を含むファイルが抽出できません。
0x800Dが戻ってきます。
具体的には ファイル名に "[" "]" を含むファイルを抽出したいと思っています。

UnZipFindNext()で取得したINDIVIDUALINFOのszFileNameにはちゃんと収まっているので
これを""でくくってUnZipExtract()に渡しても同じ症状でした。

ちなみに正規表現文字を含まないファイル名を""でくくると上記の0x800Dエラーになりました。
うまい方法がありましたら、ご教授お願いします。

スレ違いだったら申し訳ありません。
よろしくお願いします。
>>807
与えるファイル名の正規表現に "\" を付けて(゚д゚)ウマー 。
809807:02/01/17 21:48
>>808
できました!
””でくくるとだめなようですね。ありがとうございました。
810デフォルトの名無しさん:02/01/18 00:40
他のウインドウに、例えばCtrl+Aみたいなのを送りたいんですが、

SendMessage(Wnd,WM_KEYDOWN,WPARAM(VK_CONTROL),0);
SendMessage(Wnd,WM_KEYDOWN,WPARAM('A'),0);
SendMessage(Wnd,WM_KEYUP,WPARAM('A'),0);
SendMessage(Wnd,WM_KEYUP,WPARAM(VK_CONTROL),0);

とかやってみたんですが、うまくいきません。
WM_SYSKEYDOWNとかいうやらもいじくってみたけどなんか駄目そうです。
何を使えばいいのでしょうか?
>>810
フォーカスセットして
VOID keybd_event(bVirtualKey, bScanCode, dwFlags, dwExtraInfo)
でどうよ?
812810:02/01/18 01:55
thx、ためしてみまっす!
813810:02/01/18 16:12
できました、CEでも動きました、この恩は忘れません。
814デフォルトの名無しさん:02/01/18 16:29
現在の表示画面をクリップボードに取り込んで、それを
Wordにペーストで貼り付けています。

すると、背景の白にぶつぶつが入ってしまうのです。
これをアクセサリーの「ペイント」にいったんコピーして
「ペイント」でもう一度コピーしてから貼り付けると
白はきれいに表示されます(というか何も表示されない)

どこがまずいのでしょうか?パレットの設定とかが必要なのでしょうか?
// クリップボードにコピー
hDC = GetDC(hWnd);
hDC_mem = CreateCompatibleDC(hDC);
GetClientRect(hWnd,&rc);
hBitmap = CreateCompatibleBitmap(hDC, rc.right, rc.bottom);
if (hBitmap) {
SelectObject(hDC_mem, hBitmap);
StretchBlt(hDC_mem, 0, 0, rc.right, rc.bottom, hDC, 0, 0, rc.right, rc.bottom, SRCCOPY);
OpenClipboard(hWnd);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
CloseClipboard();
} else {
MessageBeep(0);
}
DeleteDC(hDC_mem);
ReleaseDC(hWnd, hDC);
815デフォルトの名無しさん:02/01/18 17:28
割り込んですいません
SetTimer()のvoid CALLBACK EXPORT Timer Proc(HWND hWnd,
UINT nMsg,UINT nIDEvent,DWORD dwTime)の設定の仕方を教えて
ください。
関数つくって、そのポインタを引数として渡せばいいんだろ。
メソッドにしてコンパイルエラーになる、という話か?
817デフォルトの名無しさん:02/01/18 18:05
>>816さんどうもありがとうがとうございます。
ただ単純にわからなかっただけです。
818 ◆277YSPPE :02/01/18 19:46
C++ってなんて読みますか?
”しーぷらすぷらす””しーぷらぷら””しーぴーぴー”etc...
あとprintfは?
”ぷりんとえふ”ぷりんとふ”とか。
>818
お前の書きこみはスレを腐らす
>>818
しーぱやぱや
しーぷらぷら、ぷりんとえふだよ。
>>820
こんどからその呼び方を採用するよ
823 :02/01/19 00:56
DIBからJPEGに落とすフリーのライブラリとかないかぇ?
せぷりゅぷりゅ
です。
825 823 :02/01/19 07:11
Intelのやつちゅかいましたぁ。ばぶぅ。
徹夜の甲斐があって、ちゃんと動かせました。
ImageMagickはなんかしらないけど、
bmpからjpgに変換するときメモリリークしてたんだが、
原因知ってる?


826デフォルトの名無しさん:02/01/19 11:24
winsockでデータをsendしたいんですが、これのの引数は
*charなんですよね、文字列じゃなくて構造体とかを
渡したい場合はどうなるんでしょう?ためしに(char*)で
キャストしてみたけどだめでした。
構造体をchar*にキャストって
あんた・・・
どうなってほしくて、
何がどうだめだったんだ?
sendの引数で構造体がわたってほしくて、
(char*)でキャストできなかったんだろ
830デフォルトの名無しさん:02/01/19 11:39
そうです>829
解法お願いします。
>>827
そんなにやばい考えですか?(^^;
ローカルホスト相手とか、同一アーキテクチャの同一の
コンパイラからできた鯖とクライアントなら、渡るんじゃないの?
まぁ、たしかに、設計は逝ってよしだがな。
832デフォルトの名無しさん:02/01/19 11:44
普通はみんな素直に文字列を渡してるってことですか。
833デフォルトの名無しさん:02/01/19 11:46
>>830
ダメだったっていうのは、全くデータが送られなかったのか、
上手くデコードできなかったのか、どっち?
834デフォルトの名無しさん:02/01/19 11:47
>>833
コンパイルできなかったです。
まさか、
typedef struct data { double a, b, c };
data datum={5.0,1.0,2.0};
send( (char*)datum, sizeof( data ) );
とかやったんじゃないだろうな。だったら、処置無しだぞ。
836デフォルトの名無しさん:02/01/19 11:55
そんな感じでやりましたが。
処置なしってどういうことですか?
send( (char*)datum, sizeof( data ) );
send( (char*)&datum, sizeof( data ) );
のちがいが判らない香具師デスカ?
キャストについては
どういうことかわかってる?
send( (char*)(&datum), sizeof( data ) );
840デフォルトの名無しさん:02/01/19 12:01
下のほうを使えばいいんですね。
やってみます
>>840
 何故そうすればいいか理解しないでそういうプログラム書くのは
やめれ。問題が起こったときに対処できない。
いや、つーか、構造体をそのままソケットで送るなよ。
843デフォルトの名無しさん:02/01/19 12:13
じゃあやっぱり文字列に直して送れっつーことですか。
少し本でも読んで
そのへんを勉強しなおせば
答えはおのずと
845元VB厨房:02/01/19 14:42
クラス内で使う関数で、
CList型、もしくはCStringList型を返すようなのを作ろうとしているのですが、
なかなかうまく行きません。
CList型だと、シンタックスエラーだとでてしまい、CStringList型だと
演算子"="がオーバーロードされていないため失敗します。
うまい方法はないでしょうか。
それともコレクションを値で返そうとしている漏れは逝ってよしでしょうか。
STLで返すとか。
847デフォルトの名無しさん:02/01/19 19:17
VC++6で以下のクラスがコンパイルできません(g++ではOKでした)。
エラーメッセージは、定義されていない基本クラス
(Base<Elem1*>とBase<Elem2*>)が宣言されているとのことです。
コンパイラオプションなんかで対応できるのでしょうか?

---
template<typename T>
class MyClass {
 template<typename E>
 class Base;
 class Derived1;
 class Derived2;

 class Elem1 { Derived2* mElem2; };
 class Elem2 { Derived1* mElem1; };

 template<typename E>
 class Base {};
 class Derived1 : public Base<Elem1*> {};
 class Derived2 : public Base<Elem2*> {};
};
848847:02/01/19 19:52
ごめん。
よく判らないけれど先頭の template<typename E> class Base;
を消したら通った。ふご。
849デフォルトの名無しさん:02/01/19 20:02
失礼します・・・・

BYTE *a;
中身 a[0]=1
a[1]=2
|
a[9]=10
の内容を
BYTE *b;
にそっくりコピーするにはどうしたら良いのでしょうか?
よろしくお願いしますm(__)m
>>845
参照使え
mallocして、memcpy。
個人的には、std::vector<BYTE>とかにすることを
おすすめするが。
俺はmemmoveだあ
853849:02/01/19 20:32
>>851
>>852

ありがとうございますm(__)m
なんか便利関数があるのかと思い全く思いつきませんでした。
かなり助かりました。ふぅ。
854デフォルトの名無しさん:02/01/19 20:49
>>852
この場合、memmoveにする意味がないだろ
855デフォルトの名無しさん:02/01/19 21:20
>>854

それはなぜ??
856デフォルトの名無しさん:02/01/19 21:46
>>855
aとbが重なってない(だろう)から
mallocするなら、srcとdstが かぶるわけない、ってことでしょ。
>>855
mallocで新しく確保した領域が、元々あった a の指す先と重なってることはあるまい。
領域が重ならなければmemcpyでよし、mallocするなら領域は重ならない。
860858:02/01/19 21:47
あー、かぶりまくり。。。。
要するに、基本ですってことね(w
>>856-859がジサクジエーンだったらワラウが…
memcpyはないものと思え
864デフォルトの名無しさん:02/01/19 23:37
ためになるのう・・・
865 :02/01/20 02:29
スレ違いかもしれないけど、MSDNをインストールしようとするとダイアルアップが
起動するのは何故? 思わずキャンセルしちゃったけど。まさか自動でMSにメール
とか送信したりするの?
866デフォルトの名無しさん:02/01/20 02:35
↑気味はワレズでも使っているのかね
そうビクビクしなくてもいいじゃないか(ヒヒヒ
867 :02/01/20 02:40
ライセンス使用書とかはあるけど、秋葉で安く買った怪しい奴。
なんとかなくキャンセルしただけだから、別に問題がないなら
インストールしてしまうけど。
868デフォルトの名無しさん:02/01/20 02:47
>>867
いくらで買ったの?
VisualC++5.0エンタープライズ版が
秋葉で7000円位で売っていたのを
昔見たことがある。
869デフォルトの名無しさん:02/01/20 07:00
マルチスレッド初心者なのですが、よければ教えてください。
CreateThread()を使ってマルチスレッド化するとき、
注意しなければならないことといえば
ファイルやメモリの「同時書き換え」だけでしょうか?
ファイルの読み込みとか変数の同時参照(?)とかは
大丈夫なのでしょうか?
(デバイスコンテキスト関連に注意するというのはどこかで聞いたような・・
厨な質問ですみません、よければアドバイスお願いします
>>869
いちいち注意点を具体的に挙げてればきりがないと思うな。

要するに、TLS と auto 変数以外の「何か」を使うときは必ず、
「もしかして他のスレッドが…?」と、まず心配してみることが肝要かと。

あと、MSDN は必ず調べるべし。
DLL を使う(or 作る)なら、リンクするライブラリにも注意。
…挙げてたら本当にきりがない。
スレッドは超便利だが、デバッグがややこしくなると言う諸刃の剣。
だがあえて初心者にお勧めしたい。いいトレーニングになるので。
872 :02/01/20 19:23
ああ、きのうダイエーで購入しVC++のバージョンが古かったんだよ。
VC++のバージョンは6.0なんだけどね、付属しているSPが3なんだよ。いやまじで、
そんで、あれだよ、MSNDの無料クーポン券の有効期限が200101231に切れてるの。
さすがダイエー、むかし、DVDプレイヤーかったとき、
どっかの親バカが自作した自己満足のお子様ビデオが入ってたときには、バッタやから
仕入れたんだな。と仕事の関係がアレだからすぐに気づいたから、返品交換してもらったけど、
今回はレシート捨てちまったし、現金でかったから、クレジットの明細がないんだよ。鬱だ。死にたい。
ダイエーは癌だ。速く倒産しろ!!ファック!!
にまんじゅうねん12月31日?
などと、今日一日を振り返り、反省してみる。
874869:02/01/20 19:38
>>870
あ、なるほど、注意すべき部分ってMSDNに結構書いてあるんですね
DLLもよく調べてみます。
どうもありがとうございます〜。
875 :02/01/20 19:47
aああああ鬱だ20011231だ。他にも誤字が脱字があああああああ
鬱だ死にたい。
        
>>872
> 付属しているSPが3なんだよ
SP は最新版が MS の Web サイトから落とせる。心配するな。

MSDN Library の件はご愁傷さまだが、とりあえず MS に掛け合ってみなよ。
877___:02/01/20 21:13
猫でもわかるhttp://www.kumei.ne.jp/c_lang/mfc/mfc_01.htm
でMFCの勉強をしようと思って
第一回のソースをそのまま打ち込んでみたのですが、
#include "afxwin.h"

class CMyWindow : public CFrameWnd
{
public:
CMyWindow();
};

CMyWindow::CMyWindow()
{
Create(NULL,"猫でもわかる",WS_OVERLAPPEDWINDOW);
}

class CMyApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};

BOOL CMyApp::InitInstance()
{
m_pMainWnd = new CMyWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMyApp myApp;

コンパイルはできるが実行時にリンカが
nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__endthreadex" は未解決です
nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__beginthreadex" は未解決です
Debug/SDKTOMFC.exe : fatal error LNK1120: 外部参照 2 が未解決です。

この3つのエラーを出してしまいます。
VCのバージョンのせい(使っているのはVC6)
かもと思っているのですが、解決策ありましたら教えてください。
>>877
激しくスレ違いと思うが、何か?
>>878
誘導

■ VisualC++(MFC限定)相談室 2■
http://pc.2ch.net/test/read.cgi/tech/1008031675/
880やー:02/01/20 21:21
SCribbleチュートリアルってどこにあんねん・・・・
MSDNの中にあるやつなんか・・?これなんか?
これはチュートリアルのチュートリアルにもみえんねんけど、
これがチュートリアルなんか・・?
いつのまにMFCをはじめていたんだ
882デフォルトの名無しさん:02/01/20 22:17
質問があります。
ファイルのバイト数をブロック毎に格納して行きたいのですがファイルによって可変なので
CDWordArrayでAddしていってるんですけど多分、領域が足りずにエラーが発生します。
SetSizeの効果もいまいちなのでどうしたら良いのかと思ってます・・・。
ベストな手段が有ったらご教授お願いします。
883デフォルトの名無しさん:02/01/21 01:06
>>882
エラーってどんなエラー?
884デフォルトの名無しさん:02/01/21 03:02
>882
質問の意味がよくわからんのだけど
要は4バイト毎にシークすればいいのではないのかね?
ちがうの?
885デフォルトの名無しさん:02/01/21 06:25
STL.portをVC++で使おうと思い

4.5.1をダウンロードして、展開 (場所は...\Microsoft Visual Studio\VC98\Include\STLport-4.5.1\)
VC++のオプションのディレクトリ設定のところで一番上に
C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\INCLUDE\STLPORT-4.5.1\STLPORT
を追加

iostreamは元のを使うってことで
...\STLport-4.5\stlport\stl_usr_config.hの最初のほうにある 
# define _STLP_NO_OWN_IOSTREAMS 1 から#を削除し、コメントでなくす とか

stlport/stl/_site_config.h の上の方に
#define _STLP_NO_OWN_IOSTREAMS とか
やってみたりしたのですが、コンパイル時に

:\program files\microsoft visual studio\vc98\include\stlport-4.5.1\stlport\new(50) : fatal erro
r C1083: インクルード ファイルがオープンできません。'../include/new(THIS_FILE, 50)': No such file or dire
ctory

となってしまいます。../include/newが無いとか言われてるので vc99\include\stlport\
に置いてみたりもしましたが、同様の結果でした。
また、iostreamをコンパイルしてインストールし上記の#defineをしない場合でも同様でした。
そんなこんなで、徹夜状態の私を救ってください。お願いします。
886885:02/01/21 06:33
../include/newが無い

../include/newのエラーの行は
# include _STLP_NATIVE_CPP_RUNTIME_HEADER(new)
でnewが無い
README.VC++.html見れば解決するかと。
888888:02/01/21 08:08
VC++でdoubleより範囲の広い数を扱える方法はありませんか?
有効桁数は同じでもいいのですが…
広い数?
890デフォルトの名無しさん:02/01/21 11:37
CString型のメンバ変数からchar型の代入はキシュツですが、
CString型のメンバ変数からchar型の配列の代入はどうすればいいのでしょうか。
891デフォルトの名無しさん:02/01/21 11:50
>>890
_tcscpy または lstrcpy
892デフォルトの名無しさん:02/01/21 12:22
>>890
こんなかんじでもいける気がする。
LPTSTR str=new char[10];
CString cstr("hogege");
str=(char*)LPCTSTR(cstr);
893日下部圭子 ◆ib749tYo :02/01/21 12:40
In article >>892, デフォルト名無しさん/892 wrote:
> こんなかんじでもいける気がする。

だめですね。

----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
894デフォルトの名無しさん:02/01/21 13:12
>>893
何が?
895 :02/01/21 13:29
CString::GetBuffer で取り出さないとだめ・・・だったと思う。
>>892
ネタ?
897デフォルトの名無しさん:02/01/21 13:35
フォートランってどうよ?
898た。:02/01/21 13:37
こんなんでどうよ?
CString strTime;
CTime t = CTime::GetCurrentTime();
strTime=t.Format("%H:%M:%S");
LPTSTR p1 = strTime.GetBuffer( 255 );

899デフォルトの名無しさん:02/01/21 13:39
エクスプローラのwindowを閉じるには
どうすればいいんでしょうか?
WM_CLOSEを送ってもビープ音が鳴るだけなんですが。
>>898
GetBuffer()は、リリースしないといけないからめんどくさい。
変更しないならリリースしなくていいんじゃないの?
902 :02/01/21 13:52
>>900
ほかに方法あるのだろうか?
>>901
リリースは省略できないよ。
>>902
なるだけCStringやconst char*系を使うようする。

一部にchar*系を要求するAPIがあるけど、そういうときは
char*のバッファにコピーして使う。
>>892
> LPTSTR str=new char[10];

このメモリはいつdeleteするのだろう。

906デフォルトの名無しさん:02/01/21 14:04
代入のみが目的なら、>>892も有りだとおもわれ。
907た。:02/01/21 14:04
>>900
そんなこといったら、
cは関数終了に
}
で閉じなきゃ成んないからめんどくさい。
ってのと同じレベルかと。
GetBufferしたら勝手にこびとさんがReleaseBufferしてくれるように
手を鍛えると良いかと。

#でもMFC周りは色々手続きが煩雑でめんどくせーよな。
#Penなんかも切替えてもSelectObjectで元に戻すの
#忘れたりけっこうするし。
>>905
リークしてますね。
909た。:02/01/21 14:14
>>908

そう言うときはいつもお世話になってるBoundsChecker。
結構うそ吐き出すけど。
MFCのなかでリークしてるなんてどないするんぢゃ。
910デフォルトの名無しさん:02/01/21 14:47
>>904
その場合は LPCSTR にキャストして直渡しでいいのでわ?
911デフォルトの名無しさん:02/01/21 14:51
>>910
LPCSTRだとchar*にわたせない気が。
912デフォルトの名無しさん:02/01/21 14:54
char*を要求するのって、リストビューのLVITEMとかでしょ。
読み書きで同じ構造体使うやつ。
そう言うのはモレも強引にキャストしちゃうけど。。
>>911
だからバッファにコピーするっていってるじゃん。
914デフォルトの名無しさん:02/01/21 15:08
>>912
同感。MSNDに
「CString はメモリを節約するために、同じ値を持つ 2 つの文字列が
同じバッファ領域を共有できるようにします。
しかし、MFCを使用しないでバッファ領域の内容を直接変更すると、
両方の文字列が変更されてしまいます。」
とあるが、GetBuffer()はこれ対策なんでは・・などと思うわけで。
char*キャストして渡す分にはイイとおもう。
GetBuffer()をしてリリースしないとか、
char*に強引にキャストするとか、ヤバい奴がけっこういるな。
916デフォルトの名無しさん:02/01/21 15:36
>>914
GetBufferをすると、
インスタンス内のポインタが同じバッファを指していると、
コピーされるみたいですね。
とりあえず、CString::operator LPCTSTR() と、CString::GetBuffer() を見る。
↑あ、ソースのことね。m_pchData は LPTSTR型だね。
>910は LPTSTR と言いたかったんだろ。
そんなキャストするよりはコピーして渡した方がいいというのには同意。
920デフォルトの名無しさん:02/01/21 16:38
リストビューを詳細表示したときにヘッダーをダブルクリックすると
カラムの幅を自動調節してくれますが、
これをコードから行うにはどうしたら良いですか?
ふつー、
CString cstr = "hogehoge";
char *str = _strdup( (LPCSTR)cstr );
...
free(str);
>920
LVM_SETCOLUMNWIDTH で LVSCW_AUTOSIZE。
>>922
できました!どうもありがとうございます。
924デフォルトの名無しさん:02/01/21 17:35
質問です。CFileDialogでファイルを選択するときに、前回の設定
(詳細、一覧、大きなダイアログ)などを記憶させる方法を教えてください。
詳細の場合はソートの方法も復旧させたいのですが、方法がわかりません。
>924
シリアライズしる!
926演算(比較)速度:02/01/21 18:45
boolと BOOLって、やっぱ BOOLの方が速い?
なんでBOOLのほうがはやいの?
x86のワード長の関係?
929926:02/01/21 19:13
っていうか、実際試してみりゃいいんじゃん。
 BOOL a;
 for(int i=0; i<100000000; ++i)  a = TRUE;

 bool a;
 for(int i=0; i<100000000; ++i)  a = true;
を比較したら、boolの方が、平均で 150msぐらい速かった(゜ε ゜ なんと。
基本的になんでもプログラムって大概小文字のほうが速い。
931926:02/01/21 19:18
 BOOL a = TRUE;
 int b;
 for(int i=0; i<100000000; ++i) if(a) b=1;
とやったら、今度は BOOLの方が平均 200msは速かった。
代入は bool、比較は BOOLの方が速い?
>>931
そんなん代入はBOOLの方が3バイト分(VC++6とかでは)でかいんだからあたりまえやん
比較は>>928の言うとおり。
>>929,931
volatile無くてダイジョブか?

boolって!0な値を代入するとぜんぶ1に変換されるんだな・・・
今まで知らんかった・・・
>volatile無くてダイジョブか?
デバッグビルドだったので、ダイジョブ(だよね?)
935いさましいチビ:02/01/21 21:12
このスレを使い倒そうぜ!!
eMbedded VC何ですが、ブレークポイントを置いても実行時に
one or more breakpoint cannot be set.みたいなエラーが出て、
白ブレークポイントにされてしまいます。
クリーンとかしてみたけど改善しません。
なにが原因なんでしょか?
938937:02/01/22 00:57
ガーン、ブレークポイントを置きたかったクラスをまだ使ってなかった ;(
間抜けでした。
939924:02/01/22 01:05
>925
返答どうもです。CFileDialogにはSerialize()が実装していないので、
出来ないみたいなんですが・・。
940 :02/01/22 07:03
>>876
MSにTELしたら、20011231に期限が切れたクーポン券が同封されたパッケージを
購入した人は一月中に登録すればOK。だと。
941デフォルトの名無しさん:02/01/23 00:30
CMenuExtension::QueryContextMenu なんですけど、
return で返す値が今一つよく分かりません。

#define ID_MENU0 0
#define ID_MENU1 1
#define ID_MENU2 2

STDMETHODIMP CShellExtension::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
{
 ...
 InsertMenu(hMenu, 0, MF_STRING | MF_BYPOSITION, idCmdFirst + ID_MENU0, "mめにゅ0");
 InsertMenu(hMenu, 0, MF_STRING | MF_BYPOSITION, idCmdFirst + ID_MENU1, "mめにゅ1");
 InsertMenu(hMenu, 0, MF_STRING | MF_BYPOSITION, idCmdFirst + ID_MENU2, "mめにゅ2");

とした場合、

 return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(ID_MENU2 - ID_MENU0 + 1));

で良いの? どうも自信がなくて。
942941:02/01/23 00:31
↑ あ、IContextMenu::QueryContextMenu です。
943885:02/01/23 07:55
>>885 >>886
http://www.stlport.com/dcforum/DCForumID6/603.html
こんな投稿があったので試してみましたが、やはり同じです
_STLP_NATIVE_INCLUDE_PATH に設定してみても同じでした
同様の症状がでて、解決した方、救ってください。
944デフォルトの名無しさん:02/01/27 03:29
質問させて頂きます。COLORREF型のRGBマクロの値を判定するにはどうすれば
よいのでしょうか。私が参考にしている本には、

COLORREF color;

if(GetBValue(color) == 0 && GetBValue(color) == 0
  && GetBValue(color) == 0)

となっていて、白と黒は判定できるのですが、それ以外は反応無しなのです。
どうすればよいでしょうか?
945さくら:02/01/27 03:41
あのー、ちょっといいですか?あー・・・、でも無視されそう・・・でも質問します!
ダイアログに貼り付けたリストボックスで、アイテムが選択されたときに送られるメッセージは何ですか?spy++で調べてもたくさんですぎてわかりませんでした。
あと、選択されているアイテムが変わったときに送られてくるメッセージも教えてくださ〜い(>А<)
LBN_SELCHANGE。
947さくら:02/01/27 03:51
>946
あっ、やったぁできましたぁ!ありがとうございます〜☆(^Э^)ヾチュッ
つぎからきちんとMSDNで探そうな。あ、それと、マトモな情報は
やっぱし英語のヤツしかなかったりするから。
>>948
ム板マ板にいるプログラマ全員でかかれば、MSDNライブラリの
英文を全部和訳出来そうな気がする、と言ってみるテスト。

そんなことが出来る暇なプログラマはDQNばっかりだよ、
と返ってきそうな採点結果。
>>949
そんなことが出来る暇なプログラマはDQNばっかりだよ
ローボコン100点
951号泣マン:02/01/28 23:26
ListViewコントロールのサブアイテムの編集方法ってあるのでしょうか?

自力で検索しましたが、
http://codeguru.earthweb.com/listview/edit_subitems2.shtml
みたいな英語のページしかないのでめげています。
私はMFCを使わない(使えない)ので、ちょっとショックです。

WindowsSDKのソースがあるとうれしいのですが。。。

宜しくお願いいたします。
> 私はMFCを使わない(使えない)ので、ちょっとショックです。
猫に訊くとか、ATL/WTLのソース読むとか、MFCのソース読むとか、
方法は幾らでもあるだろうに。
このスレをageた時点でもう……逝っていい
それよりもなぜコテハンにする必要があるのだろうか。
「クソスレ・クソレス、コテハンの法則」
があるから、それに従ったんだろう。
どーでもいい事をコテハンで書き込む連中には激しく萎え。
956号泣マン:02/01/29 11:50
本当はおまえらわからないんだろ!(藁)

あ〜あ期待した折れが馬鹿だったよ。

じゃーなー
>>956
一万円で、サンプルを書いてあげるよ。
>>956
質問は新スレでしろよ。
それに煽るな。

サンプルがMSDNの中にある。
InitListViewImageLists でクエリーかけてみろ。listview.cが見つかる。

ただ、個人的にはListViewのサブ項目の編集は使いにくいので
別の方法を模索するのを勧めるけどな。
>>958
間違ってこっちに質問が来ないように、埋め立てカキコを
しちゃあかんのだろうか?

と、聞いているフリをして埋め立てをちょっと行ってみる。
960太郎:02/01/31 21:54
すいません。
VCを勉強しているのですが。
よく分かりません。
単なる、ダイアログベースで作成して、
プロパティーページを出そうとしているのですが、
デバックで一度動いて、二度目で落ちてしまいます。
クラスは、CPropertyPageとCPropertySheetを使っています。

使用しているのは、VALUESTAR VL700R/5のマシン、
OS WINDOWS MEです。

ひとつ分かっているのは、一度、ツールバーのプロパティーを
動かしたら、デバックで死ぬことは、ありません。
VC6、サービスパック5をインストールしています。

よろしくお願いします。
>>959
埋まると dat 落ちしてしばらく参照できなくなる。

>>960
次スレに移ってください
VisualC++相談室 6
http://pc.2ch.net/test/read.cgi/tech/1011615035/
962次郎:02/01/31 22:00
Visual C++ 6.0にバグがあると思うのですがみなさんはどう思います?


??=include <stdio.h>
??=if 1
main()??<printf("Hello??/n");??>
??=endif

がコンパイルできないんです。


??=include <stdio.h>
??=if 1
main()??<printf("Hello??/n");??>
#endif

だとコンパイルできるですけれど・・・・・
みなさんはどう思います?
ちなみに??ばっかりですけれど文字化けではありません。
秀丸のメニュー右には行桁が表示されていますが
同じようなことをするにはどうすればいいでしょうか。
>>963
現在のテキストカーソル位置の取得なら
MAGURO ONLINE にサンプルコードがあったと思ったが…?

(実際、中身見たことないで 確認してくれ >>963 よ )