1 :
いさましいチビ :
01/11/27 13:14
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するときはイベントだけではなくて 子プロセスのプロセスハンドルも同時に待機しとけよ。 念のため。
漏れのIDおしい
もしかしてこういう事をきいているんじゃないだろうな。 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でも駄目だと思うのです。
質問です API使って、独自のGUI作りたいんですけど いいサイトありませんでしょうか? APIとかの説明とかじゃなくて、 ノウハウというか、効率のいいやり方というか、 こつというか。
>>19 そうですか、
作るGUIのタイプにもよるのでしょうしね、
ごり押しで、組むしかないのかな。
21 :
デフォルトの名無しさん :01/11/28 03:38
ビルド完了やエラーがあったときにVCのIDEから出る音がうざいので、 コントロールパネルのサウンド設定で全部”なし”にしました。 しかし、今度はビープ音が鳴りやがります。何とかこいつを 止める方法はないでしょうか?
22 :
デフォルトの名無しさん :01/11/28 03:44
>>21 ケース開いて、スピーカに繋がっているコードをちぎる。
>>22 そういうのはなしで・・・
短い無音のwavに設定したらイイんだけど、なんだか泥臭いなあ
とりあえず、WM_DROPFILES って何を送るのかわかってないだろ・・・ ファイル名文字列へのポインタじゃないぞ。 HDROP だぞ。ちゃんと HDROP 送ってるか?
あと HDROP って解放しちゃだめです。勝手に解放してくれます。
非常に初歩的なことですいません。 MFCをやっているのですが、ハンドルというものがでてきて、とりあえずはじめでてきたときに、「IDみたいにとらえて・・・」のような記述があったのでそのようにとらえていたんですが 「メンバ変数にハンドルをもつクラスが・・・・」のような記述を別で見ました。なんのことだか意味がわからなくなってしまいました。。 どういうことなんでしょうか??
そのまま「ハンドル」を「ID」に置換して 「メンバ変数にIDを持つクラス」じゃダメなんでしょうか
>>29 えっと・・・それって・・とあるクラスに「ハンドル」というものを受ける用のメンバ変数が定義されているんですってことでしょうか???
>>28 それ、単に
class CWnd
{
HWND m_hWnd;
public:
void Create()
{}
....
};
みたく、メンバ変数にハンドルを持ってるクラスのことなんじゃないの?
>>32 あんたは日本語で喋れ。
「でしょうか???」
と適当な文章を疑問形で振らずに、何がわかって何がわからないのか明記しろ。
CBitmap bp,*pb; CDC MDC; ・・ ・・ pb=MDC.SelectObject(&bp); 前の状態(オブジェクト??)を保持する為にこうかくって書いてありましたが、このpbてなんですか?ハンドルとは別物ですか? (意味不明な質問ですいません)
35 :
デフォルトの名無しさん :01/11/28 09:12
>>32 すいません、、、。
えっと
>>31 を、具体的に「***」のメンバ変数に「****」を持っているのようにいってもらえないでしょうか?
38 :
デフォルトの名無しさん :01/11/28 09:30
質問です。 MFCを使わずにタスクトレイに常駐するアプリを作ってるんですが、 トレイ上のアイコンにカーソルを乗せた時にでてくるポップアップの文字列を 値によって変化させたい時はどうしたらいいでしょうか?
>>37 固有の識別子のようなとらえかたをしましたが・・・・
今、色々ネットで調べているんですが、 「オブジェクトへのポインタ=ハンドル」 のような記述を見つけました。どういう意味なのでしょう?具体的説明がほしいです。
41 :
デフォルトの名無しさん :01/11/28 09:59
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内部に持つ
>>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 でグローバルメモリが解放されるらしい?ので、 複製を作って送ればいいんじゃないでしょーか
>>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の高さ(アクセント記号の分の余白とかも含む高さ)」で
指定したことになる。逆だったかもしれない。
印刷はやったことないので俺はわからん。スマソ。
>>48 なんとなくわかってきましたが、少しわからないのが、そのメンバ変数っていうのは一体どれなんでしょうか・・・もすこし具体的に教えてもらえないでしょうか。
>>49 はまってます・・・・・・
53 :
デフォルトの名無しさん :01/11/28 20:26
MFCのソース嫁! と言うかソース読まないと使えないのがMFCの出来の悪いところ もっとうまく抽象化されたライブラリ使ったほうがええよ
54 :
デフォルトの名無しさん :01/11/28 20:50
VS6のSPは今5まで出てるが
56 :
デフォルトの名無しさん :01/11/28 21:04
>>55 5以上です(5が出ているのは確実に知っています)
SPっすか?
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 を追加しました。 どうすればいいのでしょうか。
すみません。 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 が未解決です。 の間違いでした。
エラーメッセージを書き間違えただけで 疑問は解決してないです、すみません。
ライブラリはCでコンパイルされてるのにC++の関数として 呼び出してるんじゃないか? extern "C"で解決しそうな気もするが。
>>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)
でいいの?
ワイドキャラだったら、文字数の二倍の値になるような気がするんだけど。
ある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や書籍を教えていただけないでしょうか?
Application Service ProviderじゃなくてActive Server Pagesの方ね。
スパイウェアがどういうものなのかしりません。 最悪、ASPで作ります。トホホ。
>>75 使用状況を密かに作成者に送るソフトのことじゃないの?
>>69 それなら
sizeof(szTemp / sizeof(TCHAR))
もしくは
sizeof(szTemp / sizeof(szTemp[0]))
か
sizeof(szTemp / sizeof(*szTemp))
すきなのにすれば?
すみません、検索してみたのですがおっしゃってる意味がわかんないです。。 ログオンしなくても動く、UNIXのデーモンみたいなやつを作りたいのですが・・・。
81 :
デフォルトの名無しさん :01/11/29 22:15
>78 では混乱させるお話をば・・・ ハンドルとはロッカーの鍵のようなものです。 ロッカーはWindows&174;サービスです。 ロッカーの鍵を開けると(Createなにやら関数)、 鍵をWindows&174;からもらいます。 そしてオブジェクトは鍵を内部に持つのです。 そして何かをしたいときにはこの鍵を つかって、Windows&174;に働きかけるのです。
鬱だ
® こうかな?
84 :
デフォルトの名無しさん :01/11/29 22:19
>>78 ウインドウとか、いろいろOSが管理してるリソースが
あるんだけど、生で扱うのとプログラミングが煩雑に
なるから、C++の機能(クラスやライブラリ)でラップして
簡単にプログラムを組めるようにしてるの。
初心者のうちは、ライブラリの下で、どういう操作が
おこなわれているかピンと来ないだろうけど、慣れてくると
「ここでCWndクラスを構築しても、中身は空。
Createをコールして、OSの管理するウインドウハンドルが
確保される」
というかんじで、内部の動きが見えるようになる。
例えば 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を使うのが一般的なのでしょうか?
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についているみたいだし。
>>95 ありがとう。
まずは必要なヘッダーと使える関数を調べないとだな・・・・
>>72 ていうかVC++のATLウィザード使えばサービスできるよ
99 :
デフォルトの名無しさん :01/11/29 23:37
質問。 二次元配列で要素を,a[1024][512]、とすると エラーになっちゃうんですけど、どうにかなりませんか? 最低でも512*512の配列が必要なんすけど。
>>99 グローバル変数か静的変数(static)にしませう。
>>99 関数から出してグローバル領域で宣言してみれば?
>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を超えるローカル変数は作れません。
>>81 その「内部に持つ」というのの形がイマイチ・・
>>84 上に同じく「何処に確保されるのでしょう?
>>85 ???
function2(pWnd->m_hWnd);
は、戻り値みたいな考えなんですか??では・・・
>>42 のような場合はどうなんでしょうか・・・・・
内部に持つっていうのは
「m_hWndにハンドルを持つ」ということなのかな???
>>106 いくらここで聞いても、これ以上は分からないと思われ。
入門書でもみて、経験を積むのが近道。
まず、ビットマップやらウィンドウやらの実体は、 Windows が内部で管理してます。 アプリケーションプログラマが、ビットマップやらウィンドウやらを 操作するには、それぞれのオブジェクトを表すハンドルを使います。 MFCのクラス CBitmap は、ビットマップの管理をするわけですが、 Windows が内部で管理してるビットマップを直接触ることは、 当然出来ません。ビットマップを触るには、ハンドルを使います。 CBitmap クラスは、ビットマップの操作をするために、 そのハンドルを保持しています。 ・・・わかり?
>>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チュートリアルをやろう。 最初のステップだけでもいいよ。
うゅ。ごめんなさい。言動には気を付ける。 CDC::SelectObject のソース追ってみて、動作を理解した。 SelectObject ひとつで、これだけ大変なことやってたんだ。。。
なんか素質有りそうだから、 MFCの前にSDKプログラミングをやってみれ。 深いとこまでやらなくても、 MFCを理解する助けにはなる。
>>120 すごい質問ですが、SDKってMFCと何が違ってなんなんですか?
あ、それと、 大きな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を使うだけなんですか?
「(人もいる)」って?
>>124 >>123 に対する返答に対して
すいません・・・・・・・毎回ビットマップ読み込んでました。
127 :
デフォルトの名無しさん :01/11/30 03:02
>>125 そうそう。自分で WndProc を書いて、WinMain で
1 RegisterClass して
2 CreateWindow して
3 GetMessage(), TranslateAccelerator(), TranlateMessage(), DispatchMessage()
からなるメッセ―ループをぐるぐる回す
というプログラムを書く。
「人もいる」と書いたのは SDK プログラミングと言う用語が、それほどいい名前だと
思ってないし、一般的でもない気がしたから。あまり気にせんで下さい。
生APIプログラミングって呼ぶのはどうかな? あまり流行りそうには見えないが、意図してる事は分かりやすいかと。
>>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 のコードではそれが分からんよね。どうやって「一回だけ」実行する
ようにしたのか、それが分かる程度に編集してね。
>>131 えっと、CBlockView::OnDraw(CDC* pDC)のなかに、上記のようなコードを書いて、bp.LoadBitmap(name); はif文で一回だけ実行するようにしました。
アニメーションさせる(画像を移動させていく)のでタイマーを使って常に一定間隔で再描画するようにしています。InvalidateRectで。
>>132 コード抜粋しなよ。口で説明するより、実物を見たほうが早い。
>>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);
}
のような形です。これが繰り返されます。(本当はこの後表示位置を変数で置いて色々したい)
>>134 ああ、なんか空白部分が変になってしまった、、、
>>134 ああ、それだとダメです。
CBitmap bp, *pobp;
CDC MDC;
はいずれも OnDraw() メソッドのローカル変数として定義されていますから、
OnDraw() から抜けた瞬間に無効になります(次に OnDraw が呼ばれたとき
には、前回の値は残ってません)。
#これは VC++ に限らず C/C++ の基本中の基本なので、少し C++ の基本的な
#書籍を読んだほうが良いです。
ビットマップを描画しておく CDC 変数をメンバ変数にして、
1. OnCreate() あたりでビットマップの読み出しと描画を行っておく
2. OnDraw では、そのメンバ変数を使って BitBlt する
のが良いかと。あと MFC スレが別にあるので、MFC に関してはそちらで聞いた
方が詳しい人がつかまると思います。
>>136 ありがとうございます、、、、、
ちょとやってみます
SDKだけでやる場合に、マウスでカット&ペーストとか 自分で実装するの考えると頭痛くなるんだけど慣れてる 人はそうでもないのか?
OLE絡みとCOMは、慣れても頭が痛い。
>>136 ありがとうございます、解決しました。無事動くようになった様です。
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ではなんと書けばいいんすか?
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
***
***様々
***
}
>>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& にしてみそ。
>>146 え!?何がおかしいんですか?上のやつ、普通に関数じゃなくて直接(OnDrawなんですけど)書き込んだら正常に実行でたんですけど・・・。引数で渡そうとするとおかしく・・・
150 :
デフォルトの名無しさん :01/11/30 11:24
>>144 これも
CRefBuf= GetPixel(MDC,x,y);
↓
CRefBuf= MDC.GetPixel(x,y);
>>147 できちゃいました。ありがとうございます、、、
まだよくわかっていないところがあるようなので少し勉強してきます、、、
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);
勘違いしてた。ニュースでもインデントがつぶれてたね。
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 すいません、ニュースって何ですか?
167 :
デフォルトの名無しさん :01/11/30 22:56
>>165 news://toc.dyndns.org/2ch.pc.tech
>>160 > 勘違いしてた。ニュースでもインデントがつぶれてたね。
あ、すんません、つぶれなくしましょうか?
今はブラウザと見え方をなるべく合わせようとして
連続するスペースをひとつのスペースで置き換えてます。
>167 ありがと >168 おねがいします。 えっと、あと159のプログラムを貼り付けると配列に取り込めるんですか? (たとえば、ボタンを作ってそれにメッセージハンドラのコード追加のところにかく) それと、このプログラムはリソースに登録しといたBmpをよみこんでますよね? リソースに登録していないファイルから読み込んだbmpにもそのままでつかえるのでしょうか?
どなたかすみませんが、IEをプラグイン的に拡張するActiveXのサンプルコード があったら、ポインタで結構ですから教えていただけないでしょうか。 やりたいことは、HTMLからURLを渡されたらサーバからデータを引っ張り、処理 結果をIEの画面の一部(あるいは全部)に描画するものです。 ネスケのplug-inなら理解できるのですが、IEでActiveXとなると難しいですの で。 よろしくお願いします。
わがままですみません。サンプルのソースコードはVC++を希望です。 VBは扱えませんので・・・。
172 :
デフォルトの名無しさん :01/12/01 12:03
またVC++で開発中にソースが逝きました。こんどはプロジェクト名のcppファイルが焼失しました。 でもオブジェクトは生きてる。 オブジェクト指向やっててよかった
>>171 ATLのチュートリアル(多角形を表示するもの)を見れ
n
>>170 ポインタで結構?
じゃあ、
char *activex;
これでいいね。
どうしよう。まったく面白くない。
>>176 せめてこのぐらい書いてやれや。
CComPtr<IWebBrowser2> pWebBrowser;
>>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で明らかに動作が違うのだけれど、 こういうのはどうしたら良いんでしょうか? ウェブを検索したらそれで困っている人がいくらか引っかかった・・・。
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 となってしまう。こういう場合って、自分でパーサ作らないと駄目?
>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()を用いて複数ファイル名を 取得するにはどのようにすればいいですか?
>>196 そりゃ、そうだが。そういう入力があったときの話し。
>>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 です。 特に「?」とか「:」とか判りません。 よろしくお願いします!
>199 はぁ、そういう見方もできるわけだね。世の中広いわ。 でも、普通は >copy "c:\windows\" d: みたいに使うでしょう。実際、これで動くわけだから。
202 :
デフォルトの名無しさん :01/12/04 19:13
>>200 C(C++?)にもそういう構文があるんだ・・・
Perlならおなじみだけど。
204 :
デフォルトの名無しさん :01/12/04 19:36
>>201 >でも、普通は
>>copy "c:\windows\" d:
>みたいに使うでしょう。実際、これで動くわけだから。
copyはそれでは動かんよ。やってみろ。
205 :
デフォルトの名無しさん :01/12/04 19:45
>>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を参照。
マウスのドラッグで長方形を描くにはどうすればいいのでしょうか? Windowsのデスクトップとかで出来るやつです。 onMouseDownとMoveの間に四角をかくと途中の線も書いてしまって汚い。
212 :
デフォルトの名無しさん :01/12/04 22:59
213 :
デフォルトの名無しさん :01/12/04 23:03
>>212 どうやって消す?厨房ですまんがけし方だけ
具体的に教えて~~。
215 :
デフォルトの名無しさん :01/12/04 23:51
質問です。VC++6.0です。 人からもらったプロジェクトなんですが、これを開いてコンパイルするとincludeファイルが見つけられないエラーが続出です。 これをくれた人は自分の環境ではちゃんとコンパイルできていると思うのですが、何故かうまくいきません。 具体的には、ユーザー定義のヘッダで、ファイル自体はあるし、プロジェクトにも追加されてます。 仕方がないので#include "aaa.h"を#include "aaa\aaa.h"の様に打ち変えてコンパイルしてます。 これでコンパイルは出来るのですが、いまいちスマートではないですよね? こういうケースはみなさんどのように対処してますか?
プロジェクト>設定>C/C++>プリプロセッサ。
>>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 [プロジェクト]->[メイクファイルのエクスポート]
できたー! 完徹してしまった。
>>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);
}
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です
どうしようもない間抜けっぽいので教えてやる。 カレントディレクトリの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
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を検索して見ろ
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があるものだと思っているのですが・・・
>276 初耳。ありがとう。
>>272 MSDN Library 引きましょう。
今は PASCAL は obsolete だから WINAPI を使うのが推奨されてるけど。
いろいろなレスありがとうございました。 なんとか解決できました。
っていうか、iniファイルを複数作りたくないなら、win.iniかレジストリ使うのが 普通だと思うが。もし箱売りのソフトならレジストリ使わないとWindowsロゴ取得で ひっかからないか? ReleaseとDebugを同じディレクトリにするのがスマートじゃないとか言ってるけど、 その根拠も示されてないし。なんか、ただのわがままにしか見えない。 そもそもGetModuleFileNameを知らなかったり、パス解析で悩むようなレベルだから 仕方ないのかもしれないが。あと質問してるくせに偉そうだし。レベル低いくせに。 _splitpathを面倒とか言ってたけど、このスレに書くために押したキーの回数よりも ソースに_splitpathを追加する方がよっぽど少ないと思うが。 マルチ言語化とか考えてるなら、パス解析はAPIのパス関数を利用するのが一番安全。 ただしWin98以降限定になってしまうが。 調子に乗ってマルチ言語化してると台湾あたりから中国語でお礼とかバグ報告が来る 危険も伴なう諸刃の(以下略)。っていうか読めないっつーの。しかも中国人の書い た下手な英語は中国語よりもわけ分からん。
知らない間に韓国語版が出てたりしてアゼーン
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
今見てきたら、開発用は別に配ってるのね。 それ落とすべし。
287 :
デフォルトの名無しさん :01/12/07 19:29
>>285 libファイルはありますがhファイルが無し。(それで困ってる)
DLLだけでもLoadlibrary()を使えばOKと思いますから。
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
サービスパックって、いつまででるの?
誰も知りません
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];
>>299 CString str = "AAAA";
char *s = (LPTSTR)(LPCSTR)str;
汎用キャラクタマッピングをよく知らない人はキャストにLPTSTRは使っちゃいけません。
304 :
syosinsya :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で戻す、というのの具体的方法がわかりません。 上記のようなソースを元に関数化したいと思っているのですが、毎回呼び出される事に、はじめから再生するようにするにはどうすればいいのでしょう?
>>303 #define LPTSTR unsigned short*
って安直な考えはしちゃいけなかったのか…(汗)
>>304 MM_MCINOTIFY のメッセージをトラップして
mciSendCommand(open,MCI_SEEK,MCI_SEEK_TO_START,(DWORD)&prm);
で先頭に戻してもっかいPlayを叩き込んで終りです。
あ。念の為にSEEK前にStop噛ました方が良いかな?
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読め
>>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しろ。
>>327 ありがとう。
とりあえずSetCurrentDirectoryで検索してみます。
>>326 アプリケーションが起動されたときのカレントディレクトリ=.exeのある
ディレクトリだと勘違いしてない?
>>329 さっきそうではないということと、
GetModuleFileName()なるものの存在を知りました。
てきとーにSetCurrentDirectoryを試み中です。
うまくいきません。 下のようにしてカレントディレクトリのセットは出来たのですが、 相変わらず何らかのファイルをドラッグ&ドロップして起動すると 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()で結合 しなおすのが良いかと。
>>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されたときはあきらめる
ということでいかがでしょうか.
>>334 そうかぁ。でもそれを考え出すととても面倒そうなので
いずれまた考えることにします。
# VisualC++の相談というかWindows上でのCの相談でした。
# すみませんです。
>>337 おいおい。このぐらいで手を抜くなよ...
1 あたまから \ を探していって(ただし _ismblead() を使ってマルチバイト文字の一バイト目なら飛ばす)、
一番最後の \ を見つける。
2 UNICODE 化してしまう。string ではなく wstring を使えば、悩まなくて良い。
とか、いくらでも手はあるぞ。
>>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
342 :
味噌醤油醸造株式会社 :01/12/10 22:02
>>340 メニューのフォントって、MS UIゴシックじゃなかった?
(自信無し)
>>340 Getパラメーターイんふぉ(なんとか)って関数で取得できた気がするが。
MSDN参照
344 :
デフォルトの名無しさん :01/12/10 22:19
質問。基本的なことで申し訳ないんだが、 CMyViewクラスのメンバ変数とか外部変数を 他のクラスで呼び出したり、値を代入するには どうすればいいのでしょうか? 逆は出来るんだけど・・・
ええと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); }
上のように乗っていたのですが、 これをボタンに割り当ててメッセージハンドらのコードに加えると ローカル変数の定義がおかしいと出るのですがどのように変更すればいいのでしょうか?
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
ツールバーの空いてるところで右クリック。 「コントロール」という項目を選択する。
>>350 ありがとうございます。
おかげで表示できるようになりました。
メニューの所全部調べてもパレット表示の項目がなかったんで
困っていましたが、右クリックツールバーを表示させればよかったわけなんですね。
でも最初違うウインドウを開いていたので、コントロールパレットが表示されませんでした。
このへんがちょっと混乱させられました。
まだVC++使い始めで付属の入門の本見ながらやってたんですが、
これで再開できます。
レスがつきませんね、聞き方が悪かったのでしょうか? お分かりになる方、どうかご教授願います。
353 :
デフォルトの名無しさん :01/12/11 15:12
>>352 引数に配列の大きさなんか書いてよかったんか?
>>352 ボタンに割り当てた部分のコードとか、どのローカル変数の定義が
どうおかしいと言われたのかを書いた方がいいかと。
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]) {
どうやら、あなたはCの初歩からやり直す必要があるようですね :) 本物の書いた本でも読んでみてはいかがでしょう?
In article
>>357 , Kusakabe Youichi/sage/357 wrote:
> どうやら、あなたはCの初歩からやり直す必要があるようですね :)
> 本物の書いた本でも読んでみてはいかがでしょう?
本物とは?
レスを下さった方、どうもありがとうございます。 根本的に間違っているのでしょうか? できたら、その個所の指摘をいただけたらうれしいのですが、
わたしはからかわれていることに気がつきました。
関数の定義、宣言と呼び出しを、きちんと理解しろやゴルァ
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 を引数に取る関数の多重定義はやめたほうが
身のためと思われ。
>>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)のところでエラーがでます。 これが可能ならば上のような操作を簡潔に書けてハッピーなのですが、 デフォルト値に変数が使われると何かまずいことがあるのでしょうか?
誤植です。正しくは(どうせ間違ってますが) bool toggle(const bool& b=!elem) { // (*1) でした。!=が=!
>>367 最近C++を勉強し始めたばかりなので間違っていたらすみません。
引数が省略されたときの値がコンパイル時に決まっていないとコンパイラが困るからじゃないですか?。
> // 引数が指定されればelemを引数の値にセット
> // 引数が指定されなければelemを反転した値にセット
混乱しそうな仕様ですね。
あれ? 369辺りに 『VisualC++の質問じゃなかったですね。すみません。C++相談室に炒ってきます。』 とポストしたはずだったんですが・・・。
>>369 ブール値をスイッチするtoggle()という関数のデフォルトの動作として
値を切り替える。もし値が明示的に指定されたならばその値に切り替える、
というのは感覚的には自然な気がするのですが・・・。
> 引数が省略されたときの値がコンパイル時に決まっていないと
> コンパイラが困るからじゃないですか?。
そういうもんなんでしょうか。
とりあえず今のところそういうもんだということで納得しておきます。
失礼こきましたです。
>372 頭悪すぎ。専用にSet関数作れ。 あとパラメータ渡したときとそうでないときの動作を変えたかったら 別々のtoggle関数作れ。
374 :
デフォルトの名無しさん :01/12/13 10:44
>>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
って指定するんだけどなぁ。
In article
>>385 , デフォルトの名無しさん/sage/385 wrote:
> 普通に関数の返り値でエラーかどうか判別すればいいんじゃないですか?
「かえりち」と読むのですか?
388 :
デフォルトの名無しさん :01/12/13 16:34
>>384 メニュー「オプション」-「プロジェクト」でダイアログが出て
「コンパイラ」ボタンで、左側の「カテゴリ」にメモリモデルがある。
389 :
デフォルトの名無しさん :01/12/13 16:37
390 :
デフォルトの名無しさん :01/12/13 16:51
>>385 のコーディング
try {
hoge1();
}
catch(...) {
エラー処理
}
try {
hoge2();
}
catch(...) {
エラー処理
}
try {
hoge3();
}
catch(...) {
エラー処理
}
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
396 :
デフォルトの名無しさん :01/12/13 20:46
Win32 static libraryでプロジェクトを作った場合、MFCのクラスを使えるくせにクラスウィザードが使えないのにはどういう意味があるの?
ギャー!英語だーー!!
・・・。
>>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は使ってないんじゃないの?
>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を知らせてもらえば?
>>406 げふ... そうなんですか
その辺調べてみます ありがとう
ルータによってはAPI公開してて、それ使ってIP取得できる場合もある。 汎用性もクソもないけど。
>>408 そうなんですか 流石に汎用性が無いのは困りますね
Win2000標準のipconfig.exeを使えばちゃんと表示されるんですけど
どうやってIP引っ張ってきてるんでしょうね...
410 :
デフォルトの名無しさん :01/12/18 17:15
プロセスのセキュリティ関係について、分かりやすく解説したサイト とか、無いですかね? セキュリティ記述子だの、ACLだの、トークンがどうのだの... 訳が分からない。
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
413 :
412続き :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 なアプリでも同じこと。
たとえばメモリを初期化せずに使っているとか、
解放したあと、まだそのメモリを参照してしまっている…とか、
まぁ、いろいろあるよな。
>>416 デバッグ版だと初期化すべきところでしてなくても、
勝手に初期化してくれる(配列を零で初期化してくれるとか)ということが
あるということですか?
>>415 初期化してない変数を使った。
ReleaseとDebugでごみの値は違うことが多い。
419 :
デフォルトの名無しさん :01/12/19 14:11
>>417 初期化しない変数は、何が入ってるかわからない。
DebugとReleaseで入っている値が違うということ。
>>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マクロ使えば良いでそ
人の作ったプログラムを改造しているのですが スタティックテキストのくぼみが、スクリーンセーバー解除後に 消えてしまいます。他の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でしょう。
あ、ごめんなさい。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 }
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
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の未解決なんたらが出てリンクができません。拡張子が 違うだけで中身はまったく一緒です。どうしたら いいでしょう?
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
をろ? なにが悪かった?
>>412 の件ですが、ソースをみたところ、テキストモードで開くことを
想定しているのはCRLFなファイルだけみたいでした。ftell()が場所を
計算するときに、LFがあると、それは問答無用でCRLFからLFに変換
されたものだとみなされて、2バイト分として扱われていました。
STLPortと挙動が違うのは、VCのほうではpubseekoff()がtellg()のなかで
つかわれていたためでした。
では逝ってきます。
453 :
デフォルトの名無しさん :01/12/21 16:55
C++のメインの方でCのヘッダをインクルードしているところを extern "C"{}で囲ってみました。 最初はCのヘッダファイルのほうで定義を同じもので囲ってました。
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ファイルを、ファイル名を指定する形で用いることはできるのですか?
456 :
デフォルトの名無しさん :01/12/22 00:26
XPに対応してますか?VisualC++6.0
>>456 なんとか。 というか、 NT5.2 (だっけ) だから 2000 ベースで考えていいかと。
458 :
デフォルトの名無しさん :01/12/22 01:30
>>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 型のメソッドでは使いものにならない。
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")
ありがとうございますだ。
474 :
デフォルトの名無しさん :01/12/24 23:07
gogoをコンパイルしようとすると、 c:\windows\system32\cmd.exe の実行エラー って怒られるんですけど、何でシステムファイルの実行エラー? OSはWin XP使ってます。
ある構造体の中の様々な変数などに、外部のファイルから読み込んで初期値を与える、というようなことをしたいのですが、 どのようにするのが最も簡単でしょうか?
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
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みたいな独自のツールバーを作るにはどうしたらええんかのう
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++のソフトに なぜそのようなもののセットアップガイドがついているのか不思議 でならんかった。
503 :
デフォルトの名無しさん :01/12/26 16:26
とりあえずインストールしたい!
>>503 そんなもんここで聞くなよ。
字を読みながらボタンをクリックしろ。
505 :
デフォルトの名無しさん :01/12/26 16:50
じゃあVisualStudio6.0がなんなのか教えてくらはい。
>>505 「じゃあ」ってなんだよ。
くそがき氏ね。
508 :
デフォルトの名無しさん :01/12/26 19:55
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 学生手帳とお金と製品を持ってレジへ逝く
>>510 おおぉ~~!助かります!!
φ(.. )メモシテオコウ
>>509 心配ならRegisterWindowMessageを使おう。
文字列を与えると、勝手に空いてる番号を返してくれるよ。
ただし、Cではcaseに変数使えないから、通常のswitch-caseを使ったメッセージ
処理が使えなくなるのが痛いが。
>>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言語はただの通過点。
壁のレベルとしては路傍の石ころみたいなもん。
乱暴に言うと、なにも作りたいものが無いなら、勉強する必要ないでしょ、って事です。
>>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)
とか。
かぶった。スマソ
531 :
デフォルトの名無しさん :01/12/27 17:44
>>528 、529
ありがとうございます。
できました。
>>479 ありがと、できたよ。
となると、SetTimerの存在意義って何だろ。
初心者用の関数ですか?
>>480 できなーーい。
マルチメディアタイマで解決したからいいけど、
ほんとにそれでもできるの?
533 :
デフォルトの名無しさん :01/12/27 21:13
学生証を偽造してのアカデミックパックの買い方を教えて呉れ。
534 :
デフォルトの名無しさん :01/12/27 21:44
>>533 偽造学生証とお金と製品を持ってレジへ逝く
で、そのままレジの前を通り過ぎる。
>>532 俺もちょっとはまったんだが、SetTimerの場合、
自分でメッセージループ回さないとコールバックは呼ばれないよ。
SetTimerはあくまでもメッセージを定期的に送ってくれるようにする
ためのAPIだから。
ウィンドウ無くてもGetMessageとかにNULL渡せば来る。
ヤフオクで買えば
暖炉でスマソ ハンガリアン記法によれば、ポインタの場合、 p or lp としているが、どちらが正しいのでしょうか? LPCTSTR *lpszXXXName; CWnd *pParentWnd 私が思うに、lpの場合は、文字列で、 p の場合は、その他のポインタって思ったのですが…。 M$のソースみても、あてまはらない事例とかあるし… お願いします。
lp使ってるのは化石。
far と near を区別する必要のあった時代の区別やね
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; } } とか?
VS6のSP5(FULL)を当てているはずなんですが、VC起動時に何も でません。これで正常なんでしょうか。 VBの場合は起動時にsp5と表示されます。
STL使うと識別子が切り捨てられたとか言うwarning C4786がたくさんでて困ってます。 これを表示させないで無視するコンパイラ指令みたいのがあったような気がしたのですが分かりません。 教えてください。
554 :
デフォルトの名無しさん :01/12/30 13:25
>>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 でやったほうが早いと思われ。
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 も何にもねーよ
>>560 今試してみたら読めました。なんだったんだ?
さー、MSのサーバが重かったんじゃないかい。 ちなみに 560 で 544 と名乗ったがあれ、554 の間違いな。
>>554 こんな早くお答えしてもらってるとは思いませんでした。
ありがとうございました。表示されなくなりました。
お礼が遅くなってすいません。
自分のVCは複雑なテンプレート関係が(メンバ関数のテンプレートとか) 処理できるようになってないけど、サービスパックをいれるとできるようになるのかな?
565 :
デフォルトの名無しさん :01/12/30 23:48
>>564 VC6はSP入れたってテンプレート処理の能力は増さねーよ。
次の VC7.NETまでオアズケだよん。
>>565 やっぱり駄目なのか。ありがとう。
STLやテンプレートを深く勉強しようと思ったけどやめようか。
逆にサービスパック如きで予想できない言語の扱いの変更が行われるのはコードへの影響が 無視できなくなる可能性があって危険だな
568 :
あたー!!!! :01/12/31 01:12
今日秋葉でVC++5エンタープライズ版 が7000円で売ってました。 違法コピーじゃなくて中古みたいだったけど。 買っても大丈夫かなぁ。
569 :
a.out :01/12/31 01:51
ネットワーク上のプリンタを監視する方法として、MIBを使うという手がありますが、 実際アプリはどのように記述すればいいのでしょうか? snmpを使ったプリンタ監視について御教授願います。
>>566 STLを深く勉強するなら、VC6+STLPortでやっとけ
それから Modern C++ Design を読むとテンプレートの
奥義を極めることができるそうだぞ
>>567 SPで言語の振舞いが変るのは勘弁だが、VC6の
言語サポートにも追いついていないSTL周りは
SPできっちり更新して!と思うナリ
>>549 あとがと
Win9x系,NTでVC++でDNSのMXレコード取得する方法ってないの?
なんだかんだ言って、VC++より良いコンパイラは存在しなかったり。 gccはコンストラクタ周りにバグあるし、IC++はデストラクタ周りにバグあるし、 CWやLSI-Cは論外だし。 動作がおかしいんじゃなくて、最初からそういう仕様になっているVC++が一番 癖が少ないと思う。その仕様が中途半端なんだけどさ。
>>572 用途による。
PS2 のソフト組むのに VC は使えんし。
揚げ足取られて可哀相な572に補足すると「Win32環境なら」ってことだろ。 俺もVC++使ってるのが一番幸せだと思う。
575 :
VC++超超初心者 :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 日本とアメリカの違いってなんですか?
くらい漠然とした質問だ。
答えようが無いぞ。
585 :
VC++超超初心者 :02/01/01 03:04
>>578 ほんとにはじめたばかりで何もわからないです。
本とか見てもそういうことには触れていませんでした
なぜ、と言われてもなー。Windowsの機能を使った方が、 ライブラリの実装が簡単だったからじゃないのか? 別に、Winのコンソールではないウインドウを出す 実装があっても良いし。
>>585 じゃあ、お前的には575のプログラムがどういう風に動くと思ってたんだ?
Windowsのウィンドウが表示されてそこに"test"と表示されるとでも思ったのか?
VC= 医師国家試験並らしい… VB= 英検2.5級位 って思ったら良いと思われ。(誰かが言っていた。 (言ったその当時は、VCのHowToが無かった時代かな…)
何でそんな必死に突っ込みたがるんだろう (^_^;
592 :
VC++超超初心者 :02/01/01 04:52
>>587 何もわからない初心者なのでなんとも言えませんが、さすがにWindowsのウィンドウが出てくるとは思いません。
でもなんでDos窓が出現するのですか?
>>591 特にその本は何も触れていません。ただ、実行すると、DOS窓がでてきて文字が表示されるっていう事実だけが書いてあったぽい
ていうか、ネタのつもりでないんで誰かマジレスしてほしいです
>>592 つーことは、実行すればDOS窓が出てくるってことは理解してるんだよね。
DOS窓が出現するのはexeファイルを実行してるからじゃないの?
>>593 その exe に
このプログラムは console subsystem を使う
と書いてあるからだと思うが。VC6 だとリンカのオプション /SYBSYSTEM で指定できる。
595 :
デフォルトの名無しさん :02/01/01 16:01
すごい簡単なことを聞きます。 ボタンを使用不可にするにはどうすればいいんですか? ボタンにメンバ変数を割り当てたのですが、どのコマンドで 使用不可になるかわかりません
EnableWindow(FALSE)
597 :
デフォルトの名無しさん :02/01/01 17:05
お年玉でVCを買いました。 始めに何を作ったらいいですか? ドラクエが作りたいです。
ネタの臭いが プンプンするぜェェェェェェェ!
599 :
デフォルトの名無しさん :02/01/01 19:19
>>595 MSDN のドキュメントもちゃんとインストールしておきなさい。
>>595 もう回答出てるけど。
とりあえず、ボタンだろうがエディットボックスだろうが、基本的に
どれもウィンドウである(ウィンドウハンドルhWndを持ってる)という
のを理解する事。
理解したらMFCのクラス図を眺めてみて、なぜCButtonはCWndの派生
クラスになっているのか、CWndとは一体何のクラスなのか、という
のを調べてみるといいだろう。
演算子の定義ってなんすか? ”特定の計算(比較)結果を返すもの” ってのは正しいでしょうか?
演算 既知のもののゆるされた組み合わせに作用し、新しいものを生成する定義された動作。 既知のものがオペランドであり、動作を指定するのが演算子である。
>>597 とりあえずファイル、新規作成、コンソールアプリ、 またファイル、新規作成、C/C++ソースファイルを作り、 #include <stdio.h> int main() { printf("hello"); return 0; } を入力F7でコンパイルして、F5で実行これでDOS窓でhelloと表示される、いきなりMFCのスケルトンを使った アプリも良いけど最初が肝心、if、forとかの基本的な制御文を覚えとかないと後でやるのは大変
ウィルスを作りたいのですが、どうしたら良いでしょうか?
別にWin32環境に限定したつもりはないんだが。 環境を限定せずに考えて、俺が一番マシなのはVC++だと思うって話。 それを573が厨っぽいレス付けるからおかしな流れになる。
>>605 一応、Delphiで作りましたが…
ほしいですか?アゲマス。
Report608 :=
"
>>606 だいたいの奴は、自分が持っている言語に自信をもっていることが
君のレスのおがげで良く分かったよ。";
>>570 どうもありがとうございます。
STLPortをいれてみようと思います。やっぱりVC付属のSTLはなんか少し変ですね。
普通にコンテナ・イテレーター使う分にはいいんですけどね。
Modern C++ Design もテンプレート勉強しようと思ってたので衝動買いしてたんだけど、
まだほとんど読んでません。
ATLに使われていて感心したテクニックがこの本のポリシークラスは関係あるみたいだけど、
VCだとこの本で解説されてる技法のすべては実践できなさそうで少し残念ですが。
はやくVC7.NETがでないかな。でも高そうだけど。
>>606 反論を食らうのは、自分の狭い世界でしか通用しない常識を一般化するから。
In article
>>601 , o?/601 wrote:
> 演算子の定義ってなんすか?
> ”特定の計算(比較)結果を返すもの”
> ってのは正しいでしょうか?
引用符の向きが違いますね。
612 :
デフォルトの名無しさん :02/01/02 15:10
STLPortってDLLないと動かん?
ウイルス下さい!お願いします!
>>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
おお、ありがとございます。
pDC->TextOutとprintfの違いを教えてください。 クイックCぐらいしかやったことない僕には何が なんだか分かりません。マジレス希望です。
クイックCってなんだ?
619 :
anal fuck :02/01/03 12:45
617 クラスか関数かの違いでは? クラスとは、構造体を拡張したものです。
なんというか、まず
>>620 には、ビットマップつーものから教えなくちゃいかんのかに?
デバイスコンテキストじゃないの
デバコンってなあに? むじゅかしいなあ。。。
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窓を出さずにできる方法はないの? 教えて!
CreateProcess ShellExecute _exec*** _spawnl***
>>626 system 関数について、もちっと、勉強せぃ。
GUI アプリなら CreateProcess か ShellExecute を使って、直接、起動しろ。
CUI アプリなら、キッパリと諦めろ。
629 :
VisualC++に乗り換えた腐れ厨房 :02/01/05 00:10
このたび、遂にVisualC++6.0を買いました。 「反MS原理主義」を掲げる職場の先輩に付き従って、TurboC++ for Windows で 今まで戦ってきましたが、製造元にも見放されたコンパイラに限界を感じ、遂に 投降しました。 現在、プログラムの変換作業中なのです。 が、TurboC++で使えていた関数がVC6.0では使えなくてエラーと格闘しております。 VCでは次の関数はないのでしょうか? strncmpi() jstradev() またヘッダファイルも無い物があるようです jstring.h mem.h ヘルプファイルを探しても、なかなか見つかりません。ご存知の方いらっしゃいましたら ご教示ください。
>>627 windows2000ならコンソール窓が必要無ければ
CreateProcessでCREATE_NO_WINDOW
>>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
635 :
デフォルトの名無しさん :02/01/05 14:34
返事早っっっっっっっ 早速検索・・・。
636 :
デフォルトの名無しさん :02/01/05 14:39
(・_・、)<全然わからなかったらしい
>>636 俺には
>>634 は少々投げやりな意見に聞こえたけどな。
それを読んで飛び出していく方もどうかと思った。
>633 スマートじゃないかもしれないけど ボタンが並んだ絵を描いておいて ホントのボタンは1個だけ、マウスの移動につれてそのボタンを動かすというのはどう? VBでは良く使った方法だけど
639 :
デフォルトの名無しさん :02/01/05 14:56
>>637 そこはそれ、当方初心者ですのでご勘弁を(;´Д`)。
>>638 かなり妖しい方法ですね。考えも付きませんでした。と言うかあり得ないw
でもそれって普通のDOSプログラムとコーディング変わらないんじゃ…。
クリックの割り込みがOnButtonになるだけで(^_^;)。
つうか、ボタンが全部違うなら31個作るしかないだろ。 それで、「今日は○○日です」って処理だけなら関数は1個で済むだろ。 それだけだ。
ボタンらしい動きをさせるのがメンドクサイ時に使う方法であって クリックして大幅に画面が変わるなら、それこそボタンの絵だけ描いて クリックされた座標から判定すればいいだけだからさ
Delphiじゃ複数のオブジェクトのイベントを同じメソッドで処理できた。 procedure OnMouseDown(Object Sender) begin end; Senderにそのイベントを発行したオブジェクトが入る。 VCにはないのかな?
イベントハンドラの共有なら VCでもできたよーな?
645 :
デフォルトの名無しさん :02/01/05 15:10
>>641 最後の手段として検討させて頂きます。
いや、その手法ですとね。今回は確かに乗り切れるでしょうけど、
将来の為にも、正攻法で考えてみたく。
>>642 有るかもしれない。けど、いくら調べてもわからない(死
button[n] = CButton::Create(); の引数で、別途リソースIDを指定しなきゃなんなくて。
このIDを自動生成出来ればいいんですけど、仕様上無理そうな。
OnButtonで感知出来るのはこのリソースIDだけみたいで、ユニークじゃないと。
実体のアドレスをくれ、アドレスを・・・・・・。
未だ地道に検索中・・・。意地でも手作業でボタンは置きたくないんで。
実際150個弱だから、置いて置けない事は無いけど。
>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
マジ、ウゼエ。答えでてるだろ。 もう上げんな。
まず何をするプログラムなのかを言ったほうが良いんでは? そうすればUIに関するアドバイスからもらえると思うけど。 カレンダーならコンボボックスでもいいし、 囲碁ゲームならコントロールじゃなくて「絵」でもいいけど、 どちらでもないんでしょ? 開発者としてボタンが数百個置かれたプログラムを作るのはめんどうだけど、 ユーザとしてもそんなプログラムはあまり使いたくないなぁ。
659 :
デフォルトの名無しさん :02/01/05 16:05
ボタンのIDについての答えはまだ出てない様な(藁
お馬鹿ちゃんのせいで荒れてきたな・・・。
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 ダサいとかの問題じゃないんだよ。
中途半端な情報しか与えないで教えてくれと言われるほうが迷惑。
>>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
ナチュラルプチ陽ちゃんだな
>>680 クリッカブルマップとMFCを捨てるにどのような関係が?
豪快すぎて言葉が有りません・・・・・・。
RUBYにしろよ>>C厨のあfふぉ RUBY!!!!!!!!!>>>>>>>MFC
687 :
デフォルトの名無しさん :02/01/05 17:11
そうですかやはり豪快でしたか・・・私もそう思いました。 取りあえずこれも将来の課題といふことで。 力技で地道に進行中。
>>676 >複数個のコントロールから一つの関数を呼び出した時に、どう仕分けるかが疑問なのでありまして。
ID見て普通に仕分ける以外に無いと思うが、
なにか、ほかにあるんだろうか。
つうか、肯定的な意見は全部質問者の自作自演だな、これは。
>>682 ちがうよ!<MAP>タグを使えってことだよ!
>>650 何故その段階で気付いた? あんた何者だ 笑
692 :
デフォルトの名無しさん :02/01/05 17:14
sageてないのはほぼ質問者ですが、何か?(藁 と言うかレスりすぎてコーディング進まねェし。バカ。
>>688 そこが彼の文章のわかりにくいところなんだよ。
彼が言いたいのは
「たくさんボタン置くのがめんどくせーから、いっぺんに
どばぁーっとボタンを置く方法知らねぇ?」
ってことなんだよ。
(゚Д゚)ポカーン
>>692 >と言うかレスりすぎてコーディング進まねェし。
まずやってからレスすれ。
だからこういう展開になる。
>>689 漏れもそう思った。張り付いてスレ見てるみたいだしな。
>>682-
>>683 のタイミングとか。
しかも、クリッカブルマップが分かってないくせに
>>687 の豪快とは、これいかに。
>>680 が自作自演だって事は明白だな。
MFCがどうのこうの言ってる時点で、クリッカブルマップが理解できとらんし。
>>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 さんの情報と組み合わせる事で、期待通りに動作致しました。やっとこさ。
併せて御礼申し上げます。
以上、しばらくはこのスレに来なくて済む事を祈って(笑)。どうもありがとうございました。
そのまんまだとメモリリークするからそのへんちゃんと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で。
>706 >IShellLink::Resolve() リンクターゲットはおっしゃるとおり、IShellLink::Resolve()で取得できます。 そうではなくて、「リンク先を探す」を押すと、新しいエクスプローラ窓が開いて、 リンク先オブジェクトが選択されますよね。これをやりたいんですが。
IShellBrowser::BrowseObject というのを発見しましたが... つ、使い方が分からない(鬱
709 :
デフォルトの名無しさん :02/01/06 05:47
>>702 引用の通り、ダイアログにン10個のボタンを配置、これは譲れない線なので
まあ許して(笑)。
つまり私の言う所の「IDの作り方」は、DevStdioで普通にン10個予約するか、
或いは#defineをン10個並べて予約するかの問題で、
その辺が初心者。何分一昨日初インストした所なんで(苦笑
その後は快調、快調。
710 :
デフォルトの名無しさん :02/01/06 06:07
あれ?
>>707 それなら、
"explorer /n,/select,リンク先オブジェクトのパス"
をShellExecuteなりなんなりで起動すればよい気が。
>711 感動した。 ShellExecuteレベルでできそうな気はしていたが、 explorer.exe にオプションスイッチがあったとは...
技術系掲示板・MLで嫌われるような典型的な厨房がいるな
二次元配列の大きさを動的に操作したいんだけど、 vectorって二次元にできます?
できる。
std::vector<int>(std::vector<int>Dim); 見たいな感じだとコンパイルエラーになるんですが(VC++) ヒントだけども教えてください。
>>716 std::vector< std::vector<int> > Dim
>>717 助かった。ありがとう。
具体的な使い方がよくわからんが、とりあえず宣言はできた。
719 :
デフォルトの名無しさん :02/01/06 18:30
VC++プロにはスタンダード版のような入門書とかついてくるの? また、スタンダード版はプロ版にバージョンアップ可?
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);
すいません。教えてください。 m_pBrowser の中身って何なのでしょうか?
ATL/WTL スレって無いのかな? ここでいいのかな?
VC+MFCで質問してよろしいでしょうか。 読取専用のeditboxをIRCのようなチャットクライアントのウインドウにしたいのですが、 myED = (CEdit *)GetDlgItem(IDC_EDIT); myED->GetWindowText(ss); msg = ss + buf + "\r\n"; myED->SetWindowText(msg); このようにして書き込んでいくと、 最初はいいのですが1画面の範囲を超えてスクロールが必要なときに 何か発言があるとスクロールが一番上に戻ってしまいます。 最初からスクロールが下にあるようにしたいのですが・・・
>>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);
とやってもダメなんですねえ。
730 :
デフォルトの名無しさん :02/01/08 12:27
モードレスダイアログを使った場合、データの受け渡しは ウィンドウ間通信じゃないといけないと聞いたけど、 どこかお勧めのサイトありますか?
731 :
デフォルトの名無しさん :02/01/08 12:39
JPEG・PNGの保存ってどうしてますか? OleLoadPictureでJPEGは読めるんですけど保存やPNGはどうしてますか? 有名なライブラリをリンクしてやってるんですけどプログラムサイズが大きくなって ネットで配布するのに不便ですし何となく嫌です。 MS製でOSやIEなんかについてるActiveXとかないですか?
>>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の形で書かれたファイルを読み込んで二次元配列に格納するのは どうやればいいでしょうか。
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
寧ろ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 使ったほうが良いぞ)。
俺はメモリリークっていいたいだけちゃうんかと(いや違うんですが)
>>751 明日はSTL.port逝ってみるよ。
VC++がANSI C++に完全準拠するまで問い詰めるのは勘弁してください
もしからしたら永遠と問い詰められることに・・(ぉ
>>753 なるほど、スキーリ、しました。
そんな俺は修行がたらないようなので出直せってこった。
STL age
>>755 まあSTLportでstd::auto_ptrつかう時は忘れずに#define OBSOLATE 1しとけってこった。
>>752 >ほい。
>file:///C:/Program Files/Microsoft Visual Studio/VC98/CRT/SRC/CRT0.C
ありがとうございます。
でも見つからなかったです・・。
もしかして Enterprise Edition にしかついてないとか。
googleやinfoseekのようなツールバーを作りたいです どうやって作るのか調べてもわからなかったのですが 何か参考になる資料などないでしょうか
>>757 インストールの時に選択しとかないとライブラリのソースは入らんぞ。
ちなみにコマンドラインへのポインタは GetCommandLine() だ。
>>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 ほい。
>>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++ 読んで始めて知ったんだけど。
>>762 ありがとうございました.
ちゃんと探したとおもってたんですけど,全然見逃してました
あとは自分でがんばってみます
766
>>767 俺、επιστημηのSTL本でSTLはじめたんすよ。
で、それの中で参照ベースコンテナの例としてauto_ptrをコンテナに突っ込む
例が掲載されてるんすよ。
よーし、パパvectorにpush_back(auto_ptr<Animal>(new Dog("ポチ"))するぞーとか言ってんすよ。
もうね、アホかと。本を書くなら規格書読めと。VCMLで偉そうな事言う前にやることあるだろうが、と。
>>769 auto_ptr は標準化で機能が二転三転した経緯があるんで、
ISO C++の、どの時点のドラフトをベースにしているかによるな。
ま、正誤記事ぐらい書いとけよ>えぴすテメ~ゴルァ
>>770 正直、彼の本はチェックが甘いと思う。「オブジェクト指向的日常」でも文章の誤記は多いし、コードでも
「そもそもコンパイル通らん」
「非ローカル static オブジェクトの初期化順序に依存するので、動作を保証できない」
なんてのがあった(もう本は捨てちゃったから正確なところは忘れたけど、シリアライズで出てきたオブ
ジェクト辞書に関して)。
別に STL の書籍は彼のものだけってわけじゃないし、さっさと捨てて別の本に乗り換えたほうが良いか
もね。
>>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++を勉強していこうと思うのですが 本当にゼロから解説してくれるサイトや本はありますでしょうか? よろしくお願いします。
こんの割れ野郎がああああああああああ!!!
スミマセン、叔父から譲ってもらった物です(汗 割れではありません。 それに、本気でプログラムを勉強しようと考え相談しました。 今までプログラムに触れる機会がなかったもので何もわかりません。
777 :
デフォルトの名無しさん :02/01/16 18:31
Visual Studio 6.0を使っている者です。 Visual C++をつかってコーディングしているときに [.]や[->]を入力すると自動でメンバを表示してくれる機能がありますが、 これが表示されなくなる事があります。 原因がよくわかりません。Visual Studioのバグでしょうか? それともコーディングのまちがいか何かでしょうか。 思い当たる事があったら教えてください。お願いします。
「猫でもわかるプログラミング」
まったくおんなじ状況で インテリセンスが動いたり動かなかったり?
>779 全く同じ状況ではないです。 コーディングを進めていくと動いたり動かなかったりします。 コンパイルは通るのですが。 どこか気づきにくいコーディングの間違いでもあるかもしれません。
>>777 とりあえずワークスペースのフォルダにある*.ncb消せば直ると思うけど。
あれ、わりとよく壊れるらしい。
>781 やってみましたところ、できるようになったみたいです。 ありがとうございます。
>>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
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しなおす、ってのじゃだめ?
>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を使用しています
>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 与えるファイル名の正規表現に "\" を付けて(゚д゚)ウマー 。
>>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)
でどうよ?
thx、ためしてみまっす!
できました、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 お前の書きこみはスレを腐らす
しーぷらぷら、ぷりんとえふだよ。
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
まさか、 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
じゃあやっぱり文字列に直して送れっつーことですか。
少し本でも読んで そのへんを勉強しなおせば 答えはおのずと
クラス内で使う関数で、 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*> {}; };
ごめん。 よく判らないけれど先頭の 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
mallocして、memcpy。 個人的には、std::vector<BYTE>とかにすることを おすすめするが。
俺はmemmoveだあ
>>851 >>852 ありがとうございますm(__)m
なんか便利関数があるのかと思い全く思いつきませんでした。
かなり助かりました。ふぅ。
854 :
デフォルトの名無しさん :02/01/19 20:49
>>852 この場合、memmoveにする意味がないだろ
855 :
デフォルトの名無しさん :02/01/19 21:20
856 :
デフォルトの名無しさん :02/01/19 21:46
mallocするなら、srcとdstが かぶるわけない、ってことでしょ。
>>855 mallocで新しく確保した領域が、元々あった a の指す先と重なってることはあるまい。
領域が重ならなければmemcpyでよし、mallocするなら領域は重ならない。
あー、かぶりまくり。。。。
要するに、基本ですってことね(w
memcpyはないものと思え
864 :
デフォルトの名無しさん :02/01/19 23:37
ためになるのう・・・
スレ違いかもしれないけど、MSDNをインストールしようとするとダイアルアップが 起動するのは何故? 思わずキャンセルしちゃったけど。まさか自動でMSにメール とか送信したりするの?
866 :
デフォルトの名無しさん :02/01/20 02:35
↑気味はワレズでも使っているのかね そうビクビクしなくてもいいじゃないか(ヒヒヒ
ライセンス使用書とかはあるけど、秋葉で安く買った怪しい奴。 なんとかなくキャンセルしただけだから、別に問題がないなら インストールしてしまうけど。
868 :
デフォルトの名無しさん :02/01/20 02:47
>>867 いくらで買ったの?
VisualC++5.0エンタープライズ版が
秋葉で7000円位で売っていたのを
昔見たことがある。
869 :
デフォルトの名無しさん :02/01/20 07:00
マルチスレッド初心者なのですが、よければ教えてください。 CreateThread()を使ってマルチスレッド化するとき、 注意しなければならないことといえば ファイルやメモリの「同時書き換え」だけでしょうか? ファイルの読み込みとか変数の同時参照(?)とかは 大丈夫なのでしょうか? (デバイスコンテキスト関連に注意するというのはどこかで聞いたような・・ 厨な質問ですみません、よければアドバイスお願いします
>>869 いちいち注意点を具体的に挙げてればきりがないと思うな。
要するに、TLS と auto 変数以外の「何か」を使うときは必ず、
「もしかして他のスレッドが…?」と、まず心配してみることが肝要かと。
あと、MSDN は必ず調べるべし。
DLL を使う(or 作る)なら、リンクするライブラリにも注意。
…挙げてたら本当にきりがない。
スレッドは超便利だが、デバッグがややこしくなると言う諸刃の剣。 だがあえて初心者にお勧めしたい。いいトレーニングになるので。
ああ、きのうダイエーで購入しVC++のバージョンが古かったんだよ。 VC++のバージョンは6.0なんだけどね、付属しているSPが3なんだよ。いやまじで、 そんで、あれだよ、MSNDの無料クーポン券の有効期限が200101231に切れてるの。 さすがダイエー、むかし、DVDプレイヤーかったとき、 どっかの親バカが自作した自己満足のお子様ビデオが入ってたときには、バッタやから 仕入れたんだな。と仕事の関係がアレだからすぐに気づいたから、返品交換してもらったけど、 今回はレシート捨てちまったし、現金でかったから、クレジットの明細がないんだよ。鬱だ。死にたい。 ダイエーは癌だ。速く倒産しろ!!ファック!!
にまんじゅうねん12月31日? などと、今日一日を振り返り、反省してみる。
>>870 あ、なるほど、注意すべき部分ってMSDNに結構書いてあるんですね
DLLもよく調べてみます。
どうもありがとうございます~。
aああああ鬱だ20011231だ。他にも誤字が脱字があああああああ 鬱だ死にたい。
>>872 > 付属しているSPが3なんだよ
SP は最新版が MS の Web サイトから落とせる。心配するな。
MSDN Library の件はご愁傷さまだが、とりあえず MS に掛け合ってみなよ。
猫でもわかる
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)
かもと思っているのですが、解決策ありましたら教えてください。
SCribbleチュートリアルってどこにあんねん・・・・ MSDNの中にあるやつなんか・・?これなんか? これはチュートリアルのチュートリアルにもみえんねんけど、 これがチュートリアルなんか・・?
いつのまにMFCをはじめていたんだ
882 :
デフォルトの名無しさん :02/01/20 22:17
質問があります。 ファイルのバイト数をブロック毎に格納して行きたいのですがファイルによって可変なので CDWordArrayでAddしていってるんですけど多分、領域が足りずにエラーが発生します。 SetSizeの効果もいまいちなのでどうしたら良いのかと思ってます・・・。 ベストな手段が有ったらご教授お願いします。
883 :
デフォルトの名無しさん :02/01/21 01:06
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をしない場合でも同様でした。 そんなこんなで、徹夜状態の私を救ってください。お願いします。
../include/newが無い ↓ ../include/newのエラーの行は # include _STLP_NATIVE_CPP_RUNTIME_HEADER(new) でnewが無い
README.VC++.html見れば解決するかと。
VC++でdoubleより範囲の広い数を扱える方法はありませんか? 有効桁数は同じでもいいのですが…
広い数?
890 :
デフォルトの名無しさん :02/01/21 11:37
CString型のメンバ変数からchar型の代入はキシュツですが、 CString型のメンバ変数からchar型の配列の代入はどうすればいいのでしょうか。
891 :
デフォルトの名無しさん :02/01/21 11:50
892 :
デフォルトの名無しさん :02/01/21 12:22
>>890 こんなかんじでもいける気がする。
LPTSTR str=new char[10];
CString cstr("hogege");
str=(char*)LPCTSTR(cstr);
In article
>>892 , デフォルト名無しさん/892 wrote:
> こんなかんじでもいける気がする。
だめですね。
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
894 :
デフォルトの名無しさん :02/01/21 13:12
CString::GetBuffer で取り出さないとだめ・・・だったと思う。
897 :
デフォルトの名無しさん :02/01/21 13:35
フォートランってどうよ?
こんなんでどうよ? 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 なるだけCStringやconst char*系を使うようする。
一部にchar*系を要求するAPIがあるけど、そういうときは
char*のバッファにコピーして使う。
>>892 > LPTSTR str=new char[10];
このメモリはいつdeleteするのだろう。
906 :
デフォルトの名無しさん :02/01/21 14:04
代入のみが目的なら、
>>892 も有りだとおもわれ。
>>900 そんなこといったら、
cは関数終了に
}
で閉じなきゃ成んないからめんどくさい。
ってのと同じレベルかと。
GetBufferしたら勝手にこびとさんがReleaseBufferしてくれるように
手を鍛えると良いかと。
#でもMFC周りは色々手続きが煩雑でめんどくせーよな。
#Penなんかも切替えてもSelectObjectで元に戻すの
#忘れたりけっこうするし。
>>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のワード長の関係?
っていうか、実際試してみりゃいいんじゃん。 BOOL a; for(int i=0; i<100000000; ++i) a = TRUE; と bool a; for(int i=0; i<100000000; ++i) a = true; を比較したら、boolの方が、平均で 150msぐらい速かった(゜ε ゜ なんと。
基本的になんでもプログラムって大概小文字のほうが速い。
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無くてダイジョブか? デバッグビルドだったので、ダイジョブ(だよね?)
このスレを使い倒そうぜ!!
eMbedded VC何ですが、ブレークポイントを置いても実行時に one or more breakpoint cannot be set.みたいなエラーが出て、 白ブレークポイントにされてしまいます。 クリーンとかしてみたけど改善しません。 なにが原因なんでしょか?
ガーン、ブレークポイントを置きたかったクラスをまだ使ってなかった ;( 間抜けでした。
>925 返答どうもです。CFileDialogにはSerialize()が実装していないので、 出来ないみたいなんですが・・。
>>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)); で良いの? どうも自信がなくて。
↑ あ、IContextMenu::QueryContextMenu です。
944 :
デフォルトの名無しさん :02/01/27 03:29
質問させて頂きます。COLORREF型のRGBマクロの値を判定するにはどうすれば よいのでしょうか。私が参考にしている本には、 COLORREF color; if(GetBValue(color) == 0 && GetBValue(color) == 0 && GetBValue(color) == 0) となっていて、白と黒は判定できるのですが、それ以外は反応無しなのです。 どうすればよいでしょうか?
あのー、ちょっといいですか?あー・・・、でも無視されそう・・・でも質問します! ダイアログに貼り付けたリストボックスで、アイテムが選択されたときに送られるメッセージは何ですか?spy++で調べてもたくさんですぎてわかりませんでした。 あと、選択されているアイテムが変わったときに送られてくるメッセージも教えてくださ~い(>А<)
LBN_SELCHANGE。
>946 あっ、やったぁできましたぁ!ありがとうございます~☆(^Э^)ヾチュッ
つぎからきちんとMSDNで探そうな。あ、それと、マトモな情報は やっぱし英語のヤツしかなかったりするから。
>>948 ム板マ板にいるプログラマ全員でかかれば、MSDNライブラリの
英文を全部和訳出来そうな気がする、と言ってみるテスト。
そんなことが出来る暇なプログラマはDQNばっかりだよ、
と返ってきそうな採点結果。
>>949 そんなことが出来る暇なプログラマはDQNばっかりだよ
ローボコン100点
> 私はMFCを使わない(使えない)ので、ちょっとショックです。 猫に訊くとか、ATL/WTLのソース読むとか、MFCのソース読むとか、 方法は幾らでもあるだろうに。
このスレをageた時点でもう……逝っていい
それよりもなぜコテハンにする必要があるのだろうか。
「クソスレ・クソレス、コテハンの法則」 があるから、それに従ったんだろう。 どーでもいい事をコテハンで書き込む連中には激しく萎え。
本当はおまえらわからないんだろ!(藁) あ~あ期待した折れが馬鹿だったよ。 じゃーなー
>>956 質問は新スレでしろよ。
それに煽るな。
サンプルがMSDNの中にある。
InitListViewImageLists でクエリーかけてみろ。listview.cが見つかる。
ただ、個人的にはListViewのサブ項目の編集は使いにくいので
別の方法を模索するのを勧めるけどな。
>>958 間違ってこっちに質問が来ないように、埋め立てカキコを
しちゃあかんのだろうか?
と、聞いているフリをして埋め立てをちょっと行ってみる。
すいません。 VCを勉強しているのですが。 よく分かりません。 単なる、ダイアログベースで作成して、 プロパティーページを出そうとしているのですが、 デバックで一度動いて、二度目で落ちてしまいます。 クラスは、CPropertyPageとCPropertySheetを使っています。 使用しているのは、VALUESTAR VL700R/5のマシン、 OS WINDOWS MEです。 ひとつ分かっているのは、一度、ツールバーのプロパティーを 動かしたら、デバックで死ぬことは、ありません。 VC6、サービスパック5をインストールしています。 よろしくお願いします。
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 よ )