トップページ⇒tech
1001コメント306KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001987NGNG
タイトルのとおり、
Visual C++ 初心者用スレッドです。

前スレ・関連スレは、>>2 ぐらい。
0688デフォルトの名無しさんNGNG
>>687
ですよねぇ・・。
調べもせずに買ってしまったので。
無知って恐ろしい。
0689デフォルトの名無しさんNGNG
名言:利口な客は金にならない。
0690デフォルトの名無しさんNGNG
CFrameWndで作ったフレームがアクティヴかどうか調べる方法はありますか?
0691デフォルトの名無しさんNGNG
CButtonのキャプションを設定する方法を教えて下さい
0692663 ◆bYHudLsQLw NGNG
できました!ありがとうございました。
0693デフォルトの名無しさんNGNG
>>691
SetWindowText
0694デフォルトの名無しさんNGNG
>>690
CWnd::IsWindowEnabled
0695デフォルトの名無しさんNGNG
>>693
ありがとうございます
CButton *b2 = (CButton *)GetDlgItem( IDC_BUTTON2 );
b2->SetWindowText( _T("ggg") );
とこんな感じで書いてるのですが表示されなくて・・
因みにOSはWindowsCEです。
0696デフォルトの名無しさんNGNG
>>695
コードはあってると思う。

1、記述する場所を間違えてる
2、WindowsCEが原因          のどっちかかな
0697デフォルトの名無しさんNGNG
BMPについての質問です。うまく質問できませんが、教えてください。
1、16*16*17*17サイズを表示する場合、DIBはそのサイズのを一つ用意すればよい
  のですか。それとも16*16サイズを17*17個用意すればよいのですか。
2、BMP読み込みで一つ読み込んで一つ表示は分かるのですが、例えば3X3のフィー
  ルドマップに1箇所ずつランダムで読み込むとしてそれが分かりません。
  1がどちらであるかによって違ってくると思いますが。
3、今はBMP読み込みができないので、コードの配列に絵のデータを書いてやっていて、
  lpBMP[(73712-(y*17*16*16+y2*17*16)+x*16+x2)*3]=m%4*85;
  lpBMP[(73712-(y*17*16*16+y2*17*16)+x*16+x2)*3+1]=m/4%4*85;
  lpBMP[(73712-(y*17*16*16+y2*17*16)+x*16+x2)*3+2]=m/16*85;
  見たいにやっているのですが、BMPも同じ感覚なのですか。
4、3のはlpBMP=(LPBYTE)GlobalAlloc(GPTR,16*16*3*17*17);とやってから
  そうしているのですが、これは3byte-1670万色使うと言うことだと思いますが、
  lpBMPの打ち分けはどうなっているのでしょうか。3byteなら[0]B、[1]G、[2]R
  [3]B、[4]G、[5]Rだと思うのですが、色数の変化によりどうなるのですか。
0698697NGNG
3、4は解決できました。3は同じ感覚です。例えば16*16sizeの256色のbmp
を読み込むとlpBMPのサイズは256バイトになります。16色なら128バイトで
1670万色なら768バイトです。全部緑の16*16sizeで256色のbmpを取り込み、
lpBMP[0]=0;なんかをやるとその部分だけ黒くなります。なお位置に注意
しなければならなく、[0]は左上が普通ですが、lpBMPは特殊で左下になります。
[0]左下→右下→左上→右上[255]です。4も3のが使えるので解決できました。
3byteの時の順番はB→G→Rのようです。これも逆のようですね。
1はたぶん前者ですね。後者だとすごく遅くなりました。2は1が前者の場合
3のを使えば自力でできそうです。ただ、逆であるためにlpBMP[(73712-
みたいにしないといけないが嫌ですね。
0699デフォルトの名無しさんNGNG
質問です。
sdkの方のSetWindowPosを使いたいんですが、
コンパイルするとmfcのSetWindowPosをコンパ
イルしているらしく、引数の違いのため、コンパ
イルできません。
sdkのほうをコンパイルするにはどうすればいい
んですか?
0700bloomNGNG
http://homepage.mac.com/ayaya16/
0701699NGNG
解決しました。
::SetWindowPosでいけました。
0702デフォルトの名無しさんNGNG
自作自演ウザイ。
0703690NGNG
>>694 super thanks
0704デフォルトの名無しさんNGNG
256色以上のビットマップ画像をリソースエディタで表示することは不可能ですか?
0705デフォルトの名無しさんNGNG
メモ帳とかに、キーボードを使わずに文字列を表示させることはできるんでしょうか?
思い誤ってSetWindowText()を使ったりしたら、ウィンドウのタイトルが変更されてしまったり…。
どうか助けてください。
0706デフォルトの名無しさんNGNG
>>705
メモ帳のビューそのものにSetWindowTextすればいけるんじゃないかい?
0707705NGNG
レスありがとうございます。

>メモ帳のビューそのものにSetWindowTextすればいけるんじゃないかい?

これはどういう意味でしょうか?
メモ帳のハンドルという意味ですか?
0708デフォルトの名無しさんNGNG
>>705
HWND hwnd;
hwnd=FindWindowEx(FindWindow("Notepad", NULL),NULL,"Edit",NULL);
SendMessage(hwnd,WM_SETTEXT,0, (LPARAM) "( ´∀`)");

という方法もあります
0709デフォルトの名無しさんNGNG
>>707
分からんのだったらkeybd_eventでも使えば?
0710デフォルトの名無しさんNGNG
すいません。ラジオボタンを作って
一回作りました。
そのあとラジオボタンの数を増やそうと思って
そのラジオボタンをコピーして
それから貼り付けてボタン1、ボタン2と
いうコントロールIDに変更しました。

そしたら実行するとラジオボタンが2つともチェックされてしまい
ラジオボタンのチェックが一つに限定されることが
できなくなりました。どこがおかしいのでしょうか
0711デフォルトの名無しさんNGNG
>>710
日本語
0712デフォルトの名無しさんNGNG
>>711
クソレスしてないで答えろや。
0713デフォルトの名無しさんNGNG
>>710
IDの値を連続させる&グループ
0714デフォルトの名無しさんNGNG
VC++は2つのワークスペースを同時に表示させる事はできますか?
右側に別のワークスペースを表示して参考にしながら
現在のワークスペースをコーディングとか。
0715デフォルトの名無しさんNGNG
すいません、ウインドウ内に
色のラインを引きたいのですが
それはプログラムで書くしかできないのでしょうか。

それともスタティックテキストみたいに
簡単にラインを引くことはできるのでしょうか
0716デフォルトの名無しさんNGNG
>>715
プログラムで書いて下さい。
0717デフォルトの名無しさんNGNG
>>714
IDEの複数起動
0718 NGNG
>>715 CDCのMoveToとLineTo
0719 NGNG
あの〜、718も私じゃないです。
煽りはいらないので早くレスください。
0720デフォルトの名無しさんNGNG
>>719
こんな奴に教えたく無いね。
0721705NGNG
>>708さん
>>709さん
レスありがとうこざいます。
いろいろやってみます。
0722デフォルトの名無しさんNGNG
メイン文で構造体をポインタで宣言して、mallocした後で関数に渡しました。
その後メイン文でそれを使うにはどうすればよいですか?
typedef struct{
  int a;
  int b;
}KOUZOUTAI;
main()
{
  KOUZOUTAI *K;
  int i;

  K = malloc(i * sizeof(KOUZOUTAI));
  printf("%d", k[0].a );
         ↑ここに何を入れればKOUZOUTAIの中身をプリントできますか?

どうも自分&とか*の使い方がいまいちです。教えてください。
0723bloomNGNG
http://homepage.mac.com/ayaya16/
0724デフォルトの名無しさんNGNG
>>722
iの値が不定なので正常にメモリーを確保できません
さらにポインタがキャストされていないので、
エラーが出てコンパイルも出来ないことでしょう

中身を出力したければ確保したぶんだけループでまわして
メンバ一つ一つを指定してください
0725デフォルトの名無しさんNGNG
Cスレ行った方がいいと思うよ
0726722NGNG
>724
すばやいレスthx。ちょっと書き方が不十分でしたのでもう一度。
typedef struct{
  int a;
  int b;
}KOUZOUTAI;
main()
{
  KOUZOUTAI *K;
  int i = 3;

  K = malloc(i * sizeof(KOUZOUTAI));
  kansuu(K);       ←何かの関数をよんでると思ってください。
  printf("%d", k[0].a );

それと、キャストって何ですか?お願いします。
0727デフォルトの名無しさんNGNG
略
int j;
略
K = (KOUZOUTAI*)malloc(i * sizeof(KOUZOUTAI));
略
for(j=0;j<i;j++)
printf("%d %d\n",k[j].a,k[j].b);
0728デフォルトの名無しさんNGNG
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
0729デフォルトの名無しさんNGNG
領域確保してるけど何もコピーしてないね
0730デフォルトの名無しさんNGNG
研究室にVC++が落ちてるんだけど勝手にインストールしちゃまずいかな?
0731デフォルトの名無しさんNGNG
>>730
ライセンスの種類によっては可能だったと思われ。
0732デフォルトの名無しさんNGNG
隊長、馬鹿(>>730)を発見しました!
いかがいたしましょう?
0733デフォルトの名無しさんNGNG
VC++ 6.0でADOを使用してAccessのテーブルから
該当件数を表示するものを作りたいのですが、
レコードセットの値を変換して取得する方法がわかりません。
お助けください。

_ConnectionPtr pCn;
_CommandPtr pCm;
_RecordsetPtr pRs;

::CoInitialize(NULL);

pCn.CreateInstance(__uuidof(Connection));
pCm.CreateInstance(__uuidof(Command));
pRs.CreateInstance(__uuidof(Recordset));

pCn->Open(L"Provider=Microsoft.Jet.OLEDB.4.0; Data Source =test.mdb",
L"",L"",adOpenUnspecified);

pCm->ActiveConnection = pCn;

pCm->CommandText = "SELECT COUNT(*) FROM 帳票 WHERE 担当 LIKE '%佐藤%'";pRs = pCm->Execute(NULL,NULL,adCmdText);

ここからどうすれば良いでしょうか?
0734733NGNG
申し訳ない。
何とかなりそうです。

_variant_t vIndex = (long)0;
_variant_t vCount = pRs->GetCollect(vIndex);
long l = vCount.lVal;
0735デフォルトの名無しさんNGNG
STLの事を質問しようと思ってタイトル検索したら

鳥嶋宇宙科学技術研究所(TSTL)どんな研究所?
■▼■各放送局STL周波数【スタジオ⇔アンテナ】

がイパーイ出てきました。鬱です


0736デフォルトの名無しさんNGNG
VisualC++.NETでVC++6.0同様にプロジェクトにリソーステンプレートぶちこんで
テンプレートにダイアログぶち込んだのにリソースのヘッダーファイルが
作られていませんでした。そのためかDialogBoxを使っても
キャラ配列で名前を指定したり、MAKEINTRESORCEでダイアログ
ボックスのIDを生でぶちこんだりしても、IDを認識していないのか
ダイアログボックスを作れません。だれか対応策教えてください。
0737デフォルトの名無しさんNGNG
>>736
ぶ、ぶちこむって、あんまり連呼しないで〜(*´д`*)
0738デフォルトの名無しさんNGNG
>>650,653 宛


 バ グ 込 み の ソ ー ス を プ リ ン ト ア ウ ト し て も
 次 の 日 に は も う 使 い 物 に な ら ん だ ろ ( 爆 笑



0739デフォルトの名無しさんNGNG
>>738
アメリカンジョークですか?
0740デフォルトの名無しさんNGNG
背景の透過の仕方が分かりません。SetBkColorを使うのは分かるのですが。教えてください。
0741名無し@沢村NGNG
>>740
SetLayeredWindowAttributes()
0742デフォルトの名無しさんNGNG
windws + vc+++
os XP

VCでプログラムを実行したあと、右上の×ボタンでウインドを消去

その後再びコンパイルしようとすると、LINK ERR 対象のファイルが使用中.....

これは終了処理が正しく行われていないからだと思われるのですが、
なにをしていない場合おこるのでしょうか?

windowsクラスは破棄しているのですが、それ以外にも defwndprocに何か渡さないといけないのでしょうか?
0743デフォルトの名無しさんNGNG
>>742
自己解決しました。
windowsクラスが破棄できていませんでした。
0744デフォルトの名無しさんNGNG
オススメの書籍教えて

ちなみに超絶初心者です
0745デフォルトの名無しさんNGNG
ねこぷー
0746デフォルトの名無しさんNGNG
>>744
完全自殺マニュアル
0747デフォルトの名無しさんNGNG
>>740
SetBkColor使うと真っ白(真っ黒だっけ?)の
モノクロビットマップにBitBltしたときに
設定した色の部分だけ色が変わるのです。(確か黒)
そのモノクロビットマップをマスクに使って
転送するのです。
0748デフォルトの名無しさんNGNG
最近C++始めたんですが、エディットボックス1〜10(m_ed1〜10)を配列に収集するのに、
for文で10回ループさせようと思ってるんですが、メンバ名にカウント変数[i]を反映させるにはどうしたら(・∀・)イイ?


int dat[10];
for(i=0;i<10;i++)
{
dat[i] = m_ed[i] ←こんなことがしたい…
}


厨でスマソ…
0749デフォルトの名無しさんNGNG
コントロールのIDを連番にして
GetDlgItem(ID + i, ・・・・・・)とか
0750デフォルトの名無しさんNGNG
datにコントロールのポインタを必要なだけ入れておけばいいだけでは?
0751デフォルトの名無しさんNGNG
>>750
いや、それをループでやりたいってことだろ
0752デフォルトの名無しさんNGNG
>>749,750
レスthx!!
750さんの方が簡単にできそうなので、さっそく逝ってきまつ♪
0753デフォルトの名無しさんNGNG
>>751
いや、正直、収集できたらなんでもいいんで、さっそくやってみまつ…
ポインタ、見過ごしてました…(汗)
0754デフォルトの名無しさんNGNG
え、もしかして
CEdit arrayEdit[10];
arrayEdit[0] = &m_ed1;
arrayEdit[1] = &m_ed2;
 :
 :
int dat[10];
for(i=0;i<10;i++)
{
dat[i] = arrayEdit[i]->GetLineCount();
}
みたいなことでいいのか?てっきり最初の
arrayEdit[0] = &m_ed1;の部分をループでやりたいのだと思って・・・
0755デフォルトの名無しさんNGNG
CEdit* だった。ま、いいか。
0756デフォルトの名無しさんNGNG
>748
DDXつかっての話だったら、
  DDX_Text(pDX, IDC_EDIT_NUM0, m_iNum0);
  DDX_Text(pDX, IDC_EDIT_NUM1, m_iNum1);
みたいに自動生成されるところで
  DDX_Text(pDX, IDC_EDIT_NUM0, m_iNum[0]);
  DDX_Text(pDX, IDC_EDIT_NUM1, m_iNum[1]);
と手動で書く。 と漏れはやってる。

力尽く主義なら 更新関数とかで
const int* pT[]= { &m_ed1, &m_ed2, ... };
for(int i=0;i<MAXNUM;i++) dat[i] = *pT[i];
てな方針を提案。
0757デフォルトの名無しさんNGNG
えっと…厨なんで、難しい記述はできないんですが、
int *dat[10]={&m_ed1,&m_ed2…}
の一行だけで、すべてはかたずきました…

ループは、その後のプログラムで使うんで、データ収集も、そのまんまそのループ内に入れようとしてただけなんですわ…



なにぶん、独学で本読みながら学んでるんで、まだまだわからないことだらけです…
(ノД`)シクシク
0758デフォルトの名無しさんNGNG
>>756
Σ(゜Д゜;≡;゜д゜)
も、漏れがやったのは、力づくなのか?そうなのか?(汗)
0759756NGNG
Σ(;´Д`)あ いや
変数名いまさら変えたくないYO! という場合はこちら みたいな
ニュアンスでな…   正直スマソ
0760デフォルトの名無しさんNGNG
DDXに頼り杉。EDITのIDを連番にして↓が最適解だと思う。
for(int i=0; i<10; ++i)
 dat[i] = this->GetDlgItemInt(ID_FIRST_EDIT + i);
0761デフォルトの名無しさんNGNG
何をもって過ぎることになるんだ。使えるなら使えばいいじゃないか。
0762デフォルトの名無しさんNGNG
わたしも760のようにいつも書いているのですが
書きながら、IDが連番であることを仮定したコードを書くのは
論理的に美しくないような気がして(´・ω・`)ショボーン となってしまいます。
0763デフォルトの名無しさんNGNG
初めまして、最近VC++を始めたばかりのプログラム初心者です。このたびは質問があって、「すれ立てるまでもない質問スレ」のほうから移動して書きこみさせていただきました。
Visual Studio.NET Standard Version2002を使ってManaged C++アプリケーションのコードを練習していて、いざコードを書き終わってビルドしたところ
「fatal error C1102:次の初期化が出来ません:クラスが登録されていません」というエラーがタスクに表示されました。そこをダブルクリックしたらstdafx.cppというところに飛ばされたのですが、
当方初心者のため、そこで何をしたらいいのかわからなくて問題を解決できないでいます。この問題を解決するにはどうしたらよいのでしょうか?
私の使っているOSはWindowsXPで教本には「ステップバイステップで学ぶVisualC++.NET実践講座Vol.1基礎編」を使っています。ステップ2の「animals」というプログラムを作っているときにこの問題が発生しました。
どうかご存知の方いたらよろしくお願いします。
0764デフォルトの名無しさんNGNG
>>763
ソースを書いたら?
0765デフォルトの名無しさんNGNG
>>763
VC++Ver6しか持ってないので細かいとこが違うかもしれんが。
プロジェクト→プロジェクトへ追加→コンポーネント及びコントロール(P)
あたりで追加コントロールが必要なのかもね。
0766デフォルトの名無しさんNGNG
>>763
「ステップバイステップで学ぶVisualC++.NET実践講座Vol.1基礎編」が
いかなるものか、わからないけど、プリコンパイルヘッダを使用しないとかにしてみる。
0767763NGNG
>>764
すみません、書くべきソースがわかりません・・・
>>765
とりあえず一般C++のクラスを追加をいじってみたら「新しい構文要素を読み出すのに失敗しました構文エラーが考えられます」というエラーメッセージが出てきました。
>>766
プリコンパイルヘッダはどのようにして使用しないようにするのでしょうか?

結局勉強不足で、質問ばかりになってすみません・・・もっと勉強してきます。
0768デフォルトの名無しさんNGNG
>>760等

クリンナップ時に、resource.hをExcelでソートしたりする香具師もいると思うが、ID_DLG1_EDIT1みたいな名前を付けとけば連番が崩れなくて安全だ。
漏れはDDX近辺にASSERT(ID_EDIT_1+1 == ID_EDIT_2);みたいなアホなチェックも入れて、厨房が壊したら本人が気付くようにしているぞ。

(自慢なのか?)
0769デフォルトの名無しさんNGNG
用途にもよるが、俺だったら連続なエディットならリストビューを使うことを検討する。
0770デフォルトの名無しさんNGNG
動的にコントロールを作ればいいだけのような気がするけど
0771デフォルトの名無しさんNGNG
>>763
プリコンパイルヘッダは、コンパイルの高速化のために
コンパイルの途中結果をファイル化しておくもの。
ソースの一部変更などであればそのまま使えるが
ヘッダやソースの大幅変更した場合は破棄されて
再び作成される。
リビルドすれば、まっさらな状態からコンパイルできる。

もしかしたら、プロジェクトの作成方法がおかしいかもしれないので、
プロジェクトだけ別名で作成して、既に打ち込んだソースは別のところに
バックアップして、新しいプロジェクトのソースに貼り付けて見るといいかも。
0772デフォルトの名無しさんNGNG
ダイアログのオーナードローコントロールなんですけど、描画関数の中で使う
フォントについて。

↓は合法なのでしょうか。
HFONT hOldFont = (HFONT) SelectObject(hDC, GetParent() -> GetFont() -> m_hObject);

↓は結構目にするんですが。
LOGFONT lf;
GetParent() -> GetFont() -> GetLogFont(&lf);
HFONT hFont = CreateFontIndirect(&lf);
HFONT hOldFont = (HFONT) SelectObject(hDC, hFont);
0773デフォルトの名無しさんNGNG
基本的なことなんですがお尋ねしたいことがあります。
オーバーロードの利便性とはどのようなことなんでしょうか?
また、オーバーロードすることにより起こりえる問題点などありましたら教えていただきたいです。
0774デフォルトの名無しさんNGNG
まずはオーバーロードについて勉強しろ。
勉強すれば自ずと分かるはずだから。
0775 NGNG
システムモーダルなCFrameWndのフレームってどうやればいいですか?
0776デフォルトの名無しさんNGNG
今までMFCを用いてプログラムを行っていましたが
SDKを用いたプログラムを勉強することにしました。
2つばかり質問させてください。

やはりゲームなどで用いる画像処理の効率は
SDKの方がいくらか高速になるのでしょうか?

あとSDKでのプログラミングでは
ClassWizardが使えないのですが
様々なサイトを調べても
あまりクラスを使って説明している人はいません。
SDKでクラスを用いるのは一般的でないのでしょうか?
0777デフォルトの名無しさんNGNG
>やはりゲームなどで用いる画像処理の効率は
どう比較するの?
ゲーム用の画像処理用のクラスがMFCにあるという前提?
だったら
>今までMFCを用いてプログラムを行っていましたが
いままで何もやっていないのと一緒
0778デフォルトの名無しさんNGNG
CStringの"123.4"などをfloatに変換する方法を教えて下さい。
0779763NGNG
>>771
その方法を試みましたが結果は変わりませんでした。
「ステップバイステップで学ぶvisual C++.NET実践講座」には各ステップごとのプログラムの見本のプログラムが入ったCD−ROMがあるのですが、
その見本のプログラムをビルドしようとしても同じエラーが起こりました。Visual C++.NET Standard自体を再セットアップしたほうがいいでしょうか?
0780デフォルトの名無しさんNGNG
>>779
CD−ROMのサンプルをプロジェクトディレクトリごとLZHかZIPにでも
アーカイブしてどっかにうpしたらいかが?
それと、エラーメッセージをコピー&ペーストで書き込んだほうが良い。
エラーメッセージの種類(コード)がそれでわかる。

それと、ほんの最初のほうにでもプロジェクトの作成方法みたいなのが
書いてないの?
0781デフォルトの名無しさんNGNG
>>778
atof
0782デフォルトの名無しさんNGNG
>>780
プロジェクトの作成は一回しましたよ。Hello Worldですけど・・・それは正常に動作しました。
ビルドエラータスクに出てくるエラーメッセージは次のとおりです。
animals fatal error C1102: 次の初期化ができません : 'クラスが登録されていません
↑これをエラータスクでダブルクリックするとstdafx.cppの一行目に飛ばされます。
下記アプロダにてサンプルをうpしました。よろしくお願いします。

ttp://cgi.members.interq.or.jp/hokkaido/asato/upload/upload.cgi

0783763NGNG
↑コメントに763と書いてあるやつでZIPです。
0784デフォルトの名無しさんNGNG
VC++Proはアクティベーションのリミットが10回しかないのでしょうか?
もしリミットを超えたら新しく買いなおさないといけないのでしょうか?
2〜3ヶ月に1度は再インストールするので、ものすごく不安なんです。
0785デフォルトの名無しさんNGNG
>>784
割れ厨いってよし
0786デフォルトの名無しさんNGNG
VC++にアクティべーションがあるの?.NET?
0787デフォルトの名無しさんNGNG
WindowsのVC++で、
マウスカーソルの座標をセットする命令って何でしたっけ・・・?
■ このスレッドは過去ログ倉庫に格納されています