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


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

★初心者にVisual C++を教えるスレ★ Part24
501 名前:デフォルトの名無しさん :2006/11/26(日) 02:02:52
今VC++2005でネットゲームを作ろうと思って色々勉強してます。
ネットとか本を参考にサンプルを作ったりしているんですが、うまくビルドできません。
例えば
ttp://stylefree.net/main/nprogramming/windows/windows2.shtml
このサンプルとか。
(コピペしてビルドすると、"stdafx.h"をインクルードしろ、と言われ
それを実行すると100以上のエラーが出てくる)

おそらく、2005ではなく2002や6.0向けに書かれたサンプルで
ケアされてないコードなどが入っているためだとは思いますが、
そういうサンプルだと勉強してもやりたいことに直結しないし、
何よりも2005の機能をうまく使えない気がします。

2005を用いたネットワークプログラミング講座みたいな
参考になる書籍やサイトなどがあれば、教えて欲しいです。
もしくは、その他解決方法があれば教えてください。
お願いしますm(_ _)m

502 名前:デフォルトの名無しさん :2006/11/26(日) 02:03:38
あぁ、なんか二重投稿になってる・・・すいません

503 名前:デフォルトの名無しさん :2006/11/26(日) 02:55:47
Visual Stdio .NET 2003でソースコードを自動整列させることってできますか

504 名前:デフォルトの名無しさん :2006/11/26(日) 05:34:14
>>500
stdafx.hが何なのか理解してないだろ。

>>503
おまえで何の言っているんま?


505 名前:デフォルトの名無しさん :2006/11/26(日) 06:50:21
チャットプラグラムなんて言ってるしな

506 名前:デフォルトの名無しさん :2006/11/26(日) 09:23:02
ちゃっとってjavaかperlCGIじゃないの?

507 名前:デフォルトの名無しさん :2006/11/26(日) 09:23:53
意味もわからず打っても指の運動にしかならないし、
コピペした方が間違えなくていい

> さて今回はネットワークプログラミング入門と言う事で
> ネットワークプログラミングの雰囲気に簡単ですが触れてもらおうと思います。
> 詳しい説明はしないので下にあるコードを実際に打ってみてください
> (コピー&ペーストはしないで実際に打つ)。

508 名前:500 :2006/11/26(日) 09:50:44
レスありがとうございます。

ネットゲームの中でチャットを使いたいんですよ。
本とかを読んでいたらネットワークプログラムを学ぶのに初めはチャットが適しているってあったもので。

検索してみたら同じエラーの対処法などが書いてあり、
cppファイルかプロジェクトのプロパティで「プリコンパイルヘッダを自動的に使用」をチェックするとありました。
しかし、2005にはそんなチェックはなく、「プリコンパイルヘッダを使用しない」をチェックしてもエラーが増えるだけでした。

ソースコードはコピペです。
手打ちでやった後ビルドできなかったのでコピペに切り替えました。

509 名前:デフォルトの名無しさん :2006/11/26(日) 10:00:27
ビルドすらできない初心者だったら
この辺からやってみろ

int main( int argc, char *argv[])
{
return 0;
}

510 名前:デフォルトの名無しさん :2006/11/26(日) 10:02:10
こっちのがいいか

int main()
{
return 0;
}

511 名前:500 :2006/11/26(日) 10:08:16
それはプロジェクトを作成した初期画面のままビルドしろってことですか?

新規作成→プロジェクト→Win32 コンソールアプリケーション、ファイル名"buildtest"


//buildtest.cpp

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}


このままビルドしたら問題なくビルドできました

512 名前:デフォルトの名無しさん :2006/11/26(日) 10:09:40
>>508
それはどっちもまともな対処法ではない。説明するのも面倒だから、とりあえず
新しいプロジェクトを(プリコンパイル済みヘッダを使わない指定をしないようにして)作り、
そっちのプロジェクトへ全てのソースコードを移せ。

513 名前:デフォルトの名無しさん :2006/11/26(日) 10:21:18
新規作成→プロジェクト→Win32 コンソールアプリケーション

で、このときプリコンパイル済みヘッダのチェックをはずして作成、
>>500のソースコードを全部コピペしてみましたが、やはりエラーがでました。
stdafx.hをインクルードしたり、stdio.hのインクルードを消したりしてみましたが
やはり結果は一緒でした。

514 名前:デフォルトの名無しさん :2006/11/26(日) 10:37:47
そういう場合Hello, Worldぐらいで試してみるのが普通

515 名前:デフォルトの名無しさん :2006/11/26(日) 10:50:01
Hello, Worldってこんな感じでいいんでしょうか?
これなら問題なくビルドできたんですが。


#include "stdafx.h"
#include <iostream>

using namespace std;

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

cout<<"Hello, world";
//出力を眺めるため入力を待つ
int i;
cin>>i;
return 0;
}



いろいろ調べ続けてはいるんですが・・・
VC++ってプリコンパイル済みのヘッダ"stdafx.h"が出てくるまでその行を探し続ける
ってことなんで、stdafx.hをインクルードして100以上もエラーが出るっていうのは
stdafx.hじゃなくて他のところが悪いんでしょうか?

516 名前:デフォルトの名無しさん :2006/11/26(日) 10:57:50
>>515
心優しい俺様が、懇切丁寧に教えてやろう。

1. Win32コンソールアプリケーションのプロジェクトを作成
アプリケーション設定の空のプロジェクトにチェックを入れておくこと。

2. 新規ソースファイルを一つ追加。main.cppとでもしておけばいい。

3. それにソースをコピペした後、タブ代わりの全角空白を全部削除する
全選択した後、編集-詳細-左右スペースの削除を使え。

5. ws2_32.libをリンクするように設定。
プロジェクトの設定でもできるが面倒なので、
#pragma comment(lib, "ws2_32")
上の行を#includeとmainの間にでも入れておけ。

6. ビルドしてみろ。

以上。 

517 名前:デフォルトの名無しさん :2006/11/26(日) 10:58:42
心優しいのになぜ、上から目線なのかしらん?

518 名前:デフォルトの名無しさん :2006/11/26(日) 10:59:40
ツンデレ属性なんだろ

519 名前:デフォルトの名無しさん :2006/11/26(日) 11:05:15
んじゃ、心優しくないVer.

>>515
エラーメッセージも書かない能無しは死ね。

520 名前:500 :2006/11/26(日) 11:10:09
>>516
ありがとうございます!
うまくビルドできました!
#pragmaを設定していなかったのと、空白を削除していなかったのが原因だと思います。
無意味な空白があるとビルドできなかったりするんですね。

>>519
すいません。
あまりにも量が膨大なので、リンクしようにもアップが面倒だったんです。

521 名前:500 :2006/11/26(日) 11:12:17
それからレスをくださったみなさん、どうもありがとうございました。
やっと先に進むことができます。感謝、感謝です。

522 名前:デフォルトの名無しさん :2006/11/26(日) 11:29:31
無意味な空白が原因じゃねーよ
空白に使ってる が駄目なんだよ なら問題ない


523 名前:500 :2006/11/26(日) 11:34:12
なるほど、" "(全角スペース)だと読み込んでくれないわけですね。
文字列以外のところで全角は使っちゃいけないってことか。
エラーの時に言ってた読み込めない識別子がありますってこれのことだったんですね。

524 名前:デフォルトの名無しさん :2006/11/26(日) 12:07:00
>読み込めない識別子があります

このエラーメッセージを最初から書いていれば一発でしたね!


525 名前:500 :2006/11/26(日) 12:21:42
そうですよね!

・・・ごめんなさい(´・ω・`)

526 名前:デフォルトの名無しさん :2006/11/26(日) 13:07:31
>>515
<iostream>とかライブラリのヘッダのインクルードは全てstdafx.hの中に書け。
そのためのstdafx.hとプリコンパイルドヘッダだ。

527 名前:500 :2006/11/26(日) 13:40:28
>>526
そうだったんですか!
目からうろこです。
じゃあ上のサンプルの<winsock2.h>とか<conio.h>とかも全部まとめちゃうんですね。

マジここの人達優しすぎ (つД`)

528 名前:デフォルトの名無しさん :2006/11/26(日) 13:45:48
('A`) こうしてどんどんドツボにはまっていくのであった

529 名前:デフォルトの名無しさん :2006/11/27(月) 05:08:07
いくつもあるファイルを1つのフォルダに収めてifstream in(・・・)でファイルを出したいんですけど、
どういう設定をしたらできるんでしょうか?

530 名前:デフォルトの名無しさん :2006/11/27(月) 06:00:17
先ずお前の脳を日本語モードに設定しろ。
話はそれからだ。

531 名前:529 :2006/11/27(月) 06:22:14
失礼しました。

フォルダの中に入っているファイルを1つ指定して開きたんですけど、
ifstreamを使う場合、どうやったら指定ファイルを開くことができるんでしょうか?

したいことは「ループして次々にフォルダの中のファイルを開いていく」です。
できたら、指定ファイルを検索して開きたいです。

532 名前:デフォルトの名無しさん :2006/11/27(月) 07:37:59
>開きたんですけど、
>ループして
だから日本語で書けと。

533 名前:デフォルトの名無しさん :2006/11/27(月) 07:48:26
質問です!
APIを使ってピクチャボックスに絵を描いているのですが
絵を表示させるのが遅い場合、途中で強制終了することってありますか?

やっぱりどっかがおかしいからそうなるんですかね?

534 名前:533 :2006/11/27(月) 08:05:19
すみません。自分のミスでした。


535 名前:デフォルトの名無しさん :2006/11/27(月) 11:41:19
質問です。
ビューが生成されているかどうかをしりたいのですが
どうしたらわかるのでしょうか?教えてください

536 名前:デフォルトの名無しさん :2006/11/27(月) 12:22:57
最近日本語でおkが増えたな

537 名前:デフォルトの名無しさん :2006/11/27(月) 14:37:30
質問なんですけど

CString ss = "可変長文字列 250件";

のようなデータがあったとして、数値データ(今回だと250)を
取り出す時にどのようにしたらよいのでしょうか?
isdigit()なんかで一文字ずつ比較すればできそうですが
データの長さによってはかなり検索が膨大になりそうなので
なるべく簡易にしたいのです。よろしくお願いします。

538 名前:デフォルトの名無しさん :2006/11/27(月) 14:46:19
一文字ずつ比較しないと見つけようがない。

539 名前:デフォルトの名無しさん :2006/11/27(月) 14:48:18
一番最後に見つかったスペースからn桁とればいいんじゃないの?

540 名前:デフォルトの名無しさん :2006/11/27(月) 14:55:25
// >539の方針だとこんなもんか。
// 空白がないと破綻するから、実際にはもう少し複雑になる。
//
int num;
sscanf(strrchr(ss, ' '), "%d", & num);

541 名前:537 :2006/11/27(月) 14:59:11
>538
>539
レスありがとうございます。
そうそう都合のいいメソッドなどはないようですね(´・ω・`) ショボーン
一文字ずつ比較することにします。

542 名前:デフォルトの名無しさん :2006/11/27(月) 15:00:56
ひとつのchar型配列に日本語の文章を入れて、
その文章を一文字ずつ表示するようなプログラムを作りたいのですが、
%c を使うと化けてしまうし、%s では文章を全て表示してしまいます。
どうすればいいでしょうか

543 名前:537 :2006/11/27(月) 15:05:29
>540
レスありがとうございます。
入れ違いになってしまったようですね。

空白は場合により増えたりします。ですが
必ず一つはあるので空白を利用する方法も考えてみます。

544 名前:デフォルトの名無しさん :2006/11/27(月) 15:12:16
>>542
例えばShiftJisで2バイト文字しか扱わないのであれば、単純に%2cで出力する手もある。
或いは、%.2sでもいい。

545 名前:デフォルトの名無しさん :2006/11/27(月) 15:18:22
都合のいいメソッドがあったとしても
自分の代わりにその中の人がやるだけ

546 名前:デフォルトの名無しさん :2006/11/27(月) 21:47:06

VC++EEを使ってるんですが、描画などの機能はAPIを使ったほうがいいんでしょうか?
それとも、VC++EEの機能を使った方がいいんでしょうか?

どちらも一緒のような気もするんですけど、
それらの利点や欠点などもあれば、上記の質問と一緒にお答えいただきたいです。
お願いします。

547 名前:デフォルトの名無しさん :2006/11/27(月) 21:53:49
自分が使いたい方使えよ
利点欠点なんか自分で使わないとわからん

548 名前:デフォルトの名無しさん :2006/11/27(月) 22:17:16
VC++EEの機能って何だろう?

549 名前:デフォルトの名無しさん :2006/11/27(月) 22:50:50
MFC とか .NET とかのこと言ってんのかな?


550 名前:デフォルトの名無しさん :2006/11/27(月) 23:00:55
あぁ、なんかそんな予感がするな

551 名前:デフォルトの名無しさん :2006/11/27(月) 23:01:35
Express EditionではMFCは使えなかったはず

552 名前:デフォルトの名無しさん :2006/11/27(月) 23:44:08
今、MDIアプリケーションでダイアログバーを使用した
子ウィンドウを作成しています。

CMDIChildWndクラスのOnCreateメソッド内でダイアログバー
を作成し、ボタンコントロールの動的作成を行おうとしたのですが
作成したボタンが表示されません。一応ShowWindowメソッドも実行
してみたのですが変化なしでした。わかる方いましたら
教えてください。お願いします。

以下はソースの抜粋です
int CMyChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
return -1;

//ダイアログバーの作成
m_wndDialogBar.Create(this, IDD_TESTDLG, CBRS_TOP, IDD_TESTDLG);

//ボタンコントロールの動的作成
CButton clsBtn1;
clsBtn1.Create(L"ボタン1", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
  CRect(10,10,100,70), this, 10);

return 0;
}


553 名前:デフォルトの名無しさん :2006/11/27(月) 23:52:55
ダイアログバーにする意味があんまりないような気がするけど

554 名前:デフォルトの名無しさん :2006/11/27(月) 23:57:08
>553
仕様なんで・・・。
それと、なぜ動的に作成するかと言いますと
DBから持ってきたデータによっていくつ作るか
変わるからです。

555 名前:デフォルトの名無しさん :2006/11/28(火) 00:26:50
c#初心者スレにMFCマンセーが何度もやってきて困っています。

575 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/28(火) 00:14:46
ファイルを開くダイアログでプレビュー機能をつけたくて
とりあえず、OpenFileDialogを継承してみたのですが、プレビューさせるコントロールをはる
ところがわかりません。

576 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/28(火) 00:17:55
c++スレに帰ったほうがいいよ。

577 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/28(火) 00:19:14
>>574
Microsoft Scripting Runtimeを参照設定しました。

578 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/28(火) 00:19:40
C#ではそんなことすらできないんですか?

となると、要望の多い業務アプリにはやはり不向きなんですね


556 名前:デフォルトの名無しさん :2006/11/28(火) 00:43:31
そんな事ここで言われても

557 名前:デフォルトの名無しさん :2006/11/28(火) 02:00:44
あるボタンを押したときに、新しいダイアログを表示するプログラムで、
新しいダイアログの閉じるボタンを非表示にしたいと考えています。
どうすればよいのでしょうか。

558 名前:デフォルトの名無しさん :2006/11/28(火) 02:37:33
何も試さず考えただけとか嫌だよね……(´-`)

559 名前:デフォルトの名無しさん :2006/11/28(火) 03:32:44
試してみてるんですがわからないんですよ。
CMainFrameでメインウィンドウはできたのですが、子ダイアログの方法がわかりません。

560 名前:デフォルトの名無しさん :2006/11/28(火) 07:52:24
その「閉じる」ボタンとはなんのことだね。

561 名前:デフォルトの名無しさん :2006/11/28(火) 08:43:41
とりあえず思いついたのを適当に教えてやってもいいけど
お前が試してみたのと同じ方法だったら嫌だし

こうやってみ
それはもう試したけどだめでした

562 名前:デフォルトの名無しさん :2006/11/28(火) 11:54:46
閉じるボタンを使わせたく無いだけなら色々方法あると思うが

563 名前:デフォルトの名無しさん :2006/11/28(火) 12:36:50
質問なのですが、VC++2005で

#include <windows.h>

int aaa(int a)
{
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR CmdLine, int CmdShow )
{
aaa(123);
return 0;
}

をコンパイルして出力されたバイナリにGetSystemTimeAsFileTimeなどの身に覚えのないコードが入ってしまいます
これらを入れないようにするオプションなどありますでしょうか?

よろしくお願いします。

564 名前:デフォルトの名無しさん :2006/11/28(火) 13:18:24
自分でスタートアップコード書くとか

565 名前:デフォルトの名無しさん :2006/11/28(火) 13:38:27
>>564
おかげさまで解決しました、ありがとうございました。

566 名前:デフォルトの名無しさん :2006/11/28(火) 13:46:16
20分でスタートアップコード書けるような奴がそんな質問するのか?

567 名前:552ですが :2006/11/28(火) 14:01:08
ボタンコントロールの表示はできたのですが
作成したボタンのクリックイベントの取得ができません。
どのようにしたらよいのでしょうか?教えてください。

568 名前:デフォルトの名無しさん :2006/11/28(火) 14:27:33
>>566
returnしか書いてなかったりしちゃったりして

569 名前:デフォルトの名無しさん :2006/11/28(火) 15:33:47
ダイアログバーはDDX使えなかったりいろいろ不便だよな
どうせいじるなら自作した方が便利だぞ

570 名前:デフォルトの名無しさん :2006/11/28(火) 18:56:09
VC++2005EEを使っています。
ウィンドウとコンソールを同時に使う方法を教えてください。
リンカで/SUBSYSTEMをつついてみたり
WinMainの中でprintfからConsole::WriteLineとReadLineまで
色々呼んでみましたがダメでした。

571 名前:デフォルトの名無しさん :2006/11/28(火) 19:05:33
AllocConsole()


572 名前:デフォルトの名無しさん :2006/11/28(火) 19:07:52
AllocConsole はそのままだとstdio系は使えないから、
エントリーはmain()でウィンドウ作ったほうが楽。


573 名前:デフォルトの名無しさん :2006/11/28(火) 19:09:00
>>570
/SUBSYSTEM:CONSOLEでいけると思うけど、指定の方法が悪いのでは。
あとから edlitbin /SUBSYSTEM:CONSOLE xxx.exe で試してみたらいい。

574 名前:デフォルトの名無しさん :2006/11/28(火) 19:45:04
>>573
それってそのままstdoutとか使える?


575 名前:570 :2006/11/28(火) 19:52:59
とりあえずAllocConsole()で急場はしのげそうですが、
色々やってみたいと思います。ありがとうございました。
>>574は別の人です。

576 名前:デフォルトの名無しさん :2006/11/28(火) 21:47:55
/SUBSYSTEM:CONSOLE /ENTRY:WinMainCRTStartup じゃだめかい?

577 名前:デフォルトの名無しさん :2006/11/29(水) 02:02:23
俺ならコンソールプログラム(のプロジェクト)を作って、その中でウィンドウ作る。
インスタンスハンドルはGetModuleHandle(0)、WinMainの最後の引数はSW_SHOWDEFAULTで代用。
コマンドライン引数はargc, argvのほうが便利。(どうせグローバル変数にもあるけどさ)

578 名前:デフォルトの名無しさん :2006/11/29(水) 02:27:18
コンソール付けると右上の閉じるボタンで強制終了されちゃうぜ?
ウィンドウメッセージ取れないぜ?

579 名前:デフォルトの名無しさん :2006/11/29(水) 10:28:08
std::cout << "押すなよ!閉じるボタン絶対押すなよ!" << std::endl;

580 名前:デフォルトの名無しさん :2006/11/29(水) 12:09:56
std::cout << "だ が 断 る" << std::endl;

581 名前:デフォルトの名無しさん :2006/11/29(水) 17:16:32
#include <iostream.h>が開けないって出てくるんだけどどういうこと?

582 名前:デフォルトの名無しさん :2006/11/29(水) 17:19:40
iostream.hは古い仕様。

583 名前:581 :2006/11/29(水) 17:22:44
どうすりゃいいの〜

584 名前:デフォルトの名無しさん :2006/11/29(水) 17:41:32
現在のC++では<iostream>となっている。
そして名前が被ることを防ぐため、標準ライブラリに含まれる殆ど全ての名前は
名前空間stdの中に収められている。名前空間内の名前は、std::coutのように::で指定する。

互換性のため、using namespace std;と書けばそれを書いた位置の有効範囲内では、
従来どおりcoutなどのようにして使える。

585 名前:デフォルトの名無しさん :2006/11/29(水) 18:31:03
#include <iostream>
using namespace std;


class kouza {
private:
long number;
long yokin;

public:
kouza(long no,long yok){
number=no;
yokin=yok;
}

long kouza_no(){return number;}
long kouza_yokin(){return yokin;}
void ireru(long okane){yokin+=okane;}
void orosu(long okane){yokin-=okane;}

};



586 名前:デフォルトの名無しさん :2006/11/29(水) 18:31:48
void main(){
kouza abe(1,1345);
kouza itou(2,334);

abe.ireru(345);
itou.orosu(330);

cout<<"安部の番号とお金"<<abe.kouza_no()<<"と"<<abe.kouza_yokin".\n";
cout<<"イトウの番号とお金"<<itou.kouza_no()<<"と"<<itou.kouza_yokin;
}



587 名前:デフォルトの名無しさん :2006/11/29(水) 18:34:00
上のプログラムを書いたんですけど下のようなエラーが大量に出てきてしまいます。
ミスが見つからないんですけど、どっかにあるんですか?それとも設定の段階でうまくいってないとかですか?

c:\program files\microsoft visual studio 8\vc\include\cstdio(25) : error C2143: 構文エラー : '{' が ':' の前にありません。
c:\program files\microsoft visual studio 8\vc\include\cstdio(25) : error C2059: 構文エラー : ':'
c:\program files\microsoft visual studio 8\vc\include\cstdio(25) : error C2143: 構文エラー : '{' が ':' の前にありません。
c:\program files\microsoft visual studio 8\vc\include\cstdio(25) : error C2059: 構文エラー : ':'
c:\program files\microsoft visual

588 名前:デフォルトの名無しさん :2006/11/29(水) 18:39:14
ちったぁ頭使えよ

589 名前:デフォルトの名無しさん :2006/11/29(水) 18:41:58
最後の出力でkouza_yokinが関数呼び出しになっていない。

590 名前:デフォルトの名無しさん :2006/11/29(水) 18:46:05
cout<<"安部の番号とお金"<<abe.kouza_no()<<"と"<<abe.kouza_yokin()<<"a.\n";
cout<<"イトウの番号とお金"<<itou.kouza_no()<<"と"<<itou.kouza_yokin()<<"a\n";
にしてもなおりませんでした

591 名前:デフォルトの名無しさん :2006/11/29(水) 18:56:42
すみません。できました。
C++のつもりがC設定になっていたことが原因でした。

592 名前:デフォルトの名無しさん :2006/11/29(水) 19:32:31
VC++(.net 2003)で勉強中なのです。

VC++とは、関係ないかもしれませんが、
sizeof(long double) * 8 で出力すると64ビットになるんですけど
これはこれでいいんですか?

Borland C++ Compilerで同じ事をすると80にちゃんとなるんですけど。


593 名前:デフォルトの名無しさん :2006/11/29(水) 19:45:22
おk

594 名前:デフォルトの名無しさん :2006/11/29(水) 19:55:08
VCにおいてlong doubleはdoubleと同等のサイズ
MSDNのリファレンスにも「same as double」とちゃんと書いてある
一方BorlandC++ではlong doubleは10バイト使ってる

595 名前:デフォルトの名無しさん :2006/11/29(水) 19:56:41
intは16ビットであるべきだよな。

596 名前:デフォルトの名無しさん :2006/11/29(水) 20:01:35
ありがとうございます。

なにか、テキストどおりじゃないのが釈然としませんが、・・・
大人の世界はいろいろとあるでしょうからそこはあきらめてVCとお付き合いしていきます。(T-T

597 名前:デフォルトの名無しさん :2006/11/29(水) 20:18:20
>>595
ならshort使っとけば?

598 名前:デフォルトの名無しさん :2006/11/29(水) 20:23:51
>>596
規格的にはどっちも正しい

599 名前:デフォルトの名無しさん :2006/11/29(水) 21:42:47
規格上○bit(byte?)ピッタリにしるって規定されてるデータ型ってあったっけ?

600 名前:592 :2006/11/29(水) 21:52:10
>>597
なんとなく嘘だと思いつつやってみたw short double。

>>598,599
最初の方に最小を規定しているとは書いてあったけど、
テキストに80bitって書いてたから・・・・
ググって調べたら「典型的なlong double」は80bitってなってました。


601 名前:592 :2006/11/29(水) 21:55:22
むぉ! long floatはいけたw 64bitだったw

Borlandさんは、拒否された。

602 名前:デフォルトの名無しさん :2006/11/29(水) 22:06:58
VC++は、修飾子 + [char, int, float]でなんとかなると・・・・
わかりやすいような・・・・わかりにくいような・・・・
でも・・・・、printfのformat指定子と一致するようにしたのかな?・・・・

まぁいいや! 

みなさんありがとうございました。


603 名前:デフォルトの名無しさん :2006/11/29(水) 22:23:19
>>599
C99の<stdint.h>にはint32_tのようなビット数固定の型がある。

>>600
long doubleが80ビットなのはx86/x64のFPUに因む。
x86/x64以外で80ビットを使用しているものは聞いたことが無い。
つまり80ビット浮動小数点数はむしろ珍しい。(ただPCでは圧倒的なシェアを誇っているけど)

>>601
K&R Cではlong floatはdoubleと同じとされていたらしい。
少なくとも現在のISO C/C++にlong floatは存在しない。

604 名前:デフォルトの名無しさん :2006/11/29(水) 22:39:20
まぁ、PCじゃIntelが幅利かせてるからな

605 名前:デフォルトの名無しさん :2006/11/29(水) 22:50:18
数週間ほど前からVC++を触り始めたばかりの初心者です

SDIモードで作成したMFCウィンドウにコントロールを追加する方法が分かりません
以前Javaをやっていたので、基本的にコントロールのインスタンスを生成して配置して表示すれば良いということは分かります
しかし、それをどこで行えば良いのかが分かりません
ドキュメントビューアーキテクチャ?という独特な形式になっているのと、MFCで隠れた部分が多いのとでごちゃごちゃしている
ように思えてしまい、どこにコードを記述して良いのかさっぱり分かりません(コンストラクタでやってみたら失敗しましたし・・・)
この問題を解決するアドヴァイスまたは参考になるサイトについての情報を頂けないでしょうか?

また、新しくウィンドウ(ダイアログではなく)を追加したい場合にはどうしたら良いのでしょうか?
Javaの場合は単にFrameを継承したクラスのインスタンスを生成して表示メソッドを実行すれば良かったのですが、
VC++で同じようなことをしてみても上手くいきませんでした(アクセスがどうとかというエラーが出て落ちます・・・)
やはりドキュメントビューアーキテクチャやMFC内部が関係しているのでしょうか?
解決に結びつくようなアドヴァイスを頂けないでしょうか?

606 名前:デフォルトの名無しさん :2006/11/29(水) 23:00:47
コンストラクタだとウインドウがまだできてない
少なくともCWndのメンバ関数ぐらいは全部目を通しておいた方がいい。

607 名前:デフォルトの名無しさん :2006/11/29(水) 23:01:50
まずJavaのことをきれいさっぱり忘れよう

608 名前:デフォルトの名無しさん :2006/11/29(水) 23:10:05
CString ss[MAX_LENGTH];
MAX_LENGTHは最大いくらまで代入することができるんですか?

609 名前:デフォルトの名無しさん :2006/11/29(水) 23:11:40
fortranぐらいしか触ったこと無いんですが最近vc++2005EEをはじめました
ものすごいしょーもない質問かもしれないんですが教えてください

String^ testで宣言した変数が test="10 20" のとき,int型の i1=10,i2=20 に変換したり
同様に"10.0 20.0"を double型の d1=10.0,d2=20.0 に変換するときは
どんな処理をすればいいんでしょうか?
連続した数字の文字列だったら int::Parseを使えばいいと思うんですけど、
間にスペースとかコンマが入ってるときはわかりません…。
どうかよろしくお願いいたします。

610 名前:デフォルトの名無しさん :2006/11/29(水) 23:13:42
>>608
CStringのソース見ろ

611 名前:デフォルトの名無しさん :2006/11/29(水) 23:16:46
そういうCString初めて見た

612 名前:デフォルトの名無しさん :2006/11/29(水) 23:23:07
プログラミングをやってみようとVC++買ってきました。
ハードディスクに空き容量が足りないとメッセージが出てきました。
どうすればいいですか?

613 名前:デフォルトの名無しさん :2006/11/29(水) 23:28:33
あきらめろ

614 名前:デフォルトの名無しさん :2006/11/29(水) 23:30:27
パソコンもまともに使えないやつがVC買ってもしょうがない

615 名前:デフォルトの名無しさん :2006/11/29(水) 23:39:10
void CString::AllocBuffer(int nLen)
// always allocate one extra character for '\0' termination
// assumes [optimistically] that data length will equal allocation length
{
ASSERT(nLen >= 0);
ASSERT(nLen <= INT_MAX-1); // max size (enough room for 1 extra)


616 名前:612 :2006/11/29(水) 23:39:14
やっぱり、みんなそう言うよね・・・・

実は友達に>>612を聞かれて・・・・(T-T
一瞬フリーズして、それから「う〜んと、それぐらい自分で解決できないなら止めた方がいい」って言ったんだよ。
そしたら、涙流しながら激怒されて・・・・
女の子は・・・その涙流してるシーンだけで「教えてあげればいいじゃん」とかいいやがる!
事情を説明しても「誰でも最初は初心者」とか・・・・得意げに語り出すし・・・・・・・もう、おれ泣きたかった

スレ汚しごめんなさい。
ちょっと気が楽になりました。

617 名前:デフォルトの名無しさん :2006/11/29(水) 23:40:59
>>608
配列サイズ(!=要素数)が0x7FFFFFFFを超えないこと。
コンパイルエラーC2148を参照

618 名前:デフォルトの名無しさん :2006/11/29(水) 23:45:11
ハードディスクの中のエロ画像全部消せ、とか答えてやれ。

619 名前:デフォルトの名無しさん :2006/11/29(水) 23:48:55
>>603
そういえば16ビット時代のMSCはlong doubleは80ビットだった。
32ビットのコンパイラで64ビットになって何でやねんと思った。

620 名前:デフォルトの名無しさん :2006/11/29(水) 23:49:08
>>616
お前は泣いていい思う。
周囲が言いたいことも分らんのでも無いんだが……現実はなぁ。

621 名前:605 :2006/11/30(木) 00:05:51
>>606-607
レスありがとうございます

それで、どこで生成すればよろしいでしょうか?

622 名前:デフォルトの名無しさん :2006/11/30(木) 01:03:24
ピクチャボックスの描画時に起きた現象についての質問です。
その現象なんですが、何も設定していないピクチャボックスにピクチャボックスの領域を越える座標点の図を描きました。
実行してウィンドウの外まで越えることはなかったのですが、ピクチャボックスからはみ出て、ウィンドウの終端まで描画される事となりました。
そこで、ピクチャボックスのサイズでクリッピングをして解決しました。

で、今日そのことを大学の先生に話したのですが、ピクチャボックスの領域を越える描画をした場合は自動的クリッピングするという事と、
ピクチャボックスは専用のメモリを割いているから領域を越える事はない、と言われました。しかし、確かそうだった、と言われたのでココに書き込ませていただきました。
要はピクチャボックスに描いたのではなく、画面に描いた事になっているのでは?ということでした。
m_pict:ピクチャボックスのメンバ変数です。

HDC hDC = m_pict.GetDC()->GetSafeHdc();HWND hWnd = m_pict.GetSafeHwnd();
/*----------------------------------------------------------------------------*/
RECT rect;
::GetClientRect(hWnd, &rect);
HRGN hRgn = ::CreateRectRgn(rect.left, rect.top, rect.right, rect.bottom);
::SelectClipRgn(hDC, hRgn);
::SetMapMode(hDC, MM_ANISOTROPIC);
::SetWindowExtEx(hDC, 500, 500, 0);
/*-----------------------------------------------------------------------------*/
ピクチャボックスの範囲を越えて描画されたときに書いたのが、コメントの上の一行だけで、この一行しか書いていませんでした。
それプラス、コメントで囲まれた部分を書くことによって、クリッピングしてピクチャボックス内に描画することができました。また大きい図でしたので座標系を設定しなおしました。

ビットマップ転送を使えばいいんじゃないか?と言われましたが、それは置いといて、
上記のソースだと、なぜピクチャボックスの領域を越えて描画されたのか?
また、この場合だとピクチャボックスに描画しているのでなく、実は画面に描画しているのか?
以上の2点の問題点を教えて頂きたいと思います。
まだまだ若輩者ですが、今後のためにどうかよろしくご指導お願いいたします。

623 名前:デフォルトの名無しさん :2006/11/30(木) 01:11:06
つ CS_PARENTDC

624 名前:デフォルトの名無しさん :2006/11/30(木) 02:03:43
開発環境 VC++.net
スライダをデフォルトでVisible Falseにしておいて
あるボタンを押すと表示するようにしたいのですが、どうすればいいんでしょうか?

CButton *btn = (CButton*)GetDlgItem(IDC_BUTTON1);
btn->EnableWindow(true);

ボタンであればこのようにすればいいのはわかるのですが。

625 名前:デフォルトの名無しさん :2006/11/30(木) 02:26:27
>>624
表示したいのか有効にしたいのかはともかく、
ShowWindowもEnableWindowもCWndのメンバ関数だから。
後、MFCでダイアログのコントロールにアクセスしたいなら、メンバ変数にしておくと楽。
方法は「ダイアログエディタ メンバ変数」でVSのヘルプを検索しる。

626 名前:デフォルトの名無しさん :2006/11/30(木) 06:56:03
>>621,624
使おうとするクラスやライブラリのリファレンスにすら目を通さない輩はやる資格無し
帰れ


627 名前:デフォルトの名無しさん :2006/11/30(木) 17:34:28
>>625
ありがとうございます。
>>626
もう家です。というか家から書き込んでます

628 名前:デフォルトの名無しさん :2006/11/30(木) 19:32:03
>>623

だから、だったんですか。
勉強になりました。
ありがとうございます。

629 名前:605 :2006/11/30(木) 23:04:15
とりあえずウィンドウをDLL側で生成して表示させることはできました
フレームとビューとドキュメントをCCreateContextで連結させるのに苦労しました
上手に表示されたときはとってもハッピーになりました

さて、申し訳ないですが本日も質問があります
それはビュー(CFormView)に張り付けたダイアログリソースについてです
なぜか分からないですが、呼び出しアプリケーション側のダイアログリソースに置き換わってしまいます
DLLのダイアログリソースが表示されません
Resource.hが怪しいと思っていますが、どうすれば解決できるのか分かりません
アドヴァイスを頂けませんか?

あと、昨日の質問が残っています
>>62の後半、メモリ開放についてです
CFormWndのインスタンスを持っているのはDLL側です
ユーザが閉じるボタンやAlt+F4でデストロイしたことを察知して2度デストロイやdeleteするのを防ぎたいです
大変にクリティカルな問題なのでとても悩んでいます
インターネット検索や書籍で解決策を探していますが、まだ解決には至っていません
アドヴァイスをお願いします

630 名前:629 :2006/11/30(木) 23:05:43
誤爆してしましました
無視してください

631 名前:初心者 :2006/11/30(木) 23:22:20
CFormWnd* form;  //実際にはprivateなメンバ変数

CCreateContext cont;
cont.m_pCurrentDoc = GetDocumet();
cont.m_pNewViewClass = RUNTIME_CLASS(CHogeView);  //CFormViewを継承したView

form = (CFormWnd*)RUNTIME_CLASS(CFrameWnd)->CreateObject();
form->Create(NULL, "hoge", WS_CAPTION | WS_OVERLAPPED | WS_SYSMENU, r, ::AfxGetMainWnd(), NULL, &cont);
form->ShowWindow(SW_SHOW);


とこのように追加ウィンドウを作っているのですが、MDI の子ウィンドウ作成に応用したところ問題が発生しました
具体的には、

CFormWnd



CMDIChildWnd

に単純に変更したところ、赤丸+バッテンのエラーメッセージが表示されてプログラムが落ちました
CMDIChildWnd は CFormWnd を継承したクラスなので大丈夫だろうと思っていたのですが駄目でした

やりたいことは単純で、とにかく MDI の子ウィンドウを手動で生成して動的に追加したいだけです
データの受け渡しはポインタを使用してどうにでもなりますが、表示されない問題はどうにもなりません
この問題についてご存知の方はアドヴァイスをお願いしますm(_ _)m

632 名前:デフォルトの名無しさん :2006/11/30(木) 23:42:51
>赤丸+バッテンのエラーメッセージが表示されてプログラムが落ちました

デバッガ使えないの?

633 名前:デフォルトの名無しさん :2006/11/30(木) 23:56:00
エラーメッセージの重要さを理解してない奴多すぎ

634 名前:デフォルトの名無しさん :2006/12/01(金) 03:20:20
VC++6.0です。
実行ファイルを常に手前に表示させたいのですがどうすればよいのでしょうか。

635 名前:デフォルトの名無しさん :2006/12/01(金) 03:47:59
追記です。
FormViewで開発を行っているのですが、
SetWindowPos( &wndTop, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE );
と記述してもダメでした。


636 名前:デフォルトの名無しさん :2006/12/01(金) 09:20:12
wndTopMost

637 名前:デフォルトの名無しさん :2006/12/01(金) 09:35:03
>>634
表示の順番を拡張子順にして、
a、b、c、dで始まる拡張子のファイルは
別ディレクトリに移動させる。

638 名前:デフォルトの名無しさん :2006/12/01(金) 11:18:34
質問です。

今組み合わせを考えるプログラムを作ろうと思っています。
例えば1円玉、5円玉、10円玉、50円玉、100円玉、500円玉のチェックボックスを作り、
これで1000円を作る組み合わせは何通りか、そしてその内訳はどんなものかを表示するものです。

このとき、チェックボックスでチェックされていないものは除外するものとして、
まず "あなたの選んだ硬貨は ○と○と○ です" みたいな出力の仕方がわかりません。
ifでくくっていってわざわざ5!/2通りのプラグラムを組むのは違うと思いますし。

それから、その検索ルーチンも硬貨がふたつだけならなんとかなるんですが、
3つ以上だとどのように組んだらいいか手に負えません。


ヒントだけでもいいので上のプログラムの手ほどきをしてもらえないでしょうか?

639 名前:デフォルトの名無しさん :2006/12/01(金) 11:34:54
「一円玉」とか「五円玉」とかの文字列を一つずつ接続していって全体の文字列文を作ったら?

640 名前:デフォルトの名無しさん :2006/12/01(金) 11:45:58
ああ、出力の仕方がわからないのか。
とりあえずMessageBox() でいいんじゃね?

641 名前:デフォルトの名無しさん :2006/12/01(金) 12:12:01
もうこれでよくね?
s += ((is_a) ? (a) : (""));
s += ((is_b) ? (b) : (""));
s += ((is_c) ? (c) : (""));


MessageBox("あなたの選んだ硬貨は " + s + " です");

642 名前:デフォルトの名無しさん :2006/12/01(金) 12:25:24
アルゴリズムの部分はVCと関係ないから
それが解決してからだな

パズルを出題しあうスレ
http://pc8.2ch.net/test/read.cgi/tech/1153476618/

643 名前:デフォルトの名無しさん :2006/12/01(金) 12:32:31
うるせえ、獲物が来たら骨までしゃぶり尽くすのがこのスレの流儀だ。


644 名前:デフォルトの名無しさん :2006/12/01(金) 14:53:58
作業ディレクトリ外のファイルについて質問なのですが

ウィンドウクラス(CWindow)を他のプログラムでも利用できる様に
作業ディレクトリとは別に置いて
[ツール]-[オプション]-[ディレクトリ]で
インクルードファイルとソースファイルを指定しましたが
プリコンパイル済みヘッダーや、継承しようとすると
C2065定義されていない等のエラーが発生してしまいました

別ディレクトリにあるファイルを継承等する場合
他にやるべき事があるのでしょうか?
前方宣言も効果なしでした。

645 名前:デフォルトの名無しさん :2006/12/01(金) 15:28:01
ヘッダからほかのヘッダを参照のしかたがまずいとか

646 名前:デフォルトの名無しさん :2006/12/01(金) 16:12:31
>ヘッダからほかのヘッダを参照のしかたがまずいとか
日本語でどうぞ。

647 名前:デフォルトの名無しさん :2006/12/01(金) 16:24:06
定義されていないというエラーだったら、インクルード自体はうまく言っているという証拠では?
インクルードがうまくいかないのだったら、ヘッダが見つからないというエラーになるはず。

648 名前:644 :2006/12/01(金) 16:38:16
mainと継承先のヘッダーとソースに
#include "CWindow.h" を加えないとエラーが出てしまうようで
直接置いてると継承先のヘッダーだけでいいのですが

ヘッダーでインクルードしてるのに
ソースでもインクルードとか、おかしいな。

後、ツールでディレクトリを指定しなくても動作する
2度ビルドするとエラー(警告ではない)が消える
分からん。頭冷やします。とりあえず再インストール

649 名前:644 :2006/12/01(金) 16:45:48
×直接置いてると継承先のヘッダーだけでいいのですが
○直接置いてると継承先でインクルードするだけでいいのですが

650 名前:デフォルトの名無しさん :2006/12/01(金) 17:00:06
だから参照のしかたがまずいとか

651 名前:644 :2006/12/01(金) 17:21:38
>>650
[ツール][略で上から2番目に設定したら動いた!
何回か作り直してみます。

652 名前:644 :2006/12/01(金) 17:31:27
無事解決しました。有難うございます。
[ツール][オプション][ディレクトリ]の設定において
出来るだけ上に指定してやる事で
継承先にヘッダーをインクルードするだけでいけました。
プリコンパイルの方はまだやってませんが

653 名前:デフォルトの名無しさん :2006/12/01(金) 18:35:13
根本的に間違ってるけど、本人が満足してるようだし
よかった

654 名前:デフォルトの名無しさん :2006/12/01(金) 19:14:03
>>618, >>620
取りあえず、じゃぁ初心者ということでパソコンの勉強から始めようね
と、パソコン技術体系 OS編とハードウェア編をあげて、
e-wordのサイトを教えました。

あいつには理解できないだろうが、
「これで、中学生以上なら独習できるよ。」と言い放ちました。

なんか、すっきりした。


655 名前:初心者@質問 :2006/12/01(金) 19:35:03
関数ポインタで、
 関数名(例えばfunc)⇒その関数へのポインタ
ですが、'&'をつけて(&func)も、
別にかまわないのでしょうか?

ちなみにvisual C++ 2005 EEでコンパイルしたところError&Warningはありません。

656 名前:デフォルトの名無しさん :2006/12/01(金) 20:52:51
構わない。
逆に呼び出すときに*を付けても構わない。ただし演算子の優先順位に注意。

657 名前:デフォルトの名無しさん :2006/12/01(金) 20:54:20
1500までの乱数を二重ループで発生させるプログラムを作成したのですが、
以下のように同じ値が出てしまいます。
883 526 841 863 1437 175 1321 998
883 526 841 863 1437 175 1321 998
1422 68 1117 1486 273 149 74 1039
1422 68 1117 1486 273 149 74 1039

システムの時刻と乱数が関係していることが影響しているらしいのですがどうすれば
正常に毎回違う値が出力されるようにできるのでしょうか?

658 名前:デフォルトの名無しさん :2006/12/01(金) 20:58:45
そんな風に同じ数字が並ぶのは、いくらなんでもお前のプログラムにもどこかおかしいところがあるからだと思う。

659 名前:初心者@質問 :2006/12/01(金) 21:01:37
>>656

そうですか。(WEB上でどこかのHPにそれを説明していない
か探してみたんですが、見つからなくて不安でした。)
そう言いきってもらえると気持ちいいです。

660 名前:デフォルトの名無しさん :2006/12/01(金) 21:02:01
ご指摘ありがとうございます。
具体的なプログラムは以下の通りですがどこかおかしい点が有ればご指摘お願いします。
for(int i=0; i<100; i++)
{
  System::Random^ ran = gcnew System::Random();
  int r;
  for(int j=0; j<30; j++)
   {
    r=ran->Next(1500);
    writer->Write(r+" ");
   }
   writer->WriteLine();
}
writer->Close();

661 名前:660 :2006/12/01(金) 21:10:14
自己解決しました。

System::Random^ ran = gcnew System::Random();
の部分をループの外で宣言することで問題は解決されました。
ご助言下さった方ありがとうございました。

662 名前:デフォルトの名無しさん :2006/12/02(土) 00:42:25
VC++を始めて2週間。やはり本は2.3冊揃えたほうがいいのかな?
サイトを回っても超初心者か中級、上級用の情報しかない・・・


663 名前:デフォルトの名無しさん :2006/12/02(土) 00:46:39
いまさらな質問だけど、BOOLとbool、TRUEとtrueを混在させると良くないかな。
てか、自分で書くプログラムは全部bool、true/falseに統一したいんだけどな・・・
大文字はShift押すのがめんどい。普段C#やってるし・・・

664 名前:デフォルトの名無しさん :2006/12/02(土) 00:54:15
bool値なんてそんなに多用しないだろ。


665 名前:663 :2006/12/02(土) 01:04:04
え、メソッドの戻り値とかによく使うけど。

666 名前:デフォルトの名無しさん :2006/12/02(土) 05:40:00
>>663
> 大文字はShift押すのがめんどい。
変換→Shift、無変換→Ctrl にキーをリマップすると楽だぞ

667 名前:デフォルトの名無しさん :2006/12/02(土) 07:11:36
っCaps Lock

668 名前:デフォルトの名無しさん :2006/12/02(土) 11:54:57
Caps Lock には _ を割り当てている

669 名前:デフォルトの名無しさん :2006/12/02(土) 12:16:45
VARIANT_BOOLが気を付けないと一番一番はまる。VARIANT_TRUEは-1。

670 名前:663 :2006/12/02(土) 16:15:08
普通にif分で比較する分にはtrue、TRUE、false、FALSEが混在して入ってても問題なく通るよね?
VARIANT_BOOLか・・・今、COMまわりやってるから、なんか見落としてそうだ。。。

671 名前:デフォルトの名無しさん :2006/12/02(土) 17:39:59
質問です!!
最近、VisualC++をするようになったんですけど、
なんかAPIというのと、MFCがあるみたいなんですが、
APIを使って勉強です。
ここで、ちょっと困ったことが・・・・ピクチャボックスに簡単な図を書いたらピクチャボックスをはみ出してかかれるんですけど、
これをどうにかしたいんですが、どうしたらいいですか?


672 名前:671 :2006/12/02(土) 17:41:09
あっ
勉強です>勉強中
に訂正ですw

673 名前:デフォルトの名無しさん :2006/12/02(土) 18:05:57
upして。

674 名前:デフォルトの名無しさん :2006/12/02(土) 18:53:20
671と同じ質問をどこかで見た

675 名前:デフォルトの名無しさん :2006/12/02(土) 18:57:39
>>671
> これをどうにかしたいんですが、どうしたらいいですか?
適当にやりたいようにやってそのまま死んでくれ

676 名前:デフォルトの名無しさん :2006/12/02(土) 18:59:35
まったく同じじゃないが、>>622がそのまま解決に導いてくれそうだな

677 名前:デフォルトの名無しさん :2006/12/02(土) 19:07:47
普通にやったらはみだすわけがない。
むしろはみ出す方が高度なテクニックが必要

678 名前:デフォルトの名無しさん :2006/12/02(土) 19:11:04
あっ
本当ですねw
ありました☆
これで一度やってみます!
ありがとーございました〜

679 名前:デフォルトの名無しさん :2006/12/02(土) 19:18:59
>>670
if (b)のようにしたり、false系との比較は、混在してもコンパイルできてしまうし、問題なく動く。
bool以外でture系との比較はまずい。

680 名前:678です :2006/12/02(土) 19:36:12
>>622
ココの所で書かれている事でお聞きしたいんですけど、
これってピクチャボックスに書いてるんじゃなくて、ウィンドウに書いてる事になるんじゃないですか?

一般的にピクチャボックスに書くときってどういうコードになるんでしょうか?


681 名前:デフォルトの名無しさん :2006/12/02(土) 19:45:20
>>680
外から書こうとした時点で微妙に間違っている。
ピクチャボックスをサブクラス化して、
OnPaintをオーバーライドして描画するのが本来のやり方。

682 名前:デフォルトの名無しさん :2006/12/02(土) 19:56:17
>>671
まず、紙に書いてそれをスキャンするといいよ。
そうするとはみ出さない。

683 名前:デフォルトの名無しさん :2006/12/02(土) 20:19:45
すみません。ピクチャボックスのサブクラス化というのがわかりません。
一般的な方法を教えてるようなサイトがあれば、教えてもらえませんか?

684 名前:デフォルトの名無しさん :2006/12/02(土) 20:30:06
サブクラス化を一般的でないとのたまうきか。

685 名前:デフォルトの名無しさん :2006/12/02(土) 21:11:35
>>684
すみません。勉強不足なんで、勉強しようと思いまし・・・。
教えてもらえないでしょうか?

686 名前:デフォルトの名無しさん :2006/12/02(土) 21:22:08
本買え
それで勉強しれ
ネットで手に入る知識だけでやろうなんざ10年早い

687 名前:デフォルトの名無しさん :2006/12/02(土) 21:23:32
まず自分で勉強してくれ。
どれも基本的な事だし、文字でしか伝えられない掲示板より
イラストとか写真で解説してあるサイトや本で勉強したほうがいいよ。

688 名前:デフォルトの名無しさん :2006/12/02(土) 21:24:52
ヤフーファイナンスから株価のデータをダウンロードするプログラムを作りたいのですが、
参考になるサイトや書籍等がありましたら紹介してください。

689 名前:デフォルトの名無しさん :2006/12/02(土) 21:35:48
VC関係あるのか?

690 名前:デフォルトの名無しさん :2006/12/02(土) 21:40:13
まったくもって関係無いな


691 名前:デフォルトの名無しさん :2006/12/02(土) 21:40:54
vc2003 でビルド時に出る警告について教えてください。

スタティックライブラリを作成してます。
いま A、B、C のライブラリを作るとして、B は A を、C は A と B を参照します。
これらをビルドすると以下の警告が出ます。(複数)

warnning LNK4006 "関数A"は A.lib で定義されています。2 つ目以降の定義は無視されます。 : [C のファイル]

たぶん B.lib が実質 A + B になっていて C がリンクをするときに同じ関数が A.lib と B.lib に存在するために
上の警告が出るのかなと考えましたが、どう対処して良いやら分からず悩んでます。

どうすれば警告を消すことが出来るでしょうか。


692 名前:685 :2006/12/02(土) 21:44:52
ありがとうございました☆
本買います!

693 名前:デフォルトの名無しさん :2006/12/02(土) 21:45:58
メニューバーから
[表示]−[その他のウィンドウ]−[出力]で消えます。

694 名前:デフォルトの名無しさん :2006/12/02(土) 21:55:03
そもそもwarningは無視してかまわん

695 名前:デフォルトの名無しさん :2006/12/02(土) 22:16:11
CPadみたいなの無いですか?

696 名前:デフォルトの名無しさん :2006/12/02(土) 22:18:01
CPadのどんなことを求めているのか。

697 名前:デフォルトの名無しさん :2006/12/02(土) 22:20:26
>>695
ありますよ
つ CPad

698 名前:デフォルトの名無しさん :2006/12/02(土) 22:27:03
iPodじゃだめか?

699 名前:勉強中 :2006/12/03(日) 08:42:19
Visual C++ 2003 SP1をインストールしたら
エディターの1行目が変になりました。

700 名前:デフォルトの名無しさん :2006/12/03(日) 09:20:43
かわいそうに

701 名前:デフォルトの名無しさん :2006/12/03(日) 12:03:11
VCのエディタについての質問です。

関数の「定義位置を表示」からその定義に飛んだ後、
元の場所に戻りたいのですが、どうすればいいのでしょうか?

違うファイルならCtrl+Tabで戻れますが、
同じファイル内だった場合は、ちょっと参照したいだけなのにすぐに戻れなくなり、
いちいち元の場所を検索して戻っています。

どうにかならないでしょうか?

702 名前:691 :2006/12/03(日) 12:18:32
>>693
あっはっはっはっは。
いや、私は視界に入れてないんでいいんですけれど。w

>>694
確かに警告の内容からしても無視していいような気もしているのですが。
消せる物なら消したいな、と思ってまして。ダッテ アレガ 200クライ デルンダモン

お二方とも、ありがとうでした。


703 名前:デフォルトの名無しさん :2006/12/03(日) 12:28:59
質問するスレを選んだ方がいい。

704 名前:初心者@質問 :2006/12/03(日) 17:52:58
VisualC++2005 EEでコンパイルすると、
たまに下のような警告が出ます。
『'localtime' が古い形式として宣言』の“形式”って何でしょうか?

//*:;;;;;:*★*:;;;;;:*★*:;;;;;:*★*:;;;;;:*★*:;;;;;:*
d:\chap14\gendate\gendate\date.cpp(13) : warning C4996: 'localtime' が古い形式として宣言されました。
c:\program files\microsoft visual studio 8\vc\include\time.inl(114) : 'localtime' の宣言を確認してください。
//*:;;;;;:*★*:;;;;;:*★*:;;;;;:*★*:;;;;;:*★*:;;;;;:*


705 名前:デフォルトの名無しさん :2006/12/03(日) 18:09:01
たまに出るのか?
普段は出ない?

706 名前:初心者@質問 :2006/12/03(日) 18:15:38
>>705
調べてみたら、localtime関数を使用したコードで毎回出力されます。
(環境の問題でしょうか?)


707 名前:デフォルトの名無しさん :2006/12/03(日) 18:19:47
>>704
ttp://www.google.co.jp/hws/search?hl=ja&q=%E5%8F%A4%E3%81%84%E5%BD%A2%E5%BC%8F%E3%81%A8%E3%81%97%E3%81%A6%E5%AE%A3%E8%A8%80%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F&client=fenrir&adsafe=off&safe=off&lr=lang_ja

708 名前:デフォルトの名無しさん :2006/12/03(日) 18:51:39
MSDNライブラリをC4996で調べる、という考えは浮かばないものかね。

709 名前:初心者@質問 :2006/12/03(日) 19:08:39
>>707
ありがとうございました。
「#pragma warningを使う」方法と
「_CRT_SECURE_NO_DEPRECATEを定義する」方法で
警告がでなくなることを確認できました。

710 名前:デフォルトの名無しさん :2006/12/04(月) 03:30:46
なぁ、普通はF4押してF1やるだろう?

711 名前:671です :2006/12/04(月) 11:11:38
本を買ってみたんですけど、やっぱりはみ出しました。
>>622
のようにはみ出した部分はクリッピングしないとダメなんでしょうか?

712 名前:711 :2006/12/04(月) 11:18:01
すみません。訂正です。
のようにはみ出した部分は::SelectClipRgn()を使ってクリッピングしないとダメなんでしょうか?
失礼しました。

713 名前:デフォルトの名無しさん :2006/12/04(月) 11:27:37
>>712
クリッピングしなくてもはみ出ない。
君のコードが間違ってるだけ。

714 名前:デフォルトの名無しさん :2006/12/04(月) 11:29:22
>>712
やっぱりそうなんですね。
ありがとうございました。

715 名前:714 :2006/12/04(月) 12:36:12
>>713
やっぱりわかんないです。
あの、どういうコードを書くのか、教えてもらえませんでしょうか?

716 名前:デフォルトの名無しさん :2006/12/04(月) 12:46:33
どういうコードを書いたらはみだすか知りたい

717 名前:715 :2006/12/04(月) 13:03:05
>>716
CWnd *myPICT = GetDlgItem(IDC_PICT);
CClientDC myCLDC(myPICT);
CPen myPen(PS_SOLID, 1, RGB(0,0,255));
CPen *oldPen = myCLDC.SelectObject(&myPen);

CRect myRECT;
myPICT->GetClientRect(myRECT);
myCLDC.FillSolidRect(myRECT, RGB(255,255,255));

myCLDC.MoveTo(10, 10);
myCLDC.LineTo(300, 10);
myCLDC.LineTo(300, 300);
myCLDC.LineTo(10, 300);
myCLDC.LineTo(10, 10);

myCLDC.SelectObject(oldPen);

というふうに書きました。

718 名前:デフォルトの名無しさん :2006/12/04(月) 13:34:00
理由はわからんが、CWindowDCならはみ出ない。

719 名前:デフォルトの名無しさん :2006/12/04(月) 14:09:17
>>718
つまり、自分が書いたコードでも本来ならはみ出すことはないって事でしょうか?

720 名前:デフォルトの名無しさん :2006/12/04(月) 14:11:44
ピクチャーコントロールのウィンドウクラスにはCS_PARENTDCが付いていて
GetDCはそれに影響される。
>ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_4esj.asp
>The GetDC function retrieves a common, class, or private DC depending on the class style of the specified window.

ということだと思う。

721 名前:ザライバ :2006/12/04(月) 14:19:35
Visual C++ .NET 2003で、以下のようなソースファイルをコンパイルすると、
関数に4個の引数を指定できません。というエラーが出ます。誰か助けてください。

void main (){
divd2(left,right,&root,&sw);
何かいろいろ
}

void divd2(left,right,sol,sw)
float left,right,*sol
{
何かいろいろ
}

722 名前:デフォルトの名無しさん :2006/12/04(月) 14:26:03
>>720
ちょっと意味が理解できてないような気がしますが、

つまり、ウィンドウのクリッピング領域をピクチャボックスのクリッピング領域にセットすることになるから、
はみ出してしまうって事になるんでしょうか?

723 名前:デフォルトの名無しさん :2006/12/04(月) 14:38:47
>>722
違う。
ピクチャーコントロールのウィンドウクラスにはCS_PARENTDCが付いている。
CS_PARENTDCというのは↓
>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windowclasses/aboutwindow.asp
>Sets the clipping rectangle of the child window to that of the parent window so that the child can draw on the parent.

GetDCはそれの影響で、ピクチャーコントロールのクライアント矩形ではなく、親ダイアログのクライアント矩形でクリッピングされる。
だからピクチャーコントロールの外にも描ける。
GetWindowDCはそれに影響されず、ピクチャーコントロールのウィンドウ矩形でクリッピングされるからはみ出ない。

724 名前:デフォルトの名無しさん :2006/12/04(月) 14:54:17
>>723
そうでした。ありがとうございます。
てことは、同じような図を描くことになると、
723さんなら、GetWindowDCを使って描かれるって事ですか?
違ってたら、簡略でいいのでコードを書いていただいてもいいでしょうか?
これが最後なのでお願いします。

725 名前:デフォルトの名無しさん :2006/12/04(月) 14:58:15
>>724
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwindowdc.asp

726 名前:デフォルトの名無しさん :2006/12/04(月) 18:38:29
質問です。

あるコントロール上でマウスカーソルが○秒以上停止
していた時にイベントを発生させたいのですが
どのように記述したらよいのでしょうか?

環境:VC++2005 MFC

727 名前:デフォルトの名無しさん :2006/12/04(月) 18:49:29
自分で判断する

728 名前:デフォルトの名無しさん :2006/12/04(月) 18:53:19
>727
自分で判断すると言うことは
マウスカーソルの停止時間を取得して
判定するのでしょうか?
マウスカーソルの停止時間って
取得できるんでしょうか?

729 名前:デフォルトの名無しさん :2006/12/04(月) 18:57:38
ウィンドウ上でマウスが動いけば必ずWM_MOUSEMOVEが来る
マウスポインタはウィンドウ上にあるが、動いてない場合は来ない
おk?

730 名前:デフォルトの名無しさん :2006/12/04(月) 19:04:53
>729
なるほど・・・。
つまりWM_MOUSEMOVEメッセージが
○秒以上来なかったらって判断すればいいわけですね。
ありがとうございます。


731 名前:デフォルトの名無しさん :2006/12/04(月) 19:15:06
>>725
ありがとうございました!
おかげで、目的の物ができました☆

ただ、くぼみと境界線を選択してたら、
右上から右下に、
左下から右下に、若干のズレが生じました。
これってくぼみの部分が影響してるからなんでしょうか?


732 名前:デフォルトの名無しさん :2006/12/04(月) 19:17:56
まぁそれだけじゃ完璧じゃないが、後は自分で考えなされ

733 名前:デフォルトの名無しさん :2006/12/04(月) 19:41:52
>>732
そうですねw
ここまでお付き合いいただき、ありがとうございました!

734 名前:デフォルトの名無しさん :2006/12/04(月) 19:55:24
>>726
TrackMouseEvent(または_TrackMouseEvent)とWM_MOUSEHOVER

735 名前:デフォルトの名無しさん :2006/12/04(月) 19:56:48
コントロール上にある時だけ必要なのにTrackしてどうすんだよハゲ

736 名前:734 :2006/12/04(月) 20:06:31
>>735
TrackMouseEvent()でウィンドウハンドルと時間を設定しておけば
コントロール上で止まってたらWM_MOUSEHOVERくるけど。

なんか間違ってること書いてたら訂正するが・・・

737 名前:デフォルトの名無しさん :2006/12/04(月) 20:39:38
>>736
止まって無くても、ウィンドウ内なら動きまくってても来るよ。

738 名前:734 :2006/12/04(月) 20:54:46
>>735
確認しました。
やはりTrackMouseEvent()+WM_MOUSEHOVERでいけるけどなぁ。
環境依存な部分はアンダーバー付きの_TrackMouseEvent()を使っとけばほぼ吸収できるし。

>>737
dwHoverTimeで指定した時間止まってたらWM_MOUSEHOVERが来ましたが、
動いてるときはWM_MOUSEMOVEでしたよ。


739 名前:726 :2006/12/04(月) 21:18:23
>>734-738
いつのまにやらレスがいっぱい(^o^)
参考にさせていただきますm(_ _)m

740 名前:デフォルトの名無しさん :2006/12/04(月) 23:42:22
MFCでグリッドを使いたい場合どうすればいいのですか?
CFormViewにMSGridをはりつける?
CViewからガリガリ自前で書いていく?


741 名前:デフォルトの名無しさん :2006/12/04(月) 23:55:15
キャストについて教えて下さい。

SetWindowLong(hWnd,GWL_WNDPROC,(LONG)pWndProc);

↑こんな感じでポインタを設定しようとすると
「ポインタをXXX(元の型)からLONGへ切り詰めます」
と警告されます。

逆に元の型のポインタ変数にGetWindowLong()でもってポインタを取得しようとすると
「LONGからより大きいサイズのXXX(元の型)へ変換します」と表示されます。

ポインタも32Bit値だから切り詰められるって事はないと思うのですが、具体的に何が
問題なのでしょうか?

742 名前:741 :2006/12/04(月) 23:57:47
申し訳ない
自己解決しますた

VC8だとデフォで/Wp64ついてんのね

743 名前:質問 :2006/12/05(火) 13:50:20
string型からchar型へは、stringクラスのメンバ関数c_strを利用すれば
可能だということはわかるんですが、
char型からstring型への変換ってどうやってやるんですか?


744 名前:デフォルトの名無しさん :2006/12/05(火) 14:01:01
たぶんコンストラクタ
標準C++の質問ならC++スレへ行った方がいいよ

745 名前:質問 :2006/12/05(火) 14:13:46
>たぶんコンストラクタ
こんな感じですか?
char char_ABC = "abc";
string str_ABC = charABC;

>標準C++の質問ならC++スレへ行った方がいいよ
こういうところですか?
C++なら俺に聞け(入門篇)
http://pc8.2ch.net/test/read.cgi/tech/1160897843/l50

746 名前:デフォルトの名無しさん :2006/12/05(火) 14:16:01
おまえは小学生か
それぐらい自分で考えろよ

747 名前:質問 :2006/12/05(火) 14:18:54
すみません。(ここもC++だと思ったので。スレッドが多すぎてよく分からないんです。)

748 名前:デフォルトの名無しさん :2006/12/05(火) 16:26:50
ここは、MicrosoftのC++コンパイラ・IDE製品のVisual C++のスレだ。

749 名前:デフォルトの名無しさん :2006/12/05(火) 18:03:06
#include <iostream>
using namespace std;
int main()
{
cout << "Hello!" << endl;
}

Visual C++ 2005 Express Edition を使って↑のC++のプログラムをコンパイルしようとしたのですが
↓のようにエラーが出てしまい対処法がわからず困っています。
どのようにすればいいのでしょうか?

------ ビルド開始: プロジェクト: cppテスト, 構成: Debug Win32 ------
コンパイルしています...
cppテスト.cpp
(省略)cppテスト.cpp(9) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。
'#include "stdafx.h"' をソースに追加しましたか?
ビルドログは "(省略)" に保存されました。
cppテスト - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========

750 名前:デフォルトの名無しさん :2006/12/05(火) 18:08:42
#include "stdafx.h"
あるいは、プロジェクトを作るときに、空のプロジェクトのチェックを入れておく。


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