★初心者にVisual C++を教えるスレ★ Part12

このエントリーをはてなブックマークに追加
Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。

  質問の仕方については次のページが大変参考になります。
  http://www.hyuki.com/writing/techask.html
  http://www.geocities.co.jp/Beautycare/4965/public/template.html

■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
 (MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。

満員電車で携帯なんか使うなよ

前スレ
★初心者にVisual C++を教えるスレ★ Part11
http://pc5.2ch.net/test/read.cgi/tech/1077965179/
姉妹スレ

MFC関連はこちら↓
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/
3 ◆Manna2uCLg :04/05/03 21:21
4 ◆Manna2uCLg :04/05/03 21:21
5 ◆Manna2uCLg :04/05/03 21:22
>>1
乙!

とりあえず、過去スレとか張っておくです。
>>5
ごくろーさん
>>1-5
オツ

華麗に7get!!
>メニューの「プロジェクト」→「設定」より「リンク」タブをクリックし、「オブジェクト/ライブラリモジュール」の先頭に
>「winmm.lib ddraw.lib dsound.lib」の3つのライブラリを追加し、OKを押します。

上の操作は.NETの場合だとどのようにすればよいのでしょうか?
999 名前:デフォルトの名無しさん 投稿日:04/05/03 23:06
1000

1000 名前:デフォルトの名無しさん 投稿日:04/05/03 23:09
999!
最近STLの勉強を始めたのですが、
mapとか使おうとすると、なんだかいっぱい警告がでてきます。
いくつかのHPに載っていたソースをコピペして実行させてみたのですが、
実験したソース全てで同じように警告が沢山でてきました。
これをなんとかできるのであればなんとかしたいのですが、
何か方法があるでしょうか?
何か知っておられたら教えていただけるとありがたいです。お願いします。
環境も書いてないし、教えてもらうつもりはないんあろうな
>>11
済みませんでした。


使っているのはVisual C++ 6.0 Enterprise Editionです。
int main()
{
 map<string, string> items;
 items.insert(pair<string, string>("aa", "Dog"));
 items.insert(pair<string, string>("bb", "Cat"));
 items.insert(pair<string, string>("cc", "Bird"));

 cout << items["aa"] << endl;
 return 0;
}
こんな感じのプログラムをコンパイルすると

c:\program files\microsoft visual studio\vc98\include\xtree(120) :
warning C4786: 'std::_Tree<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,
std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,
std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,
std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Kfn,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basi
c_string<char,std::char_traits<char>,std::allocator<char> > > >' : 識別子が '255' 文字に切り捨てられました (debug 情報内)。

という感じの警告が120程でてきます。(本文が長すぎると言われたので途中で改行を入れてしまっています。)実行結果は
Dog
と表示され、結果自体は問題なさそうに見えるのですが…。
オプションかなにかで設定しないといけないのかなと思って質問しました。
もしなにか知っておられるようでしたら教えていただけるとありがたいと思います。
pragmaで4786を無効にする。
もうこれはFAQだな。

MSDNで警告番号調べりゃ分かるけど実行に実害はないよ。
>>13
やってみました。
キレイサッパリ消えました。
ありがとうございました。
VC++6.0でSTLを使うときはこうなってしまうものなんだと思ってこれからの人生を生きていきます。
ありがとうございました。
>>14
寧ろそれより、VC++7.1を使う方が医院で内科医?
VC6はstl周りでおかしな動きするみたいだし。
VC7.1なんて使うならiccを使うほうが良くないか?
iccを使うくらいなら・・・

只でリプレースできるものじゃないんだから、
VC6を破棄しろというならともかく、
当然のようにバージョンアップしろみたいな言い方はどうかと。
Enterpriseから置き換えるEnterprise Architectなんて簡単に買える額じゃないし。
>>16
それ、思い込み激しすぎるから。
誰も買い換えろなんて言ってないわけだし。
>>17
>>16じゃないけど、普通に読んでVC6ユーザーにバージョンアップを求めてる
ようにしか見えないんだけど・・・
何が言いたいんだろ?はっきり書いてよ
画面ではなく、ウィンドウの解像度を変更する場合、どういう記述をすればいいですか?
VC++6.0です。出来ることなら、DirectX はなるべく使いたくないです。
ウインドウの解像度って何?
SetMapModeとかの話か?
チェックボックスにチェックを入れると
入れた瞬間にチェックしたことを反映させるには
どんな風にしたらいいんですか?

たとえば、日付を表示するダイアログがあって
時間っていうチェックボックスをつくって、
チェックしたときには時間も表示されて、はずしたときには表示されない
という感じにしたいんです。
メッセージの一覧とか見てみたけどそれらしいのが見つからなくて
ダイアログのメッセージ処理のdefaultのところに書いたけどだめでした。
すごい人、おしえてください。
BN_CLICKED
>>22
それってwParamのHIWORDの時の値ですよね?
試してみたところ、ボタンを押したときには反応があるんですが、
チェックボックスには反応無かったです
使い方がおかしいんでしょうか・・・
2421,23:04/05/04 14:35
>>22
自己解決しました。
ありがとん。
描画に使用したHPENやらHBRUSHやらのオブジェクトを
DeleteObjectで削除しなかった場合ってOSには
どのようなことが起きてますか?
プログラム終了したときには絶対に消される?
それとも、OS再起動まで使えない領域として残ったまま?
どうなるんですかね?
メモリリーク
>>25
アプリ終了しても消されない。
GDIリソースはシステム共有リソースなんで、あまりに使用したままほうっておくと
ほかのプログラムに影響与える。
>>26,27
サンクス
ちゃんと作ったやつは、
責任を持ってdeleteしていこうとおもいます。
>>26,27
サンクス
ちゃんと作ったやつは、
責任を持ってdeleteしていこうとおもいます。
二重ごめんなさい。。。
31デフォルトの名無しさん:04/05/05 04:38
Perlで言うCPANみたいな、VC++のクラスライブラリ集を扱ってるサイトは有りませんか?
はじめまして。
こにたび大学でC言語をやることになったのですがほとんど何を言ってるのかわかりません。
何かおすすめの参考書などがありましたら教えてください。
よおしょくお願いします。

33デフォルトの名無しさん:04/05/05 06:34
>>25 良くないね。>>27の言うとおり。
自分でDIB作って出回ってるGDIと似たようなライブラリで描画するほうが
好きだなー。後でGetDIBitsして。
オーナードローとか、HFONTばかりは仕方ないか
>if (!(hWnd = InitApp(hThisInst, nWinMode)))
>error C2440: '=' : 'BOOL' から 'HWND' に変換できません。

というようなエラーが出ました
どうすればいいのでしょうか?
>>34

・Cの言語リファレンスを読む。
・諦める。

まぁ、basic上がりだと気がつきにくいんだろうけどな。
>>34
MSDNライブラリのキーワード欄に
C2440 を入力してみる。
>>32
>>4 の一番上にある「猫でもわかる・・・」をクリックしてみる。
MFCのCPenやCBrush, CFont でも終了時に
開放されないとかあるんですかねぇ?

描画用のオブジェクトを作る→異常終了→メモリーリークってのが
延々と繰り返されれば、OSが不安定になるわけですな。
>>38
クラスを使用することの利点はデストラクタがあること
ファイル処理のクラス化などがリソース管理手段の基礎として取り上げられる

ttp://www.ipa.go.jp/security/awareness/vendor/programming/b06_06.html
>>38
またそれが明示的にならないから結構困りもんなんだな。
new,deleteなら一発なんだが。なんか良い方法ないかな・・・・。
CPenやCBrush, CFontを使わない。
Selectしたままならリークするんでねーの。
異常終了だろうと明示的にオブジェクトを削除してなかろうと、
プログラムが終了すれば全部解放される。
初歩的な質問でしょうが御容赦下さい。

起動済みアプリにメッセージを、特に座標を指定したマウスイベントを送る事が目的です。
CWnd *wnd;
wnd = FindWindow("Notepad",NULL);
del->SendMessage( WM_LBUTTONDOWN, xxx, xxx );
などとしてみましたが、3行目SendMessageの引数xxxの部分がわからないのです。
xxxにはメッセージ依存のWPARAM,LPARAMを使えとありますが、どうすれば良いのでしょう?

OnLButtonDownの引数を見ますと押下されている仮想キーと座標(CPoint)がありますが、
これらを適切にWPARAM等に反映させれば良いのでしょうか?(だとしても方法は判らないのですが)
SendMessage、PostMessage等でのググりを行いましたが、結局有用な情報は得られませんでした。

先生方、成すべき事や調べるべきキーワード等ありましたら御教授頂けないでしょうか?
よろしくお願いします
VisualC6でプログラミングしています。
一時ファイルを環境変数TMPで指定されている場所に
作成したいのですが、環境変数の値をプログラム内で
使用する方法を教えてもらえないでしょうか?

GetTempPath
4846:04/05/06 15:02
>>47
できました。ありがとうです。^^
49デフォルトの名無しさん:04/05/06 18:46
よろしくお願いします。
ON_WM_TIMERを使用しておりまして、その中でメインの処理が行われる
アプリケーションを作っています。ここで今回仕様変更により
タイムアウトの処理を作成し、呼び元へパラメタ等での通知を行う作りを
追加しなくてはならなくなりました。うまいタイムアウト処理を作成する方法を
教えてください。mfcです。

どう言う意味でのタイムアウトかな?
>>49
マルチスレッドにしては伺か?
もう一個タイムアウトを計るタイマーを作って
タイムアウト時になったらメインの処理を行ってるタイマーをkillするとか。
53デフォルトの名無しさん:04/05/07 08:01
http://www22.big.jp/~15ch/up/source/ichigo0894.lzh
将棋の棋譜取得toolなんですが、取得アドレスが変更されたため
うまく取得することができません。MFCあぷりけーしょんで作成されている
とのことで検索してc++6というものだそうです。
どなたか
http://internet3.shogidojo.com/dj2/getbook.htmから
http://internet3.shogidojo.net/dj2/getbook.htmに
変更する方法、もしくは変更したものをUPしていただけないでしょうか。
当方アプリケーション開発ソフトがございません。
方法だけでも教えていただけたらと思います。
>>53
作者(或いは管理者)に頼め。
作者(或いは管理者)の許可があるなら変更しないでもないが、無断で変更するわけにはいかない。
5553:04/05/07 08:21
ご覧のとおり、だいぶ昔の一時期にボランティアの方が作成した物でして
リードミーなどにも連絡先はおろか作者名すらありません。
いろいろ検索してみても情報がありませんし、verupが期待できません。
許可を取ることも術がありません。
そこをなんとか・・・
ご覧の通りと言われても既にないけど。<アーカイブ

#あるのは怪しげな写真ばかり(苦笑
5753:04/05/07 08:31
http://www22.big.jp/~15ch/up/source/ichigo0894.lzh
再UPしました。よろしくおねがいします。
>>57
プログラミングの話ではないので、全くの板違い。
club24.exeをバイナリエディタで開いて、'dojo.com'を探してそこを'dojo.net'に書き換えろ。
この説明で判らないなら諦めろ。
5953:04/05/07 08:48
わかった。やってみる
6053:04/05/07 08:58
狐でやってできました。思ったより簡単でした。
アドバイスありがとう。
61デフォルトの名無しさん:04/05/07 11:09
自分でクラスを作って、その中でCString型の文字列を使おうと思ったのですが、
次のようにどちらをincludeしても定義できません。
#include <cstringt.h>
#include <atlstr.h>

どうすれば使用することが出来るようになるのでしょうか?
環境はVC++.NET2002です。
stdafx.hとか・・・
6361:04/05/07 11:22
>>62

EOFエラーが出たので最初にstdafx.hを組み込んで見たのですが、
同様の現象が出てしまいます…
最初にウィザードでMFCプログラムを選択したので、
#include <cstringt.h>
を書けばいいのかな?と思ってはいたのですが、うまく行きませんでした。
stdafx.hだけをincludeしても駄目かな?
VC++6.0だけど今適当にクラス作ってメンバとしてCString型定義して問題無かったけど。
ソース側に定義してる?
6561:04/05/07 11:39
>>64

.hと.cppのうちstdafx.hは.cppのほうにincludeしています。
それでも変数が定義されてない識別子とエラーが出ます。

ちなみに.hでCStringの変数を宣言し、cppのほうで実際に使っているのですが、
それでもよいのでしょうか?
>>65
う〜んそれで良いと思うんだけど・・・。

さっきはヘッダで

private:
  CString m_str;

としておいて

コンストラクタで

m_str = "a";

見たいな事やってみたんだけど。
6761:04/05/07 12:07
>>66

出来ました!
どうも、記述の仕方に誤りがあったようです…。
呼び出すヘッダもstdafx.hだけで済みました。
本当にありがとうございます。
68デフォルトの名無しさん:04/05/07 12:31
VisualC++ 6.0の時 色々種類ありましたよね?

今のVisualC++.net ってパッケージ商品として
1種類しかないようなんですが そのへんどーなってんでしょうか。
6.0の時はプロフェッショナルエディションだと
コンパイル時に最適化が行われてプログラムの実行速度が
違うとか・・ 言われたんですが。

VisualC++.net スタンダードエディションで、
同じような最適化は行われるのでしょうか?
69デフォルトの名無しさん:04/05/07 12:47
>>68 間違ってたらごめん
VC++6.0まではProfessional Edition以上じゃなきゃ最適化はされなかったけど
.NET 2003も同じだと思う
DB絡みもやるから、無理して個人でVS.NET 2003 Enterprise Developer買った
オレはアホです。ホントはEnterprise ArchitectだとMSDN Universalが
付くからそっちが良かったけど、+10万だもんなあ
7068:04/05/07 13:01
>>69
といいますと、C++.net のみのパッケージだとスタンダードしか
ないので、ビジュアルスタジオを買わなければいけないと・・orz
>>68
Standardには最適化コンパイラは付いていない。
Professional以上はVSしか無くなった。

ちなみにVCTools拾ってくれば最適化コンパイラは手に入るが、
最適化関係のコンパイルオプションは手打ちになる。
>>71
> ちなみにVCTools拾ってくれば最適化コンパイラは手に入るが、
> 最適化関係のコンパイルオプションは手打ちになる。

<参考>
タダで使えるVisual C++
http://pc5.2ch.net/test/read.cgi/tech/1082177340/
73デフォルトの名無しさん:04/05/07 18:31
ダイアログ間のデータのやり取りがうまく行かず困っています。

まずダイアログ1とダイアログ2があり、ダイアログ2は1からモードレスで開いている状態です。
ダイアログ2には コントロール変数、int型,, カテゴリは value の変数名 m_edit のエディット用
コントロール変数を作りました。

ダイアログ1でボタンを押すと

UpdateData(TRUE);
int n;
n = daialog2.m_edit;

とエディットに入れられた値をとり、加工をして

daialog2.m_edit = n;
UpdateData(FALSE);

データを更新したいのですが、値の取得も値の代入もうまく行きません。
どうすれば解決できるのか、どなたか教えてください。
環境はVC++ NET2002です。
とりあえず"daialog"っていうのやめたら?
>>73
ダイアログ1のボタンを押したらダイアログ2へSendMessageでユーザーメッセージを
送信してダイアログ2側で計算処理をしてあげたらどうだろう?
7673:04/05/07 19:21
>>74

利便性を考えるとやはりダイアログを利用するほうがいいとおもい、ややこしい?作り方になってしまいました。

>>75

ダイアログ1で入力された値を利用するため、ダイアログ2で計算させるときに同様な現象が出てしまい、
やはり詰まってしまいます。

コントロール変数のカテゴリを control として作ると、GetWindowTextで値を取得できるのですが、
これは文字列として取得できてしまい、計算が出来なくてこまってしまってます。
>>76
>>74はそういう意味ではないと思う。
文字列を数字に変換すれば良い。
>>76
>コントロール変数のカテゴリを control として作ると、GetWindowTextで値を取得できるのですが、
>これは文字列として取得できてしまい、計算が出来なくてこまってしまってます。

これが出来る事が分かってるなら後はatoiなりitoaなり使って文字列←→数値を
相互変換してあげながら処理すれば良いんじゃないかな。
>>78
>>79

いまいちスマートではないのではないかな?
と思ったのですが、データを変換して使うことにしました。
ありがとうございます
configure; make; make install
しかやったことのない漏れに、Visual C++ Toolkit 2003でmakefileから
コンパイルする方法を教えてくれ。
82デフォルトの名無しさん:04/05/07 21:03
すみません、自分でプログラムとか組んだことない門外漢です。
色々ぐぐってみたけどさっくりあきらめました。
ここで聞くのであってるかどうかもわからないんですが、
よかったら教えてください

下のやつって、リソーススクリプトっていうんでしょうか、
VCで使うって言われました。

このテキストを使うとなにがどうなるのか教えてください。
開発の手段じゃなくて、エンドユーザー側からみたときの
アプリケーション(エクセルとかワードとかありますよね)
がなにかってことがしりたいです。

どなたかやさしい人、お願いしまっす!!
8382つづき:04/05/07 21:04
PRINT DIALOG DISCARDABLE 15, 15, 181, 181
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Print"
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "Printer:",1093,6,4,25,8

(中略)

STRINGTABLE DISCARDABLE
BEGIN
ID_COMBO_STYLE "Select Style for selected text region or equation\nStyle"
ID_COMBO_FACE "Select Font for the current selection\nFont"
ID_COMBO_SIZE "Select Font Size for the current selection\nSize"
ID_BROWSE_RELOAD "Reload current page\nReload"
ID_BOOKMARK "Add, edit or display bookmarks\nBookmark"
END
84デフォルトの名無しさん:04/05/07 21:32
Visual C++ 6.0使用でつ。
「座標(30,30)から座標(100,200)に直線を引く」ことをやりたいのですが、
API関数やらなんやらワケわかりません。
WM_PAINTのところにうにゃうにゃ、線を引き終わったら古いペンに変更とか
説明されても意味不明です。お暇な方がおりましたら、この簡単なプログラム
を作っていただけないでしょうか?
この辺はリソースエディタで作ったものがテキストとして.rcに保存されてる内容なんで
通常あまりユーザーが深く理解する必要は無いと思う。
ただこの内容はエディタ上だけでなく、この状態でも勿論編集できるので、
例えばSTYLEのWS_SYSMENUを消すと実際のウィンドウからメニューが無くなったり
FONTの数値を変えてあげればフォントの大きさが変わったりする。
でも普通はリソースエディタ上でいじってあげれば事足りるよ。
87デフォルトの名無しさん:04/05/07 22:03
82です
85様ありがとう

ぜんぜんわかってなくってホントすいません。

PrinterとかReloadとかあるのは
ここに書かれている方法で
印刷、ページのリロードその他するってこと
ですよね、
そいで自分みたいなワケワカメな人間が
最終的に利用するときにはブラウザの使い方
だけわかってればいい、と。

・・・これで合ってます?

要はこのテキストを使って何をしたいかなんだろうけど、
何するわけでもなくただテキストの内容を理解したいならあまり意味無いかと。
リソースエディタでどう編集するとテキストの中身がどうなるのかと
言った事が知りたいなら実際適当にプロジェクト作って色々コントロールを
配置してみたりした方が早い。
>>87
> ここに書かれている方法で
> 印刷、ページのリロードその他するってこと

つーかこのリソースっていうのはプログラムの中身(動きの部分)じゃなくて
インタフェースのデザインのところ。こういうウィンドウにこういう部品を
こういうサイズで配置とかそういうの。エディット・ボックスがあって、ボタン
があってとか。
90デフォルトの名無しさん:04/05/07 23:29
>>88様、ご親切にありがとうございます、82です。

じつはあのテキストがなんでどう使われるのかって
聞かれちゃったのです。
ごらんの通りチンプンなので、
そんな自分に聞かれても、って感じなんですが、
わかんなかったらちょっと調べみてよってことな
ので・・・

私自身はたぶん今後もプログラム自作とは
縁のない生活を送ると思われます残念ですがw
やってみたら楽しいんだろうなとは思うけど
たぶん無理だーw
InsertString
あ、リロードしたら書き込みが。
89さまありがとうございます。



>>90
どう使われているのかと言えばやっぱり>>89かと。
まあそれとは別にプログラミングに興味があれば是非やってみて頂戴。
VC++なら入門書、解説書も沢山出てるしHPは幾らでもあるし。
9468:04/05/08 00:36
>>69 >>71 >>72 さん
レス有り難うございました。

VSとなるとちょっと値段がきついですね。
学生の弟に買って貰うのも手か・・!?

VCToolsの方もちと調べてみます。
9584:04/05/08 01:26
>>86
ありがとうございます。
では、改めて質問させていただきます。
そのページ下部に載っているソースコードで

case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
DrawGr(hWnd, hdc);
EndPaint(hWnd, &ps);
break;

この中でDrawGr()関数を呼び、そこで線を描写していることは分かるのですが、
msg == WM_PAINT となるのはいつなのでしょうか?ファイルを実行するとすぐ
に線が描写されるのですが、それはどうしてなのでしょうか?そう命令している
ようには見えないのですが…。
おながいします。
>>95
ウインドウ再描画のタイミングでWM_PAINTメッセージがポストされる。
低レベルで申し訳ないです。VC++ ver.6 で、ソースファイルの名前を
途中から変更するのは可能なのでしょうか?(出力ファイル名は変更可能なようですが)

いや普通にシェルで変えるのはできるのでしょうが、Makefileその他のファイルの記述も
自動で変更を反映してくれる様な機能が備わっているのかな?という事を御教授頂きたいのです。

よろしくお願いします
>>97
・一旦ビルド-クリーンして中間ファイルを削除
・名前を変えたいファイルをファイルツリー上で削除
・エクスプローラなどでファイル名を変更
・プロジェクトにファイルを追加
・リビルド
VS NET2003を使ってます。

そこでボタンやエディットコントロールなどのプロパティ項目にある Disabled を制御するには
どうすればいいのでしょうか?
本とかには

button->Enabled = false;

とか書いてあるのですが、コンパイルで
button は CEdit のメンバーじゃありません。としかられます
ならば

button->Disabled = false;

等してもやはりだめでした…
ヘルプもどこを参照すればいいのかわからずじまい。

>>99

自己解決しました。

button->EnableWindow(FALSE);

でできました。
となると本に書かれてる Enabled は一体…
>>100
()が付いていないってことは関数処理でなく変数じゃないのかな?
そのクラスにオリジナルのコードでそういう有効・無効を判定するための
メンバ変数を加えてあって、処理コードは別にあるのでは?
10297:04/05/08 14:08
>>98
お返事ありがとうございました!感謝です
スクリーンセーバーの起動のようにアプリの内と外含めて一定時間
ユーザーからの入力が無いか調べたい為
キーボードとマウスをフックしてみたのですが
ほかのアプリがウィンドウを開いた入りすると
フックプロシージャーが呼び出されてしまいます。
いい方法はありますか?
104デフォルトの名無しさん:04/05/09 01:00
>>103
呼ばれること自体まずいのか?
いらんのはプロシージャで弾けば?
10519:04/05/09 11:30
>>20
レスが遅くなりました……。
多分SetMapModeだと思います。
ウィンドウの表示倍率を変更したいのですが(たとえば640*480のウィンドウを320*240に)、
そういった場合はどういった記述をしたらよいのか、よく判らなくなってしまいました。
SetWindowExtExを使うかもしれないことは判ったのですが……どうしたらいいんですか?
106デフォルトの名無しさん:04/05/09 11:58
VisualC++ .NET2003を使用しています。

HWND hWnd=this->panel1->Handle;
の行で
「error C2440: '初期化中' : 'System::IntPtr' から 'HWND' に変換でき
ません。」
とエラーが発生します。どのようにすればよいのでしょうか?

>どのようにすればよいのでしょうか?

エラーはやっている事が間違っているから出る
>HWND hWnd=this->panel1->Handle;

もまえのやりたい事はなんだ?
1)this->panel1->Handleを何らかの変数に格納したいのか?
なら、変数の型が間違っている
2)HWND hWndに何か格納したのか?
なら、this->panel1->Handleではない
108デフォルトの名無しさん:04/05/09 13:06
>107さま
>もまえのやりたい事はなんだ?
ご返事ありがとうございます。
で、やりたいことは、話し長くなりますが・・・
ttp://www.microsoft.com/JAPAN/developer/library/
jpdx8_c/ds/appdev/capture_intro.htm
これをもとにして作ると別のフォーム(ダイアログボックス?)
に、動画がでてきます。
任意のpictureBoxまたはpanelに動画をキャプチャできないかなぁ
と思っています。
そして、どうすればいいのか分からず、
IVideoWindow *pVidWin = NULL;
pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVidWin);
HWND hWnd=this->panel1->Handle;
pVidWin->put_Owner((OAHWND)hWnd);
というのを追加したら、エラーがでました。
根本的な考え方が間違えているかもしれませんが・・・
とりあえず reinterpret_cast<HWND>(this->panel1->Handle)
110デフォルトの名無しさん:04/05/09 16:23
ご返事ありがとうございます。
どういう意味か頑張って調べてみます。
reinterpret_cast<HWND &>(pictureBox1->Handle);
でただいまチャレンジしています。
C++ で構造体を動的メモリ確保したいのです・・・・(構造体を配列でn個)
C で malloc して realloc する様なイメージなのですが、良い方法ありますでしょうか?

環境は、VC++6.0Pro、Windows2000+サービスパック5 です。
new,delete
>>112
早速の回答ありがとうございます。
new でサイズの変更はどのように行うのでしょうか?

いま、調べて vecter と言うのがあったのですが・・・
他ルーチンへ引数として渡そうとするとコンパイルエラーになってしまいます。
(書き方がわるいのか???)
おまえらC++の本くらい読んでから質問しろよ
>>113
をいをい・・・new, deleteってのはこういう感じで使ってくれい。

char* buf = new char[1024];

これで動的にchar型の1024個の配列を確保。

delete[] buf;

これで確保した配列を解放。

構造体でも記述方法は基本的に同じ。
>>115
1024バイトの領域を確保するのならいいのですが、

struct test{
・・・
};

で test 構造体を 条件によって複数個、配列で持ちたいのです。

C表現なら

struct test *aaa;
a = (struct test *)malloc( sizeof(struct test));
で5個に変更したければ、
a = realloc( sizeof(struct test) * 5 );
のような意味です。
117116:04/05/09 17:36
a = realloc( a, sizeof(struct) * 5 );
の間違いです。
う〜んそれはnew, deleteじゃ無理くさい?
>>116-117
せっかく教えてもらったんだから new, delete を
もうすこし調べてみてはどうだろう。
>>116
charをstructで読み替えれば良いだけでは?

new-deleteくらいはC++の基本書式なんだし
とりあえず参考書でも一通り読んでくれよ
どうしても調べる気がないならC++スレでやってくれ
>>111は動的にメモリを確保したいと言うより確保量を動的に変えたいのだと思われ
そんなもんnew test[ここを好きな数字にしろバカ]
っていうか、malloc/realloc じゃだめなのか?
>>116
可変長配列ならvectorでいいじゃん。
頼むからCObArrayだけは使わんでくれ。
猫のSDK編第1部第6章のメニューの作り方を解説しているところがわかりません。
「さて、VC++4.2ではこのリソーススクリプトをプロジェクトに挿入する必要があります。「挿入」「プロジェクトへファイルを追加」を選択して sample02.rcを追加して下さい。 」
というところです。
新規作成でリソース・スクリプトを作っても英文を打つ場所がでてきません。
どうすればいいんでしょうか?
環境は6.0です。
127111・116:04/05/09 18:03
みなさん、色々な回答ありがとうございます。
>>124 さんがおっしゃる様に、realloc使えました。(使えないと勘違いしました)
時間を見て vector でも試してみたいと思います。(関数引き渡しで怒られる件)
>>126
IDEなんかに頼らずに、自前のエディタ使ったら?
さもなきゃnotepad.exeとか。
>128 スレタイ読めんのか?
>>126
テキストディタでsample02.rc作って(コピペして)プロジェクトに追加汁
でなけりゃ既存のrcファイルをテキストモードで開け
>>126
プルダウンメニューの
[ファイル]→[開く]
ここで、ダイアログの一番下にある
[用途] を [テキスト] にして
*.rc を選択すれ
132126:04/05/09 20:30
ありがとうございました。
出来ました。
133128:04/05/09 22:12
>>129
読めてますが何か。
#それともIDEとエディタを連携させちゃいけないとでも思っているのだろうか。
134126:04/05/09 22:17
>>128-131
ありがとうございました。
無事できました。

>>132
何で俺のふりを・・・。
135103:04/05/10 01:32
>>104
弾く為のユーザー入力かそれ以外か区別をどこですればいいのか不明です。
スクリーンセーバーの起動のように
ユーザーが直接入力操作していない時間を知りたいので
他のアプリの動作によって
フック関数が呼び出されてはまずいです。
フックを使うべきではないのかも
入力のアイドリング時間を知る方法として何か API があるのかと思い調べてみたのですが
無いのか、見つけ損ねているのか
136デフォルトの名無しさん:04/05/10 03:54
VC7.0でDirectX8.0SDKを使ってます。
グローバル変数の宣言を今より増やすとデバックで、「場所0x----------を読み込み中にアクセス違反が
起こりました」とエラーになり、ソースエディタで矢印が指している行にあるのは新たに追加した変数とは無関係な
メモリを確保するAPIなどです。
グローバル変数の総量は2kぐらいです。十分なメモリは積んでいます
何が悪いのでしょうか?
コードが悪い。

原因は特定できないが、一例として配列のオーバーアクセスとかじゃないの?
新たに追加した変数が云々じゃなくてさ。
今までは、メモリレイアウト的に偶然動いてたみたいな。
VCでとあるオープンソースソフトのビルドに挑戦したのですが
「logbが定義されとらん」と怒られてしまいました。
それでDevasで検索したりしたけどうちの環境に入ってないのか
logbを定義しているヘッダファイルが見つかりませんでした。

というわけで
VC用のヘッダファイルでlogbが定義されてるのは何でしょうか?

gccのmath.hにあるのは知ってるんですが
無理矢理VC用のmath.hにコピペしてもやっぱり駄目だったので。
>>138
MSDNで「logb」検索したけど0件。
存在しないんじゃ・・・
140138:04/05/10 08:11
がーん。
すっかりMSDNの存在を忘れてました。
IntelC++では使えるみたいなので
仕方なくIntelでやることにします。
141デフォルトの名無しさん:04/05/10 10:14
いまから時代遅れのC++始めるんだったらC#にしろと。
次期WindowsでWinFXという次世代APIIが出るんだ。
もうWin32の時代は終わりなんだよ。
もってもあと2年かな?こんな将来性の無いAPI&言語なんてやってられねー

さっさとマネージドアプリ(.NET Framework専用アプリ)に転換しろ
俺はお前らの将来のために言ってるんだからな
VC++もマイクロソフトは仕方なくリリースしている状態。いわばVBより格下。
格下ってなに?
放置しろや
C#使い道ねぇよ('A`) .NETアプリの需要って・・・
>いわばVBより格下

┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨┣¨
146136:04/05/10 21:47
>>137
配列のオーバーアクセスとは何でしょうか?
コードはサンプルに手を加えていった感じで自分ではどこで使い方が間違っているのかが
よく分かりません。配列をどのように使うとこういうことが起きるのですか?
int n[10];
n[9] = 9; // OK
n[10] = 10; // NG
n[11] = 11; // NG

for(int i = 0; i < 20; ++i)
 n[i] = i; // NG
おまえらよくスレ違い煽りにレスする気になるよな
151136:04/05/11 00:01
>>147
それはしてないです。
問題点を特定できる方よろしくおながいします
>>151
ソースも晒さんと、それ以上問題点を特定できるか、ボケ!!
ほぼ間違いなく、書いてはいけない領域に書き込んでる。以上。
153136:04/05/11 00:53
オーバーアクセスしてますた
ごめんなさい
154中国人就学生:04/05/11 01:58
オーバーステイしてました。
ごめんなさい。
155デフォルトの名無しさん:04/05/11 10:15
最近VC++を始めてクラスの概念とかはなんとなく分かってきた。
しかしMFCって難しいね。自分が使いたい機能がどのクラスのメンバ関数なのか
とかって全部覚えなきゃならないんですか?
どのオブジェクト(部品)を使いたいかだけ覚えればいい。
そうすりゃ、そのオブジェクトにどういう操作をしたいかってのは
メソッド一覧を見れば簡単に理解できる。
>>155
> 自分が使いたい機能がどのクラスのメンバ関数なのか

順序が逆。クラス体系が先で、その後でどういう機能が使えるかという順。
158デフォルトの名無しさん:04/05/11 14:53
質問があります。

ダイアログクラス(aaa.cpp)で定義されたメンバ変数を他のクラス(bbb.cpp)から変更することは
できますか?

クラスの概念をよく理解していないのです。

VC6.0を使用しています。
メンバ変数を他のクラスから変更とは
メンバ変数に他のクラスからアクセスして
値を代入したいということか?
>>159
そうです。解りづらい書き方ですみません。
161デフォルトの名無しさん:04/05/11 16:29
VC++で正規表現のライブラリってあるんですか?
ないとしたら、どのライブラリを皆さん使ってるんでしょうか?
LEIRegExpというライブラリを使ってみたんですが、
多重定義のエラーが出てコンパイルできません。
Boostも相性悪いみたいだし・・・
>>160
aaaのメンバ変数がpublicなら自由に変更出来る。
privateならaaaクラスの中からしかアクセス出来ない。
protectedの場合はbbbがaaaの派生クラスならアクセス出来る。
こんな感じかな。
よく分らないならとりあえずpublicにしておけば良い。
詳しいことは164が答えてくれる。
163デフォルトの名無しさん:04/05/11 18:15
VisualStudio.NETでC++で利用のプログラムを作成しようとしています。
複数のTEXTBOXでフォーカスのあるコンポーネントのフォントを変更する
コンボボックスを作成しようとしています。
TEXTBOXの利用可能なフォントを取得するためにEnumFontsを利用しての
コンボボックスへの登録を考えていますが、コンボボックスへのポインタ取得のための
IDがデザインでのプロパティ表示中にありません。
何かIDを取得する方法はないものでしょうか?
164デフォルトの名無しさん:04/05/11 18:22
MFCならモードレスダイアログを使ってはどうでしょう?
モーダルダイアログだとDoModalを実行すると他のウィンドウ
から操作ができません。
モードレスダイアログを作成するにはCreateを使います。
デフォルトでは非可視の状態ですので注意して下さい。
>>161
VC7.1 なら ATLサービスに正規表現クラスがある。
>>161
.NET Framework にも正規表現クラスがある
SetTimer で 1ms を指定したのですが、GetLocalTime で時間をとって見ると10ms程経っています。
SetTimerで指定できる時間って1ms単位ではないのですか?
1ms単位では指定できないと考えたほうが今後のため
精度が良くないわけだ。
時間のかかる処理中に、モードレスのダイアログを表示しているのですが、
うまくいきません。
ダイアログは、ボタンが一つだけついているのですが、枠だけ表示
されてボタンが表示されないのですが、なんででしょうか。

マルチスレッドとかにしないとだめなんでしょうか。
↓エスパーの方、どうぞ。
アプリケーションの終了ボタン(右上の×)をクリックすると処理はどこへ飛んでくるのでしょうか?
また、それは定義できるのでしょうか?
OnDestroy でOKですか?
WM_CLOSE
エスパーの人お願いします。
>>169
時間のかかる処理ではマルチスレッドを使うのが望ましい。
しかし PeekMessage を使ってもいい場面もあるとは思う。
http://cgi.members.interq.or.jp/gold/marken/
ここの過去ログで PeekMessage を検索すればいろいろ出るかな。
>>167
SetTimer で期待できるのは 20ms くらいとどこかで見た気がする。
177169:04/05/11 21:55
>>175
ありがとうございますエスパーの人。
調べてみることにします。
178デフォルトの名無しさん:04/05/11 22:07
>>169
((CButton *)GetDlgItem(IDC_xxxx))->ShowWindow(TRUE);
179169:04/05/11 22:17
>>178
なんですと?
つまりコントロールの一個一個を見えるようにしろと?
そうだったんですか。
どうもありがとうございます。
あ、ちがってたか。
>>169
まあマルチスレッドでやるのが結局簡単な気がするね。
182175:04/05/11 23:35
ですね。
スレッドを生成して処理を行う方法も、一度覚えてしまえば簡単です。
183169:04/05/12 00:16
わかりました。これまで避けてきましたが、マルチスレッドで
やってみることに致します。
どうもありがとうございました。
managed C++でプログラム組んでる人います?
さすがにATL/WTLはもう寿命かと思い、別のものを使おうと思うんですが
今からやるならMFCとnamaged C++どっちが良いんですかね?
MC++ならC#の方がいいだろうが
MFCにも未来なんてないんだし
>>184
もうちょっとそれぞれについて調べてから質問しようや
デバッグ時に

例外処理 (初回) は app.exe (MSVCRTD.DLL) にあります: 0xE06D7363: Microsoft C++ Exception

という警告がやたらに出てアウトプットが埋め尽くされてしまうのですが、
この警告を消せませんか?
検索してみたんですが、それらしいものが見つかりませんでした・・・
188163:04/05/12 10:13
反応がない…
かなしい…しくしく
質問の仕方が悪かったのだろうか?
189デフォルトの名無しさん:04/05/12 10:38
VC6で、ワークスペースウィンドウ上でHogeフォルダにHoge.hがあるのに、
Include "Hoge/Hoge.h"で通りません。どうすればいいのでしょう。

ワークスペースウィンドウ上でフォルダの新規作成をしても
実際の位置(全ファイルがあるフォルダ)にはフォルダができていなく、
また逆に、実際の位置でフォルダを作成しても
ワークスペースウィンドウ上では表示されていません。
プロジェクトに追加でもフォルダは追加できないみたいですし。
190189:04/05/12 10:39
>>189
2行目は #include "Hoge/Hoge.h" です。
191デフォルトの名無しさん:04/05/12 12:26
DAOで特定のフィールドを主キーに設定するには、
どうすれば良いでしょうか?
>>189
プロジェクトの設定 -> C/C++ -> カテゴリ:プリプロセッサ -> インクルードファイルのパス -> (゚д゚)ウマー
193189:04/05/12 14:40
>>192
ありがとうございます。見つかりましたのでやってみます。
194167:04/05/12 14:50
SetTimer だと分解能が粗すぎる(Win9xで55ms、Win2Kで10ms)ので
マルチメディアタイマを使って見ようと思いました。が問題発生!

timeSetEvent( 1,          // 間隔[ms]
0,          // 分解能
TimerEvent,    // 割り込み関数
0,          // ユーザーパラメータ
TIME_PERIODIC | TIME_CALLBACK_FUNCTION // 動作フラグ
);

を試みると、
Error C2664 error C2664 3番目の引数を変換できません
となってしまいます。
誰か解決方法わかる方、教えてください。
>>194
>解決方法
マニュアルを読む。MSDNで調べる。
>>194
TimerEventはコールバック関数になってる?
197デフォルトの名無しさん:04/05/12 20:22
本日近所のラオックスでvisualc++6.0standard edition を買ってきました。
本屋で林晴比古のス-パ-ビギナ-編、ビギナ-編、高橋麻奈のやさしいc++
も買ってきました。わからない所があれば質問するのでおながいしまつ。
>>197
釣り?
まだ売ってるの?
なんで今さら6.0 ?
業務で使用するため互換性が必要だたとかじゃないなら、変なクセがつくだけ。
ほんとに買ったの?
>>167
関数TimerEventの宣言どこでやってますか?
グローバルにするとか、
クラス内なら static を使うとか・・・。


200デフォルトの名無しさん:04/05/12 23:36
スレ違いかもしれませんが質問ですー

c→c#への移植作業中なんですが

#define CMDSEPA "\1"

って行がありまして・・・・"\1"ってなんですか?
1
>>200
1
203200:04/05/12 23:47
ありがとうございますーーーー
MFCを使わずにドッキングバーを作成したいのですが
何か参考になるようなURLなどを教えてもらえないでしょうか。
MFCはソースが見れたんじゃなかったけ?
206デフォルトの名無しさん:04/05/13 22:36
ある配列(配列の数はxの平方数)に0〜256の間の値が記憶されています。
この値をそのままモノクロBMPの白黒に対応させてBMPファイルを保存したい
と思っています。BMPファイルのヘッダーを書き込んでから1bitずつwriteしていっても
いいのですがそれだと結構面倒でたまに間違ったりしてしまいます。

どなたか配列の値を繁栄させたモノクロBMPファイルを保存してくれる関数かクラスを
公開されているかたはいらっしゃらないでしょうか?
207コンパイル警告:04/05/13 23:03
VC++6.0でSTLの勉強をしてるのですが、
意味不明なワーニングが出て気になってしょうがないです。
コンパイルには支障ないのですが…

Win32 Console Application を新規作成して、
--------
#include <iostream>
#include <vector>
#include <string>

using namespace std;
typedef vector<string> strings;
void main()
{
strings a;
a.push_back( "1行目" );
cout << a[0] << endl;
}
--------

をコンパイルすると、いやに長いメッセージが出ます
これって何なのでしょうか?

208コンパイル警告(その2):04/05/13 23:05
(続き)

以下、メッセージです

D:\dev\vc\テスト・学習用\STL_vector\STL_vector.cpp(20) : warning C4786: 'std::reverse_iterator<std::basic_string<char,std::char_traits<char>,
std::allocator<char> > const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::bas
ic_string<char,std::char_traits<char>,std::allocator<char> > const &,std::basic_string<char,std::char_traits
<char>,std::allocator<char> > const *,int>' : 識別子が '255' 文字に切り捨てられました (debug 情報内)。
D:\dev\vc\テスト・学習用\STL_vector\STL_vector.cpp(20) : warning C4786: 'std::reverse_iterator<std::basic_string
<char,std::char_traits<char>,std::allocator<char> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_str
ing<char,std::char_traits<char>,std::allocator<char> > &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *,int>' :
識別子が '255' 文字に切り捨てられました (debug 情報内)。

(以下同じようなメッセージがえんえんと続く…)
209コンパイル警告(その3):04/05/13 23:06
(続き)

ちなみに、警告にある20行目とは、main の閉じカッコの行に相当します
MSDNでC4786を検索すれば答は見つかる。
211コンパイル警告(結果):04/05/13 23:23
ああ…なるほど、テンプレートの関係で識別子が長くなったってことですね。
MSDNのサンプルの通り、コードの先頭に

#define reverse_iterator R_
#define basic_string B_
#define allocator A_
#define vector V_

を付けて無理矢理短くなるようにしたらうまくいったのですが…
なんか、こう、しっくりこないですね、これって…
#pragma warning( disable : 4786 )
で抑止するって手もあるよ。
>>206
1bit ずつはやりたくないなぁ。

とりあえず CreateDIBSection あたりなのかな。
214デフォルトの名無しさん:04/05/14 01:34
すいません、C++.netの初心者向けに解説されているサイトを教えて下さい。
仕事柄、8ビット値を256諧調グレー画像に変換(或いはその逆)するのはよくやるけど、
値域が0-256なんてのは見たことないや。
>>206
モノクロDIB生成>そいつにBitBlt
で出来ねーかな。
エクスプローラ上で表示される、アプリケーションのアイコンを変更したいのですが、
検索して調べた方法によると、
MFCのダイアログベースのアプリケーションで、

16x16のアイコンを作成した後、CxxxApp::InitInstanceで
HICON hIcon = AfxGetApp()->LoadIcon(IDI_ICON);
AfxGetMainWnd()->SetIcon(hIcon, TRUE);// 大きいアイコンを設定
AfxGetMainWnd()->SetIcon(hIcon, FALSE);// 小さいアイコンを設定

とやってビルドすれば変更できるようなのですが、
やってみてもできません。MFCのアイコンが表示されてしまいます。
なんで変更できないんでしょうか・・・。
肝腎のアイコンのIDを間違ってたりして。
>>217
> エクスプローラ上で表示される、アプリケーションのアイコンを変更したいのですが、

それは外部プログラム(エクスプローラ)から利用されるものなんだから
キミのプログラムのプログラム・コードじゃなくてリソースの問題。コード
をいじって変更できるのは、プログラム実行時のウィンドウに割り当てら
れるアイコン類。

要するにだ、外部参照のリソースとしてのメインフレーム・アイコンは
IDR_MAINFRAMEというIDで割り当てられているものが使われるように
なってるので、それを変更してやらないとダメ。
エクスプローラがデフォで表示するアイコンは
リソース中の最初のアイコンじゃなかったっけ?
>>218-220
レスありがとうございます
自分で新規IDのアイコンを作成して、それを読みこむようにしてたつもりだったのですが、
>>219さんに言われた通り、IDR_MAINFRAMEの方を変更したらきちんとアイコンが変更されました。
ありがとうございました。
質問です。解決方法を探しています。

VisualC++6.0でデバッガを使用すると強制終了するようになりました。
デバッガが終了した時点でVCが落ち、その後すべてのアプリケーション
(メモ帳、エクスプローラ等)が「アクティブになった瞬間」落ちるようになります。
※落ちるのはデバッガ使用時に起動していたアプリケーションのみです。

下記のコードをコンソールアプリケーションとして作成・デバッグした場合、
MessageBoxがとおる前にデバッガを停止させると上記の問題は発生しません。
#include "windows.h"
#include "stdio.h"
int main(int argc , char *argv[])
{
  printf("HELLO WORLD");
  MessageBox(HWND_DESKTOP, "HELLO WORLD", "Test Application", MB_OK);
  return 0;
}

環境
Windows98SE(アップデートは頻繁に行っている)
Microsoft VisualC++6.0 SE(修正パッチなし)
NEC LavieNX LW45H/23DR モバイルCeleron450MHz メモリ128MB HD12GB

試したこと
OSのアップデート、VCの再インストール、常駐アプリケーションの削減
VCのアップデートはMSのサイトが混雑しているので後日再挑戦します
>>222
VC詳しくないんだけど、MessageBox()の第一引き数がものすごく怪しい。
何故そんな値を使っているのかがわかれば解決しそうな気がしないでもない。
>>222 を俺の環境でやってみたけど無問題
W2k VC6.0
でも第一引数は NULLでえーやんと思うが・・・
225222:04/05/15 19:24
ありがとうございます。
コードは掲示板に書き込む目的で作成したもので、GUIを利用した場合のみ
問題が発生することを検証した結果でもあります。過去に作成したプログラム
やネット上のサンプルもデバッグできない状況です。
OSの動作は非常に安定していますが、リカバリしてしまうかどうか悩むところ。

ちなみにHWND_DESKTOPの正体はNULL値です。紛らわしい固定値を使っていて
申し訳ありません。
オーナードローでボタンを描画しているのですが
いまいち反応が悪い気がします。
今やっている方法はWM_DRAWITEM命令が来たら
ボタンの状態を見て、すでに読み込んだビットマップを
貼り付けているんですが、WINDOWS通常のボタンと比べて
だいぶ反応が悪い気がします。
なにかオーナードローでの処理を軽くするための方法とか
あるんでしょうか?教えてください。
VC++6.0で簡単な2次元の絵をコンテナ上に表示させるプログラムを
作ろうと思っています。絵の元データは2次元行列に格納されたdouble型
の数値です。この数値の値に従って色を配色して2次元行列を視覚的
に見てみようと思っているのですが、このようなことを解説している
本やサイトはありますでしょうか?VC++の入門書を読むとグラフィックス
の表示方法に関しては軽く触れられているものが大多数でした。
228222:04/05/15 23:07
気を取り直してWindowsXPのパソコンでプログラミングを再開しましたが、
今度はマルチスレッドを使ったとたんにOSごと固まる・・・もうやだ。

>>227
サイトは知らないけど、たとえばCreateDIBSectionで32bitビットマップを
作成すれば画像をint型配列のように操作できるから、これをキーワードに
検索してみてはいかがでしょう。
>>227
やりたい処理は、自分で作成したピクセル情報をどこかに格納しておいて
描画、という流れになるわけだね。それなら、DIBを使うのがよさそう。
処理速度にこだわらないなら、普通のBITMAPにSetPixelしていってもよい
かもしれんがw

DIBや画像周りの処理に関してはこことか

http://www.sm.rim.or.jp/~shishido/
>>226
たぶんそれダブルクリックを拾っちゃってるんじゃないかと。
ダブルクリックのメッセージを拾ったときもシングルクリックと
なるようにすればよいです。
231230:04/05/16 00:05
WM_LBUTTONDBLCLK メッセージのハンドラを作って、
WM_LBUTTONDOWN を SendMessage してやればよいです。

void CMyButton::OnLButtonDblClk(UINT nFlags, CPoint point)
{
SendMessage(WM_LBUTTONDOWN, (WPARAM)nFlags, MAKELONG(point.x, point.y));
CButton::OnLButtonDblClk(nFlags, point); //←コメントアウトかな〜?
}

MFCだとこんな感じでしょうか。基底クラスのハンドラを呼ぶか
コメントアウトするか、どっちがいいんでしょうかねぇ。
どっちでもいいか?
232230:04/05/16 00:06
・・・って、クリックの反応が悪いとはどこにも書いてないな。
描画が遅いんですか?
>>228
VS6はXPでデバッガ使うとダメっぽい感じ。
2KとかWinDbgとかなら大丈夫かもしれない。
234227:04/05/16 00:19
>>230さんの言ったようにBN_DBLCLKを検出してみたところ
確かに、動作が鈍かったときはダブルクリックだと判断して
ボタンのステータスが変わらなかったためだったようです。
で、>>231やダブルクリックメッセージの処理とかについて
がんばって調べてみます。
ありがとございました。
235227は私だが・・・:04/05/16 00:24
>>228-229
ありがとうございます。
おかげさまでDIBに関して詳細に紹介されているサイトを見つけるとが出来ました。
236234:04/05/16 00:39
>>235
すみませんでした・・・
>>234>>226のまちがいです・・・

237234:04/05/16 14:40
>>230さんの方法でいろいろ調べてみました。
私はSDKでプログラムを作っていて、ウィンドウスタイルでダブルクリックが
検出されない設定だったので、WM_COMMANDでの各ボタンの
BN_DBLCLKを検出してBN_CLICKEDに変えたメッセージを送ってみたんですが、
相変わらずでした。orz
で、届いているメッセージを表示するようにして、調べたところ、
やはり、ダブルクリック時にWM_DRAWITEMメッセージがでていない感じ
だったんですが、SDKでは、>>231みたいな各ボタンに対する
WM_LBUTTONDOWNとかはどうやって作ったらいいですか?
ホントダメですんません。。。
http://www.kumei.ne.jp/c_lang/intro/no_54.htm
ここで使われてるコンパイラ古くて、
今使ってるVC++6.0じゃライブラリの作成や追加の手順が分かりません…('A`)タスケテ…
>>238
マニュアルくらいは読んでから、下調べくらいはしてから聞こうね。
240234:04/05/16 17:18
サブクラス化することで、各ボタンに対してのメッセージを処理することができました。
それで、また新しい質問なのですが、
似たような動作をするボタンがあったときに、
それら全部に対してある動作をしたいために、サブクラス化したんですが
全ボタンに対して一つずつボタン処理の手続きを作るのは大変だったので
一つだけつくって、デフォルトの時は一つ目のボタンと同じように動作するよう
設定しました。
見た感じでは動作には問題ないようなのですが、ほかのボタンのプロシージャ
を使って処理してしまって見えないところで問題とか起こらないでしょうか・・・?
それとも、ボタンのプロシージャは基本的に同じことをやってるので問題ないですか?
1.サングラス化って何?
2.ウンコって苦いの?
242デフォルトの名無しさん:04/05/16 23:48
>106〜>110でお世話になっていたものです。
古い話なのですが、
>106〜>110に関連していまして、
pictureBox1にUSBカメラの動画が流れている状態にはなったのですが、
任意の場面で、動画を一旦止めて、その画面を別のpictureBoxにコピーし
保存したいと思い、
pControl->Stop();
pictureBox2->Image=pictureBox1->Image;
pictureBox2->System::Drawing::Image::Save("d:/testZ.bmp",System::Drawing::Imaging::ImageFormat::Bmp);
というのを書いたのですが、

error C2039: 'System' : 'System::Windows::Forms::PictureBox' のメンバではありません。
error C2663: 'System::Drawing::Image::Save' : 5 オーバーロードに 'this' ポインタのための正しい変換がされていません。

となります。
基本的なところが理解できていないので、前にすすまないようです。
ご指導お願いします。
VC++ .NET やってる人って、このスレにいるのかなぁ……

とりあえず原因は、
class PictureBox に System::Drawing::Image::Save というものが無いからだと思う。

ファイルに保存したいのであれば、
pictureBox2->get_Image()->Save(〜);
とかやればいいんじゃないの?
C# で少し .NET 触っただけだから、あまり自信ないけど。
244デフォルトの名無しさん:04/05/17 10:12
ツリー コントロールで、既定のアイテムをその子アイテムを
引き連れたまま移動させるには、どうすれば良いでしょうか?
全部手で書くしかないのよねぇ・・・
既存のアイテムをコピーして、その場所にあったのを削除して、移動先に挿入する。
246デフォルトの名無しさん:04/05/17 10:33
では早速、VC++.NETでの質問を
ダイアログボックスで画面を切り替えながら処理を進めていくプログラムを作成しようとしています。
やり方として親のダイアログボックスを作成、各画面をその子供として作成しながら、
画面を進ませるにつれて前の画面を非表示にする。という手法を使っています。
ここで、各画面のラベルボックスにコードでテキストを表示させようとしています。
各画面のコンストラクタにてテキストをTextメンバに代入したのですが、最初のRunで
実行した画面のテキストは表示されたのですが画面を切り替えたあとの画面の
テキスト表示がされません。
Textメンバへの代入のコードは実行されているのですが…
どなたか助けてプリーズ
247デフォルトの名無しさん:04/05/17 10:40
古いツールの話で申し訳ないのですが、
InstallShield for Microsoft Visual C++ 6 を使って、VCで作ったアプリのインストーラを作ろうとしています。
アプリのバージョンが古かったときにレジストリを削除する処理と、アンインストールしたときにレジストリを削除する処理をそのインストーラに組み込みたいのですが、どう書いてよいやらさっぱりわかりません。
SetupRegistry()に書くのだろうということまではわかったのですが、そのスクリプトの書き方がわかりません。
InstallShield for Microsoft Visual C++ 6という本を発注してはみたものの、絶版の疑いもあるくらいでいつ届くかもわからず、かつ早急に必要なことでしたのでここに質問させていただきました。
もしご存知の方がいらっしゃったらどのようなスクリプトを書けばいいのか教えていただけませんか。
インストーラー相談室ってあったよね
249デフォルトの名無しさん:04/05/17 11:24
>>248
今もありますか?
適当なスレが見つからずここに書いたのですが・・
なんでスレ一覧で検索しないの?
251247:04/05/17 11:37
本当だ・・
InstallShieldなどで検索して出てこなかった時点で諦めていました。
あちらで聞いてみます。
>>246
UpdateData()しなさいって話なのかな?
253デフォルトの名無しさん:04/05/17 11:46
ここでももしおわかりの方がいたら教えていただけたら幸いです。
ありがとうございました。
254デフォルトの名無しさん:04/05/17 12:06
ダイアログを新たに作ってそこにエディットボックスを配置したとき、
ダイアログウィンドウのサイズが変わったら、エディットボックスの
大きさも変わるようにするにはどうすればいいのでしょうか?
255246:04/05/17 12:39
>>252
UpdateData()はやってみましたがだめでした(テキスト表示されませんでした)
ちなみに実際の画面の切り替えは次のようにしています

BaseForm *next = new pend();
this->GoNext(this);

void GoNext(BaseForm *current) {
current->next->Show();
current->Visible = false;
}
MoveWindow
257254:04/05/17 16:04
>>256

ご指摘のとおり WM_SIZEでメッセージを受け取りMoveWindow でサイズを変更することが出来ました
ありがとうございます。
258デフォルトの名無しさん :04/05/17 18:32
かなり初歩的な質問だと思うのですが・・・

最近、複数人でVCでアプリ開発を行い、同名のプロジェクトでそれぞれ作成をしました
そして、それを1つのプロジェクトにまとめたいと思っているのですが、まとめる方法と言うのが分かりません。

プロジェクトをワークスペースに挿入を行おうとしても、同一プロジェクトなので行えません
プロジェクトの統合方法がありましたら教えてくださらないでしょうか
>>258
どっちかってーと初歩的なミスだな。

.NET は知らんが、VC++ 6.0 ならプロジェクトファイル (.dsp) はテキスト。
メモ帳かなんかで開いて、プロジェクト名を一括置換しる。
VC++ 6.0でキーボードの設定をカスタマイズしたんですが、
これを別のパソコンに持ち運ぶことって出来るんですか?
いちいち手作業で設定するの面倒です。
すいません
>>8はどうすればよいのでしょうか
>>261
プロジェクトのプロパティページを開く。
以下、同様に。
VC++6.0で質問です。
ファイルを保存するコモンダイアログを出したいのですが上手くいきません。

具体的には、
char filename[256];

OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(ofn));

ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWnd;
ofn.lpstrFilter = "BMPファイル(*.bmp)\0*.bmp\0全てのファイル(*.*)\0*.*\0\0";
ofn.nFilterIndex = 1;
ofn.lpstrFile = filename;
ofn.nMaxFile = sizeof(filename);
ofn.Flags = OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY;
if(!GetSaveFileName(&ofn)){
return;
}

このコードで、そもそもダイアログが表示されません。
CommDlgExtendedError()でエラー値を見てみると、
0x0002、CDERR_INITIALIZATION:初期化の際にコモンダイアログボックス関数が失敗しました。
・・・らしいのですが、いろいろなページを見ても
OPENFILENAME構造体の初期化におかしなところはないように
思えて、原因がさっぱりわかりません。
上のコードではBMPを指定していますが、これは例なのでなんでもかまいません。
他の形式にしても結果は同じでした。
どなたか原因をご存知でしたらご教授ください。
よろしくお願いします。
264263:04/05/18 01:30
すみません、上の質問ですが
nMaxFileをMAX_PATHにしたら
普通にダイアログがでてきました。
恥ずかしい・・・
265263:04/05/18 01:35
filenameを初期化しておいたら
MAX_PATHでなくても動きました。
原因が理解できました。
馬鹿な質問で汚してすみませんでした。
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(ofn));

これって

OPENFILENAME ofn = {0};

これでもいいんだよね?処理系依存でしたっけ?
267489:04/05/18 22:48
1^2+2^2+3^2+・・・+n^2を計算するのを作りたいんですが

#include <stdio.h>

int main(void)
{
int a,b;

printf("整数を入力してください。>>>");
scanf("%d",&a);

while(a>0)
{
b=a*a;
a=a-1;

}

printf("答え%d\n",b);

return 0;
}

答えが全て1になります。どこがへんでしょうか?
while(a>0)
{
b=a*a;
a=a-1;

}

の部分がたぶんおかしい
b+=a*a;
270正解:04/05/18 22:58
int main(void){
int a,b=0;

printf("整数を入力してください。>>>");
scanf("%d",&a);

while(a>0)
{
b +=a*a;
a=a-1;
}

printf("答え%d\n",b);

return 0;
}
271267:04/05/18 23:00
解決しました。ありがとうございます。
>>266
それでいいよ
プロファイラを使いたいんですが、
ビルド>プロファイルをクリックして、プロファイルのタイプを選ぶダイアログを出す所まではできるんですけど、
そのあと、例えば "関数のタイミング" にチェックをいれてOKボタンを押しても、何も起きません。
どうしたらプロファイラが使えるのか、教えて下さい。
Visual C++のヴァージョンは、Standard Edition 6.0です
/profile
275273:04/05/19 07:01
すいません、Standard Editionにはプロファイル機能はついてないようです・・・
すみません、技術評論社・「はじめてのC++」というのを購入したのですが、
HelloWorldのコードに
#include <iostream.h>
cout〜
というのがあり、前スレにありましたがVS.net2003にはiostream.hが存在しないようで、以降の内容に取り組めません

選ぶ本を間違えますか?
#include <iostream>

そして std::cout とかするか、
using namespace std;
とか、書いておきましょう。
278デフォルトの名無しさん:04/05/19 21:57
SetPixelVとSetPixel
って何が違うの?
実際に塗りつぶされた点のカラー値を返さないので、SetPixelV 関数は SetPixel 関数より高速に動作します。
>>279
なるほど。
thx!
>>276
はっきり言って、選ぶ本を間違えてます。
#include <iostream.h> などという「古い」ことが書いてある本は捨て。
たしかにそれでもC++が学べないわけではないが、規格が固まる以前の仕様で書かれた本じゃ、学習の妨げになる。
282276:04/05/19 22:20
>>277
即レスありがとうございます。
#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World!\n";
return 0;
}
で無事解決しました。using namespaceが最初の行だと駄目なんですね。
std::coutのほうはめぼしいところに入れてもエラーが出てしまいました。
C#だとusing System の Console.WriteLine("Hello World!")だけでいいのにC++は難しいですね。
意味がまだわかりませんが精進します。ありがとうございました。
283276:04/05/19 22:26
>>281
そうですか・・・orz
C#をちょっと知ってるだけなのでそんな規格の変化があるとは思いもよりませんでした
VS.net(できれば2003)準拠の本を探しに行ってきます
コンボボックスにディレクトリを表示したいのですが、WinXPではCドライブ以外のドラ
イブも表示されるのにWin2000では表示されません。
解決方法をお願いいたします。

コードは以下の通りです。

//CCombo m_dirCombo;

m_dirCombo.ResetContent();
m_dirCombo.Dir(DDL_EXCLUSIVE | DDL_DRIVES | DDL_DIRECTORY, _T("*.*"));
>>283
塚越氏の本は読み進めて理解していくのに分かりやすいし学習用には良いと思うけどね
オレは・・・
以下の場合で MyClass Add(MyClass ob)がdataを用いることができる理由がよくわかりません。この理由を教えていただけないでしょうか。
gcc version 3.3 20030304 (Apple Computer, Inc. build 1495)です。

#include <iostream>

class MyClass {
int data;
public:
MyClass(int d) { data = d; }
MyClass Add(MyClass ob);
void Display() { std::cout << "data : " << data << std::endl; }
};

MyClass MyClass::Add(MyClass ob)
{
data += ob.data;
return *this;
}

int main()
{
MyClass Obj1(10), Obj2(15);

Obj1.Add(Obj2);

Obj1.Display();

return 0;
}
>>286
スレ違いだとは思わんもんかなぁ。

それはさておき、あんたは先ず、classとは何か10分くらい勉強してきなさい。
>>287
10分どころか1時間以上経ってるね。
289286:04/05/20 02:59
>>287
見知らぬ人にあんたなんて言うんですか?
随分と失礼ですね。
290286:04/05/20 03:17
>>287
あなたにあれこれ指図される気はありません。
>>289
あなた誰ですか?勝手に名乗らないでください。
>>290
スレ違いに付き以後放置決定。
>>286
AddとdataがMyClassのメンバだから。
聞きたいことは大体分かるが、これで納得できないなら>>287
質問です。例えば10mSのウエイトを正確に入れたい場合、
Sleep関数だと話になりませんでした。
その他のプログラムは停止でもなんでも無視してもいいから、
正確にmsまでのウエイト処理ができるようなプログラムを
作成されている方はいらっしゃいますでしょうか?
>>293
スレッド優先順位を最高位にしてパフォーマンスカウンタかな?
可変クロックだとダメらしいが。
>>293
timeGetTime()なら若干マシじゃないかね
296デフォルトの名無しさん:04/05/20 17:27
ビジュアル的な質問になるのですが
方法をご存知のかた教えて頂きたいとおもいます。
MFCのEXEにてCFrameWndビューが表示されるツールを作成しています。
もともとビューのリソースを持っているのではなく
コードによりWNCLASSを使用し、画面を構築しています。
このビューを灰色に設定しダイアログっぽくデザインしており
画面の構築時にビットマップ等の画像ファイルを埋め込みたいとおもいます。
イメージで言うとエラーメッセージ等の警告、注意、のマークみたいな物
となります。
この場合、どのような方法で画像を埋め込むのか分からず、思案しております。
サンプル等貼ってある場所があれば誘導等もお願いいたします。
ユーザにどのような操作をさせたいのよ
方法とかタイミングによるべさ
VS.NET2003で、C++のプログラミングをしているのですが、timeGetTimeを使うと、
>error LNK2019: 未解決の外部シンボル __imp__timeGetTime@0 が関数 _main で参照されました。
>fatal error LNK1120: 外部参照 1 が未解決です。
というエラーが出ます。

全く同じソースが、BCC5.5では正常にコンパイルできるので、ソースに問題があるとは思いにくく、
環境自体がおかしいのかと思い、VSの再インストールもしましたが、改善しません。

何か他に考えられる可能性はあるでしょうか…
>>298
winmm.libをリンクしてないから。

#pragma comment(lib, "winmm.lib")

をソースに追加するか、プロジェクトの設定でwinmm.libをリンクするようにする。
300298:04/05/20 23:28
>>299
うまくコンパイルできました。
どうもありがとうございました。
301デフォルトの名無しさん:04/05/21 16:51
友人が作ったVisual C++6.0のソースなんですが、
コンパイルエラーがなく、実行時にsetTimerがうまく呼ばれてないようで、
呼出し後の処理がうまくいきません。
具体的には、パズルゲームです。一秒ごとにブロックが落ちるはずなのですが、
ブロックが、落ちずにキーボードから操作するしかないという状態です。
なにとぞ、よい知恵をお貸しください。

ttp://www.geocities.jp/whaleaquarium/
OnTimerでもSetTimer
303301:04/05/21 18:39
重ね重ね、申し訳ありません。
>>302
OnTimerでもSetTimerとはどういう事か分からないのですが。
OnTimer関数内でSetTimerを呼ぶという事でしょうか?
一応やってみましたが、特に変化がありませんでした。
引数が問題なのでしょうか、
自分の解釈が間違ってるかも知れませんが、
よろしければ、詳しく教えて下さい。よろしくお願いします。
304デフォルトの名無しさん:04/05/21 19:12
バッファの量が増えると縦スクロールバーが勝手に表示されてしまうのですが
これを強制的に表示させないようにする方法を教えてください
バッファって何?
何のスクロールバー?
306デフォルトの名無しさん:04/05/21 19:24
>>305
フレームビューです。
文字がビューに収まりきらなくなった時勝手にスクロールバーが
表示されて困ってます
フレームビューって何語?
フレームビューは文字を格納するものなの?

MFCを使っているならそう言え。
フレームビューとやらは自分で定義したクラスか?
308デフォルトの名無しさん:04/05/21 19:53
もうしやけございません
フレームビューという表現は誤りでしたか。。。
これをサンプルに作っております

ttp://www.sm.rim.or.jp/~shishido/api1.html
で、バッファとゆーものは何処に?
310デフォルトの名無しさん:04/05/21 20:12
バッファーは表示させる文字の事を指していました
表現が間違っていたらすみませんでした。
要は文字列がダラーっと縦に続いていった場合 意図しないのに
スクロールバー様が表示されるのです。お呼びでない為
スクロール婆さんにはスッコンでいてもらいたいのです。
308のページではエディットコントロールも使ってないようだし、
どのような手段を使って文字列を表示しているんだ?
ただTextOutを使って表示させるだけなら、スクロールバーが出たりしないし。
312デフォルトの名無しさん:04/05/21 20:25
メッセージマップ?というやつを使って
一回一回描画しています。
えーと、、、もう良いや。
誰か他の人お願い。
314デフォルトの名無しさん:04/05/21 20:31
何分初心者なもので 分かり辛い状況説明で申し訳ありません
とりあえずソースを上げろ、話はそれからだ。
MSDNで文字列→数値の変換に関して検索を掛けたら
_strtoi64 が出てきましたこれは一般的なのでしょうか?
textBox.text プロパティから数値を取り出そうとしています。

また最後の3つ目の引数は基数となってますが、
10進として変換したい場合は10とすればいいのでしょうか?
317デフォルトの名無しさん:04/05/21 20:51
スクロールバー表示されなくなりますた
ありがとうございますた。
SetScrollRange君と
SetScrollPos君が悪さしていたようです
atoi
で良いんじゃない?
>>318>>316 へのレスね。
>>318
atoi と strtoi64 は精度が違うとかそういう違いだけですか?
int に変換したいのですが扱うのは整数のみ、桁数は大き目
ネットで調べると covert だの CString だの出てきますが、
やはりatoiが一番最良で軽いのですか?
320ですが、CじゃなくてC++らしい書き方もしたいのでそこらへんもお願いします
VC++じゃなくてC++質問で申し訳ないです
>>320
a_to_系
str_to系
では書式が少し違う。
得られる数値の型が複数用意されているのでそこらへんは"u"なり"i"なり
そのコードに必要な値の範囲をカバーしているものを使う。使い分けってのは
必要な型のサポートで考えれば良いのでは?
>>321
int i;
std::stringstream ss;
ss << "321";
ss >> i;
>>320
boost使っても良いなら、

int i = boost::lexical_cast<int>( "321" );

lexical_cast内部で>>323の処理を行っている。
325デフォルトの名無しさん:04/05/22 13:39
「winuser.h」がインクルードされてるのに、
COMBOBOXINFO構造体を使用しようとすると、
「: error C2065: 'COMBOBOXINFO' : 定義されていない識別子です。」
というコンパイル エラーになってしまいます。

原因が分からないのでご教授願います。
以下のようになるんですがこういうもんですか?
コンパイルオプションなんかで解決できますか?

std::vector<type_t*> tvec(100);

(case A)
type_t*& ptr(tvec[0]); // 駄目

(case B)
typedef type_t* tp;
tp& ptr(tvec[0]); // OK
328327:04/05/22 23:09
↑はVC.NETでの話でした。
↑プログラム歴何年目ですか?
>>327
type_t*& p = tvec[0];
331デフォルトの名無しさん:04/05/23 21:25
すみませんが
ms-help://MS.VSCC/MS.MSDNVS.1041/vcmxspec/html/vcmg_MacrosandthePreprocessor.htm
と、いうHELPがあるそうなんですが見つけられません
名称が変わったのでしょうか?
どなたかご存知の方折られませんか?
どうやら
wingdi.hに定義されているGetObjectと
System::Resources::ResourceManagerのGetObject
が、重なってしまいます。
の解決方法が書いてあるようなんですが

332デフォルトの名無しさん:04/05/23 21:51
コンボボックスをオーナー描画スタイルにすると、コンボボックス内の
全てのアイテムのテキストが文字化け(?)してしまいます。
どうすれば良いでしょうか?
化けないように描画してください。
334332:04/05/23 22:42
>>333
描画段階ではなく取得したら化けてたんです。TRACEで確認しました。
文字が全て全角一文字の記号文字になってしまいます。
335332:04/05/23 22:46
すみません。半角文字です。
あれか、フフフフフだな。
CBS_HASSTRINGS付けてみい
337デフォルトの名無しさん:04/05/24 00:22
VC++.netで
struct Object{
int a;
};

struct *p;
p = malloc(sizeof(struct Object)) == NULL

ビルドエラーになるんですが何が問題でしょうか?
;
339デフォルトの名無しさん:04/05/24 00:30
型キャストしたら直りますた
340332:04/05/24 01:18
>>336
ありがとうございました!!
>>339
(・∀・)ニヤニヤ
342デフォルトの名無しさん:04/05/24 10:01
VC++で Excelのシートをコピーしたいと思っています。
例えば、「book1.xls」の「先頭のシート」を、「book2.xls」の「先頭のシート」の前にコピーするという操作です。

1:using namespace Excel;
2:_ApplicationPtr pXL;
3:COleVariant data;
4:
5: //Excelの起動
6:pXL.CreateInstance(L"Excel.Application");
7:pXL->Visible = TRUE;
8:
9://WorkBookを開く
10:WorkbooksPtr pBooks = pXL->Workbooks;
11:_WorkbookPtr pBook1 = pBooks->Open("C:\\book1.xls");// book1.xls を開く
12:_WorkbookPtr pBook2 = pBooks->Open("C:\\book2.xls");// book2.xls を開く
13:
14://アクティブ・シートの変更
15:data = (short)1;// book1.xlsの先頭のシートを指定
16:SheetsPtr pSheets = pBook1->Worksheets->Item[data];
17:pSheets->Select(data);
18:
19:VARIANT vx;
20:VariantInit (&vx);
21:vx.vt = pBook2->Worksheets->Item[(short)1];// book2.xlsの先頭のシートを指定 **ここが怪しい**
22:
23:pSheets->Copy(vx);// **ここで abnormal program termination エラー発生**
24:
25:pXL->DisplayAlerts = FALSE;
26:pXL->Quit();
343342:04/05/24 10:02
上記のソースでは、23行目でエラーになってしまいました。
Copyメソッドの引数がおかしいのだと思いますが、よくわからず行き詰まっております。
シートを開いたりするところまでは正常に動作しております。
良い方法や、参考になるサイト等ありましたらご教授いただけると幸いです。
環境は、Win98SE, VC++6.0 Enterprise Edition, MS Excel97 です。
344デフォルトの名無しさん:04/05/24 10:40
教えてください。MFCで作成しています。
InitInstance内でCFrameWndを構築するコード

hInst = m_hInstance;
m_pMainWnd = new CTestView();
pTestwin = m_pMainWnd

を書いているのですが この部分を同一CPPファイルの外部関数(EXPORT)宣言内に移行して使えるようにしたと
思います。
動作としては外部関数が呼ばれた時に画面の構築を行いたいのです。

外部関数内にそのままコードを移行するとビルド時に
error C2065: 'm_hInstance' : 定義されていない識別子です。
error C2440: '=' : 'int' から 'struct HINSTANCE__ *' に変換することはできません。(新しい動作 ; ヘルプを参照)
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
error C2065: 'm_pMainWnd' : 定義されていない識別子です。
error C2440: '=' : 'class CFuruView *' から 'int' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
error C2440: '=' : 'int' から 'void *' に変換することはできません。(新しい動作 ; ヘルプを参照)
が発生してしまいました。このように初期描画構築コードを外部関数に移行する場合の
要領を教えていただけないでしょうか?よろしくお願いします。
開発環境はnt4.0でvcは5を使用しています。
>Copyメソッドの引数がおかしいのだと思いますが
デバッグでCopy関数の中へステップインしてみる。
Copyのソースコードが現れるので一行ずつ実行すれば
エラーのある箇所で止るだろうから、その時のソースコードに
注目する。これで原因が特定出来るはず。
>>344
m_hInstanceはCWinAppのメンバなんだから、そりゃ外部関数とやらがCWinAppとなんお関係もなけりゃ触れない。
CWinAppから派生したクラスにフレームウィンドウ構築の関数追加してそれを外部関数から呼んでやればいいんじゃない?
m_hInstanceとかってpublicだから直接操作できるけど
347344:04/05/24 11:57
>>346
分かりやすい回答ありがとうございます。

教えて頂いた通り構築用の関数を追加してみました。
メンバ関数の追加によりPublicで宣言した関数内で上記のコードを
持っていくと 定義されていない識別子です。等のエラーは発生しなくなりました。

初歩的な質問で申し訳ございませんが、この関数EXPORTで宣言した関数内からコール
する時 (例えば関数名 void OpenWndProcとした時)

EXPORT short int __stdcall loadView(long openflg)
{

OpenWndProc();
}

という具合にコードを書くとOpenWndProc 定義されていない識別子
となってしまいました。
Publicで宣言した場合 同一CPP内からの呼出しはどのようにすればよろしいでしょうか?
よろしくお願いいたします。
IShellFolderでフォルダ操作をするとき、
SHCONTF_FOLDERSを使うとIEが列挙されて邪魔なんですが
IEだけ正しく除外する方法って何かありませんか?
::{871C5380-42A0-1069-A2EA-08002B30309D}
これを認識する方法はスマートじゃない気がするんですが。
349デフォルトの名無しさん:04/05/24 15:49
View.cppで保持している文字列データをDoc.cppで読み込み保存するには
どのようにすればいいのでしょうか?
ViewとDocがどのような関係にあるのかまだ理解できず、うまくデータの受け渡しができません。
WC++ net2002を使用しています。よろしくお願いします。
350デフォルトの名無しさん:04/05/24 15:50
>>349


WC -> VCです^^;
>>349
俺のvctips.txtより

.MFCクラス間のアクセス方法
Doc → View GetFirstViewPosition, GetNextView
View → Doc GetDocument
View → FrameWnd GetParentFrame
FrameWnd → View GetActiveView
FrameWnd → Doc GetActiveDocument
352349:04/05/24 16:37
>>351

View → Doc GetDocument
を利用して何とかデータを受け渡せそうです。
ありがとうございました。
353327:04/05/24 17:12
>>329
10年くらいです(ずっとgccです)。

>>330
すみません。それで通るのは判っていたんですが、
327で書いた方法で一貫して書いてきたので変えたくなかったのです。
VCでは駄目ぽということで勝手に納得しておきます。
Delphi->BCB->VC++と移行してきました。
C++自体はそれなりにわかりますが、
プロジェクト作成からある程度のものを作るまでの流れみたいなものがいまいちわかりません。
初心者向けの参考書みたいなものがあれば教えていただきたいです。
355342:04/05/24 18:53
>>345
ご教授ありがとうございます。
下記関数までステップインしたところで、それ以上ステップインできなくなってしまいました。

inline HRESULT Excel::_Worksheet::Copy ( const _variant_t & Before, const _variant_t & After ) {
return _com_dispatch_method(this, 0x227, DISPATCH_METHOD, VT_EMPTY, NULL,
L"\x080c\x080c", &Before, &After);
}

多分、私がVARIANT型への代入方法を間違えているのが原因だと思うのですが、やはりまだよくわかりません。
このCopy関数を使用したサンプルコードでもあると良いのですが、見つけられませんでした。
引き続き調べてみたいと思います。
また、どなたか情報ございましたら宜しくお願い致します。
356デフォルトの名無しさん:04/05/24 19:12
VC++で印刷のプレビュー機能がありますが、このプレビューのデータを
別口で取り出し、ピクチャーBOXなどに貼り付けることは可能でしょうか?
つまり、印刷のプレビュー画面を標準以外にしたいのが目的なのですが…
プリンタのDCを他のDCへBitBltしてあげればいけるんじゃない?
>>348
CLSID_Internet
>>355
引数がふたつに見えるんだが・・・
相手の顔がふたつに見える
当方windowsXP使用の初心者で、手始めにborlandC++Compilerを使っておりました。
配布サイトの説明どおり進めていき、一応ちゃんと動作する物を作ることができました。

今度Visual C++を始めたのですが、こちらはインターフェースがややこしくて何がなにやらといった感じです。
参考書も見たのですが、のっけから専門用語連発でいまいちわかりません。
そこでとりあえず、簡単な

#include <stdio.h>

int main()

{

printf("hello\n");

return 0;

}

という内容の.cppファイルがあったとして、これをVisual C++でコンパイルして動かすには
どのような流れで進めていけばよいのでしょうか?
いつも思うんだけど>>361みたいな初歩の初歩から質問する人って
全部2chで習うつもりなんだろうか。
363361:04/05/25 20:53
>>362
全部じゃないです。1から10まで教えてくれなんていいません。1だけでいいんです。
とりあえず初めの取っ掛かりがわからないことには何もできないじゃないですか。
最も基本的な流れがひとつわかれば、後はそれにいろいろ付随する形で学んでいけると思うんです。
現に、先に述べたborlandC++Compilerの場合はそれができたんです。
だから一番初めの段階をひとつ教えてください。後は自分でやります。よろしくお願いします。
>>363
VCバージョン書け
5、6系と.net以上とでかなり違う

5、6ならファイルをVCで開いてビルドボタンを押すだけ
ただしCソースならファイル拡張子は.cの方が良い
365363:04/05/25 21:15
netです。
366356:04/05/25 21:42
>>357
BitBltですがオンラインマニュアルによると
出力先がプリンタ以外はエラーになる
との記述があるのですが…

質問の追加です
ComboBoxでItemの選択をしたときに
SelectedIndexChangedのなかで
ComboBox->SelectedText
とやれば、選択したテキストが得られると思い込んでいたのですが違うのでしょうか?
やってみたのですが、かえってきません(空でした)
DropDownStyleはComboBoxStyle.DropDownになっていたのでてっきりテキストが
帰ってきているのだと思い込んでいたのですが…
367デフォルトの名無しさん:04/05/26 00:09
横ヤリすまんそ。
VCでVSS管理下とかで読み取り専用になっているファイル
をエディタ画面で編集できてしまう(もちろん保存はできないが)
のですが、VBみたいにBEEP音がなって編集させてくれない
ほうが気持ちいいと思うのですがみなさんどうしてますか?
(ツール/オプション/エディタの中にもそれらしき設定がないのですが。。。)
>>367
VSSの運用戦略を根底から見直す。
hyper i=123456789080;
hyper j=123456789090;
int k=i+j;
とするとk=0になってしまいます。
環境はVC++6.0です。なぜなんでしょう?
>>363
ヘルプで
.NET開発 -> .NET開発 -> Visual Studio .NET -> Visual C++

もしくは
http://www.google.com/search?num=50&lr=lang_ja&q=VC%2B%2B+%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB
>>366
こっち方がいいかもね。

managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/l50
VCのリファレンスが英語で表示されるのですが、日本語表示はないのでしょうか。
がんばって英語を覚えろということでしょうか。とほほ。
>>372
違います、覚えなくても読まなければ問題ありません。
>>372
違います。覚えなくても慣れれば問題ありません。
375356:04/05/26 10:33
ComboBoxでItemの選択の続き
SelectedIndexには想定した値が入っているんですが…
どうしてTextには入っていないんでしょうか?
376デフォルトの名無しさん:04/05/26 12:31
>>375

CString ss;
xx.GetWindowText(ss);
377デフォルトの名無しさん:04/05/26 12:38
>>369
intをhyperにしろ
378Hack'n:04/05/26 13:52
VC++ 6.0 で Win API を使ったアプリケーションを作っています。
細かいことですが、default のまんま使っているせいか、各SECT って、
0x1000 単位で構成されています。
よそさまのを覗くと、0x800 のもあるようです。
なにがよくて、0x1000 になっているのか、またこれを 0x800 に設定
するのは、どこかで出来るのでしょうか。
SECTって何?
380デフォルトの名無しさん:04/05/26 15:25
Toolbarで使用するアイコンパレットを16色から256色にするにはどうすればいいのでしょうか?
256アイコンペーストすると16色のパレットに減色されてしまう…
環境はVS.Net2002、よろしくお願いします
381デフォルトの名無しさん:04/05/26 15:30
三角関数ってコンピューターの中でどうやって計算してるんだ?
>>381
; 6 : double a, b, c;
; 7 :
; 8 : c = a + b;

0001ddd 45 f8 fld QWORD PTR _a$[ebp]
00020dc 45 f0 fadd QWORD PTR _b$[ebp]
00023dd 5d e8 fstp QWORD PTR _c$[ebp]

; 9 : c = a - b;

00026dd 45 f8 fld QWORD PTR _a$[ebp]
00029dc 65 f0 fsub QWORD PTR _b$[ebp]
0002cdd 5d e8 fstp QWORD PTR _c$[ebp]

; 10 : c = a * b;

0002fdd 45 f8 fld QWORD PTR _a$[ebp]
00032dc 4d f0 fmul QWORD PTR _b$[ebp]
00035dd 5d e8 fstp QWORD PTR _c$[ebp]

; 11 : c = a / b;

00038dd 45 f8 fld QWORD PTR _a$[ebp]
0003bdc 75 f0 fdiv QWORD PTR _b$[ebp]
0003edd 5d e8 fstp QWORD PTR _c$[ebp]
383342:04/05/26 17:02
>>359
ご指摘ありがとうございます。
確かに引数は2つなのですが、VBの類似関数から、2つ目を省略しても動作的には問題ないと思ったため省略しておりました。
・1つ目の引数(&Before)=指定したシートの「前」に挿入するとき
・2つ目の引数(&After)=指定したシートの「後」に挿入するとき

あれからソースを見直して、17行目をコメントアウトしたところ、エラーは発生しなくなりました。
(エラー発生個所を間違っておりました。申し訳ありません)
また、2つ目の引数も一応指定するようにしました。

23:pSheets->Copy(vx,vtMissing);

シートはコピーされたのですが、こちらの指定した「book2.xls」にではなく、新しいブックが開かれて、
そこにコピーされてしまいました。
トレース中の変数を見ると、

&Before 0x0064f578 {VT_NULL}
&After 0x00419ac8 class _variant_t vtMissing

となっており、&Beforeに代入されているはずのシートポインタ(pBook2->Worksheets->Item[(short)1])が
無視されて VT_NULL になってしまっているように見えます。
今はここでつまづいております。
>>381
「マクローリン展開」でぐぐってみるといいかもしれない。
385デフォルトの名無しさん:04/05/26 18:30
すいませんちょっとばかし高度な質問してもよろしいでしょうか
どうぞ
質問の仕方が馬鹿っぽいからダメ。
388385:04/05/26 20:28
CinternetSessionを使用しておりまして
OPEN/VMSサーバに接続後CFtpFileFindにて
存在するファイルを次々に取得するコードを作成しているのですが
カレントにDIRが移るとこまでは上手く処理ができておりまして
肝心のGetFilePathのステートメントで致命的エラーが発生しました。
デバッグにより原因を探っているとどうも、FileFind.Cppで
DIRの区切り記号であるスラッシュが付与される事がわかりました。
VAX上では DISK$TEST:[TEST.TOOL]aaa.txt と扱うファイル及びディレクトリが
このステートメントではFile://133.133.133.133/Test/Tool/aaaa.txt
という認識になりVAX上でファイルが見つかってもDISK$TEST:[TEST.TOOL]/
という処理をしてしまい不具合が発生しているようなのです。
マニアックな相談で申し訳ないですが、この高度な問題を解決していただければ
すごく感謝の気持ちでイッパイになる事が可能となります。
よろしくお願いしてみてるのでお願いしますですよ
DirectXとかOpenGLとか使わずにサイコロ(回転できる立方体)を作りたいのですが、
どういう風に考えれば良いのか分かりません。
考え方でも解説サイトでもなんでも良いので教えてください。
どこかにポリゴンの説明してるサイトがあったな、ぐぐってみ?
>>389
ワイヤーフレームまでなら
http://www.vector.co.jp/soft/data/prog/se002453.html
392389:04/05/26 22:53
>>390-391
レスありがとうございます。
三角形を組み合わせるみたいな事がMSDNに書いてあったのですが、
いかんせんどうやって書いたらいいか分からないです。
>>391のデータはまだ途中までしか眼を通してないのですが、これはコンソールでしょうか?
できればWINDOWS APIを使ってやりたいんですが…
説明不足でした。すいません。
393芹川璃羽:04/05/26 23:44
>>388
読んでて、なんとなく腹立ったのはわたしだけ?
読みもしなかたーよ
395385:04/05/27 09:26
やっぱVAXなんて古い環境からむと解決する術ってないものですな
これってFileFind.Cppのコードを強制的に変えるしか方法ないですかな

>>393
まったり仲良くいきましょう
396デフォルトの名無しさん:04/05/27 10:20
DWORD の意味がわからずヘルプを参照したのですが

[[name]] DWORD initializer [[, initializer]]...
各 initializer にダブルワード (4 バイト) の格納領域を割り当て、必要に応じて初期化します。型が適切な場合は、型指定子として使用することもできます。

意味がぜんぜんわかりません…
一体どう解釈すればいいのでしょうか?
DWORDの前にある name はまた何を意味するのでしょうか?
DWORD 32 ビットの符号なし整数、またはセグメント アドレスとそれに関連するオフセット。
>>396
見るとこ間違ってんじゃね?
VBかなんかの説明っぽいが。
あ、汗の説明か(;´Д`)
400396:04/05/27 10:44
>>397

ありがとうございます

>>398

VisualC++でフィルタされてるのですが
Microsoft Macro Assembler リファレンス
という項目は関係なかったんでしょうか?^^;

調べていたら英語記述のデータタイプ一覧を見つけました。
DWORD 32-bit unsigned integer.
というところを見ればよっかったのかな?
できればここも日本語化していてくれればいいのに…
>>400
それよりもDWORDの元は何なのかヘッダ見たほうが早いと思うんだけど。
402396:04/05/27 12:30
>>401

ようやく理解できました
typedef unsigned long DWORD
と定義されたものだったんですね
ありがとうございました
>>402
すべて大文字の名前はとりあえずマクロだと思え。
404デフォルトの名無しさん:04/05/27 12:43
京都の大文字焼きはマクロですか?
405デフォルトの名無しさん:04/05/27 12:51
うん・
>>404
もういいからおまえは黙って仕事してろ
407デフォルトの名無しさん:04/05/27 12:55
VS.netをつかってます
CBitmapButtonを使いたいのですが、Bitmapが表示されません
OnInitDialogにそれを表示させるのを入れるようなのですが、その関数がありません。
関数の追加で行ったところ、動作しないようです、OnInitDialogを最初から作らせるにはどのようにしたらよろしいでしょうか
408VB厨:04/05/27 14:36
すみません。ひょんな事からVCを触らないと行けなくなりました。
少し手助けをお願いできないでしょうか?
VB側のDeclareでVC作成DLLの関数を宣言しているのですが
その関数の引数にinteger型のフラグを追加し、同じように
VC側のEXPORTで定義された外部関数にもその値を渡さないといけなく
なりました。ポインタとかの概念が分からず苦労してるのですが
VBから参照のみの値 0 OR 1 の数値をVCに提供する場合
その引き渡される側の型はどのような宣言にすればいいでしょうか?
short int 等にすると5桁くらいの値(数値)になってしまいます
要はVCの外部関数側で呼び元からのパラメタを0か1で判断して
処理を分けたいと思います よろしくお願いします。
409VB厨:04/05/27 14:43
予想するとこ
EXPORT BOOL __stdcall GaibuProc(long &Aflg)
でよろしいのでしょうか
410デフォルトの名無しさん:04/05/27 14:44
ピクチャコントロールIDをIDB_BITMAP1
コントロール変数をm_PIC3
として、リソース画像の緑の部分を透明にして描画したいのですがうまくいきません。

CClientDC myPictDC(&m_PIC3);
CDC workDC;
CBitmap myBMP;
myBMP.LoadBitmap(IDB_BITMAP1);
workDC.CreateCompatibleDC(&myPictDC);
workDC.SelectObject(&myBMP);
//myPictDC.BitBlt(0,0,442,65,&workDC,0,0,SRCCOPY);
myPictDC.TransparentBlt(0,0,442,65,&workDC,0,0,442,65,RGB(0,255,0));

BitBltで描画する分には問題ないのですが、
TransparentBltで描画しようとしても描画されず困っています。
何がいけないのでしょうか?
>>410

リソース画像IDがIDB_BITMAP1 でした
>>388
何処が高度な問題なんだよ。
POSIX ファイル名を解決出来ないのは OpenVMS サイドの問題だろ。
…つか、VMS 仕様でディレクトリ指定しようなんて莫迦な真似してないよな?

いずれにせよ、CInternetSession って辺りが既にスレ違いなんだが。
413デフォルトの名無しさん:04/05/27 17:12
>>412
> いずれにせよ、CInternetSession って辺りが既にスレ違いなんだが。

なんで?
406は悔しいpu
415デフォルトの名無しさん:04/05/27 20:44
あるAPI関数を使っているのですが上手くいきません
GetLastErrorっていうものを使ってみたいのですが
方法がわからず苦労してます。
おしえてください。
416デフォルトの名無しさん:04/05/27 20:46
あるAPI関数を使っているのですが上手くいきません
GetLastErrorっていうものを使ってみたいのですが
方法がわからず苦労してます。
おしえてください。
>>416
方法ったって
DWORD dwError = GetLastError();
だけなんだが、何がわからないの?
418415:04/05/27 21:09
サーバエラーで2回書き込んでしまいましたすみません。
もし今のGetLastErrorが正しくエラーコードを取得してる場合
エラーコード12003
ってのが帰ってくるんですがこの正体をどのように調べればよろしいでしょうか?
対応表のようなものがあるんでしょうか?
FormatMessage

ってのもあるけど、私は
VS付属ツールである Error Lookup というツールをお勧めしたい。
420388:04/05/28 09:39
>>412
かなり高度だと勘違いしてますた。
というか上手くファイル情報取得できるようになったのですが
動きがおかしいので作成したコード見てほしいのですが
よろしければコードはりますのでオナガイします。
処理の内容は指定DIRのファイル及びDIR一括削除処理です。
>>418
これでも使え
CString CMyFunc::GetErrorStr()
{
 LPVOID lpMsgBuf;
 FormatMessage(
  FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
  NULL,
  GetLastError(),
  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
  (LPTSTR) &lpMsgBuf,
  0,
  NULL);
 CString ErrMessage = (LPTSTR)lpMsgBuf;
 LocalFree(lpMsgBuf);
 return ErrMessage;
}
422404:04/05/28 11:32
VC++ でエラーにならないけど、説明が見つからない。
DECLAREconfig..... ってのがあるソースにあったんだけど、
なんのことだが、教えて下さいませんか。
423デフォルトの名無しさん:04/05/28 12:27
>>412
> いずれにせよ、CInternetSession って辺りが既にスレ違いなんだが。

なんで?
>>423
MFCスレに逝けってことでは?
http://pc5.2ch.net/test/read.cgi/tech/1074104008/
スレ違いではないよ。

ただ、自分で「高度」だと思ってる質問を初心者スレでするのはスレ違いっつーか頭悪いのかなとは思う。
426388 :04/05/28 19:03

>>425
すいません反省します
427デフォルトの名無しさん:04/05/28 20:00
教えていただけないでしょうか?
同一CPP内の関数間でAPI等のクラスやオブジェクトのインスタンスを
引数、戻り値にして関数間で使いまわししたいのですが
可能でしょうか?
例えばCDaoRecodeset *mdbRecord = New CDaoRecordset(&mdb)
等で作成されたmdbRecord を関数間で受け渡ししたいです。
>>427
Give it a try!
429>>427さん:04/05/28 20:38
直接引数宣言内で(CDaoRecodeset *mdbrc)
って書きましたらシンタックスエラーを起こしました
って怒られてます。
430デフォルトの名無しさん:04/05/28 21:14
プログラミング経験0なんですが何も知らない初心者でも分かるVisual C++の教材をご存知ないでしょうか?
最近の書籍は乱立しててワケワカラン。
431デフォルトの名無しさん:04/05/28 21:16
プログラミング経験0なんですが何も知らない初心者でも分かるVisual C++の教材をご存知ないでしょうか?
最近の書籍は乱立しててワケワカラン。
432デフォルトの名無しさん:04/05/28 21:17
プログラミング経験0なんですが何も知らない初心者でも分かるVisual C++の教材をご存知ないでしょうか?
最近の書籍は乱立しててワケワカラン。
433デフォルトの名無しさん:04/05/28 21:20
プログラミング経験0なんですが何も知らない初心者でも分かるVisual C++の教材をご存知ないでしょうか?
最近の書籍は乱立しててワケワカラン。
スミマセン、スミマセン。
書き込めなかったと思ったら重複してました。
ホントスミマセンスミマセン(;´A`)
435デフォルトの名無しさん:04/05/28 21:36
プログラミング経験0なんですが何も知らない初心者でも分かるVisual C++の教材をご存知ないでしょうか?
最近の書籍は乱立しててワケワカラン。
436デフォルトの名無しさん:04/05/28 21:42
プログラミング経験0なんですが何も知らない初心者でも分かるVisual C++の教材をご存知ないでしょうか?
最近の書籍は乱立しててワケワカラン。
何か、書き込み→反映まで時間がかかるようになってますね。

>>427
シンタックスエラー → 文法エラー。
該当部分のソース貼ってみれ。
>>429
関数の引数宣言の前にCDaoRecodesetを宣言しる。

class CDaoRecodeset;
VC++6.0
関数数が多くなりすぎて,クラスビューがえらいことになってしまってます.
namespace毎に整理されれば楽なんですが,どうやらそうはならないようで.
無理矢理にでもクラス化→さらにフォルダ作って整理
以外のいい方法はありませんか?

現在はグローバルで
class __SAMPLE{
public:
//namespace内部に相当
};
__SAMPLE SAMPLE;

とし,SAMPLE.func();といった感じで使っています.
WindowsXP、VC++.netでバイオリズムのグラフを書いています。
とりあえず日数の計算のプログラムまではできたので、あとはそれを

Y=sin a(X+d)

という式にぶち込んでサインカーブを描けばよいのですが、いかんせん入門書にはグラフィックの表示には
簡単にしか触れてないし、ぐぐってもJAVAやLinuxのサイトばかりです。。
サインカーブのグラフを書くにはどうしたらよいのでしょうか?ご教授願います。
>>440
ウインドウつくって、MoveTo(Ex) LineTo等を使う
>>440
アスキーアート
>>440
csvファイルを出力してExcelに画かせるとか。
444デフォルトの名無しさん:04/05/29 11:35
CEditViewに表示されている全ての文字列をバッファに格納するにはどのようにすればよろしいでしょうか?
環境はVC++Netです
445デフォルトの名無しさん:04/05/29 14:19
おしえてくだはい。
フォルダを一覧するビューを作っているのですが、ビューが表示
された時点でのフォルダは問題なく表示できています。
この状態で、たとえばエクスプローラを立ち上げてフォルダ作成や、
フォルダ削除などで変更したとき、それを自分のビューにも
反映させていのです。即座に。1病苦台。
エクスプローラから何かメッセージをトラップできればいいのか
なと思っていますが、具体的なメッセージがわかりません。
よろしくお願いします。
446445:04/05/29 14:33
スレ違いスマソ。
>>447
ありがとうございました。
>>445
FindFirstChangeNotification()よりもReadDirectoryChangesW()のほうが詳しく取得できるけどね。
NT系限定だけど。
450デフォルトの名無しさん:04/05/30 09:55
すみません解析の仕方を教えてください。
VCでDLLを作成しているのですが、通常エラーが発生した場合は
赤バツマークのメッセージが出るのですが、処理の途中で何の音沙汰もなく
呼出し元アプリが閉じられてしまい。メッセージも何もでません。
こういう事象もあるのでしょうか?
dllでプロセスを終了させたらそうなるな
452デフォルトの名無しさん:04/05/30 16:32
Visual C++ では interface というのは予約語なんでしょうか?
COM 関連のヘッダファイルを見ていると、 unknwn.h などに

typedef interface IUnknown IUnknown;

とか

interface IClassFactory
{
CONST_VTBL struct IClassFactoryVtbl *lpVtbl;
};

とかいう記述が出てくるのです。
<objbase.h>
#define interface struct
454デフォルトの名無しさん:04/05/30 17:19
お願いします。
下のプログラムは画像を取得してそれをR成分だけににするプログラムなのですが
これをいじくって画像をグレースケールにするプログラムにしていただけませんか?
お願いいたします!!
455デフォルトの名無しさん:04/05/30 17:20
#include "_wmgraph.h"
#include "_stdfunc.h"
main()
{
_init_wmimage();

printf("JPEGファイルを表示します.\n");
printf("何かキーを押して下さい.\n");
getchar();

char fname[256];
if(_fileopen(fname)) {
_bmap *b = _read_bmap(fname);

_newpage(1,"JPEG FILE",10,10,-(b->w),-(b->h));

_setactivepage(1);
_put_bmap(b, 10);
_putimage(0,0,10);
_setactivepage(1);

456デフォルトの名無しさん:04/05/30 17:20
続き
//画像の操作
unsigned char *c = b->b;//bの画素の先頭へのポインタ
int blw=b->lw; //画素1ラインのバイト数

for (int i=0; i<b->h; i++)
for (int j=0; j<b->w; j++) {
//配列cで(i,j)画素の操作ができる.
c[blw*i+3*j+0]=0; //Blue
c[blw*i+3*j+1]=0; //Green
//c[blw*i+3*j+2]=0; //Red
}

_newpage(2,"JPEG FILE",20,20,-b->w,-b->h);
_setactivepage(2);
_put_bmap(b, 10);
_putimage(0,0,10);
_setactivepage(2);

delete b;//画像を破棄
}
return 0;
457デフォルトの名無しさん:04/05/30 17:30
>>453 うわ〜〜〜ん。
プリプロセッサ出力眺めてみてさっき気づいたよ…
458デフォルトの名無しさん:04/05/30 17:56
はじめまして

Navigate2もしくはNavigateでIEコンポーネントを使った場合の
navNoHistoryの指定(履歴にいれない)をVC++で行う場合は
どうなるんでしょうか?

よろしくお願いします

>>456
c[blw*i+3*j+0]=0; //Blue
c[blw*i+3*j+1]=0; //Green
//c[blw*i+3*j+2]=0; //Red

const unsigned offset = blw * i + 3 * j;
const unsigned gray = (c[offset] + c[offset + 1] + c[offset + 2]) / 3;
c[offset] = gray;
c[offset + 1] = gray;
c[offset + 2] = gray;
にすればrgb平均化によるグレイ化ができる。
但し、要求仕様によってはgrayの式を調整する必要あり。
☆★☆★ 日本語プログラミング言語『ひまわり』 ☆★☆★

日本語で『こんにちはと、言う。』と入力すれば
ダイアログに『こんにちは』と出るプログラミング言語登場!!
PNGもサポートしてるので、かなりおすすめです!!
また、【『http://www.xxxx.xx/』を、『index.htm』へ、HTTPダウンロード。】
とすれば自動的にダウンロードできる優れ物です!!

↓日本語プログラミング言語『ひまわり』
http://hima.chu.jp/index.htm
↓日本語プログラミング言語『ひまわり』スレッド
http://pc5.2ch.net/test/read.cgi/tech/1083053283/l50
461デフォルトの名無しさん:04/05/30 19:54
>>459 先生!有難うございました!
猫でもわかる〜のHPみたんですけどさっぱりわかりません。
僕は猫以下なんでしょうか?
猫でもわかるとか、猿でもわかるとか、そういうタイトルは
やめて欲しいな
464デフォルトの名無しさん:04/05/30 20:48
終了ボタンを作ってそれを押すとソフトを終了させたいんですけど、なんて書くのかわかりません。
endとかexitと一言書いただけじゃ終わりませんでした。
先輩方、どうかアドバイスお願い致します。
>>464
Dialog→CDialogのEndDialog
SDI・MDI→CWinAppのCloseAllDocuments
main()
{
 while(MessageBox(0,"push cancel button",0,0) == IDOK);
}

cancelを押すとソフトが終了
467464:04/05/30 20:57
ありがとうございます。さっそく試してみます。
468デフォルトの名無しさん:04/05/30 21:19
DirectShowと戦うスレにも投稿していたのですが、こちらにも投稿させていただきます。
VisualC++ .NETを使用しています。
AVIファイルを再生中に停止させて、その画像を保存したく思います。
いったんクリップボードに保存したいのですが、うまくいきません。
ご教示お願いします。

Video *ourVideo= new Video("d:\\test.avi");
ourVideo->Owner = this->pictureBox1;
ourVideo->Play();
ourVideo->Stop;
Clipboard::SetDataObject(this->pictureBox1->Image);
469名無し@沢村:04/05/31 05:52
おれのVisual C++には、ocidl.hがはいってないんだけど、どっからDLできますか?
ちなみにborland C++のocidl.hいれたけど、ダメでした…
>468
>うまくいきません。

だけで、症状(エラーが出るとかクリップボードに張り付かないとか)も書かないから無視されるんだよ
挙げ句はマルチか?最低ですね
>ourVideo->Stop;
ってなんだろ。
>>469
PSDK
473デフォルトの名無しさん:04/05/31 16:40
/*
ご存知の方おしえてください
formatGMTを使用して日付表示を変更したいのですが
*/

CTime Timetest(1999,3,19,22,15,0);
//とした時
CString str;

Timetest.formatGmt(str);
//strに空白が帰ってきます。何がいけないのか分からず困っています。

//よろしくお願いします。
>>473
関数の書式の読み方が根本的に間違ってる
CTime::Format()は二通りの書式があるがどちらもリターンがCString

str = time.Format("%H:%M:%S");
475デフォルトの名無しさん:04/05/31 17:35
>>474
回答ありがとうございます。
()内にコンバートされた値が入る訳ではなく変換後の形式を指定するのですね?

formatGMT変換自体が19-MAR-1999 22:15:00
のように変換してくれるものだと勘違いしておりました。
CTimeにそんなメンバがあったとは・・・今までずっとCStringのFormatで入れとったorz
>>476
オレモダ orz
OΓZ
 __
∠_/|
|○|
∠_/|
_|○L
∠_/Z
_|○L
482デフォルトの名無しさん:04/06/01 02:56
standardとproffesionalでは最適化の有無の違いがあるって聞いたんだけど、
最適化って何?無いと駄目?
(vc++.net standardとvisual studio.netで迷っている。)
>>482
最適化されないと、インライン関数がインライン展開されない。
その他諸々も含めて、場合によってはかなり遅いコードになる。
484VB厨:04/06/01 12:19
教えてください。VCで自作関数のDLLを作成してみました。
VBから引数付きで関数を呼び出して
VC側で静的な文字列をVBに戻り値として返す処理です。
VCへ渡す値のパラメタはLPCSTRで宣言し戻ってくるパラメタはLPSTRで
宣言しました。VC側のデバッグでは戻り値のパラメタに文字が格納されて
おりますが、VB側に処理が帰ってきた時、値が""となっており
空白になってしまいました。ポインタとかその辺りの問題だと思うのですが
どうかお力添えをお願いします。

VBのDeclereでは VCに渡す値のパラメタをByVal aa As Stringで
戻る値を ByRef bb As String にしています。
VCはMFCのDLLになります。
>>482
stdでも普通にプログラムは組めるし、一般に配布して他の人に使ってもらう分にも
特に問題はない。プログラミング行為自体にそれほど制約が加わるわけじゃないの
で、趣味でやる程度ならそれで良い。

成果にこだわりがあるとか、後々こだわりが出てくる可能性があるとか、突き詰めて
プログラミングをやっていきたいなら上のを買えば良い。あるいはお金に余裕があって
その金額差にとりあえず投資しても惜しくないという場合もそっちを買っておけば、大
は小を兼ねるってことになるだろ。
486VB厨:04/06/01 13:35
解決しました。
VBで受ける場合はByte(配列)にして受けるんですね
上手く取得できました
487デフォルトの名無しさん:04/06/01 22:54
つまらん質問ですがおながいします。
VC6なのですが、ファイルビューだとプロジェクト上で右クリメニューに
ビルドメニューがでるのですが、クラスビューだと出ません。
何か理由があるのでしょうか?
>>487
クラスはコンパイル単位に依存しないからでは?
489487:04/06/01 23:52
>>488
レスありがとうございます。
>クラスはコンパイル単位に依存しないからでは?

なのですが、クラスビューはプロジェクト単位にクラスをまとめて
表示しているので、そのクラス群のルートであるプロジェクトで
ファイルビューのようにビルドメニューが出てくれてもいいような
気がするのですが。。。
490デフォルトの名無しさん:04/06/02 10:57
今までUnixで開発していたのですが今回Visual Cで開発することになりました。
環境はXp+VC6.0 Entです。
行番号を知りたいのですが何か方法はあるでしょうか?
エディタに行番号を出力できないようなので。
よろしくお願いします。
>>490
右下に表示されてたと思った。
>>490
どとねとに変えれば左端に行番号表示できるようになるぞ。
いまんとこ俺がvcどとねと使ってて唯一便利に感じる所だ。
493490:04/06/02 11:31
>>491,>>492
ありがと。気づかなかった。
494デフォルトの名無しさん:04/06/02 12:43
VC7 のテキストエディタなんだが,
「選択の開始」ていうのをあるキーにわりあてたいんだが,
キーのカスタマイズに項目にない!

たしか VC6 ではできたと思うのだが…
「選択の開始」ってなんだ?
VC6付属のMSDNライブラリ検索しても出てこないぞ?
だがって使いすぎ
497494:04/06/03 09:15
>>495


「選択の開始」ていうのは,
それを on にすると,そこからカーソルを動かすと,
その始点からの領域が選択領域になるようなやつ

秀丸や Emacs にはらくらくあるし,
もちキーをわりあてることもできる
文字選択モードの開始ってやつだな。こんなのあるんだ。知らんかった。
でもブロック選択できねぇ・・orz
やっぱマウスでやる方が使い勝手いいわ。
499デフォルトの名無しさん:04/06/03 10:15
>>498
>文字選択モードの開始ってやつだな。

そうそうそれのこと.

VC6 にはあったはずだが,
VC7 にはキーの設定のところで見あたらない

なんとかならない?

コーディングするときマウス使いたくないじゃん
a=2 なら b=121
a=30 なら b=1301

みたいにaの値の前後に1をつけてbに代入するにはどうしたらいいんですか?
>>498
VC6でブロック選択の開始はCtrl+Shift+F8だ。SelectColumn。
VC7はShift+Alt+矢印。

たしかにVC7では選択モードがなさげ。
スキームをVC6のにしてもCtrl+Shift+F8とか有効にならねぇし。
a=2;
char aa[]=itoa(a);
strcat(aa,"1");
char *stop;
int b=atoi(aa,&stop,10);
>>502
コンパイル通らんぞ。
b = pow(10, (a == 0 ? 1 : (int)log10(a) + 1) + 1) + a * 10 + 1;
>>500
int a,b;
char x[16];

a=2; // a=30;

sprintf(x,"1%d1",a);
b=atoi(x);
>>494
Shiftキー押しながら、カーソルキーでキャレット移動すれば、
移動した分、選択されるけど…

これじゃアカンの?
507500:04/06/03 15:56
ありがとうございました。
参考になりました。
質問があります。
DirectShowで、カメラとマイクからの入力をキャプチャしてAVIで保存しています。
現在、圧縮なしで保存しているのですが、
どうすれば圧縮をかけられるのでしょうか?
>>500はネタだと思ってたんだが・・
実際、この処理をなんに使うんだろうか?
>>509
そんなもん人の勝手だろ
Visual C++をこれから勉強使用かと考えてる初心者ですが、全く分からないので
変な質問になってしまうかと思いますが教えて下さい。

1.OSはLuinuxじゃないと駄目でしょうか?
2.もし駄目なら、どのディストリビューションが良いでしょうか?
3.アッセンブラーくらい使えないとCでプログラム組むのは無理だと、人に
言われたのですが、アッセンブラーって何でしょうか?
1 Windowsじゃ無いとダメです。普通、LinuxじゃVC++は動きません、Luinuxについては知りません。
2 Windows製品を買ってください。
3 あんま気にしなくていいです、必要になったときに勉強しましょう。
513デフォルトの名無しさん:04/06/03 17:46
VC6 には虫取りモードで,
実行中の 変数/実体 の値を見るのがあったが,
VC7 ではあれどうやるんだ?

「オブジェクトブラウザ」ていうのを表示させても,
途中の値そのものは表示されないんだが…
514デフォルトの名無しさん:04/06/03 18:10
CFtpFindを使ってファイルを探すアプリを作成しています。
このクラスのメンバでGetFilePathといのがあり
見つかったファイルのパスとファイル名、更新日付、サイズ、等の
情報をNullChar区切りで取得するのですが

なぜか探すファイルのファイル名称が19文字を越えると
パスとファイル名しか取得できず、情報関連が取得できません。
19文字以内のファイルならば問題なく取得できています。
このあたりの不具合を経験されたかたで対応方法をご存知のかた
アドバイスお願いします。
デバッグ中に
「デバッグ」 -> 「ウィンドウ」
ってたどった所に色々あると思うけど?
516515:04/06/03 18:12
>>515>>513
517511:04/06/03 18:23
>512
ありがとうございました。非常に参考になりました。ぺこり
便乗して漏れも大体のお礼いっとく。
まりまとうもらいました
アッセンブラーってなんか戦争で功績を残した偉人っぽいな
ドイツ系っぽいな
521デフォルトの名無しさん:04/06/04 15:12
VC で #ifdef 使って,
虫取りモードのときのみ実行するには
何ていうマクロで判別すればいいんだっけ?
_MSC_VER
_DEBUG
_DEBUGでもいいし、オプションで任意のdefineを
定義してそれを見てもよい。
525デフォルトの名無しさん:04/06/05 02:57
超初心者です。
Visual C.netをインストールしたいのですが、setup.exeを開くと
「このシステムにMicrosoft Visual C.net Standardをインストールするために必要な条件を満たしていません。Windowsコンポーネントアップデートセットアップをじっこうして
下さい」
とのメッセージが出てきます。
もうどうしたらいいのか分からないのでどなかか教えてください。
マルチ
527デフォルトの名無しさん:04/06/05 11:21
MFCプログラムで子ウィンドウがアクティブなとき、Ctrl+Sなどショートカットキーを認識せず困ってます。
どうすればいいのでしょうか?
>>527
> 子ウィンドウがアクティブなとき

MFCかどうかよりもその状態についてもう少し詳しく説明できないか?
どういう構成のプログラムでどのウィンドウ・クラス使ってどうそれを呼び出したかとか
529527:04/06/05 11:45
>>528

失礼しました。
子ウィンドウは複数あり、それぞれのウィンドウはCDialogクラスでCreateによって作成し、
そのウィンドウをボタンで切り替えてます(プロパティシートのような感じです)
主に子ウィンドウに値を入力するような感じになっています。
そのため、子ウィンドウがアクティブなときでもショートカットキーを使えるようにしたいと考えています。

まだはじめたばかりでうまく表現ができず、申し訳ありません。
他人のソースでオブジェクトのインスタンス作成後、そのオブジェクトを初期化するのに
〜->init();とか呼び出しているの見るけど、この自作の初期化関数とコンストラクタの違いってなんすか?

的外れな勘違い質問だったらあやまる。
>>530
コンストラクタが複数あって、共通の初期化をInit()として
呼んでるとか、コンストラクト時以外でもリセット的な意味
での初期化を行う場合があるとか。
>>531
> コンストラクタが複数あって、共通の初期化をInit()として呼んでるとか、

普通暮らす作成者がコンストラクタから呼び出す用に作っていると思う。
利用者が呼び出すことはないと思う。

> コンストラクト時以外でもリセット的な意味での初期化を行う場合があるとか。

これはあるかも。
533531:04/06/05 14:22
>>532
>> コンストラクタが複数あって、共通の初期化をInit()として呼んでるとか、
>普通暮らす作成者がコンストラクタから呼び出す用に作っていると思う。
>利用者が呼び出すことはないと思う。

スマソ。そういうニュアンスで書いたつもりだたーYO!
コンストラクタは戻り値が返せないからじゃないの?
コンストラクタ失敗時のエラー通知に例外使いたくないとか
>>533
??

> スマソ。そういうニュアンスで書いたつもりだたーYO!

と言うことなら、

> 他人のソースでオブジェクトのインスタンス作成後、そのオブジェクトを初期化するのに
> 〜->init();とか呼び出しているの見るけど

には当てはまらんと思うが。
537533:04/06/05 15:27
すまそん。質問の意味を「作成後→作成時」と取り違えていた。
逝ってくる
538536:04/06/05 16:24
なるほどそういうことですか、了解。
めちゃくちゃ初心者です。
これからVisualc++net2003(すでに購入)を使ってC言語を始めたいと思って
います。
それにあたり勉強用の本を買ったのですが、一冊目では失敗してしまいました。
元が古いものらしく、書いてあることもちょっと分かりづらいんです。
もちろん一応は理解出来るんですが・・・。

Visualc++netの本はたくさんあるのですが、C言語を学習するためのものはまるで
見当たりません(T_T)何かお勧めのものはないでしょうか?
スレ違いの質問かもしれませんが、もしよろしければアドバイスをお願いします!!
c++もやるの?
>>540
C++はCをある程度理解出来た時に勉強する気でいます(当面はCのみ)。

今は2つにどんな違いがあるかさえ分かってないので「ある程度」がどんな辺りか
すら分かりませんけどw
>>539
猫でいいかな・・・
http://www.kumei.ne.jp/c_lang/
とりあえずC言語から始めるんなら、下のスレッド

推薦図書/必読書のためのスレッド
http://pc5.2ch.net/test/read.cgi/tech/1083665944/

の1に張ってくれてるリンクで書籍をあたるのがいいかも。
「プログラミング言語C」(K&Rとか呼ばれてる)が定番。
サイトだと

http://www.kumei.ne.jp/c_lang/

とかかな。
544543:04/06/05 18:41
かぶった...orz
>>541
ほかの言語もやっていなくて一から独学なら定本明解C言語入門編をお勧めするよ。
とにかくしつこすぎるほど丁寧な解説が続くから理解できない部分はないと思う。
546539:04/06/05 19:01
皆さんレスありがとうございます♪
>>542-543
「猫でも・・・」は本屋でも見かけた事がありますが、やっぱりそれもお勧めなんですかね?
見かけた時は「何だこのふざけたタイトル」とか思ってしまいましたが・・・・・・
サイトの方、今ちょっと見たんですが結構良さそうなんで重宝しそうです。
何日か参考に勉強して、合うようだったら本も買うかもしれません。

>>541
おっしゃる通り、一から独学ですw
しつこすぎる解説っていうのが私的にもすごくポイント高いです。

>543さんのリンク先のスレのリンクからもいくつかピックアップした後、これから本屋を回って
みようと思います。とりあえず2、3冊買う予定。
皆さん貴重な情報ありがとうございました♪







547546:04/06/05 19:22
間違え

とりあえず2、3冊→とりあえず自分に一番合いそうなものを1冊、最終的には2,3冊。
場違いな質問ですが、以前お世話になったサイトでURL、サイト名
がわからないサイトがあります。下のようなことがかかれていました。

C言語の初歩的な解説で17前後の単元に分かれていて、それぞれに
演習問題が6個位づつありました。「Javaでは」というアイコンが演習
それぞれにあり、Javaでのプログラム例などもかかれていました。

パソコンが飛んでしまってどこなのかわかりません・・・もしご存知の方
がいましたらお願いします。
LonghornとWinFXでは、.NET FrameworkとWindowsの関係が変化する。基本的なOS機能
(例えばAvalonグラフィックスおよびユーザー・インターフェイス・サブシステムや
WinFSファイル・システム)は少なくとも部分的にマネージ・コードとして実装される。
そして、.NET FrameworkはC#やVB.NETなどのプログラミング言語とともに、開発者が
それらのOS機能にアクセスする際の基本的手段となる。
開発者は従来どおりCやC++などの言語によるネイティブ・コードを書いてこれらの
機能にアクセスできるが、そのコードはネイティブ・コード・アプリケーションと
マネージ・コードAPIの翻訳を行う「Interop」レイヤを通過し、それによって
オーバーヘッドが増える。

http://www.atmarkit.co.jp/fwin2k/insiderseye/20040107winfx/winfx.html
>>548
おそらく、ここでは?
ttp://www.sist.ac.jp/~suganuma/index.html

「C言語 Javaでは? 演習問題」で検索したら6件目でしたよ。
最近はCを勉強するのにJavaをリファレンスにするのですか?
うーん、時代は変わったものだ。
逆だよな。Javaの仕組みを解説するために
Cの場合では・・・とやるのならわかるが。
えーと、すみませんがちょっと質問させて下さい。

ソースを書いている時、カーソルが「 l 」ではなく「 ■ 」になってしまう事があります。
これはどういったことで起こりうるのでしょうか?
また、「 l 」に戻すにはどうすればよいのでしょうか?
よろしければ教えてください!!


net2002を使っています。
554デフォルトの名無しさん:04/06/07 10:14
ぶしつけな質問すみません。
(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE)
っていう一文があるんですが、
親ウィンドウのハンドルhWnd と この一文でとられるプログラムのインスタンスハンドルって
どう違うのですか?
親ウィンドウのハンドル → 親ウィンドウのアドレス
プログラムのインスタンハンドル → ??
>>553
[Insert]キー押してみ

>>554
ハンドルとアドレスは違うよ
>>554
どう違うかといわれても、ウィンドウとインスタンスの違いとしか言いようがない。
ググればインスタンスとは何か出てくるからそこで調べれ。
>>550
ありがとうございます、ここでした。
2時間ぐらい、ぐぐっても俺は見つけきらなかった・・・
本当にありがとうございました。
>>555
レス感謝です。解決しました!!
かなり使いづらかったんでめちゃ助かりました♪
559デフォルトの名無しさん:04/06/07 13:23
VC7 なんだけど,
クラスウィザード使わずに,
類に函数の定義を加えたら,
「クラスヴユー」のその函数をクリックしても,
函数の定義のところ(.cpp ファイル内)にとばずに,
.h のその函数の宣言にとぶようになっちゃった

不便でしょうがない

うまく関連づける方法はないの?
類?
ヴユー?
函数はまぁ、関数だろうけど。
句点はないし読点はカンマで代用しているし多過ぎ。
先ずは日本語の勉強したら?
> 1からすべてアイコンを作るのはなかなかたいへんですし、
> それなりにセンスを要求されます。
> そんなときにはWindowsに付属するアイコンを利用するのも1つの手です。
> Developer Studioの[ファイル]-[開く]からEXEファイルやDLLファイルを開くと、
> そのファイルに含まれているアイコンなどのリソースを取り出すことができます。

参考にした本にはこう書いてあるんですが、いろいろやってみてもできないです。
こういうことできますか?

本と環境は両方VC++6.0です。
>>561
同じVCつってもバージョン、エディションによってはできない。
リソースを取り出すツールがフリーであるから
それを使えばよい。俺は使ったことないけど。
VC++6.0でMFCを使っています。
SetTimer()を使ってタイマを走らせているのですが、
なぜか一度もOnTimer()に到達してくれません。
SetTimer()の戻り値では0以外が帰ってきているので失敗はしていないと思いますが…。
分からずらい質問で恐縮ですが、どなたか教えていただけますか?
>>561
できるよ。Developer Studioの[ファイル]-[開く]から
EXEファイルやDLLファイルを開く時に
ファイル選択のダイアログで用途を指定するところがあるけど、
そこを「自動」から「リソース」に変更すればOK
>>566
うい、類については理解した。
VC++を使わず、テキストエディタでのプログラミング中に、
MSDNライブラリを参照したいときがあるのですが、

MSDNライブラリだけを直接、起動することって可能ですか?
VC++を起動していないとMSDNは起動できないのでしょうか?
スタートからプログラムに登録されてない?
>>568
MSDNだけ起動できますよ。
プログラムメニューにありませんか?
571570:04/06/08 00:23
あらかぶりましたね
俺はMSDNへのショートカットをWindowsの
クイックランチャーに入れてますよ。
スタートボタンの横に並んでる小さいアイコンね。
クリック一発起動です。
572デフォルトの名無しさん:04/06/08 00:31
>>705
補足+質問です
start関数とmain関数を二つのファイルに分けてあるんですが、
グローバル変数の宣言はどっちのファイルですればいいんですか?
573デフォルトの名無しさん:04/06/08 00:31
誤爆です
すみません・・・・
>>570
>>569

ありがとんです。
スタートメニューに無かったので、再インストールしたところ、
スタートメニューに現れました。以前に消したのかもしれません。

exeファイルでもなく、helpファイルでもなく、colというファイルなのですね。
早速、クイックランチャに登録しました。

ありがとんでした。
575569:04/06/08 00:38
>>570
漏れはスタートアップに入れてる(TT
(ついググル癖がつくのでそれを戒めるために...)
576561:04/06/08 13:16
みなさんありがとうございました。
>>565さんの方法で開けました。
アイコン以外にもメニュー、ダイアログとかいろいろ開けて便利そうですね。
あとEXEやDLLのリソースをDeveloperStudioで直接編集もできるようでした。
577デフォルトの名無しさん:04/06/08 16:34
質問なのですが、
VisualC++6.0を使ってJPEGファイルをピクチャボックスに表示したいのですが、
どのようにすればいいのでしょうか?
参考になるHPを探したのですが見付かりませんでした。
よろしくお願いします。
>>577
OleLoadPicture
IJGのライブラリ
GDI+
とか
579デフォルトの名無しさん:04/06/09 01:44
おながいします。VCのダイアログエディタで
コントロールのサイズを設定したいのですが、
VBのようにHeight、Widthといったプロパティ
が見当たりません。どうすればいいのでしょうか?
VC6.0でつ。
?
辺をドラッグすればいいのでは?
コードで設定するならMoveWindowとか。
>>580
レスありがとうございます。
サイズ設定をキーボード入力でしたかったのですが
ないみたいですね。マウスでドラッグするしか。
使いづらいでつ。。。
>>581
グリッドとか、レイアウトでそろえる
適当に作ってからリソーススクリプト(.rc)を手で編集
583デフォルトの名無しさん:04/06/09 07:27
>>582

>>579
>VCのダイアログエディタで

>>583
池沼?

>>579
>が見当たりません。どうすればいいのでしょうか?
>>581
キーボード使うなら
 [矢印]で移動
 [矢印]+[SHIFT]でサイズ変更
 (座標は右下のステータスバーに表示)
マウスよりは細かく位置合わせすることができると思います。
VBみたいに座標を直接入力できませんが。
586577:04/06/09 14:19
>>578
レスありがとうございます。
早速OleLoadPictureを使ってみようと思い、
ttp://www.athomejp.com/goldfish/mfc/cobject/jpegview.asp
を参考にしながらソースを書きましたが、ピクチャボックスに表示できません。
OleLoadPicture処理そのものは成功しているようです。
OnPaintの中がおかしいかと思うのですがこのような処理ではダメでしょうか?
続く
587577:04/06/09 14:23
586の続き
if(m_pJpeg != NULL)
{
CWnd*myWnd = GetDlgItem(IDC_PICT1);
CDC*pDC = myWnd->GetDC();
CDCmyDC;
RECTrc;
myDC.CreateCompatibleDC(pDC);

myWnd->GetClientRect(&rc);// クライアント領域を取得

long hmWidth;
long hmHeight;
m_pJpeg->get_Width(&hmWidth);
m_pJpeg->get_Height(&hmHeight);
CSize size(hmWidth, hmHeight);

myDC.HIMETRICtoDP(&size);

// 描画する
m_pJpeg->Render(myDC, 0, 0,
size.cx, size.cy,
0,
hmHeight,
hmWidth, -hmHeight,
&rc);
}

正直デバイスコンテキスト部分が怪しいかと思うのですが、
どのような処理にしたらよいのかわかりません。
よろしくお願いします。
下らない質問なのですが、フォルダをプロジェクトにインクルード(追加)するには
どうしたらいいのでしょうか?
フォルダの中にはライブララリとかが大量に入っており、これを追加しないとコンパイルが通らないんですが・・・・
589588:04/06/09 15:59
使用しているのは Visual C++ 6.0 です。よろしくお願いします。
メニューの「ツール」ー>「オプション」の
「ディレクトリ」で設定する
>>590
ありがとうございました。
ウィンドウの拡縮をするには、どういった記述をすればいいんですか?
VC++6.0を使ってます。
SetWindowPos or MoveWindow
あ、それだとウィンドウのサイズを変更するだけですよね?
そうではなくて、「拡大と縮小」です(判りづらかったらすいません)。
非クライアント領域も含めて?
596デフォルトの名無しさん:04/06/10 01:01
VC6にやられますた。
grepですが、これってファイルがエディットボックスで指定したフォルダに
なかったら、プロジェクトに取り込まれていても検索対象にならないんでつね。
そのくせフォルダ内にあれば取り込んでいなくても検索されまつ。
下の方にチェックボックスで「プロジェクト内のソースファイルを探す」みたいな
いかにもそれっぽいのがあるのですがこれも空振りですた。
VC6の検索ってバグありなんでつか?
>>594
分かりづらいと思うんなら同じ言葉繰り返さないでちゃんと人に分かるように
説明しろよ。それじゃ全くわからん。
ウインドウ内部の画像か何かのズーミングってことかな?
拡大縮小と言わずに拡縮なんて言葉を使ってるくらいだから画像か?
599592:04/06/10 19:31
>>598
そうです、そうです。
それと、画像自体に処理を加えるのではなく、ウィンドウサイズの変更を検出して、クライアント領域を
縮小(拡大)する、といった事をしたいと思っています。
WM_SIZEにすら到達しとらんのかおまいは
だから
オブジェクトの位置変更やサイズ変更はMoveWindow()だって
602592:04/06/10 23:46
>>600-601
いや、違うんですよ……といっても、上手く説明する手だてが見つからない……。
仕方がないので諦めます。スレ汚しすいませんでした。
(というか、Windowsの世界では、サイズ変更のことを「拡大・縮小」っていうんですか? 今回の質問で
 なんとなくそんな気がしたのですが……だとしたら、もう一度そういうところから勉強し直してきます)
603超初心者:04/06/11 00:51
すみません。ちょっと質問なのですが、下のように全く同じ文を打っているはずなのですが、
片方ではエラーが出てしまいました。気になって仕方がありません・・・・(T_T)
何か思い当たる原因はないでしょうか?net2003を使っています。




else 
puts("〜〜〜〜〜〜〜〜"); ←エラー

else
 puts("〜〜〜〜〜〜〜〜");  ←成功
どんなエラーがでるの?
全角スペースとか入れてない??
605603:04/06/11 01:10
レスどうもです♪それと説明不足でした。すみませんm(__)m
全角スペースは入れてません。
で、下のエラーが出てきてしまいます。

TextFile1.c(15) : error C2065: 'else@' : 定義されていない識別子です。
TextFile1.c(15) : error C2146: 構文エラー : ';' が、識別子 'puts' の前に必要です。
TextFile1.c(15) : error C2144: 構文エラー : '<不明>' は '<不明>' によって先行されなければなりません。
TextFile1.c(15) : error C2144: 構文エラー : '<不明>' は '<不明>' によって先行されなければなりません。
TextFile1.c(15) : error C2143: 構文エラー : ';' が '識別子' の前にありません。

その文だけを入れ替えると成功するので、他は問題ないと思うのですが・・・・。
elseの後にゴミでも入ってるっぽいがよくわからんな
elseの前に問題がありそう。
;がないとか
608603:04/06/11 01:39
>607
>605の終わりでも書きましたが、その文だけを入れ替えて成功するので、elseの前には
特に問題がないと思うんですが・・・前の文の終わりにも' ; 'はきちんと書いてありますし。

その後、何度書き直しても全部成功するんでとりあえず先に進むことにします。

皆様レスありがとうございましたm(__)m


・・・・・ちょっと嫌な感じで気になっちゃってますけど。
>>603
elseの後、putsの前だってばさ。
まぁ、ふつーのエディタならなんらかのゴミが入っていれば見えるんですがねぇ。
そのままコピペすると一つ目のelseの直後に全角スペースが入ってるな
611デフォルトの名無しさん:04/06/11 14:08
VC7 で dll を作るとする.
実装部分では MFC をまったく使っていない.
ところが VC7 のプロジェクトの新規作成のウィザードで
dll を作れるのは,「MFC DLL」ていう項目しかない.

それで新規のプロジェクトを作成すると,
勝手にできる stdafx.h に MFC 関係のヘッダがいろいろ
include されている.

MFC 抜きの dll を作るにはどうしたらいいの?
>>611
「Win32 Dynamic-Link Library」って項目無い?
613デフォルトの名無しさん:04/06/11 14:40
>>612

ないっすね
dll を作ってくれそうなプロジェクト項目は

・MFC DLL
・MFC 拡張 ISAPI Dll
・拡張ストアド プロシージャ

だけです.
614612:04/06/11 15:02
>>613
612はVC6のだった。

「Win32プロジェクト」ってのにして
ウィザードの「アプリケーションの設定」でDLLに。
リソースのStringTableを参照する場合、
char strHoge[STR_LENGTH];
LoadString(hInstance,IDS_HOGE,strHoge,STR_LENGTH);

必ずこんな感じにしないといけないんでしょうか。
スレ違いだったらすいません。
C++の実行時型情報(RTTI)についての質問です。
#include <iostream>
#include <ctime>
#include <conio.h>
#include <typeinfo>

using namespace std;

class bass {
public:
virtual void func() = 0;
};

class derived : public bass {
public:
void func() {}
};

void main()
{
bass *p;
derived dr;
p = &dr;

cout << typeid(*p).name() << endl;
}
このソースをコンパイルすると
'typeid' が /GR- を使用したポリモーフィック型 'class bass' で使用されています; 動作結果は保証されません。
と警告がでて、実行するとエラーになります。
原因がわかりません、どなたか教えてください、、、。
環境はVC++ 6.0 windows xpです。
>>616
1.メニューから[プロジェクト]-[設定]
2.[C/C++]タブを選択
3.カテゴリ(Y):のコンボボックスから[C++言語]を選択
4.[RTTIを有効にする]のチェックボックスにチェック
でどうでしょう?

あと揚げ足取りになりますが、ソース中のbassはbaseでしょう。
618616:04/06/11 21:35
>>617
できました!
親切に教えていただきどうもありがとうございました。
これからもがんばっていこうと思います。
>>615
CStringでもできるよ。
620名無し@沢村:04/06/11 23:55
ちっ、ここはザコが立てたスレか?
Windowsプログラムとは可愛いやっちゃ♪
こっちはメインウィンドウ完成間近だというのによ…♪もうすぐメインウィンドウできるよ〜♪
といってもCとかアセンブラとかでメインウィンドウ組むんじゃないぞ。それじゃまるでザコだ。
こっちは、メインウィンドウがつくれるプログラムつくってるのよ〜♪つまりVisual E++だ。
そうです、みなさんもうすぐVisual E++はメインウィンドウがつくれる本格的なプログラミングソフトに進化します♪
いまやっとVisual E++に補助的にバイナリエディタつかってメインウィンドウつくるのに成功したところ。
補助的にバイナリエディタつかわないで、Visual E++のみでメインウィンドウつくれるよになるには、あと修正個所が1、2個所…
みなさんもうすぐでっせ〜♪
621名無し@沢村:04/06/11 23:59
ちっ、ここはザコが立てたスレか?
Windowsプログラムとは可愛いやっちゃ♪
こっちはメインウィンドウ完成間近だというのによ…♪もうすぐメインウィンドウできるよ〜♪
といってもCとかアセンブラとかでメインウィンドウ組むんじゃないぞ。それじゃまるでザコだ。
こっちは、メインウィンドウがつくれるプログラムつくってるのよ〜♪つまりVisual E++だ。
そうです、みなさんもうすぐVisual E++はメインウィンドウがつくれる本格的なプログラミングソフトに進化します♪
いまやっとVisual E++に補助的にバイナリエディタつかってメインウィンドウつくるのに成功したところ。
補助的にバイナリエディタつかわないで、Visual E++のみでメインウィンドウつくれるよになるには、あと修正個所が1、2個所…
みなさんもうすぐでっせ〜♪
そうで〜す!
ここはザコが立てたスレで〜ス!
だからザコじゃない沢村君は来ないでくださ〜い!
いくらで売ってんだよ?
テンプレにもねぇし。
意地悪。
今日初めて知った。
0で割るとVC++6.0はプログラムがエラー吐いて停止するのに、
VC++.NET2003だとゴミを返して何事もなかったかのように
走り続けるのか。
おかげでバグ取りに苦労したよ。
2003でも0除算で落ちるけど…?

浮動小数点型だと 6 でも 2003 でも、
0除算で落ちないけどな。
626デフォルトの名無しさん:04/06/12 08:35
class TEST{
TEST(CString s){}
};

int main(){
WCHAR w[] = L"うほっいい男";
TEST test1(CString(w)); //変数宣言じゃなく、プロトタイプと見なされる。
TEST test2 = CString(w); //これなら大丈夫
}

VC7.1(2003)だけど、これはコンパイラが悪いよね?
それとも、漏れなんか勘違いしてる?
627626:04/06/12 09:04
ん?関数って
int hoge(int(a));
こんなのもいけるのか?
と思って規格見たけど見つからないし、聞いたことないしなあ・・・
>>626
main()が値を返していないのが悪い
>>626
TEST test1(CString((const wchar_t*)w));

で、OK
>627 余分なカッコ解釈してるだけだろ?
>>626
Effective STL 第6章より

// int取る関数宣言
int f(int a);
int f(int (a)); // こいつに該当してる
int f(int);

// 関数ポインタとる関数宣言
int f(int (*p)());
int f(int p());
int f(int ());

// 解決方法 // ちなみに VC6だと通らない気がした
int f((int(a)));
632626:04/06/12 18:48
レスthanks。
やっぱり漏れの間違いか・・・
int f();
は関数宣言になるから駄目だと知ってたんだけど、こんな場合も駄目なんだね。

>>628
悪くないYO!
>>632
悪いよ。
宣言云々とは別の問題だけど。
たしかに mainが値を返さなくても目立った問題は起きないが
main関数ひとつすらマトモに書けないようヤツはキライだ。
635626:04/06/12 21:24
ISO/IEC14482
3.6.1 5 ・・・If control reaches the end of main without encountering a return statement, the effect is that of executing
return 0;

つーことで、mainだけはreturnを書かなくても、return 0;したことになるYO!
決して値を返してないわけじゃないYO
そろそろC++スレ行ってくれないか。
>>635
そういう問題じゃない
638デフォルトの名無しさん:04/06/14 20:18
VisualC++のエディタを賢くする方法を教えてください。

1、予約語やコメントを色を簡単に変更する方法を教えてください。
viのsyntaxみたいにしたい

2、インデントがおかしいelseの括弧を閉じるて改行すると一段上がってしまう。
  caseのインデントがおかしい
viのcindentなみにしたい

3、一括インデントはないんですか。
viの=Gみたいにしたい
有る。
探せ。
640デフォルトの名無しさん:04/06/15 00:42
CImageクラスを使用しています。
イメージをJpeg形式で保存したいのですが、圧縮率が変えられません。
Imageクラスなら変えられるんですが、DIBじゃないので困っております。
CImageでエンコードの設定ってできないですか?
どなたかお助けを・・・
VBみたいに

コントロール配置して、それに対してイベントドリブンでC言語を書くもの
だとばかり思っていたよ。
642デフォルトの名無しさん:04/06/15 01:33
>>641
? おまいのはそうじゃないの?
643デフォルトの名無しさん:04/06/15 01:38
>>624
そこはOSの担当だから、VCのバージォンがどうとかは関係なくない?
>>638
そんなに言うならvi(のWinクローン)でソース書きゃいいのに……。
>>644 ゴミレス (゚听)イラネ
646デフォルトの名無しさん:04/06/15 04:43
>>645の存在自体(゚听)イラネ
ActiveX Scripting Hosts を使って
自作のアプリにマクロ機能を付けたいのですが、
どなたか参考になるサイトか書籍を知りませんでしょうか?
648638:04/06/15 06:19
いくら総合開発環境といってもエディタが馬鹿だったら
ソースが汚くバグが入ってしまう。

>>639
本当にあるならヒントください。
くれぐれも >>644 のような答えはやめてね
gvimでソース書いてvisual C++で開きなおす
なんて非効率な作業はやりたくね。

開くエディタをgvimにしてデバッグしてエラーが出ると
gvimでエラーがでて使えない。
オプション
アプシャン
ミッソー
ダボォ
653638:04/06/15 10:27
説明のしかたが悪かった。反省します。

1、予約語やコメントを色を数百台すべて同じにしたい。
  オプションで一つ一つクリックじゃなく設定ファイルをコピーするような変更方法

2、インデントがおかしいelseの括弧を閉じるて改行すると一段上がってしまう。
  オプションの「なし」や「ブロック」や「スマート」はどれもだめ
  ユーザ自身でインデントをカスタマイズする方法

3、一括インデントはないんですか。

どうでしょうか?
>>653
ヘルプも読まんで質問すんなボケ

Visual C++ のテキスト エディタは以下の機能を備えています。
コード構文の自動補完。
マクロによるテキスト エディタの自動化。
C/C++、SQL、および HTML を含む異なるプログラム言語のソース ファイルの作成。
構文の色の設定とカスタマイズ。
(以下略)

目的に合ったトピックをクリックしてください
自動インデントを設定する
スマート インデントを設定する
タブとインデントの設定を変更する
タブ記号の表示/非表示を切り替える
複数の行を一度にインデントする
複数の行のインデントを一度に解除する
>>653
じゃあ一つだけ教えてやるよ。
予約語(もしくは任意のシンボル)に色をつけたければ
USERTYPE.DATっつーファイルに列挙しろ。詳しいやり方はぐぐれば出てくる。
656デフォルトの名無しさん:04/06/15 13:51
スレッドの作り方なんだが,以下のようにして
実行しても一瞬だけウィンドウ(コンソール)が開くが,
あっという間に閉じてしまうんだが,なぜだろう?

#include "windows.h"
DWORD WINAPI hello(LPVOID);
//
void main(void){
//スレッド作成
HANDLE hThread1;// スレッド1のハンドル
DWORD dwThredID1;// スレッド1の ID
hThread1 = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE) hello, 0, 0 , &dwThredID1 );
}
//
DWORD WINAPI hello(LPVOID p){
printf("hello!\n");
getchar();
return 0;
}
>1、予約語やコメントを色を数百台すべて同じにしたい。

なぜ?
もまえんとこは数百台の端末を取っかえ引っかえ使って開発するのか?
>>656
オモロイ
ワラタ
659デフォルトの名無しさん:04/06/15 14:24
getchar();
>getchar()
何?
>>656
キミはスレッドについて1から勉強しなおしてきなさい。
>656
とりあえず、ヒントを与えるとすると
「スレッドを作り出した側は今何してる?」だ
(なんて親切なもれ)
663>>656:04/06/15 15:47
>>662

つまり,メインのスレッドが終わってしまったので,
子スレッドもおわったしまったという解釈でいいのでしょうか?
今からこのスレは「663のスレッド学習室」になりました。
>>654
なんだか何かを貼り付けただけみたいなw
だがヘルプ見るいい機会になったよ

>複数の行を一度にインデントする
Ctrl+A Ctrl+K Ctrl+Fがわかったよ

あとは期待はずれだったw

>>655
教えてくれてありがと
USERTYPE.DATを調べたよ
予約語でもコメントでも関係ないユーザーキーワードに色付けるんだろ
関係ないじゃん

ちゃんと質問をみてくれよw
的外れだなw

結局3以外はできないことが良くわかった
ここで質問する所ではないこともよ〜くわかったw

で俺なりに調べて教えていただいたかたに教えてやろう
HKEY_CURRENT_USER\Software\Microsoft\Visualパケージ名\バージョン\FontAndColors\{A27B4E24-A735-4D1D-B8E7-9716E1E3D8E0}
ここら辺をエクスポート後は100台の機械上でダブルクリックするだけだ
はい次の質問どうぞ。
667638:04/06/15 20:25
あ、ごめんオプションでよかったんだ

2、インデントがおかしいelseの括弧を閉じるて改行すると一段上がってしまう。

中かっこをインデントするをはずす

これで全部問題解決したよ
>>638はなかなかの筋の教えて君ですな。
669デフォルトの名無しさん:04/06/15 20:43
皆さんは、なんで、Delphiでやんないのですか?
VCの方が大変じゃないですか?
>>669
「Cの次はDでしょう」なんて平気で言う腰抜けBorlandには興味ない。
だいたい「VCのほうが大変だ」などと思ったことは一度もない。
CRecordset rs(&db);
rs.Open(CRecordset::snapshot, _T("SELECT TEST1.name,TEST2.name FROM TEST1,TEST2"))

CString varValue;
// rs.GetFieldValue( "TEST1.name", varValue );
rs.GetFieldValue( "name", varValue );

上記のように同じ名前の列名を持つrsを作った場合、
GetFieldValueで希望の列を参照することはできるのでしょうか?
コメントアウトの様に指定してもエラーになってしまいます。
それ、Open成功してるのか?
SQL文のさいごに ; がないよ
673デフォルトの名無しさん:04/06/15 23:06
CImageクラスを使用しています。
イメージをJpeg形式で保存したいのですが、圧縮率が変えられません。
Imageクラスなら変えられるんですが、DIBじゃないので困っております。
CImageでエンコードの設定ってできないですか?
どなたかお助けを・・・
日本語のフォントが無いパソコンでαを表示するにはどうすればいいでしょうか?
本を片手に簡単なソースを書いてコンパイルしようと思ったんですが、
どうしてもコンパイルできなくて困っています。
VC++.netを使っているんですが、cppのファイルをコンパイルするには
どうすればいいのでしょうか……本にはvsvers32.batがあるフォルダで、
このバッチファイルを実行しろと書いてあったのでやってみたんですが、
何回ダブルクリックしても開けなくてダメでした。

昨日ソフトインストールしたばかりの初心者で、プログラミングの知識は
ほとんどありません。釣りでもネタでもなく、真剣に困ってます。
対処法を教えてください、お願いします。
バッチファイルはコマンドプロンプトから実行
一旦ログオフ
ログインしてコマンドプロンプトを起動
C:\> cl file.cpp
でfile.cppがコンパイルされる
ってコマンドラインからコンパイルしたいのか?

×「プログラミングの知識はほとんどありません。」
◎「パソコンの知識はほとんどありません。」
さあまずはこんにちわマイコンから始めようか
679デフォルトの名無しさん:04/06/16 00:13
VC++.NETでMFCを使用した標準DLLを作っています。
VBから参照して使用したいのですが、参照はできても関数が一切見えません。
どうやってエクスポートするのでしょうか?
.DEFファイルにちゃんと書いているのですが…。
どなたか教えてください。
>>678
「さまあずのこんにちはマイコン」っていう本があるのかと
思ったぞw
VC++.NET でオーナードローボタンの作成に挑戦しているのですが、
マウスクリック連打すると、反応が普通のボタンに比べて鈍いのです。
自分でGoogleで検索してみると、ダブルクリックに対する反応を無効にしなければならないようです。
具体的にどうしたら無効化できるのか、教えていただけないでしょうか?
>>681 PreCreateWindowで、CS_DBLCLKSをとる
>>650-652
グラディウスわろた

りっぷぅれいざー
684デフォルトの名無しさん:04/06/16 05:43
超初心者です。

公開されていたソースをコンパイルしてみたいのですが、
下記のエラーがでます。

<エラー>
 fatal error C1083: インクルード ファイルがオープンできません。
 'boost/timer.hpp': No such file or directory

「timer.hpp」は他の場所で公開していたので入手しました。
どこに配置すればエラーがでずにコンパイルできまつか?
でつまつ使う奴は答えない
684は答えが目の前にあってもわからないタイプの人間だ。
きっと小学生の頃、算数の文章問題(国語能力が必要)が解けなかっただろう。
>>684
インクルードファイルをフルパスで指定したらいいでつよ
Cの勉強を始めようと思い、VisualC++.netを買おうと思うのですが、
VisualC++.netには、プロジェクトの管理や、コンパイルなどを操作できる、
GUIのインターフェースはついているのでしょうか?

マイクロソフトから落とせる.NET Frameworkという物でも
Cのプログラムが作れると聞いたので、落としてみたのですが、
コンパイルがコマンドラインからしかできないらしく、止めました。

CのプログラムをGUIでするには、VisualC++.netだけ買えばいいのでしょうか?
それとも、VisualStudio++.netを買わなければいけないのでしょうか?

ものすごくとんちんかんな事を聞いているかもしれませんが、
その時はすみません、スルーしてください。
Cの勉強だけに VisualC++.net 買うのは金の無駄。
難しいことを避けてるようじゃプログラムは作れないだろうし
ありがとうございます、682 さん。
でも当方MFCを使用していないので、PreCreateWindow は使えないのです。
代りに以下のように動的に取り除いてみましたが、
etWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) & ~CS_DBLCLKS);
やはりオーナードローボタンの反応は鈍いままです。。。
基本的に処理が重いのだろうか?、ちなみに環境はP4(3GHz)、メモリ1GBです。
失礼↑
SetWindowLong(hwndCsw0, GWL_EXSTYLE, GetWindowLong(hwndCsw0, GWL_EXSTYLE) & ~CS_DBLCLKS);
です、先頭1字が抜けてました。
>>688
> CのプログラムをGUIでするには、VisualC++.netだけ買えばいいのでしょうか?

それでOK

後は>>482-485あたり
>>690
こりゃ、ウインドウスタイルを書き換えてるね。

クラススタイルだから、
SetClassLong(hWnd, GCL_STYLE, 0);
だね。
694675:04/06/16 16:35
いろいろ悪戦苦闘しながら試してみたら、うまくできました。
もう少しネットで情報集めたりしながら、マターリやっていきたいと思います。
>>676さん、ありがとうございました。
693 様、あ、ありがとうございました〜。 <(_ _)>
軽快に動作するようになりました。

他の閲覧者の為に、以下のように変更したらOKだと報告します。

SetClassLong(hwndMBtn0, GCL_STYLE, GetClassLong(hwndMBtn0, GCL_STYLE) & ~CS_DBLCLKS);

>>679
スレ違い。
VBから直接使用出来るDLLはActiveX DLLのみ。
通常のDLLはWin32APIと同じようにして使う。
697688:04/06/16 21:18
>>689,692
アドバイスありがとうございます。
VisualC++.netを購入してみようと思います。
698684:04/06/16 21:31
>>687-688

ありがトン
無事解決いたしました!!
凄いハイパワーマシン使ってる奴は
なぜか大抵
本人はローパワーだよな。
700デフォルトの名無しさん:04/06/16 23:58
コンソールアプリケーションでコンパイルしたときconsole.hが
見つからないとでたんですが何かインストールしないと無理ですか?
またお前か・・・・・・・・・。
>699
ハイパワー = 最近買ったPC ≒ 初心者が多い

>>545
この本買ったんですが、演算問題の解答集は別売りなんですね(;´д`)
解答のない問題に何の意味があるんだろう?

プログラムはそういうものだから
>>705
それでも初心者用の本なんだから、模範解答位書いといて欲しかった・・・。
一応は書けても、もっといい方法もあるんじゃないかと気になってしょうがないです。
かといって解答集なんて買いたくないし。
>>706
そらすべての問題、説明に答えがないならそうだろうが
一部の問題、それも宿題形式のおさらいに答えがないとわめかれても
僕ちゃんに優しく教えてくれるママさんつきの教科書なんてねぇわけでな。
回答集売ってるんならそれがユーザー向けに価値があるって作り手も考えている
わけだろ?ならそういう具合にばらして売るのは親切じゃないって反応もあって然る
べきかと思う。

>>707
>僕ちゃんに優しく教えてくれるママさんつきの教科書なんてねぇわけでな。

そう考えちまうのはおまいは解説本制作に向いてないってことだな
BBSのボランティアと販売書籍は違うぞ
>>708
回答集なんて者は売っていない訳で。
あくまで問題集の中に含まれているだけで、
僕ちゃんがそれでも欲しいというのなら買えばいいだろう。
そもそも答えの複数ある宿題なんだから
僕ちゃんなりに考えなさいという作者のものすごい思いやりなんだが
ママが横についていないと出来ない子の事まで作者も思いつかなかったんだろうな。
解答集<>回答集に対する揚げ足レスか?
>>706
> かといって解答集なんて買いたくないし。
などと言ってるから、解答集はあるんじゃないのか。
> 推薦図書/必読書のためのスレッド PART 10

> 129 名前:デフォルトの名無しさん投稿日:03/05/10 22:03
> そういえばK&Rにはアンサーブックありますが
> ストラウストラップにはアンサーブックないんですね。
> でもプライマーにはある。なんなんでしょ。
Visual C++で気の利いたソフトでも作ったると思い立ち勉強しています
MFC、Windows API、WTLなるみっつの手法のサンプルプログラムを数本作ったところです

MFCは、ドキュメントビュー・MFCクラスウィザードなんかで開発効率良さそうと感じたのですが
作成したプログラムにDLLがいるとのことで敬遠(同じような理由でVBも敬遠)

Windows APIは、OSのAPIを直で呼ぶということで処理効率良さそうと感じたのですが
プログラム書くの大変・・・

ということで、WTLというのを知り手をつけたのですが
これがオブジェクト指向ですっきり書けるようで気に入りこれでやっていこうかなと思いました

このままWTLで突っ走っても大丈夫なのでしょうか?
今は噂の.NETでやるべきなのでしょうか?(VC6しかないので無理かもしれませんが)
WTLとやらは時代遅れだったりします?
>>712
MFCのDLLはVC6以前のverなら普通にOSに付属しているのでVBとはちょっと違う
win95には付いていないがMFCのDLLくらいは入れてあるのが当然と思っても良いくらい
普通にMFCアプリが出回っているので(IE関連のインストでも)

VCでプログラム書く初心者ならMFCで始めるのが最も一般的
>>712
> 作成したプログラムにDLLがいるとのことで敬遠(同じような理由でVBも敬遠)

あなたは騙されているようですね。
確かにシステムDLLは必要ですが、それはSDKのみで作成しても同じなわけで。

自分自身はWTLを便利に使わしてもらってます。
Win32でやる限り、時代遅れってことはないんじゃないですか。
715デフォルトの名無しさん:04/06/17 23:36
>>712
だからスタティックリンクにすればDLL要らないと
何度言えばわかるんだ
>>712はスタンダード版を使ってると予想してみる
そういやWTLまだ使ってないや
718デフォルトの名無しさん:04/06/18 01:21
教えてください。。。
socket通信をするプログラムA.exe(データをsocketで受け取り、
処理をして指定のファイルを作る)を作って、これをWINXP上の
「サービスとアプリケーション」に追加させ、PCを起動するたびに
裏で起動させようとしたのですが、なぜか起動しません。。。
A.exeを単体で起動(アイコンをダブルクリックして)すると動くのですが、サービスとして
起動させると立ち上がらないのです。
(色々調べたのですが、解決法が載ってなくて・・・)

なんか原因がわかる方がいましたら、教えてください。
ちなみにA.exeは、コンソールアプリのC++.NETでOSはXPです。


>>718
> これをWINXP上の
> 「サービスとアプリケーション」に追加させ、PCを起動するたびに
> 裏で起動させようとしたのですが、

ソケットだのなんだの要らないこと書いてないで
そこんところを具体的にどう書いたのかを説明しないと・・・
教えてください!
---------------------------------------------------------------------
char sentence[20] = "15\t21\t184\t27\n";

のようにタブと改行で区切られた数字が文字列(Char型)として
入ってる場合、これを

int code[0] = 15, code[1] = 21, code[2] = 184, code[3] = 27

のようにint型の配列に入れたい場合どうしたらいいのでしょう?
誰か親切な方よろしくお願いします。
-------------------------------------------------------------------
>>720
strtol()をループで回すかstrtok()をループで回してatoi()するか、個数がわかっているならsscanf()で切り出す。
722720:04/06/18 11:26
atoi()なんて便利なものがあったんですね。
ありがとうございました☆721さん。
723718です。:04/06/18 12:19
>>719さん
こんな感じで登録プログラムを作ってみました。
これで登録はできるんですが、起動できないということです。。。
#include<windows.h>
int main(void){
SC_HANDLE hScm = OpenSCManager(NULL,NULL, SC_MANAGER_ALL_ACCESS);

if(hScm==NULL){
MessageBox(NULL,"サービスコントロールマネージャを取得できません。","サービスの登録",MB_OK);
return 0;
}
SC_HANDLE hServ = CreateService( hScm, "A", "A",
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
"C:\\temp\\A.exe",
NULL, NULL, NULL, NULL, NULL);
if(hServ!=NULL){
CloseServiceHandle(hServ);
MessageBox(NULL, "サービスを登録しました。", "サービスの登録", MB_OK);
} else {
MessageBox(NULL, "サービスの登録に失敗しました。", "サービスの登録", MB_OK);
}
CloseServiceHandle(hScm);
return 0;
}
>>712
プログラム自体が始めてってことなら、WTLはしきいが高いと思う
情報がMFCに比べ圧倒的に少ないし、C++とテンプレートの理解がある程度必要になる
WTL、MFCともにプリプロセッサを通した後のソースを読んでみることをお勧めするよ
725712:04/06/18 15:53
レスありがとうございます

>>713
自分が思ってたよりMFCで作ったプログラムもほとんど不自由なく動かせるんですね
でもやっぱりなんとなく好みじゃない感じなのである程度勉強したらWTLの方に移りたいと思います

>>714
MFC使わなくてもDLLいるんですか_no

WebであまりWTLの情報をみかけなかったので使われない手法かと思ってたのですが安心しました

>>715
ロクに過去ログに目も通さずすみません_no

>>716
使ってるのはプロフェッショナル版のようです

>>724
プログラム自体はC(非C++)とJava(Web系)の経験が多少あります
Visual C++やるにあたって軽くC++について軽く勉強しましたが
テンプレートあたりCにもJavaにもなかったのであやしいですね・・・

>WTL、MFCともにプリプロセッサを通した後のソースを読んでみることをお勧めするよ
プリプロセッサをかけたら、素のWinMainやらWndProcに変換されるんですかね?
眺めてみます


どうも全般的に知識不足っぽいのでもう少し色々調べてないと駄目ですね
それからWTLでの開発に挑戦してみようと思います
726724:04/06/18 16:49
>>725
プログラムをやったことあるならWTLはお勧めだよ
MFCに比べればソースの量がたいしたことないので解析が簡単にできる
オープンソースになったことで頻繁にバージョンが上がっているのも良い点
727デフォルトの名無しさん:04/06/18 17:01
VC2003買ったのですが、作成した実行ファイルを見ると
@@@名前空間 みたいのが大量にお尻にくっついています。
VC6では無かったと思うのですが、どうにかしてこれは消す方法は無いでしょうか?
>>726
まだ一回しか上がってないけどな
729724:04/06/18 18:16
>>728
確かにね
一気に7.5まで上がってしかもほとんど変わってないけど
これからきっと・・・・頻繁に上がるはず
いちよう貼っとく

WTLお勉強スレッド
http://pc5.2ch.net/test/read.cgi/tech/1078150663/
VisualStudio.NETをインストールしてあるパソコンから
もう一台のパソコンに移動したいのですが、どうすれば?
>>731
腰を上げて立って歩いて行けば?
733731:04/06/18 21:30
すいません。
書き込んだ後に文章読み返してみて、来るんじゃないかなぁ〜、と思ってました。
正確には、自宅デスクトップにインストールされてるVS.NETをノートにインストールしなおしたいんです。
お願いします。
CDドライブついてないのか?
735731:04/06/18 21:38
普通にインストールしていいんですか?
>>735
要領得ないね。何に引っかかってるのかを書けよ。
738731:04/06/18 22:10
とりあえずわかった気がします。
>>723
> これで登録はできるんですが、起動できないということです。。。

イベントログになんか残ってないのか ?
ダイアログにMedia Playerのコントロールを貼り付けたのですが、
実行時に右クリックしてもMedia Playerのコンテキストメニューが表示されません。
enableContextMenuはTrueに設定してあります。
他に何か設定する必要があるのでしょうか?
テストコンテナあたりでも確認してみれ
漏れは使ったことないわ
ファイルを読み込んだときに、ボタンなどのコンポーネントを表示させたいんですが、
こういうことってMFCで出来ますか?Win32しかダメ?
>>742
CWnd::ShowWindow(SW_SHOW) でどうぞ。
デザインとしては常に表示しておいて有効/無効の切り替えをするって手もある
>>744
手もある、というかむしろそれが正解ダヨナ・・・
746デフォルトの名無しさん:04/06/22 00:08
現在、学校で出された課題をやっています。

1+2+3+・・・+nの和が500より小さい場合における、nとそのときの和を求めるプログラムを作成せよ。
という課題なのですが、試しに

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

int main(void)
{
cout << "1+2+3+・・・+nの和が500より小さい場合における、nとその時の和を求めます。\n";
int m=0;
for(int n=1;m<500;n++){
m=m+n;
}
cout << "500より小さい場合のnは" << n-1 << "\n";
cout << "500より小さい場合の和は" << m-n << "\n";
getch();
return(0);
}
と組んでみたのですが500より小さい場合のnが答えと違ってしまいます・・・。
試しに、
cout << "500より小さい場合のnは" << n-1 << "\n";
cout << "500より小さい場合の和は" << m-n << "\n";
も括弧でくくって途中の経過を確認したのですが、その時は正しくnが表示されます。
なぜなのかよく分からないので、どなたか教えていただけないでしょうか?
nのスコープがforの中だけだからじゃない?(処理系によるけど)
int nをforの前で宣言してみては?
748746:04/06/22 00:26
nの前で宣言しても結果は変わらず・・・
n=31とならねばならないはずなのにn=32に・・・。
和は合ってるのになぜだろう・・・
for文終わった後のmを出力してみれ
750746:04/06/22 00:31
今気づきましたが、なぜか和も違ってました・・・。
和が496にならなければならないところ、答えは495・・・。
なぜなんだorz
すまんよく見てなかった出力時に1回分減算してたんだな。
>>746
和が3より小さい場合、でデバッガでコード追ってみ。
>>747
スコープの外だったら、処理系関係なくコンパイルエラーだろが。
ポイントはmが500を超えた後もnはインクリメントされてるとこだね。
最後nがn++が実行されたあと、m<500が偽と評価されるんじゃない?
for文の中でnとmを出力してみれ
757746:04/06/22 00:59
>>756
そうすると正しい答えがでるんです。
なぜかfor文外で計算結果だけ出力すると間違った答えになって・・・
いや、むしろfor文の最後の評価時にnが33になっているから、
for文の中に書いてもはまる
forの仕組みを理解しよう
for( i = 0 i < 2; i++ )
iを0で初期化する (i=0)
iが2未満なので実行
iをインクリメントする(i=1)
iが2未満なので実行
iをインクリメントする(i=2)
iが2未満でないのでループを抜ける

1)
if ( m > 500 ) break;
n = 31;
m = m + n; /* m = 496; */
n++; /* n = 32 */
2)
if ( m > 500 ) break;
n = 32;
m = m + n; /* m = 528 */
n++; /* n = 33 */
3)
if ( m > 500 ) break;

n - 1 = 33;
m - n = 495;
最後のn-1は32な。
if入れるだけでよかったっていう落ちか。
forじゃなくてwhileでやるべきところだったのか。
forでよかろ?

int m=0;
for(int n=0;(m+n+1)<500;++n) m+=(n+1);


>1+2+3+・・・+nの和が500より小さい場合における、nとそのときの和
1+2+...+nの和が4より小さい場合,,,で考えてみほ
0+0+1<4 -> m=0+1,n=1
1+1+1<4 -> m=1+2,n=2
3+2+1<4 終了
-> m=3, n=2
764デフォルトの名無しさん:04/06/22 03:54
質問があって書き込みしました。 実は、
#include <stdio.h>
int main() {
int i;
char array[10];
cout << "array : " << array << '\n';
for(int i = 0; i < 10; i++)
cout << "&array" << [i] <<" : " << &array[i] << '\n';
return 0;
} char array[10];
printf("array : %d\n\n", array);
for(i = 0; i < 10; i++)
printf("&array[%d] : %d\n", i, &array[i]);
return 0;
} はc言語で、こっちなら、arrayのアドレスの出力することができるんですが、
C++言語で、 同じようなソースを書いたら、文字バケ?をするんです。
#include <iostream.h>
int main(){
char array[10];
cout << "array : " << array << '\n';
for(int i = 0; i < 10; i++)
cout << "&array" << [i] <<" : " << &array[i] << '\n';
return 0;
}
なんですが・・・型をintにすると、ちゃんとアドレスが出力されるんです。
でも、charに変えると、ダメになります。 なぜ、c言語では、普通に出力されるのに、C++ではダメなんでしょうか?
それとも、僕の書き方がおかしいのでしょうか?(多分、おかしいからでしょうが・・・)
どうかお願いします。
>>764
char* が文字列として解釈されてる。
明示的に void* にキャストすれば思うような結果が得られるはず。
それとソースはちゃんと貼れな。
>>764
iostream使わなければ正しく出力されると言うことなら、
iostreamでは余計なお世話をしてくださっていると言うことだろ。
というか、>>764のソースがコンパイル出来ない…
[i]って何よ?
>>746
スレ違い
ここはVisual C++スレ
それはC++
宿題スレじゃないか
すみません、質問させてください

同じ名前(たとえばA.cpp)のものを二つ作成(\Aフォルダ\A.cppと\Bフォルダ\A.cpp)してしまったのですが
ビルドしようとすると
「どちらも\debug\a.objを作成するために設定されているのでビルドできない」と警告がでるのですが
どうすれば解決できるのでしょうか?
単純にBフォルダを消してもダメですよね
771770:04/06/22 17:16
すみません、環境はVC++6.0のprofessionalです
プロジェクト-設定 でファイル選択して、出力ディレクトリを変更はどうか?
いじったことないからなんともいえんが
773770:04/06/22 17:55
>>772
すばやい回答ありがとうございます
とりあえず応急手当ということで「ビルドしない」という項目にチェックいれときました

で出力ディレクトリを具体的に何に変更すればよいのでしょう?適当?
あと質問ばかりで悪いのですがこれ(A.cpp)自体をこのプロジェクトから消すのにはどういった手順を踏めばいいのでしょうか?
よろしくお願いいたいします
プロジェクトワークスペースでA.cppをクリックして×ボタンをクリック
775770:04/06/22 18:49
>>774
×ボタンは見つからなかったですけどDeleteキーで消すことが出来ました
本当にありがとうございました!
>>746
自然数の和を求める公式は使わないのね
ループで回すより早いと思うが…

500くらいだったら実行速度に大した差は無いと思うけど
数がデカくなれば差が出てくるだろうに

まぁ、for文の動きを学ぶような演習なんだったら公式は使わないと思うが
777デフォルトの名無しさん:04/06/23 17:54
ダイアログ上のフォーカスをTABで移動していって、ボタンにフォーカスが来ると
点線と黒い影が出ると思うんですけど、
そこからSetFocusでフォーカスを別のとこに移動させると
点線だけ移動して、黒い影がボタンに残ったままになってしまいます。
この黒い影を強制的に消すにはどうしたらいいでしょう?
PUSHBUTTON と DEFPUSHBUTTON の違いじゃねーの?
779778:04/06/23 18:44
ごめん無視して
780デフォルトの名無しさん:04/06/23 18:50
Dialog上に配置されたピクチャーコントロールの座標(左上,右上,右下,左下)
を知るにはどのようにすれば良いでしょうか?
CRect rect;
ピクチャーコントロール.GetWindowRect(rect);
782デフォルトの名無しさん:04/06/23 19:02
タダで使えるヴィジュアルじゃないけどVisualなVC++を手に入れようと思って
ttp://cazlog.cocolog-nifty.com/blog/2004/04/microsoft_visua.html
↑にしたがってやってみたんですが
>とゆっても、Toolkitのbinとincludeとlibに、それぞれパスを通してやるだけです。SetEnv.batの最初に次のような記述を追加します。
>
>Set MSVct=Toolkitをインストールしたディレクトリ
>Set Lib=%MSVct%\Lib;%Lib%
>Set Include=%MSVct%\Include;%Include%
>Set Path=%MSVct%\Bin;%MSVct%\Bin\Win64;%path%
が、どこに記述を追加すればいいのかわからないです・・・
とりあえずSetEnvをダブルクリックしてみると、プロンプト(?)ぽいのが開くけど一瞬で消えちゃいます。

どーすればいいんでしょ・・・?(´・ω・`)
>>781
Dialogとの相対座標をできれば知りたいのです・・・
Toolkitは専用のスレがあるし、それ以前にDOSプロンプトやbatファイルの書き方勉強しる。
>>783
ScreenToClient(rect);
>>784
AnyWayThxです。

んじゃ、どっかでマルチポストしてきます。
>>777
NextDlgCtrlで。
NET2003買ったんですけどIDEの使い方の解説とかしてるサイトないですか?
何がなにやらさっぱりなんですが。
本買えよぼけ
リストビューの項目をクリックしたときに通知されるメッセージってあります?
列のクリックは「LVN_COLUMNCLICK」なのですが、どうもこれは行には適用されないようで
クラスのプライベートで、

class name{
private:
char *dogs[4] = {"Afghan Hound", "Beagle", "Border Collie", "Dalmation"};
};

のように文字列の配列を定義するにはどうすればいいんだろ。。。
>>782
conio.h をインクルードして getch(); を加えれば動く筈。
>>790
普通にWM_LBUTTONDOWNとかWM_CONTEXTMENUとか
どこにポインタがあるかはListのメンバ関数で調べる
>>791
マルチうざい
他ウィンドウのサブクラス化ってできないんでしょうか?
現在アクティブなウィンドウハンドルを取得して
そのウィンドウをサブクラス化しようとしたのですが
うまくいきません。
他ウインドウって何?他のプロセスのウインドウの事?
だったら、フックしてフックプロシージャ内でサブクラス化
797デフォルトの名無しさん:04/06/26 23:44
ダイアログでコントロール配置する時、
グリッドONでやっているのですが、
立ち上がり時はいつもグリッドOFFになっています。
常にグリッドONにはできるのでしょうか?
798デフォルトの名無しさん:04/06/27 00:12
教えていただきたいのですが、下記のプログラムの

void DumpLetterCode(const char* str)
{
for(; *str; str++)
printf("%02X ", (unsigned char)*str);
cout << endl;
}

for(; *str; str++) はどういう働きをするのでしょうか?
お願いします☆
Visual C++.net 2003を使ってるんですが、
リソーススクリプトを直接いじりたいんですがどうやったら開けるんでしょうか?
ソリューションエクスプローラーからリソースファイルをダブルクリックしても
リソースビューにとんでしまうんですが。
>>798
*strがゼロ(NULL)になるまでループ
801デフォルトの名無しさん:04/06/27 00:26
ありがとうございました☆
理解できました!!
>>799
エディタ使えば?
>800
>ゼロ(NULL)

(w
心が狭い
構成がDebugの時は _DEBUG が、Releaseの時は NDEBUG がdefineされますが、なぜ2つあるのでしょう?

どちらか片方だけ定義して、それを使うか使わないかにすれば良いのでは…?
VC7.1です
ものすごーく初歩的な質問なのですが、
VC++を使うにはC++をある程度マスターしておかないと話にならないのでしょうか。
>>806
ならないでしょう
「ある程度マスター」ってなんか変な気がするぞ
VC6 professionalを利用しております。
VC6を利用している主な理由となっているのが、Ctrl+Spaceでの入力支援なのですが、
たまぁに、自身で作ったクラスファイルがVC6側でしっかりと解析されず、含まれているはずの
メソッド、およびメンバが入力支援候補に表示されません。VC6の入力支援の候補として確実に
表示されるようにするには、何か守らなければならない文法上の注意などあるのでしょうか?
>>808
オーバーロード
継承
STL
etc…
と言ったマテリアを幾つかマスターするって意味だろ。
>>805
NDEBUGはassert.hの制御に使われる。_DEBUGはデバッグ版newなどの制御に使われる。
目的が微妙に異なるので別に用意されている。

例えば、Debug/ReleaseのほかにBetaを用意して、そこではNDEBUGも_DEBUGも定義しないとかね。
>>809
VC++のバグだから諦めろ。
>>812
.NETだとなおってる?
>>809
経験上、#define で定義した型を引数につかってたり、しかもそれが #ifdef とかで面倒な条件コンパイルに
なってたりするとによく知らんぷりをされる。
815デフォルトの名無しさん:04/06/27 13:23
>>803
無知だねえ。
NULLというドイツ語はゼロを意味するんだよ。
816805:04/06/27 13:37
>>811
レスどうもです
構成(Debug,Release)の違いを区別するための定数ではないのですね…

Releaseで使われるNDEBUGのNはNotの意味(Not DEBUG)?と勝手に解釈してましたが、
単純にそういう意味ではないのか…

ただ、assertを制御してるって事は、
Releaseする時はやはりNDEBUGを定義しとかないといけないってことですね?
# 定義されないと何が起こるのか分かってないですが… たぶん落ちるのかな??
>>816
NDEBUGの意味はNotDebugでいいんでないかな。
詳しくはこの辺りが参考になるかな。
ttp://donguri.sakura.ne.jp/~shock8/wisper/debug_release.html
818デフォルトの名無しさん:04/06/27 14:37
猫でもわかるの161章にある
LRESULT CALLBACK MyHookProc(int nCode, WPARAM wp, LPARAM lp)
{
char str[256];

if (nCode < 0)
return CallNextHookEx(hMyHook, nCode, wp, lp);
if (wp >= 0x30 && wp <= 0x39) {
wsprintf(str, "hMyHook = %d", hMyHook);
MessageBox(NULL, str, "MyHookProc", MB_OK);
return CallNextHookEx(hMyHook, nCode, wp, lp);
}
wsprintf(str, "キー入力はインターセプトされました\n フックハンドル= %d",
hMyHook);
MessageBox(NULL, str, "インターセプト", MB_OK);
return TRUE;
}
これを実行すると
二重で動作するんですがどうしたらよいでしょうか。
MFCを使ったダイアログを
スタティックライブラリで実現できるんでしょうか?

DLLで出来るのはわかってるんですが。
>>819
Prof 以上ならできる。
>>820
リソースは
リンクするメイン側に置くのですか?
822デフォルトの名無しさん:04/06/27 16:23
質問です。
#include<stdio.h>
main(){
int x[10]={2,1,5,3,11,6,88,27,68,0};
int *p;
p=x;
printf("%d",*p);
printf("%d",*(p+3));
printf("%d",*p+2);
printf("%d",*(p+7));
printf("%d",*p+7);
}
の結果が
234279
になるのは何故でしょうか?
*pを中心に簡潔に教えて頂けるとありがたいです。
823デフォルトの名無しさん:04/06/27 16:25
>>822
改行してないから
824822:04/06/27 16:29
あ、理解できました。すいみません。
>>822
面白すぎ
826デフォルトの名無しさん:04/06/27 19:44
Visual C++をつかってるのですが、乱数の”rand”や”srand”の関数が
使えません。これって違う型でするのでしょうか?(それはないやろうけど)
とにかく、エラーで”そんな関数あるか!!”という風に出ます。
インストールミスでしょうか?
それと、上に<・・・>のやつはインクルードしています。
よろしくお願いします。
stdlib
828805:04/06/27 20:29
>>817
参考になりました。ありがとうです。
VC++6.0のソースコードエディタは
もしかしてユニコード文字を入力・表示出来ない?
>>829
VC++.NETにはファイルメニューに「保存オプションの詳細設定」ってのがあるが
VC6にはない?
Irfan view はテキストファイルでもビットマップイメージに変換してくれますが
あれは一体どんな方法を使っているのでしょうか?

VCでちょっと似たようなことをやりたいので
なんかヒントをください

>>831
Bitmapを関連付けたデバイスコンテキストにDrawTextする
DLLを使用し他プロセスのウィンドウを
WH_CALLWNDPROCでフックしたのですが
WM_KEYUPやDOWNメッセージは取得できないのでしょうか。
2ちゃんねるのページ(IEとか普通のブラウザでの表示)のように、
左と右に別のスクロールを表示する方法を教えてください。
835834:04/06/28 17:58
Win32アプリの方での作り方を教えてください。
>>836
すいません。検索したらWin32が引っかかったので。
そっちのスレのほうで、聞かせていただきます。
申し訳ないです。
>>829
出来ません。そもそもエディタが対応していません。
VS.NETは対応しているのでそちらを使うことをお勧めします。
839デフォルトの名無しさん:04/06/28 20:35
MFCでJavaやWin32のように、
動的にボタン等を追加することは可能でしょうか?
(あらかじめ作っておいたボタンを消しといて、
後から表示ではなくて、ファイルかなんかにボタンの数が書いてあって、
それを縦に並べたり)
>>839
ダイアログアプリなら使える。
一画面のみのゲームとかならコレで十分かと。
>>839
CButtonクラス
DirectInputを使おうとしてプログラムを書いたのですがビルドしようとするとLINK : fatal error LNK1181: 入力ファイル "dinput8.lib" を開けません

というようなメッセージがでてしまいます、DirectXが原因かと思いDirectX 9.0bをインストールしたのですが直りません。

プロジェクト→設定→リンクのオブジェクト/ライブラリモジュールのところにはちゃんとdinput8.lib dxguid.libと書いてリンクさせています。
どなたかわかる方がいれば教えて下さい。
それでパスは通っているのか?
とりあえずフルパスで書いてみろ
DirectX関係のlibはちゃんと隣家から見えるところに置いてんのか?
845839:04/06/28 22:59
>>840
ダイアログ以外は無理なんですか?
>>845
MFCじゃ無理じゃないか?
やったことないから断言できないけど。
847デフォルトの名無しさん:04/06/29 00:19
自分ではわからない所があって、みなさんのお力をお借りしたと思い参りました!
int cintarray::Get(char *pN, const int index){
pName = new char[sum][strlen(pN) + 1];
strcpy(pName, pN);
CheckIndex(index);
sum++;
return j_pnum[index];
という風に、pNは名前を入力してさすポインタなんですが、
いくつかの名前を入力して、最後に入力した名前を表示させるたいと思ったのですが、
それがうまくいきません。初め[sum]は抜いていて、その時は、ひとつずつですが、表示させることができました。
で、2次元配列なら、全部をいっぺんに表示させることができるのではないか考えたのですが、
まぁ、↑にソースを見ての通り、エラーです。。。
全然わかりません。どうかお願いします。
>>845
動的にCreateすればいい。
dllのラッパーを作成せずに、起動中のプログラムの関数をフックするには
VirtualQueryを使えば良さそうと言うことがわかったのですが
この関数の使い方が、いまいちわかりません。

日本語で詳しい説明があるHPとか、知っている方いませんか?
850デフォルトの名無しさん:04/06/29 02:43
>>847

char **pName;

int x = sum,y = strlen(pN) + 1,i;
pName = new char*[x * sizeof(char*)];
for(i=0;i<x;i++) {
pName[i] = new char[y * sizeof(char)];
}

と2次元配列は2段階に分けて作る。
しかしこのままでは配列の大きさが決まってしまってるがね。
851デフォルトの名無しさん:04/06/29 04:14
ウィンドウプロシージャ内でオブジェクトを作り、
HANDLE_MSG(hwnd, WM_CREATE, MyWM_CREATE); として
MyWM_CREATE関数にオブジェクトを渡したいのですが方法がわかりません。

ググっているのですが情報が少なくてわかりません。どうかよろしくお願いします。
DirectXを使う場合、Win32APIとMFC。
どちらを使ったほうがよいのでしょうか?
DirectXを使うかどうかではなく、何を作るかによる。
目的と手段を混同するな。
>>853
すいません。
つくりたいものは、一言で言うと動画再生ツールです。
LNK2019 未解決の外部シンボル _XXX が関数 ZZZで参照されました
っていうエラーにおいて、

もちろん私は明示的にXXXをソース中には書いてはいないんで、XXXがどこから呼ばれてるのか
(行番号もでてこないから)分からないんですが
こういった場合効率よくエラーを取り除くにはどうすればいいでしょうか?
>>854
動画再生ツールと言っても、単純にウインドウ一つで済むのか、
多数の設定メニューが必要なのか、千差万別。
まずはどういった物を作るのか、必要項目をリストアップせよ。
つーか両方でできるなら組む人間の得意な方でやった方が良いんでないの?
>>845
ダイアログ以外でも全然平気
>>854
857にまったく同意見だなぁ
MFCで作ったほうが、メッセージ処理は楽だと俺は思うけど人それぞれだから
趣味で作ってるのなら、興味のあるほうとか得意な方でいいんじゃない
すんません、VC.netなんですけどC++のヘッダのインクルードが出来ません。
以前にbcc+psdkでやってせいで環境変数が変わってしまったんでしょうか?
C系ファイルはincludeできるのですが‥パス指定したくてもどこにヘッダが置いてあるのかもわからないし。
どうすればiostream.h等のファイルがincludeできるようになるでしょうか?
>>856
ウインドウは1つで済みますが、2つに分割します。
>>861
それならMFCかなWTLも捨てがたいが
分割ウインドウを自前で実装するのは、けっこう骨が折れる。
一度作ってしまえば再利用できるが、初回は時間がかかる。
>>862 >>863
じゃあ、MFCにします。
相談、ありがとうございました。
865デフォルトの名無しさん:04/06/29 14:48
<<850
ありがとうございました!そんな方法があったんですか。
勉強不足でした。本当にありがとうございました☆
>>860
エクスプローラで検索すれば見つかる
BINの下に環境設定するバッチもある
あるViewの中に、好きなところにScrollViewを配置する方法ってありますか?

CSplitterWndだと、Viewが分割されてしまいます。
そうではなくて、下のように埋め込まれた感じに配置したいのです。
┌────┐
│      │
│  □ .. │
│      │  (大きい四角がViewで、小さいのがScroll。
└────┘   ずれてたらすいません。)

よろしくお願いいたします。
素人な質問でスミマセンがヘッダファイルとその関数を書いたcppを利用して
main関数の書いてあるcppで使用することができるのは知っているのですが(メイン.cppとaaa.hとaaa.cppを利用してメイン.cppでaaa.cppの関数を利用)
外部に用意してあるクラスは関数と同じように外部から読み込むことはできないのでしょうか?
メイン.cppにほかに用意してあるclassをメインに記述しないで利用したいのですが。。。
>>867
CScrollViewて普通にCWndとして使えないのか?
>>868 もちろんできますよ。
aaa.cpp にクラスの定義
aaa.h   にクラスの宣言を書いて
メイン.cpp に aaa.h をインクルードすればいいです。

http://mikata.curiocube.com/oop/part3/ch01_classinst.html
ここにその通りのサンプルコードがありますね。

でもスレ違いですね。C++の初歩的な質問だから。
871( ´_ゝ`)フーン :04/06/30 01:18
>>867
CScrollView::Create()を使って、Viewのチャイルドウィンドウとして作成する。
そのとき7番目の引数のCCreateContext構造体のメンバ、m_pCurrentDocには
関連付けたいドキュメントクラスへのポインタを入れておく。
872790:04/06/30 04:38
>790の質問をしたものです。

WM_LBUTTONDOWNをダイアログのプロシージャで広うようにしたのですが、
リストビューをクリックしたときには反応せず、リストビューでない場所をクリックした場合にのみ反応するのです。
どうしたら良いのでしょうか_| ̄|○
873790:04/06/30 04:50
すみません、ぐぐったら解決しました。
NM_CLICKメッセージを拾えば良かったようです。
見つからないときはさっぱりなのに、見つかるときはあっさりですね。
>>870
ありがとうございます。
以上の方法でやってみたのですがコンパイルすることができませんでした。
VC++6.0を使用しているのですがどうも上手くファイルを読み込めていないようなんです。
ヘッダファイルはワークスペースの外部依存関係というフォルダがたしか前にあったと思うのですが今回はこれが作成されていないようでたぶんこれがいけないと思うのですがどうすれば作成できるのでしょうか?
初歩的過ぎますがアドバイスいただけると助かります。
876875:04/06/30 07:50
すみません、自己解決しました
DefWindowProc呼んでませんでした
ちょっと前に話題になってるし・・・よく調べもせず、すみませんでした(TT
877876:04/06/30 07:51
誤爆です
875さんじゃありません(TT
878デフォルトの名無しさん:04/06/30 11:18
ダイアログにラジオボタンを付けて
それにコントロール変数を追加したいんですが
VC6の時は、グループ先頭を「グループ」にチェック入れて
int変数を追加できたんだけど
VC7.1だと先頭のGroupをtrueに設定して
コントロール変数を追加しようとすると
BOOLしか追加できないみたいなんです
intで追加できないんでしょうか?
879デフォルトの名無しさん:04/06/30 11:53
リエントラントを禁止する為の、マクロかクラス
でうまい実装方法ってないでしょうか?
880867:04/06/30 12:35
>>871
よくわからないのですが、CScrollView::Create()っていうのは、
どうやって使うのですか?
CScrollViewから派生したクラスを作っているのですが、
どうやってCreateするのか、よくわかりません。
881( ´_ゝ`)フーン :04/06/30 12:39
>>880
CWnd::Create()のヘルプを見て下さい。
8821/2:04/06/30 13:29
はじめまして。スレ違いかもしれませんがまずはここで質問するべきだと思い書き込みました。
n×n行列の逆行列を求めるプログラム(nは1〜5)をVC++で作り、DLLを使って
VBで動作するようにしたいのですがDLLの作り方やexport関数などよくわかりません。
どなたか教えていただけないでしょうか?
環境 OS;XP、VisualC++6.0、VisualBasic6.0
下に逆行列を求めるプログラムを記載します。
8832/2 (1):04/06/30 13:36
#include<iostream>
using namespace std;

int main(){
int dim, i, j, k; /* カウンタ */
double pivot,erase; /* ピボット数、消去係数 */
double** a; /* 連立方程式の各係数 */

cout << "行列の次数は : "; /* 次元数の入力 */
cin >> dim;

a = new double*[dim]; /* メモリ確保 */
for(i=0;i<dim;i++)a[i] = new double[dim*2];

for(i=0;i<dim;i++){ /* 係数入力部 */
for(j=0;j<dim;j++){
cout << "a[" << i << "][" << j << "] : ";
cin >> a[i][j];
}
}

すみません、思ったより長くなったので分割させて記載させてもらいます
8842/2 (2):04/06/30 13:37
for(i=0;i<dim;i++){ /* 右半分に単位行列代入 */
for(j=dim;j<dim*2;j++){
a[i][j] = 0;
if(i==j-dim) a[i][j] = 1;
}
}

for(i=0;i<dim;i++){ /* 掃き出し部 */
pivot = a[i][i]; /* ピボット数を取得 */
for(j=i;j<dim*2;j++) a[i][j]/=pivot; /* n式をピボットで割る */
for(k=0;k<dim;k++){ /* n項を消去する */
erase=a[k][i]; /* 消去する式の係数 */
for(j=i;j<dim*2;j++){ /* 実際の掃き出し処理 */
if(k!=i) a[k][j]-=erase*a[i][j];
}
}
}

for(i=0;i<dim;i++){ /* 結果表示 */
cout << " ( ";
for(j=dim;j<dim*2;j++){
cout << a[i][j] << ' ';
}
cout << " ) " << endl;
}
return 0;
}
(バックナンバーアルゴリズム50より記載)
長文すみませんがどうかよろしくお願いします。
>>882
まずはDLLの作り方を検索したらいいと思うぞ。
886デフォルトの名無しさん:04/06/30 18:42
自作アプリで、F1キーを押すとヘルプが立ち上がろうとするんですが、
F1キーを別の用途で使いたいので、このヘルプを無効にするには
どうしたら良いですか?
F1キー押した時の処理を追加する
MFCならPreTranslateMessageで、F1キーの処理を加える
ヘルプが起動しないようにするだけならWinHelpをオーバーライドして
なにもしないようにするとかね
889886:04/06/30 20:39
>>887
>>888
できましたヽ(´∀`)ノ
890デフォルトの名無しさん:04/06/30 20:55
カナを漢字に変換するにあたり変換候補を取得したいのですが
ImmGetConversionList(..., GCL_CONVERSION )以外で
変換候補を取得できないでしょうか?
IMEの変換候補と比べると上記は取得できる候補が少ないので・・・。
IMEと同等の変換候補を取得する方法など何かご存知でしたら
教えてください。
宜しくお願いします。
WM_IME_* メッセージあたりになかったっけ?
あれ結構ごちゃごちゃしてて全部見てないけど
VC6.0であったALT+F8の整形機能はVS.NETではどうなってますか?
>>892
あるよ
894890:04/06/30 22:46
>>891
IMEの変換候補ウィンドウを表示するでなく
変換候補の文字列を取得したいのです。
なにかご存知でしたらお願いします。
Imm関係を調べたのでですが情報が少なくて・・・。
通常使うプリンタを変更する方法はないもんでしょうか。

環境は windows2000  VC++ ver5.0 です

スタート->設定->プリンタ でチェックマークがついてるプリンタを
VCアプリケーションで変えたいのですが

WriteProfileString("windows", "device", "Printer name,Printer driver,port");
これをやっても何も変化がないのです。


調べた範囲では
windows2000では無理っぽいということなんですが

GetProfileString("windows", "device", Buffer );
でBufferに取ってきたものを見ても
x. とか b というような意味がない文字しか入ってこないです。

はたして通常使うプリンタの変更は不可能なのでしょうか?
>>895
よく分からないが、そういうものはレジストリに設定があるんだろうから、それを
見つけて直接読み書きした方が手っ取り早くないかな?

ttp://www7.big.or.jp/~pinball/discus/pb/log/020516/935.html
これかな?
>>894
WM_IME_COMPOSITIONだよ。
898デフォルトの名無しさん:04/07/01 21:31
初歩的な質問になりますが、よろしくお願いします。
VC++で新規のプロジェクトを作成する時に、
MFCアプリケーションを選択した場合、
同じプロジェクト内でWIN32APIは使用できなくなるのでしょうか?
899デフォルトの名無しさん:04/07/01 21:35
VC++ .NET 2003でビルドするたびにリソースのバージョン番号を
増やしていってくれるような仕組みってありませんか?
VC++6用のシェアウェアはあるようですが。
Visual SourceSafeかなんかでできるんでしょうか?
>>898
ならない。
>>898
そもそもMFCだけでまともなコーディングが出来ん。
>>898
MFCのソースを軽くでいいから覗いてごらん
903デフォルトの名無しさん:04/07/02 17:30
最近、VCを習い始めたのですが、
ビルドは通るのにexeを実行すると、すかさず下記のエラーがでる。という症状が何回か出て参っています。

「XXXXの命令がXXXXのメモリを参照しようとしました。メモリがreadになる事は有りませんでした。」

このエラー原因の可能性としては、どのような点があるでしょうか?
何回かこのエラーが出くわしたのですが、このエラーが出るたびにバックアップから作り直し、
3歩進んで2歩下がる状態で開発が進んでいます。作り直すとなぜかエラーが出なくなります…
>>903
>ビルドは通るのに

文法上は正しくても動作としておかしなコードが混じっているからそうなる。
バッファの取り扱いに注意。

一連の初期化処理の中におかしなところがあるんだろう。詳しいことはプログラム
の中を見ないとわからない。

あるいはビルドを繰り返しているうちにそうなるなら、中間ファイル類を全て削除して
からビルドしなおしてみる。
905デフォルトの名無しさん:04/07/02 17:46
>>904
回答有り難うございます。
Debugフォルダを全削除して、ビルドしなおしたら直りました。
バグみたいなもの?
VCってワケわからんです。もうツカレタ…orz
>>903
ぬるぽっ
>>905
エラーが出た状態のままの中間ファイルが残ったため。
VCはビルドするとき、ファイルの日時を見てビルド対象を決めているが、
その時エクスプローラーが邪魔すると、
お互い待ち状態になったり、日時の確認を中断してビルド続行してしまったりする。
>>905
もう一度ソースを確認することをお勧めする
それで治ったってのはただの偶然の可能性もあるよ
ちなみに、上記のエラーは一般アプリが読んでははいけないと
マークしているメモリを読もうとしたために起きたエラー

ちなみにデバッガ上でやってもそうなる?
デバッガ上でも出るならデバッガ使って原因を追求するべきだし
デバッガが使えないのなら、ワトソン博士にコアダンプ吐かせても良いかも
mapファイルの作成は忘れずにね

904が言うようにオブジェクトのリンクに際して起きる場合もあるかも
もし多人数で開発しているのなら、各PCの時計を正確に合わせておいたほうがいいよ
そもそも>>903はデバッグ方法全然知らんだろ?
リファレンスくらい目を通しとけ。
910(1/3):04/07/02 21:34
すいません、次のようなクラス・ファイル構成で実行時エラーが出ます。
解決策等をご存知でしたらご教授ください。

--- fuga.h ---
#ifndef __fuga_h__
#define __fuga_h__

class hoge;

class fuga{
  hoge* pHoge_;
public :
  void SetHoge(hoge* pHoge) { pHoge_ = pHoge; }
};

#endif// __fuga_h__
911(2/3):04/07/02 21:35

--- hoge.h ---
#ifndef __hoge_h__
#define __hoge_h__

#include "fuga.h"

class hoge{
  int x;
};

class hogehoge{
  fuga* pFuga;
public :
  void SetFuga(void){
    pFuga->SetHoge(new hoge);
  }
};

#endif// __hoge_h__
912デフォルトの名無しさん:04/07/02 21:35
--- test.cpp ---
#include "hoge.h"

int main(void){
hogehoge* pHogehoge = new hogehoge;
pHogehoge->SetFuga();
}

エラーは「***の命令が***のメモリを参照しようとしました。メモリがreadになることはできませんでした。」
というものです。

環境はVC++6 SP5です。
ちなみに友人にBCCでコンパイルしてもらったところエラーは発生しませんでした。

長々と申し訳ありませんがよろしくお願いします。
914910-912:04/07/02 21:39
ちなみにデバッガで追ったところ

int main(void){
hogehoge* pHogehoge = new hogehoge;
  pHogehoge->SetFuga();  // ←
}

の部分でエラーが発生しているようです。
>>913

>>903-はすでに見させていただきましたが、
それとは違うと思うのですが…。
もちろんリビルドなどは行いました。
    pFuga->SetHoge(new hoge);

pFugaのインスタンス作ってないのに、メソッドを呼ぶなハゲ。
上のやつもそうだが、VCに問題があるような書き方するな
こんなレベルじゃ、たとえ糞コンパイラ使っていてもコンパイラを疑う資格すらない。
917910-912:04/07/02 22:10
>>916
ああああ、申し訳ない

プロジェクトから簡略化して切り出したときに入れ忘れてました。
ということでそのファイルは無事実行できました。BCCは単に運よかっただけみたいですね。

ということはこれはプロジェクト自体のエラーの原因ではなかったみたいです。

本当に申し訳ありません。
BCCのうんこっぷりが証明されました
919デフォルトの名無しさん:04/07/02 23:45
CDプレイヤーを作りたいんですが、どうしたらいいんでしょうか?
もう国内に工場ないと思うよ
921919:04/07/02 23:50
いや、機械じゃなくて、ソフトです。
ミツミは国内に工場あるんでねーの?
MCI_SETでmciSendCommandの第3引数にMCI_SET_DOOR_OPENを渡してみたらどうでしょう。
924デフォルトの名無しさん:04/07/03 00:26
Visual C++ .NETを使っています。
学校ではVisual C++ 6.0を使っているので、そちら用の参考書
(3週間マスターVisual C++6.0,日経BP社)を借りて勉強していたのですが、
C++ .NETにはClass Wizardがないので「Class Wizardを使って、CTimersDlgクラスに、
WM_TIMERメッセージに対応する為の関数OnTimerを追加する」という所で詰まってしまいました。
クラスビューでCTimersDlgを右クリックして追加から関数の追加を選択し、戻り値の型voidと、
UINT(Unsigned int?)型のパラメータnIDEventを追加して、参考書通りのコードを追加したのですが、
思い通り(時刻を取得し書式を整えてダイアログに表示する)の動作をしません。
考えてみればWM_TIMERメッセージに対応させる操作が抜けているので当たり前だとは思ったのですが、
解決法が思いつきません。
どのようにすればいいのでしょうか?
>923

ありがとう御座います。
やってみます。
>>924
1.リソースからダイアログの編集画面を出す(絵になっててボタンとかくっつけていくやつ)
2.ダイアログ上で右クリックし「プロパティ」
3.「プロパティ」のビューにある「メッセージ」というボタンを押す
>>924
クラスビューのCTimersDlgを右クリックして
「Windowsメッセージハンドラの追加」で、左のリストから
WM_TIMER をクリックして「ハンドラの追加」ボタンを押すと
OnTimer関数をオーバーライドしたものが自動で生成される。
後はMSDNで。
928927:04/07/03 00:34
おっと失礼 .NETですか
929924:04/07/03 00:51
>>926
ありがとうございます。
ここのWM_TIMERの右側にOnTimerと追加すればいいんですよね?
でも一度自分で手書きで書いてしまった為か、TimerDlg.cppのOnTime関数は消したのに
「オーバーロードされた関数'OnTime'は既に存在しています」と出てしまいました。
関数を消すだけではダメなのでしょうか…?
930デフォルトの名無しさん:04/07/03 00:51
Visual Basicに対抗してMiserable Basic開発したいんですけど。
931デフォルトの名無しさん:04/07/03 00:53
最近ちょっとVC#をかじってみたが、確かにポトペタ環境は楽ですが
が職業上FA関係のライブラリを使うため、それらのライブラリをイチイチ
DllImportするのは面倒なため、やっぱりとうぶんVC++から離れなれない・・・
932924:04/07/03 01:28
>>929
自己レス
TimerDlg.hの方のOnTimerに関する記述を消せば大丈夫でした。

>>926さん、>>927さん、ありがとうございました。
>>931
VC++もポトペタだがいつの時代から来た人だ?
934デフォルトの名無しさん:04/07/03 01:35
>>933
はぁ?
なに言っての、このボンクラ
>>934
>>933はダイアログアプリしか作ったこと無いんだ。許してやれ。
もしくはVBと勘違いしてんだ。
DllImportするのは面倒なため
>>935
バージョンアップする金も.NETに移行する気もない貧乏はすっこんでろ!
ビットマップをLoadBitmapで読み込むさいに、lpBitmapNameをMAKEINTRESOURCE(IDB_BITMAP1)
のようにしてやろうとしたのですが認識してくれないです。
定義漏れがあるのかと思ってリソースのヘッダファイルも確認するとしっかり定義されてました。
ちなみにIDを文字列にしてやるとできました。
どういう原因が考えられますか?
resource.hでIDを定義してないから文字列扱いにされてる
>>939
> 'IDB_BITMAP1' : 定義されていない識別子です。
メッセージがこうでてるし、文字列ならビットマップは表示されるので
resource.hでIDを定義しわすれてるとしか考えられないのですが、
実際resource.hをひらいて確認するとちゃんと定義されてるんです。
どういうことなんでしょうか・・・。
941940:04/07/03 03:18
あとメニューやダイアログボックスなどのリソースはMAKEINTRESOURCEを使って
読み込めます。
そもそもビルドすれば勝手にresource.hにIDの値定義してくれますよね?
#include "resource.h"
ポトペタってなんですか?教えてエロいひと
ポト ペタ ピッタンコ この世で一匹!
ポトっと落としてペタって貼り付ける
946940:04/07/03 12:23
>>942
(/ω\)ハズカシーィ
インクルードしてませんでした・・・・。はぁ・・。
とりあえずありがとうございました・・・。
ぼっとん便所
なんだなんだ今日はずいぶんとレスついてるな