★初心者にVisual C++を教えるスレ★ Part25
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/01/10(水) 00:00:39Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。
■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。
質問の仕方については次のページが大変参考になります。
http://www.hyuki.com/writing/techask.html
http://myu.daa.jp/osiete/
■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
(MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。
過去スレ、関連スレなどは>>2-5。
0159デフォルトの名無しさん
2007/01/17(水) 21:16:54>basepair の、公開メンバっぽいものを全て protected にしてる所に問題があると思うよ。
ご回答ありがとうございます。
>あと、スレ違い臭
今まで気づきませんでした。すみません。
これにて私の質問は終えたいと思います。
0160デフォルトの名無しさん
2007/01/18(木) 16:01:37たとえばバーが2つあって「↑↓」で1つ目を増減させ、「←→」で2つ目を増減させるとか。
今はSB_LINELEFT等を使ってマウスで動かしてます。
0161デフォルトの名無しさん
2007/01/18(木) 16:16:030162デフォルトの名無しさん
2007/01/18(木) 16:54:01片方しか動かせないんですよ。お兄ちゃんおせーてください。
0163デフォルトの名無しさん
2007/01/18(木) 21:28:450164デフォルトの名無しさん
2007/01/18(木) 22:28:070165デフォルトの名無しさん
2007/01/18(木) 23:00:27学校の宿題で、ヘッダファイルをDLして、プログラムを書くらしいのですが、
どのフォルダに追加していいのか分かりません。
左のヘッダーファイルのフォルダに追加したのですが、
「include ファイルを開けません」
「'gucc.h': No such file or directory」と出てしまいます。
gucc.hはヘッダーファイルの名前です。
visual C++ 2005を使っています。
0166デフォルトの名無しさん
2007/01/18(木) 23:10:43どこでも好きなところにどうぞ
その代わり、インクルードパスの指定はしっかりしてください
それすらわからんなら全部まとめて同じ場所に保存しとけ
それでもダメなら先生に教わっておいで
0167デフォルトの名無しさん
2007/01/19(金) 00:27:320168デフォルトの名無しさん
2007/01/19(金) 00:38:58_,,..,,,,_ _,,..,,,,_
./ ヽ / ヽ
l ・ωl lω・ l
`'ー--┳━┳---‐´
_,,..,,,,_ _,,..,,,,_
./ ヽ / ヽ
l ,,・3,,-ω-,, l 〜♪
`'ー--┳━┳---‐´
0169デフォルトの名無しさん
2007/01/19(金) 16:52:13リストコントロールの水平スクロールバーが表示されているかどうか判定する方法ってありますか?
0170169
2007/01/19(金) 17:43:34if(GetScrollLimit(SB_HORZ) > 0)
0171169
2007/01/19(金) 17:53:34また行き詰ってしまったので、再度質問です。
リストコントロールの選択アイテムが、可視部の何番目が選択されているかというのは分かりますでしょうか?
下図の例で言うと、垂直スクロールバーが表示されているリストコントロールで、
矢印の行が選択されていた場合、インデックス値は2ですが可視部だけなら1ということで、
その1という値を求めたいということです。
<例図>(『あ』はインデックス0番目のアイテムだが、スクロールによって見えてない。)
(あ)
―――――
|い ‖
→|う■■■■‖
|え ‖
|お ‖
|―――――
0172デフォルトの名無しさん
2007/01/19(金) 18:04:050173デフォルトの名無しさん
2007/01/19(金) 18:08:50m_list.GetCurSel() - m_list.GetTopIndex()
0174デフォルトの名無しさん
2007/01/19(金) 18:29:01GetCurSelはリストコントロールにはなかったですけど、出来ました!
ありがとうございます。
m_list.GetSelectionMark() - m_list.GetTopIndex()
0175デフォルトの名無しさん
2007/01/19(金) 21:05:11画像をpictureboxから別のpictureboxに部分コピーする方法がわからないのですが
何か良い方法はないでしょうか。
0176デフォルトの名無しさん
2007/01/19(金) 21:16:240177デフォルトの名無しさん
2007/01/19(金) 21:22:28BitBlt使う方法もあるけどな
0178デフォルトの名無しさん
2007/01/19(金) 21:24:32レスありがとうございました。どうもそれでできそうです。
VC++はMFCとかWINDOWSフォームとか、それぞれ勝手が違うのでちょっと困ってました。
もうちょっと参考書買い足してみることにします。
0179デフォルトの名無しさん
2007/01/19(金) 21:25:15ありがとうございます。
あとsage忘れました。ごめんなさい。
0180デフォルトの名無しさん
2007/01/19(金) 21:40:41外部実行ファイル(=既存のプログラム)を起動するにはどうしたらよろしいでしょうか?
0181デフォルトの名無しさん
2007/01/19(金) 21:51:50わからない俺は猫以下なんでしょうか…
0182デフォルトの名無しさん
2007/01/19(金) 21:56:34ShellExecute
>>181
あそこの猫は特別優秀らしい
0183デフォルトの名無しさん
2007/01/19(金) 21:59:58とりあえず何を勉強したらいいんですかね?
目標はゲームを作ることなんですが
0185175
2007/01/19(金) 23:40:14すいません。windowsフォームでBitBltを使う方法ってどんなのでしょうか。
Drawimageだと画像の「部分」を取り出すことができませんでした。
(画像全体が、取り出したい部分サイズに縮小されてしまいました。
DrawImageUnscaledAndClippedメソッドというのもあるようですが、自分のバージョンは古いらしく対応していないようでした。)
度々すいません。
0186デフォルトの名無しさん
2007/01/20(土) 00:22:48DrawImageメソッドには描画元の領域指定できるのも用意されている。よく探せ。
0188デフォルトの名無しさん
2007/01/20(土) 00:44:340189デフォルトの名無しさん
2007/01/20(土) 08:54:490190デフォルトの名無しさん
2007/01/20(土) 12:22:270191デフォルトの名無しさん
2007/01/20(土) 13:17:200192デフォルトの名無しさん
2007/01/20(土) 13:21:270193デフォルトの名無しさん
2007/01/20(土) 13:50:300194デフォルトの名無しさん
2007/01/20(土) 22:07:35MSDN見てヘッダ関係かと思ったんですが#includeはきっちりしてあるのにエラーが・・・
#include <stdlib.h>
#include <stdio.h>
int Main(int argc, _TCHAR* argv[])
{
printf("test\n");
return 0;
}
なんかしょうもないボカやってる悪寒が
0195デフォルトの名無しさん
2007/01/20(土) 22:08:490196デフォルトの名無しさん
2007/01/20(土) 22:19:110197デフォルトの名無しさん
2007/01/20(土) 22:30:35stdafx書き込むの忘れてました
弟がstdafx.hを弟がソリューションから消したのが正解でした・・・・
返してくれ俺の3時間orz
0198デフォルトの名無しさん
2007/01/20(土) 23:02:12プログラムの利用者はどうやってフォルダの中にあるファイルを指定するのか。
0199デフォルトの名無しさん
2007/01/21(日) 16:01:47SelectObject(hdc,CreateFont(20,0,0,0,
FW_DONTCARE,
FALSE,FALSE,FALSE,
SHIFTJIS_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE,
"Arial Black")
);
こんな感じで論理ペンを作成したのですが、
どうあがいてもArial Blackではないフォントで描画されてしまいます。
どうしてArial Blackで描画させたいのですがどうすればよいでしょうか・・・
0200デフォルトの名無しさん
2007/01/21(日) 16:16:160201デフォルトの名無しさん
2007/01/21(日) 16:41:15後別にVCの使い方関係ないし、Win32APIスレで聞いた方が良い
0202デフォルトの名無しさん
2007/01/21(日) 17:19:53漏れ的には無料のVC8の方が格別に使いやすいのですが、ライセンスの関係でVS2005の
無聊版は使えないらしいのです、仕方なく会社のVC6をコッソリ家に持って帰り
インスコしてSP6を当てマスタそして
VC6で開発する時の注意事項などあれば教えてホスイ
0203デフォルトの名無しさん
2007/01/21(日) 17:28:040204デフォルトの名無しさん
2007/01/21(日) 17:32:33Windowsフォームアプリケーションで、
String *data=S"aaaaa";
if(data->Substring(1,1)==S"a"){text1->Text=S"ok";}
if(data->Substring(1,1)!=S"a"){text1->Text=data->Substring(1,1);}
このような構文を走らせたところ、text1には変化なし、
しかしtext2には"a"と表示されてしまいました。
一体なにがいけないのでしょうか?
0205デフォルトの名無しさん
2007/01/21(日) 17:48:42注意事項:コッソリ持って帰らない
0206デフォルトの名無しさん
2007/01/21(日) 17:49:45テンプレート使いまくりの変態プログラミングは諦めろ。
付属のSTLもかなり怪しいし、boostは駄目かもしれん。
0207デフォルトの名無しさん
2007/01/21(日) 17:52:39Substringということは.NETか
C++で.NET使ったこと無いんだが、なんだその「S」は?
まぁそのSが何のつもりか知らんが、その比較演算はC++としてありえない
0208デフォルトの名無しさん
2007/01/21(日) 17:55:550209デフォルトの名無しさん
2007/01/21(日) 18:08:30御社名を教えていただければ、開発に当たっての様様なノウハウをお教えするに吝かではありません。
#尤も、MSに密告しない保証は致しかねますが。
0210デフォルトの名無しさん
2007/01/21(日) 18:27:35そうですねこっそり持って帰るのはイクナイノデアンインストールして明日会社に返します。
本棚の隅に1999年に買って一度も目を通したことの無かった
SHOEISHAの「プログラミング学習シリーズ山本信雄 著 VisualStuidio C++」
を開いてみたら
char s(80);
lstrcpy(s, "おはようございます。");
ってなってマスタ、
char s(80);は今日日ねーべなと思い
char s[80];
で動きマスタ
昔のVS6はchar s(80);でもコンパイルエラーでなかったのかな??
因みに漏れはSP6を家で堂々と当てたのでエラーになったのだと思う
C99はchar s(80);これでもOKだったのかい??
0211204
2007/01/21(日) 19:05:40ありがとうございました。
0212デフォルトの名無しさん
2007/01/21(日) 19:45:44おそらく本の誤植。
ちなみにC++でchar s(80);はコンストラクタ引数を与える構文になるが、charは組込型なのでchar s = 80;と同じ意味になる。
0213デフォルトの名無しさん
2007/01/21(日) 21:01:52一応、課題の例は出されたのですが、ちょっと無理かなと思いまして・・・
例は、
・駐車場のパーキングシステム
・飛行機の搭乗席を予約するシステム
・マトリックスを計算する電卓
・ブラックジャック
・ポケットゲーム
などです。
この他になにかアイディアはありませんでしょうか。
宜しくお願いします。
0214デフォルトの名無しさん
2007/01/21(日) 21:19:34お前死ね
お前が無理ではないと思うプログラム作ったらイイジャマイカ
答え
お前死ね
0215デフォルトの名無しさん
2007/01/22(月) 11:21:38#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 7
main ()
{
int a[100]={0,5,2,4,6,1,3,7};
int i,x,j;
clock_t ts,te;
double p;
for(i=1; i<=N; i++) a[i]=rand();
ts=clock();
for(i=2; i<=N; i++){
x=a[i]; a[0]=x;
j=i-1;
while(a[j] > x){
a[j+1]=a[j];
j=j-1;
}
a[j+1]=x;
}
te=clock();
p=(double)(te-ts)/CLOCKS_PER_SEC;
for(i=1; i<=N; i++) printf("%d ",a[i]);
printf("\n");
}
という挿入法のプログラムを作り、整列アルゴリズムのデータ個数と処理時間の平均値を用いたのですが、整列手前等で、ある条件下では処理時間が入れ替わることがあるんです。
その理由をお教えください。よろしくお願いします。
0216デフォルトの名無しさん
2007/01/22(月) 11:43:04ましてその程度のコードだと、初回とそれ以降ではキャッシュの乗りが確実に違うだろうし。
0217デフォルトの名無しさん
2007/01/22(月) 18:19:47説明不足でした。すみません。
PCとOSで必ず同じ時間になる保証はどこにもないのは知ってます。
上記のプログラムで、ある条件下では処理時間が入れ替わることがあるという部分(理由)はあるでしょうか?
お教えください。
0218デフォルトの名無しさん
2007/01/22(月) 18:23:30まさかとは思うが、CLOCKS_PER_SECの関係でばらつきがでることを問題視したいのだろうか。
例えばCLOCKS_PER_SECが100msなら、110msの処理時間は100msと表示されることも200msと表示されることもあるわけだが。
0219デフォルトの名無しさん
2007/01/22(月) 18:33:560220デフォルトの名無しさん
2007/01/23(火) 04:40:35お前さんはまだわけぇから言いたいこともあるべぇ
だべな、派遣問題を口にするとムキになって怒る者がおるでよぉ
問題の指摘は駄目だっぺぇ
派遣のことは口にしちゃなんねぇ
この村みたいな民度ゼロの会社で現実忘れるためはよ
北朝鮮と一緒でよ、駄目のものを駄目と言ってはなんねえだべさ
タブーを口にしちゃいけねぇだ
0221お願いします
2007/01/23(火) 23:25:07LINK : fatal error LNK1249: イメージのベース アドレスが 400000、
サイズが 0x7FFEF000 で、最大範囲を超えています。
というエラーが出るのですが、この最大範囲を大きく変更するには
どうすればいいのですか。
よろしくお願いします。
0222デフォルトの名無しさん
2007/01/23(火) 23:54:14だめだったら64bit化しろ。
0223デフォルトの名無しさん
2007/01/24(水) 08:05:37という言葉をよく見かけるのですが、これはUNIX系でいうhoge foo varと
同じような意味なんでしょうか?
0224デフォルトの名無しさん
2007/01/24(水) 08:57:19とりあえずその文でぐぐってみれ。
0225デフォルトの名無しさん
2007/01/24(水) 12:17:04ホームページ作者の趣味なんですね。
0226デフォルトの名無しさん
2007/01/24(水) 16:14:010227デフォルトの名無しさん
2007/01/24(水) 18:27:380228デフォルトの名無しさん
2007/01/24(水) 19:32:57VC6.0で作ったプロジェクトを2005に移行することになりました。
型変換や標準関数の変更でガンガンエラーはでるものの、なんとか修正してきましたが、
COMのインターフェースの定義で、oledb.hに書かれているものと同じ名前の
インターフェースを使用していたのですが、2005に移行したらインターフェース名を
変更しないと使用できなくなりました。
名前を変更すればビルドはできるものの、今まで使えていただけに2005でも
何かすれば使えるのではないかと思っています。
どうにかヒントでも頂ければ幸いです。
0229デフォルトの名無しさん
2007/01/26(金) 02:04:48ユーザーにコマンドライン引数を決めさせたいとき
どのようにすればいいでしょうか?
下のようにするとハングしてしまいます。
#include <iostream>
using namespace std;
int main(void)
{
char str[100];
char str2;
cout << "引数を入力してください"<<endl;
cin >> str2;
sprintf(str,"test.exe %s",str2);
system(str);
return 0;
}
0230デフォルトの名無しさん
2007/01/26(金) 02:26:42>下のようにするとハングしてしまいます。
str2はcharなのに書式指定子に%sを使っているから。
0231229
2007/01/26(金) 02:39:56とりあえず
char str2[64];
としたところ正常に動きました。
0232デフォルトの名無しさん
2007/01/26(金) 08:36:19チェックするようにするには、GroupBoxを使うと教えられました。
radioButtonMen,radioButtonWomenの2つのラジオボタンをグループボックスの
上に配置した時に生成されたコードの一部分が↓です。
どのメンバ変数を見れば、どちらをチェックしたかというのがわかるの
でしょうか?
//
// groupBox1
//
this->groupBox1->Controls->Add(this->radioButtonMen);
this->groupBox1->Controls->Add(this->radioButtonWomen);
this->groupBox1->Location = System::Drawing::Point(197, 194);
this->groupBox1->Name = L"groupBox1";
this->groupBox1->Size = System::Drawing::Size(200, 45);
this->groupBox1->TabIndex = 24;
this->groupBox1->TabStop = false;
this->groupBox1->Text = L"groupBox1";
this->groupBox1->ResumeLayout(false);
this->groupBox1->PerformLayout();
0233デフォルトの名無しさん
2007/01/26(金) 18:22:23(VS C++2005の環境)
フォームにボタンやテキストボックスを配置してビルドすると、
ソースが勝手に追加/削除されたり編集されたりします。
その更新されていくソース・プログラムを見ていて思ったんですけど、
Visual C++でWindowsプログラミングをする場合、
通常プログラマは、
クラスの関連(継承とか)をあまり意識しないんでしょうか?
メンバ変数を用意することってあまりないでしょうか?
あと、普通のC++のコンテナ(vectorやlist)は使用されませんか?
0234デフォルトの名無しさん
2007/01/26(金) 18:27:34VC++の操作がわかんなかったら手書きでもいいし
0235デフォルトの名無しさん
2007/01/26(金) 19:14:23VC6では出来ないのでしょうか?
Debugモードしか見当たりません・・・・・
0236デフォルトの名無しさん
2007/01/26(金) 19:24:430237デフォルトの名無しさん
2007/01/26(金) 21:12:11>>235ですが
「Vc6 Release」で検索しても分からなかったんですが
0238デフォルトの名無しさん
2007/01/26(金) 21:16:120239デフォルトの名無しさん
2007/01/26(金) 21:19:250240デフォルトの名無しさん
2007/01/27(土) 00:35:430241デフォルトの名無しさん
2007/01/27(土) 02:41:48すべての種類の駒が描かれている1枚のビットマップから
一部を切り出して(読み込んで)オブジェクトにするには
どうしたらいいでしょうか?
一つずつ別ファイルを用意しないとだめ?
0242デフォルトの名無しさん
2007/01/27(土) 07:26:34ありがとう
0243デフォルトの名無しさん
2007/01/27(土) 13:30:33CDC *pDC = GetDC();
AfxBeginThread(ここがわからない);
とメインの中に記述して、マルチスレッドでfunを使って、
funの中でpDCを↓のように使いたいのですが、どうすればいいでしょうか。
void fun(){
pDC->TextOutW(10,10,_T("aaa"));
}
0244デフォルトの名無しさん
2007/01/27(土) 13:33:030245デフォルトの名無しさん
2007/01/27(土) 13:44:20そうなんですか・・・。
では、マルチスレッドのfunの中でpDCを使いたい場合はどうすればよろいのでしょうか。
0246デフォルトの名無しさん
2007/01/27(土) 13:49:290247デフォルトの名無しさん
2007/01/27(土) 13:58:14ハンドル渡せば。
でもいろいろ面倒だから、描画関係はそのウィンドウが属するスレッドでやって
描画に関係ない処理を別スレッドでやる方がいいと思うけど。
0248デフォルトの名無しさん
2007/01/27(土) 14:16:570249デフォルトの名無しさん
2007/01/27(土) 14:50:03なんで?
MSDNのサンプルでもMFCオブジェクトのポインタ渡してるよ。
まーpDCを渡すのはやばいけどね。
0250デフォルトの名無しさん
2007/01/27(土) 16:36:24ハンドル-オブジェクトのテーブルがスレッド固有とかいろいろ。
詳しくはこの辺
ttps://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_multithreading.3a_.programming_tips.asp
0251デフォルトの名無しさん
2007/01/27(土) 17:37:52注意点や、危険性とその回避方は書いてあるが >>244 のようなことは書いてないぞ。
非MFCスレッドでは出来ないと書いてあるけど。
0252デフォルトの名無しさん
2007/01/27(土) 17:45:10>As a general rule, a thread can access only MFC objects that it created.
0253デフォルトの名無しさん
2007/01/27(土) 17:50:290254デフォルトの名無しさん
2007/01/27(土) 17:54:52>This is because temporary and permanent Windows handle maps are kept in thread local storage to ensure protection from simultaneous access from multiple threads.
HDC等もハンドルマップを持ってるから、同様な問題があるよ。
0255デフォルトの名無しさん
2007/01/27(土) 18:05:32Windows Handle -> HANDLE, HWND, HDC, SOCKET…
Window Handle -> HWND
0256デフォルトの名無しさん
2007/01/27(土) 18:10:370257デフォルトの名無しさん
2007/01/27(土) 18:30:410258243
2007/01/27(土) 19:11:33for(i=0;i<10;i++){
pDC->TextOutW(0,0,_T("aaa"));
Sleep(1000);
}
で、それを処理させながら他の処理ができるようにしたいのです。
こんな安易な考え方からスレッドを使おうとすることが間違いなのでしょうか。
OnTimerを使う方法以外で何かよい方法がありましたら是非教えてください。
それとも、やはりOnTimerを使うしかないのでしょうか。
■ このスレッドは過去ログ倉庫に格納されています