★初心者にVisual C++を教えるスレ★ Part24
乙
特定のウィンドウをキャプチャーしてBMPに保存するプログラムを作ろうと FindWindowExでウィンドウを探し BITMAP bmp; HDC hDC = GetDC(hWnd); HBITMAP hBitmap = (HBITMAP)GetCurrentObject(hDC, OBJ_BITMAP); iRetFunc = GetObject(hBitmap, sizeof(bmp), &bmp); のようにしているのですが、GetObjectで0が返ってきてしまいます。 GetLastError()は203を返してきます。 一体何がいけないのでしょうか??
ディスプレイ デバイスコンテキストに画面のビットマップが結び付けられてるわけではない。 自分で用意したビットマップにBitBltする。 しかし、隠れている部分は描画されないので、前面に持ってくる等多少面倒。 それかWM_PRINT。
>>8 ありがとうございます。
なんとかBMPに保存することができました。
隠れているウィンドウを前面に持ってくる、ということですが、
例えばFindWindowExで探したウィンドウがツールバーとかステータスバーとか
でもそのようなことは可能なのでしょうか。
SetWindowsPosあたりを使うのでしょうか。
すいませんが、もう少し教えていただけませんか?
ClistCtrlでSetItemTextを使って更新しようとすると とてもちらつくんですけど どうすればいいんでしょうか?
SetRedraw(FALSE)で表示更新を停止。 アイテム内容を更新後に、 SetRedraw()->Invalidate()で表示を更新させる。
すみません、自己解決しますた でもこんなやり方でいいんだろうか…
>>11 すみません、ありがとうございます
最初そのやり方でやってみたんですけど、どうしてもちらつくんです
結局LVS_EX_DOUBLEBUFFERを設定してみますた
XP以降しか動かないみたいですけど…
テンプレートクラスのメンバ関数のうち、 特殊化の影響を受けないようなメンバ関数も、 それぞれの特殊化ごとに別々のインスタンスが作られるんですか? たとえば template <typename T> class A{ T t; public: void test() { std::cerr << "test\n"; } }; のようなコードでは test() は T に依存しませんが、 それでも別々にインスタンスかされるんでしょうか?
VS2005で試したところ、別々にインスタンス化された。 元のコード程度ならインライン展開されるから、関係ないだろうけど。
ひょっとして 自分で試してから質問しろという嫌味だろうか?
>>15 THX
特殊化の影響を受けない部分だけくくりだして継承すべき?
実装依存っぽい希ガス。 規格ではどうなってるんだろ。
19 :
15 :2006/10/05(木) 14:13:38
俺初心者だから・・・
21 :
age :2006/10/14(土) 15:40:13
age
C++については初心者スレと相談室があるのに VCは初心者スレしかないのはなんで?
23 :
デフォルトの名無しさん :2006/10/14(土) 20:57:17
Visual C++2005ですが ::と->の違いはなんですか?
26 :
デフォルトの名無しさん :2006/10/14(土) 22:01:57
>>25 お前は人生やり直せ。do up!do up!
VC++で作ってるプログラムを高速化したいんですけど、 プロファイルってどうやって使うんですか? Visual Stdio .NET 2003です。
28 :
27 :2006/10/14(土) 22:12:08
studioの綴り間違えましたが、気にしないでください。
Visual C++ 6.0で作成したプログラムを他のコンピュータで 実行する際にDLLファイルが必要なんですよね? 当方Visual C++ 6.0は持っているのですがDLLファイルが 見つかりません。どのフォルダに入っているのでしょうか?
>>29 必要な場合もあるし、必要無い場合もある。
必要な場合、何のDLLが必要か分からないと答えられない。
VCでESCを押すと終了するダイアログを作ろうとしてるんですが これって、貼り付けてるエディットボックスやボタンを サブクラス化しないと無理でしょうか WM_KEYDOWNでEndDialogではうまくいきませんでした
つ Dialog Box Programming Considerations@MSDN
34 :
29 :2006/10/16(月) 15:36:02
>>30 説明不足ですね。申し訳ない
MFCAppWizardを使ってアプリケーションを作成した際に「MFCの共有DLLを使用」を選んだ場合の話です
確かMFC42.DLL(MFC42d.DLLだったかも)が必要とメッセージが出るのでそれが場所が知りたかったんです
>>34 つ[検索]
そうそう、デバッグビルドは公開しちゃダメよ。
36 :
31 :2006/10/16(月) 17:31:23
解決しました! IDOKとIDCANCELが特別扱いされてるとは思いませんでした ボタンにも別の名前を割り振っていたので ボタンの名前をIODK,IDCANCELに変更したところ 目的の動作になりました
37 :
29 :2006/10/16(月) 17:58:26
>>35 検索してみても引っ掛からなかったんですよ・・・
いまところ公開するつもりは無いです。ただ好奇心というか勉強というか
ところでデバッグビルドって何でしょうか?
>>37 >検索してみても引っ掛からなかったんですよ・・・
試しにVisualStudioをインストールしていない漏れのPCで検索しても、
Program Filesの下からいくつも見つかったしsystem32のディレクトリからも見つかったが。
一体どこを検索したんだ?
>ところでデバッグビルドって何でしょうか?
リリースビルドじゃない方。要はMFC42d.DLLが必要な方。
40 :
29 :2006/10/16(月) 18:22:16
>>38 デバックビルドとリリースビルドについてはおいおい調べていこうと思います。わざわざありがとうございます
>>39 検索の仕方が悪かったみたいです。いくつか見つかりました
MFC42.DLLがVisualStdioと関係無い所から複数見つかったんですがファイル名が同一ならば
内容は全て同じな気がするのですが、これをコピーしたら使えるのでしょうか?
MFC42.DLLなら大抵の環境にデフォで入ってそうだけど
>>40 まあ、バージョンが一番新しいやつ(判らなきゃ作成日でもいい)をくれてやんな
ねぇねぇ、お兄ちゃん、ちょっと教えて。下のコードなんだけどさぁ、 strcpy( item.pszText, name.c_str() ); の箇所で、ループ変数の j がいきなり 1 から 46 に変わっちゃうんだぁ。 でも、name を std::string から char[128] にして item.pszText = name; にすると、問題なくなったんだよ。どうしてなのか教えて!お兄ちゃん!! for ( int j = 0; j < 3; j++ ) { item.iSubItem = j; char buf[5]; switch ( j ) { case 0: // シーケンシャル番号 item.pszText = itoa( no, buf, 10 ); StubTable.InsertItem( &item ); break; case 1: // 品番 strcpy( item.pszText, name.c_str() ); StubTable.SetItem( &item ); break; 以下略 } }
>43 今自分でも試したんだけど、name を charポインタ にして char* name; ・・・ item.pszText = name; ならOKだけど、strcpy() を使った場合、 char* name; ・・・ strcpy( item.pszText, name ); では、charポインタでも駄目だったよ。(´・ω・`)
45 :
29 :2006/10/17(火) 10:44:23
>>42 分かりました
みなさん色々とありがとうございました
>>43 char* p;
strcpy(p, "hoge");
これがダメな理由わかってないでしょ?
CommDlgExtendedErrorってもう使われてないんでしょうか WEBのMSDNではcannot be foundとでます
ありがとうございます 日本語のほうだけ見てましたorz 次から英語もみよう俺
STLのvector、mapとMFCのCArray、CList、CMapて 速度的にどちらが早いのでしょうか?
>46 判ってないですぅ〜(´・ω・`)
>>50 実装によるし、どんな操作をするかによっても変わるだろう。
自分で実験しろ。
MSFlexGridを使ったプログラムを作成しようとしているのですが MSDNやネットを検索してみてもあまり引っかからなくて困っています。 どなたかMSFlexGridを詳しく紹介しているページなどご存知でしたら 教えてください。お願いします。
flexgridで検索した方がヒットするかもね。どうせサブセットだし。
58 :
デフォルトの名無しさん :2006/10/18(水) 07:31:14
Visual C++2005ですけど、書籍どおり打っているのにエラーがでます? なんででしょう?? まず、上に #pragma once #include <string> #include <cstring> namespace 米 { ・・・・・・・ private: System::Void Form1_Load(Sy の中に・・・・・・ char ss1[80]; strcpy(ss1,"aaaa"); cout << ss1 << '\n'; string ss2; ss2 ="bbbb"; cout << ss2 << '\n'; } }; } エラー表示・・・・・・・ エラー3error C2146: 構文エラー : ';' が、識別子 'strcpy' の前に必要です。 エラー6error C2146: 構文エラー : ';' が、識別子 'ss2' の前に必要です。 エラー1error C2146: 構文エラー : ';' が、識別子 ';' の前に必要です。 エラー5error C2065: 'string' : 定義されていない識別子です。 エラー7error C2065: 'ss2' : 定義されていない識別子です。 エラー4error C2065: 'cout' : 定義されていない識別子です。 まったく、同じに書いてるつもりなのに謎です?何ででしょうか?
/*実装内容をコメントで囲み*/ まずは動くところと動かないところを見つけれ
2バイト文字と1バイト文字の違いに注意。
Upしてるソースのとおりならセミコロンに漢字を使っているから
ダイアログにコンボボックスコントロールを貼り付けています。 このコンボボックスの座標位置の取得と設定を行いたいのですが、 どのようにしたらよいでしょうか?教えてください。 開発環境 VS2005 WinXP SP2 MFC
コンボボックスもウィンドウ
>>63 調べたところSetWindowPos()関数で設定できそうです。
ありがとうございました。
65 :
62 :2006/10/18(水) 13:44:17
すみません、出来たと思っていたのですができませんでした。 SetWindowPos()の第一パラメータにコンボボックスのポインタを 指定したのですが、なぜかダイアログのサイズと表示位置が 変更されてしまいました。 申し訳ありませんが再度ご教授をお願いいたします。
CWnd::SetWindowPosと::SetWindowPos
67 :
62 :2006/10/18(水) 14:49:31
できました。 ありがとうございました。
VC6を使っています。 簡単なストップウォッチみたいなツールを自作したいのですが、使用するコントロールはどれが作りやすいでしょうか?
スタティックテキスト
70 :
デフォルトの名無しさん :2006/10/18(水) 21:21:00
58です。 <iostream>がインクルードしてなかったのが主のな原因みたいです。
>>55 VCのスレッドでいうことでもないが、
msflexgridの使い方しらべるなら、VBで試してみるのが楽
やっぱりactivexはVBの方が格段に使いやすいからね
ちなみに、msflexgridはvs6のMSDNには載ってる
72 :
デフォルトの名無しさん :2006/10/19(木) 11:46:23
VC6.0のころは、エディタで次の関数へカーソルを移動ができたのですが、 VC.Netではどうやったらできますか?
73 :
デフォルトの名無しさん :2006/10/19(木) 13:27:41
VC2005EEを使っています。 数ヶ月前からあるソルーションの開発を始めましたが、 最近フォームデザイナが不安定になり、今日ついに 致命的なエラーです。(Exception from HRESULT:0x8000FFFF(E_UNEXPECTED)) というエラーが出て、フォームを表示してくれません。 但し、ビルドは出来ますし、また実行ファイルの実行も問題なく出来ます。 フォームの編集がまったく出来ない状態です。 何をどうすればよいのでしょうか?親切な方、よろしくお願いします。
VC++2005のStandardを使用しています。 ウインドウを常に最前面に表示させたいです。 [新しいプロジェクト]-[CLR]-[Windowsフォームアプリケーション] で作成したプロジェクトを使用しています。 ATL の CWindow::BringWindowToTop() を使用してみましたが ビルド時にエラーが出てしまいます。 (C2065: 'CWindow' : 定義されていない識別子です) CWindowクラスのヘルプを見て、stdafx.h に #include "atlwin.h" を追加しビルドしたところ エラーが出ます。 (C1189: #error : atlwin.h requires atlbase.h to be included first) stdafx.h に #include "atlbase.h" を追加しビルドすると (C3641: 'InterlockedExchangePointer' : /clr:pure または /clr:safe と共にコンパイルされた関数に対する呼び出し規約 '__stdcall ' が無効です) のようなエラーが たくさん出てしまいます。 プロジェクトの作成時に[ATL]を選ばなかった場合は、対処方法はないのでしょうか? #include が足りないのでしょうか? よろしくお願いします。
CLRなのにATL?
すいません、ホントに初心者質問で申し訳ありませんが VC++.NETで、プログラム実行時に最初に開くフォームを変更するにはどうすればいいのでしょうか VBであればプロジェクトのプロパティの先頭ページにあったのでわかりやすかったんですが・・・・ プロパティ見てみてもフォームを指定しているらしきところが見つかりません どうか、お願いしますorz
77 :
74 :2006/10/19(木) 15:17:30
>>75 どうもです。その反応だと、
最初に ATL 選ばなきゃなんでしょうか (汗
ってことは MFC も後付は ダメ?
SDK(?)を直接呼ぶ(?)感じですか・・
ジブンなりに CLR ATL MFC を見てみます。
なんでATL使う必要があるんだ? .NET frameworkでいいじゃん。
>>74 プロジェクトのプロパティの構想プロパティの全般にある共通言語ランタイムサポートを、
純粋 (/clr:pure)や安全 (/clr:safe)から、ただの(/clr)にすればATLも使える。
もっとも、お前がやりたいことくらい、.NET Frameworkでもできると思う。
俺はろくに使ったことがないけど。
80 :
74 :2006/10/19(木) 17:45:03
>>78 >>79 どうもです。
.NET Framework でいってみます。(今のところ わかってませんが)
今までフレームワークってのは C++ とか C# とか VB とか
のエディタ&デバッグツールのことだと思ってました。(ぉぃ
さらっとググって 今 気になるのは、
.NET Framework を使用して開発することで
ランタイムが入ってない環境で 動作するのか?
というとこですが この辺りも含めて 理解してみます。
また 来ちゃうかも。ありがd
CLR == .NET Frameworkのランタイム
>>80 dotnetfx.exe
vcregist_x86
83 :
74 :2006/10/19(木) 19:42:00
ついに できました!! 常に最前面表示! ようやく一歩進みました!
this->TopMost = true;
・・・・すんごい まわり道した気が。 orz
.NET Framework を勘違いしていたことと
ウインドウを Form と認識してなくて ヘルプをスルーしてました。
>>81 挫折しそうでしたが助かりました。
=CLRなら ビルド時にランタイム必要ないようにできそうな感じですね。
それでもランタイムが必要そうなら
>>82 で解決しそうですね。
vcregist_x86 はヒットしなかったので 必要になったら再度見てみます。
>>78 >>79 >>81 >>82 サンクスです☆
残念ながら、CLRプログラムは、.NET Frameworkなしで動くようにはできない。
85 :
デフォルトの名無しさん :2006/10/20(金) 16:40:17
どうもフォームデザイナが不安定でかなわん。 そもそも、フォームデザイナは、フォーム用のヘッダファイルと1対1対応になっているのだろうか? それとも、他に何かファイルを参照しているのだろうか? また、#pragma region Windows Form Designer generated codeの部分で、 コメント行や、タブの一つ一つまで管理しているのだろうか? (つまり、コメント行やタブなどを、削除or追加しても、影響が出るのだろうか?) 別にわざわざそんなことをするつもりは無いが、最近頻繁にフォームデザイナの 奇妙な振る舞いやエラーが目立ち始めたため、そのいじってはいけない部分を見てみると、 インデントがずれていたりしているもんで、ちょっと気になった次第。 どなたか意見頂戴。
86 :
デフォルトの名無しさん :2006/10/20(金) 17:25:34
今VisualC++6.0 Win32API使用でプログラムを作っており、 自作カーソルを作ろうと思っているところです。 ですが、リソースエディタで使える色は白と黒のみで、 色のついたカーソルが作れません。白と黒ではなく、赤と黒の2色という感じでもかまわないので、 どうにかできないでしょうか?よろしくお願いします。 なお、OSはWindows XP SP2です。
87 :
デフォルトの名無しさん :2006/10/20(金) 18:23:50
#pragma once namespace こちら葛飾区亀有公園前派出所 { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; void ryoutu(int nakagawa); ...... } #pragma endregion private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { ryoutu(5); } void ryoutu(int nakagawa){ textBox1->text = Convert::ToString(nakagawa); } }; } これってなにがちがう?初歩的な質問ですみません。
>>86 VC6は仕事先にしか無いので確認できないが、
メニューの「イメージ」に、他のサイズや色数を追加するコマンドがあったと思う。
>>87 日本語でおk
89 :
デフォルトの名無しさん :2006/10/20(金) 21:03:12
90 :
デフォルトの名無しさん :2006/10/20(金) 22:15:01
>>88 さん
早速の返事ありがとうございます。88さんの言うとおり、
メニューの「イメージ」の項目で、16色デバイスに変更することで出来ました(^ ^)。
>>87 Linuxマシンで実行しようとしてるところ。
92 :
デフォルトの名無しさん :2006/10/20(金) 23:14:29
93 :
デフォルトの名無しさん :2006/10/21(土) 15:41:54
StretchBltを使ってピクチャボックスに画像を貼りたいんですが、 -> StretchBlt ( 0 , 0 , myRECT.Width() , myRECT.Height() , &myDC, 0 , 0 , 200 , 200 , SRCCOPY ) ; こうですか?わかりません!これだとしっかりサイズに合わせて表示できません。 ちなみにピクチャボックスのサイズは200x200です><
転送元と転送先が逆。
95 :
デフォルトの名無しさん :2006/10/21(土) 17:51:59
>>94 あーこういうことですか?
-> StretchBlt ( 0 , 0 , ピクチャボックス横 , 縦 , &myDC, 0 , 0 , ビットマップ横 , 縦 , SRCCOPY ) ;
ビットマップの横と縦のサイズはどうやって取得するんですか( ;・∀・)?
96 :
デフォルトの名無しさん :2006/10/21(土) 18:37:43
Excelで生成したファイルのデータインポートをしたいのですが 参考サイトがみつからない。。 参考サイト等ご存知でしたら教えてください><
>>95 CBitmap bmp; // 転送元ビットマップ(仮)
BITMAP bm;
bmp.GetBitmap(&bm);
98 :
デフォルトの名無しさん :2006/10/23(月) 00:13:44
VC++ 2005でボタンを押すと計算処理を実行しグラフを表示する プログラムを書いたのですが、処理中にフォーム上でクリックすると 固まってしまいます。 処理中にも使用したいボタンがひとつあるのでthis->Enabled=false; は使えません。どうすればいいでしょうか?
つ スレッド
>>98 > 〜固まってしまいます。
//ここまで第一話
//ここから第二話
> 処理中にも使用したいボタンがひとつあるのでthis->Enabled=false;
101 :
デフォルトの名無しさん :2006/10/23(月) 19:50:32
sndPlaySound("TEST.wav",SND_ASYNC); で音を再生しているのですが、音量の調節が出来ないのですが、どうしたら良いでしょうか? やはり、WindouwsMediaコントロールというのを使わなければ出来ないでしょうか? ただ単に、メディアプレーヤーのMAX音量でWAVファイルが再生されればいいだけなのですが・・・
102 :
デフォルトの名無しさん :2006/10/23(月) 19:57:20
101>> 知らない
103 :
デフォルトの名無しさん :2006/10/23(月) 19:58:04
ベクターを使っての多次元配列を考えているんですが 要素の追加の仕方がよくわかりません。 MFCです。 std::vector< std::vector<CString> > m_list; std::vector<CString> temp; こんな感じで定義してm_listにtempのベクターでの配列を追加できるようにしたいのですが いろいろ試してみても型が違うなどのエラーでうまくいきません。 すいませんがソースが手元にないためあいまいな質問かもしれまんせんがよろしくお願いいたします。 m_list.push_back(temp); などは試してみましたがだめでした。
105 :
デフォルトの名無しさん :2006/10/23(月) 20:26:59
超初心者しつもんさせてください・・・ char型にint型の変数を代入するプログラムを作りたいのですが コンパイルで通っても機械を動かすときにエラーがでて強制終了 になったり値が入らないのでどうか教えてください まずsvalue にint型の値が入っていて strcpy(Signal,(const char*)svalue); 上記でchar型のSignalに値を入れて strcpy((char*)connection[index].sendData,Signal) 上記でconnection[index].sendDataに値を入れたいのですが svalueの値がなぜか入らないのです char型に値を入れる別の方法や 間違ってる箇所がございましたら ご教授ください・・・おねがいします
VisualC++6.0でメイン画面のフォントサイズを変えたい のですがどうすればいいですか?説明書読んでもわか らないし、自分で色々やったんですが困りはてています 少しちっちゃくしたいんですが‥
108 :
105 :2006/10/23(月) 20:39:08
>>107 ツール→オプション→フォントサイズ→テキストエディタ
あたり。
VC6の詳しいことは忘れた。
>>104 > m_list.push_back(temp);
これはうまくいくはず。
>>110 本当に、本当にありがとうございます!
ファイル分割しないといけないくらい大きなプログラム
なのにデフォのフォントがやたら大きすぎて半泣き
でした。ありがとうございました!
メインのプログラムから外部プログラム(*.exe)を起動した後、 任意の時点でメインのプログラム側から起動した外部プログラムを終了させたいのですが、 こういったことは可能でしょうか? CreateProcess() や ShellExecute() で外部プログラムを起動することはできるのですが、 起動したプログラムを終了させる方法がわかりません。 どんな方法でも良いのでどなたかわかる方がいればお願いします。
>>113 殺す手段もあるが、本来死ねと言うのに留めるべき。
#勿論その場合、子プロセスは安全に死ぬ義務があるわけだが。
115 :
113 :2006/10/24(火) 04:09:26
それは PostMessage() などで WM_CLOSE などの命令を投げるということでしょうか? 色々調べたところそういったやり方が一般的なようなので試してみたのですが、 #include<windows.h> BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam){ PROCESS_INFORMATION* pi = (PROCESS_INFORMATION*)lParam; DWORD lpdwProcessId = 0; ::GetWindowThreadProcessId(hWnd, &lpdwProcessId); if(pi->dwProcessId == lpdwProcessId){ ::PostMessage(hWnd, WM_CLOSE, 0, 0); return FALSE; } return TRUE; } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow){ STARTUPINFO si; PROCESS_INFORMATION pi; ::ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWNORMAL; ::CreateProcess(NULL, "notepad.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); MessageBox(0,"メモ帳を終了させます。","Message",0); EnumWindows(EnumWindowsProc, (LPARAM)&pi); ::CloseHandle(pi.hThread); ::CloseHandle(pi.hProcess); return 0; } この場合は上手くいくのですが、 >MessageBox(0,"メモ帳を終了させます。","Message",0); この部分をコメントアウトすると上手く動かなくなってしまいます。
> この部分をコメントアウトすると上手く動かなくなってしまいます。 先ずは問題切り分けてね たとえば、なんでenumwindows使うの?とか
117 :
113 :2006/10/24(火) 14:05:41
>>116 自らが起動したアプリケーションを終了させるには、
CreateProcess()で起動させプロセスハンドルを保持し、
TerminateProcess()で終了させることができるが、
これは強制終了なので安全な終了方法ではない、
とWebで調べていて見つけました。
では安全な終了方法とはどんなものなのか、と調べたところ、
ウィンドウハンドルを取得しWM_CLOSEを送るのが一般的だ、
と書かれていたのでその方法を試してみました。
しかし、プロセスハンドルから直接ウィンドウハンドルを取得するAPI等はないようなので、
全てのウィンドウハンドルを取得した上で、GetWindowThreadProcessId()を呼び、
取得したプロセスIDがCreateProcess()で取得したプロセスIDと一致するか調べ、
一致した場合、そのアプリケーションにWM_CLOSEを送る、ということでプログラムの終了をしました。
ここで、全てのウィンドウハンドルを取得する方法としてEnumWindows()を使っています。
この処理には下記のWebページを参照しました。
ttp://akky.cjb.net/mfc/appclose.html それと、 MessageBox(0,"メモ帳を終了させます。","Message",0);
の部分を Sleep(10000);
としても正常に動きました。
どうやらいくらかの待ちを入れてやると正常に動くようです。
118 :
95 :2006/10/24(火) 14:39:44
すいません、私
>>95 なんですが
>>97 をどう使えばいいかいろいろ試してみましたがわかりません><
こんな感じに今なってるんですが
CImage img;
CBitmap *myBMP;
img.Load(FileName);
myBMP=CBitmap::FromHandle(img);
myDC.CreateCompatibleDC(pDC);
CBitmap *oldBMP=myDC.SelectObject(myBMP);
pDC->StretchBlt(0,0,200,200,&myDC,0,0, ??? , ??? , SRCCOPY);
やっぱこのハテナのところがわかないんです(´;ω;`)
よろしくお願いします。。。
>>118 CImage使えるのかよ!
だったらCImage::StretchBlt使え。
転送元矩形指定無しのを使えば全体が描画されるから。
ちなみに
>>97 の件は、BITMAP構造体の中身を見れば判る。
120 :
95 :2006/10/24(火) 15:04:40
>>119 今MFCのダイアログベースでやってるんでゲスよ。
CImage::StretchBltをやってみたらWinアプリケーションみたいな引数を要求されたでげす。
ワケワカメだょ、くまぇりだょ。。。。
>>120 つ CDC::GetSafeHdc()
つ CDC::operator HDC ()
122 :
95 :2006/10/24(火) 18:03:28
>>121 先生!
>>118 をつかってがっつりそのままコピペしたら使えるコードをポンっと教えてくださいまし><
>>122 CImage img;
img.Load(FileName);
img.StretchBlt(*pDC, 0, 0, 200, 200);
初歩的な質問ですが・・・ エディットコントロールで文字の中央揃えをしたいのですが Create時に指定するのではなく動的に変更する場合 どのようにしたらいいでしょうか?
ウインドウスタイルを変更する
>>125 申し訳ありません、まだよく分からないので
できたら具体的なコードを記述していただけると
ありがたいです。
よろしくお願いいたします。
質問させてください。
#ifdef DLL_EXPORTS
#define TEST_API __declspec(dllexport)
#define CALL_RULE __stdcall
#elif DLL_IMPORTS
#define TEST_API __declspec(dllimport)
#define CALL_RULE __stdcall
#endif
class TestD {
public:
TEST_API CALL_RULE TestD();
TEST_API virtual CALL_RULE ~TestD();
};
というクラスを作ったとします。これをリリース構成でDLLにしたものを、
利用側のコードで利用(newとdelete)するとします。
このとき、デバッグモードで実行するとdeleteの所でヒープエラーが起こります。
デストラクタのvirtual指定をはずすとdeleteでヒープエラーは起きずに正常に破棄できます。
原因はおそらく次のURLにある事だと思うのですが、
ttp://homepage2.nifty.com/tulip-an/soft/scrwrpprblm.html 「デバッグ構成時はデバッグビルドDLL、リリース構成時はリリースビルドDLLとリンクする」
という以外の回避方法はありませんでしょうか。このままだと継承によるポリモーフィズムができません。
COMっぽくするとか。
TestDがoperator new/delete類を多重定義したらどうだろう? もちろんHeapAlloc/Freeでメモリ確保・解放。
すいませんが初歩的かもしれませんが質問です。 MFCを使っています。 ある読込用のファイルを読み込んでそのファイルの内容を CString型の変数に格納したいのですがうまくいきません。 ファイルの読み込み方もざっと調べたところ fopen使ったりifstream使ったりと、どれを中心に調べてよいのかよくわからない状態です。 読み込めたかな?と思っても最終的にCString型じゃなくて型が違う言われエラーになってしまいます。 どうすればスマートに読込→格納ができるでしょうか?
133 :
デフォルトの名無しさん :2006/10/25(水) 22:03:51
新VisualC++.NET入門2002/20003対応を買ってきました 最初のプログラム pDC->TextOut(0,0,"Hello, Visual C++"); がいきなり実行されません!↓こんな感じよ error C2664: 'BOOL CDC::TextOutW(int,int,const CString &)' : 3 番目の引数を 'const char [6]' から 'const CString &' に変換できません。(新しい機能 ; ヘルプを参照) 理由: 'const char [6]' から 'const CString' へは変換できません。 class 'ATL::CStringT<BaseType,StringTraits>' のコンストラクタが 'explicit' と宣言されています。 この本破いていいですか!winXP Home .NET2005 女Dカップです☆ 教えてくれた人先着にメルアド教えるわ♪
134 :
132 :2006/10/25(水) 22:05:26
補足になりますが 読込用のファイルには1行の文字列がずらっとならんでいます。 1万文字にはなりますが・・・
とりあえずどう書いたらうまくいかなかったのか書いてくれ。
TextOutWだからUnicodeにするか TextOutAにするか
文字列を_T()マクロで囲んでないような本は破っていい。 意図して使い分けているなら別だが。
>>131 new/deleteの多重定義ってやったことないのですが、そんなに対処が難しい問題なんでしょうか・・・。
new/deleteの多重定義だけで済むんだったら、それは対処の難しい問題とは言えない気がする。
141 :
デフォルトの名無しさん :2006/10/26(木) 11:27:00
WinnyやShareに使われてる、 検索結果や各種情報を表示しているDataGridのようなコンポー ネントはなんというんですか? 使いかたも教えてください
どっちもVCじゃない
>141 DelphiのVCLだから、VCにはない
144 :
デフォルトの名無しさん :2006/10/26(木) 12:01:54
>144 CLitsCtrl じゃないの?
winny2もソースみたいなの見るとただのリストビューだな。
147 :
141 :2006/10/26(木) 14:34:53
皆様ありがとうございました! CListCtrlでした 本当にありがとうございました!
自分でコンポーネントだって言ってたくせに
VC++2005のStandardを使用しています。 windowsフォームアプリケーションで keybd_eventを使用する方法について教えてください。 [新規作成]-[新しいプロジェクト]-[空のプロジェクト] の後、ソースファイル test.cpp を作成し #include <windows.h> int main(void) { keybd_event('A',0,0,0); } を入力すると正常にビルドされるのですが、 [新規作成]-[新しいプロジェクト]-[windows フォームアプリケーション] で作成される Form1 にボタンを配置し、そのボタンのスクリプトに keybd_event('A',0,0,0); を入力、 stdafx.h に #include <windows.h> を入力するとビルド時にエラーが発生します。 (error LNK2028: 未解決のトークン (0A00000E) "extern "C" void __stdcall keybd_event(unsigned char,unsigned char,unsigned long,unsigned long)" (?keybd_event@@$$J216YGXEEKK@Z) が関数 "private: void __clrcall test37::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@test37@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) で参照されました。) (error LNK2019: 未解決の外部シンボル "extern "C"・・・) ヘルプによると リンカツールエラーということらしいのですが どういうエラーなのかのかと、解決方法を教えてください。(長文スマソ)
150 :
デフォルトの名無しさん :2006/10/26(木) 15:20:03
const float max = 10.5; と float const max = 10.5; これはどう違うんですか?
同じ
153 :
149 :2006/10/26(木) 16:38:40
>>152 どうもです。おかげで googleの検索絞れました。
#pragma comment(lib, "user32.lib")
を追加したところ ビルドできました。d☆
-[空のプロジェクト]
だとライブラリのリンクが不要で
-[windows フォームアプリケーション]
だとライブラリのリンクが必要になるのは、ちょっと不思議。
逆なら直感的に納得できるのに・・・
フォームアプリは.netだからapi使わないのがデフォ
155 :
竹田箴言 :2006/10/26(木) 17:04:41
C++で乱数の初期化の方法が分かりません。 どなたか教えてください。 また、Cで使うrandomizeはC++では どうなるのでしょうか。
randomizeというのはどこの馬の骨か知らんが、 まずはCと同じようにやってみたらどうだ?
>>155 Winと関係ないからCまたはC++のスレへ
二次元配列のクラスを動的に確保するために3重ポインタを使って for(int x = 0;x < X;x++) p[x] = new Class*[Y]; for(int x = 0;x < X;x++) for(int y = 0;y < Y;y++) p[x][y] = new SubClass(); としました これを解放するために for(int n = 0;n < X;n++) for(int m = 0;m < Y;m++) delete p[n][m]; for(int n = 0;n < X;n++) delete [] p[n]; delete [] p; としたらエラーが出ました 何が問題なのでしょうか?教えてください
すいません。ここVCの板でした・・・すいません
160 :
デフォルトの名無しさん :2006/10/26(木) 19:43:03
>>157 この板で聞いてるんだから、CryptAPIの事なんだよ。
初期化の必要は無い。
安心して使ってくれ。
VC2005Express Editionだとnew.hインクルードしても bad_alloc例外使えないみたいですが どうすれば使えますか?
MFCを使ってプログラムを作成しております。 XMLファイルを読み込みそのファイル内容にある行を挿入し 別ファイル名で保存するようにしたいと考えてます。 CStdioFile ofp; CString buf; int i; ofp.Open("c:\\test.xml", CFile::modeCreate | CFile::modeWrite); ifp.Open("c:\\read.xml", CFile::modeRead); i=0; while(TRUE){ if(ifp.ReadString(buf)==NULL){ break; } if(i==9){ ofp.WriteString("てすと\n"); } ofp.WriteString(buf + "\n"); i++; } ifp.Close; ofp.Close; このような感じでこの場合は10行目に行を挿入するように組んだのですが XMLファイルはUTF-8のコードのせいか挿入する行に全角があると文字化けがおこり うまく書き込みができませんでした。 UTF-8と指定して書き込みする方法はないかと探しましたが ネット上ではうまく情報がみつかりませんでした。 何かしら方法はありますでしょうか?
>>161 標準C++だと、bad_allocがあるのは<new>。
>>162 WideCharToMultiByteでUTF-8に変換してから書き込む
VC初めて2週間の初心者です。 WinXP SP2 VS2005を使用しています。 MDIでメニューから子ウィンドウを新規で表示したいのですが、 どのように作成したらよいか分かりません。 ご教授をお願いいたします。
>>165 ウィザードでMDIにしたら最初からそうなってると思うけど
すみません、言葉が足りませんでした。 メニューに新しい項目を追加して、その項目がクリックされた時に あらかじめ作成したフォームビューを表示したいのです。 どうしたらいいでしょうか?
メニューの追加から教えないとダメなんだろうか?
知りたいのはクリックイベント内でのフォームの表示方法です。 分かりにくくてすみませんがよろしくお願いいたします。
間違えました・・・orz フォームではなくビューです。
171 :
161 :2006/10/27(金) 22:53:27
172 :
デフォルトの名無しさん :2006/10/28(土) 23:26:31
173 :
初心者 :2006/10/28(土) 23:36:00
どちら様教えて、VC++プログラミングするときにひとつのボタン押して 他の.exeファイル実行できるようにどうすればいいですか??
日本語で
>>173 CString ss = "notepad.exe";
ShellExecute(m_hWnd,"open",ss,args,NULL,SW_SHOWNORMAL);
>>175 の args は引数、なくてもいい
CString args;
そもそも質問の答えになっているのかわからんが
VC++2003とVC++2005とVC++6.0では、言語のバージョンが違うと聞きましたが、 どれほど違うのでしょうか? それぞれの移行なんかは難しいものなのでしょうか? VC++2005には問題もあり、いまだにVC++6.0を使い続けているという人も いると聞きますが……いったいどこから入ればいいのやら……。
旧製品は入手が難しいから特別な理由がないかぎり2005だけど 初心者の場合はVC++じゃなくてC#がお勧め VCじゃなくてCやC++がやりたいならVC++2005でもいい。
>>178 わざわざありがとうございました。本当に助かりました。
>あと、2バイト文字をファイル名に使うの禁止な。
今後気をつけます。
>>180 特にそれほど変わるというわけでもないのですね。
ゲームをつくりたいので、ゲーム制作にC#はあまり向かないと聞いたのですが……。
あと、C#は配布するのが面倒というようにも聞きました。
VC++2005がよいのですね。
> VC++2005がよいのですね。 無料だし、とりあえず触ってみると良いと思うよ。うん。
ちょっと質問。 VC++ 2005 で、デフォルトで予約語が青色になりますが、 これに予約語を追加する方法はないでしょうか? 自分で typedef した、よく使う型を青色に変えたいのです。
ツール→オプション あとは適当に見てけばある
>>185 うー、見つからないです・・・
おそらく、単語一覧?を記述したテキストか何かを読み込ませる必要があるため、
ファイルを選択できる、エディットボックス+"▼" の組を特に探したんですが・・・。
VC++2005で開発しています。 特定のアドレスとポートに対して、ポートが開いているかどうかを 判定するプログラムを考えていますが、どのクラスのメソッドを 使えばいいでしょうか。 TcpClient.Connectだと、レスポンスがとても遅いです。 一瞬で判定できるメソッドなどないでしょうか。
VC++6.0で開発をしています。 SDIであらかじめ用意されているCWinApp::OnFileOpenを使うときに、 ファイル名を取得するにはどうすればよいのでしょうか?
メニュー>ファイル>開く
質問です。 CMDIFrameWndクラス内のON_COMMANDイベントハンドラ内で CMDIChildWndクラスのOnCreateClientイベントを呼ぶことって出来ますか?
VC++2005で開発しています。 ダイアログにユーザーIDを入力するエディットと JSPを起動するボタンがあります。 JSP起動時にユーザーIDを引数として渡すことは 可能でしょうか?
std::string のメソッド、length() と size() の違いを教えてください。
The length() function returns the number of elements in the current string, performing the same role as the size() function. らしいので、まったく同じということなんですね。 length() も size() も内部では '\0' をスキャンしているのでしょうか? あと、resize() と reserve() の違いがわかりません。
VC++6.0で開発をしています。 二つ以上のMIDI(a.mid,b.mid等)を同時に鳴らしたいのですが、 指定されたMIDIデバイスは既に使用されています。開放されるのを待ち、再実行してください。 とのエラーがでます。 二つ以上のMIDIファイルを同時に再生することは可能なのでしょうか?
>>196 std::basic_stringが内部で保持する文字列はヌルで終わっている必要はない。
まあどうせc_str()があるし、ヌル終端させておく実装が多いとは思うけど。
reserveは予めメモリを確保しておくだけ。
resizeを呼ぶと、後のsize()の戻り値は、resizeで指定した値になる。
reserveを呼んでも、後のsize()はreserveを呼ぶ前と変わらない。
現在確保しているメモリの量はcapacityを呼ぶとわかる。
reserveを呼ぶとcapacity()の大きさは、reserveの引数に指定した値以上になることが保障される。
勿論reserveを呼んだとき以外でもcapacityは変化する可能性はある。
標準ライブラリのコンテナは何かにつけて多めにメモリを確保する傾向がある。
Windows では Application Data などのディレクトリのフルパスはどのようにして取得しますか? UNIX におけるドットファイルに相当するユーザ毎の設定ファイルの置き場を探しています。
ここでパソコンの使い方質問されてもな
1×3の分割ウィンドウで、全てフォームビューです。 それぞれにボタンを配置し、クリックすると各ペインの サイズを拡縮したいのですが、どのようにしたらよいでしょうか?
分割ウィンドウといってもいろいろあるし
すみません、情報不足でしたね CSplitterWndクラスののCreateViewで作成しました。
>>197 > 二つ以上のMIDIファイルを同時に再生することは可能なのでしょうか?
サウンドカードによるんじゃないか?
ってプログラミングの話か?
>>203 CSplitterWndのメンバ関数でできなかった?
ビューからやる方法がわからないということ?
>>204 プログラミングの話です。
新VisualC++6.0のサンプルを見ながら実装してみたのですが、
二つ以上同時再生ができませんでした。
何か方法のでしょうか。
はい。ビューからCSplitterWndクラスのメンバ関数を使用する 方法が分かりませんでした。
GetParent
AfxGetMainWnd
app メインフレーム スプリッタ こんな風になってると仮定して appのポインタわかれば app->メインフレーム->スプリッタ メインフレームのポインタわかれば メインフレーム->スプリッタ
211 :
207 :2006/11/01(水) 11:57:39
>>208-210 GetParentFrameで親フレームのポインタを取得することで
CSplitterWndクラスのメンバ変数にアクセスできました。
ありがとうございます。
212 :
207 :2006/11/01(水) 14:58:59
また新たな問題が発生したので質問させていただきます。 現在アクティブなペインを取得するため、GetActivePane関数 を使用しようとしたのですが、 error C2248: 'CSplitterWnd::GetActivePane' : protected メンバ (クラス 'CSplitterWnd' で宣言されている) にアクセスできません。 というエラーが出てしまいました。解決方法を教えてください。
213 :
207 :2006/11/01(水) 15:11:52
自己解決しました。
214 :
207 :2006/11/01(水) 23:28:02
たびたびすみません、もうひとつ質問です。 分割バーがドラッグされたかどうかを認識するため、 CSplitterWndの派生クラスを作成し、OnLMouseDown、 OnMouseMoveイベントをマップしたのですが、なぜか 関数がよばれません、なにかほかに必要なことがあれば 教えてください。よろしくお願いいたします。
何がやりたいか知らんけど 分割バーまでいじるんだったら 自分で分割ウインドウ作った方が簡単じゃないか?
216 :
207 :2006/11/02(木) 20:39:47
解決しました。 派生クラスのメンバ変数を作成していないのが原因でした。 お騒がせいたしました。
よくそれで動いたな
218 :
207 :2006/11/02(木) 21:45:22
すみません間違えましたorz >派生クラスのメンバ変数を作成していないのが原因 ではなく 派生クラスのメンバ変数を使用してスプリッタウィンドウ を作成していないのが原因 です。
VC++ プロジェクトで、Debug で指定していて Release で指定していないプリプロセッサが あります。指定は、プロジェクトのプロパティのプリプロセッサでしています。 構成を Release にしたときに、このマクロで #ifdef している部分が「アクティブな プリプロセッサブロック」となってしまいます。Release のときは IntelliSense で灰色に してほしいのですが、どのようにすればよいでしょうか。
220 :
219 :2006/11/03(金) 08:38:16
>>219 バージョン書き忘れました。すみません。VC++2005です。
【初心者歓迎】C/C++室 Ver.32【環境依存OK】 より:
引数を調べるプログラムで
int _tmain(int argc, _TCHAR* argv[])
{
int i;
printf("argcは %dです。\n",argc);
for(i=0; i < argc; i++)
printf("argv[%d]=%s\n", i, argv[i]);
printf("おしまいっ!\n");
rewind(stdin);
getchar();
return 0;
}
a.exe abc def
と引数を入れても、
Visual C++ 2005では C a d と、最初の1文字しか出ません。
277 名前: デフォルトの名無しさん [sage] 投稿日: 2006/11/03(金) 10:28:05
>>276 Unicode文字列をascii文字列として出力しようとしているから。
詳しくはVSスレなりどこへでも。
とのことですが、
どうすればいいのでしょうか
文字コード変換するか、wprintf使うか、%ls。 環境依存になるが、UNICODE/非UNICODEどちらの設定でもコンパイルできるようにしたければ_tprintf。
【環境依存OK】 だからそっちでいいんだよ 誘導したやつが間抜け あとwprintfや_tprintfとかいらんこと教えられて今後の人生が思いやられる
質問です。 起動する実行ファイル名を取得したいのですが 可能でしょうか? VS2005 MFCを使用しています。
エディタの配色について質問です。 STDのvectorや、size_tなどVC++内に組み込まれている関数を、 int や double のように水色で表示させる方法を教えてください。
>>227 ツール→オプション→フォントおよび色
もしくは
usertype.dat
あんまり使わないから忘れてたけど、こんなのもあった。 m_pszExeName
C++で、写真の拡大とか縮小って出来ますか??
現像なら写真屋さんに持って行きましょう
233 :
デフォルトの名無しさん :2006/11/04(土) 10:10:03
visual C++ 2005 Express で デバッグ時に標準ライブラリ関数にステップインする方法を教えて下さい。 ソースをインストールして、マイコードのみステップインを無効にしましたがNGでした。 もちろん、デバッグのときにはステップイン操作を行っています。 お手上げです。
標準ライブラリのソースをどっかから盗んできてexpressに入れたということ?
235 :
デフォルトの名無しさん :2006/11/04(土) 10:57:43
派生クラスのダウンキャストはダメとかよく書いてあるけど、じゃあこういうケースの場合どうすればいいんですか? class CBase { ... public: virtual int vfunc() = 0; } class A : public CBase { ... public: int kazuA; int vfunc() { return kazuA; } } class B : public CBase { ... public: int kazuB; int vfunc() { return kazuB; } } ... ... std::vector<CBase*> objList; ... objList.push_back( static_cast<CBase*>( new A ) ); ... objList.push_back( static_cast<CBase*>( new B ) );
>... objList.push_back( static_cast<CBase*>( new A ) ); >... objList.push_back( static_cast<CBase*>( new B ) ); この場合static_castはイラン。 ダウンキャストは別にダメではない。 dynamic_castがあるし、オブジェクトの本当の型がわかっているのならstatic_castでもいい。
237 :
デフォルトの名無しさん :2006/11/04(土) 11:27:42
>>234 >>233 です。
>標準ライブラリのソースをどっかから盗んできてexpressに入れたということ?
Platform SDK についていたソースをインストールしました。
たとえば、printf()にステップインしたい場合どうすればよいのでしょうか?
盗人じゃないよ(^^;)
ソース以外にデバッグバージョンのライブラリとデバッグ情報が必要 ステップインは普通にやれば勝手に中に入っていく
参考書片手に初めてちょっとしたプログラムを作っている学生です。 メインウインドウの中にいくつかエディットコントロールや ボタンを配置したいと思っているのですが、 ダイアログボックスを作ってそれをメインウインドウにはめ込む なんていうことはできるのでしょうか? 何個もCreateWindowを書くやり方しか知らず、 他にやり方はないかなと本を読んだりググったのですが わかりませんでした。
ダイアログを作る時に親を指定すればそこに張り付く
241 :
239 :2006/11/04(土) 15:37:35
>>240 ダイアログを見直して、スタイルをオーバーラップにしたら
はりついてくれました。初歩的すぎてごめんなさい・・・。
ありがとうございました。
WS_CHILDを指定しないと、所有関係になっちゃわないか?
243 :
239 :2006/11/05(日) 16:48:40
貼り付けるダイアログボックスはモードレスにしていたんですが うっかりDialogBoxマクロで組んでしまっていました・・。 これをCreateDialogに修正したらまた見えなくなって。 今はダイアログボックスのプロパティをいじくってます。 親っていうのはメインウインドウのハンドルのことでしょうか? 242さんのWS_CHILDも含めて理解が足りてないので もうちょっと勉強してきます。失礼しました。
親って言うのは親分の事だ
245 :
235 :2006/11/07(火) 03:19:29
>>236 ごめん。問題としている問題を間違えました。ダウンキャストじゃなかった。
246 :
デフォルトの名無しさん :2006/11/07(火) 16:10:04
実行結果をノートパッドなどに出力する方法教えてください・・・
247 :
C++ 一年生 :2006/11/07(火) 17:24:29
SetWindowsHookExについて質問! キーストロークフックをグローバルフックで取りたくて VS2005(アカデミック版)、winXP,併用ソフトはATOK、シマンテックアンチウイルス DLLこさえて 宣言は class __declspec(dllexport) Hook{ public: static int makeKhook();..........................} 定義を int Hook::makeKhook() { hHOOKKEY = (HOOKPROC)KeyboardProc; hhk = SetWindowsHookEx(WH_KEYBOARD,// フックタイプはキーストローク hHOOKKEY,// フック処理プロシジャへのポインタ NULL,//フックプロシジャは同一ファイルで記述 0);// 対象スレッドはすべて if (hhk == NULL) { MessageBox(hWnd,TEXT("フックかけられないじょ"),TEXT("Error"),MB_OK); return 0;} return 1 ;} とすると 毎回フックが設定できない。(必ずhhk == NULL で戻ってくる) それで、ヘルプのSetWindowsHookExの記述を見ると、 「解説:hMod パラメータで NULL を指定し、dwThreadId パラメータで 0 またはほかのプロセスが作成したスレッドの識別子を指定すると、エラーが発生することがあります。」と書いてある。 これは、グローバルフックをかけたければフック設定とフック処理のDLLを分けろ と言うことなんでしょうか。EXE側で、ほとんど同じコードでフックをかけようとする と100%うまく行くのですが、ローカルフックにしかならない。 それとも、なにか別にオタンコな事やっていてセットできないだけ? ご教示下さい。
>>246 実行結果をノートパッドなどに出力するプログラムを作る
質問です。 DateTimePickerコントロールのValueを空白で表示することは 可能でしょうか?エディットに置き換える方法もあるのですが あまりコントロールを増やしたくないので・・・ よろしくお願いします。
250 :
デフォルトの名無しさん :2006/11/07(火) 22:17:41
質問です resource.hの中のリソースIDの中身を変更したら resource.h このファイルはMicrosoft Developer Studio以外で修正されています。○○.rcを再ロードしますか? とでてきてここで「はい」を選んだらダイアログ画面などが開けなくなってしまいました。 どうしたらよいでしょうか?
251 :
デフォルトの名無しさん :2006/11/07(火) 22:38:29
>>250 コントロールに振られているリソースIDを間違って削除したんじゃない?
スタティックライブラリ(*.lib)を作成し、配布したいと考えています。 libができたのでテストアプリにリンクしてビルドしたところ、以下の warningがでてしまいました。libの利用者が意識することなく、 このwarningを解消したいと思っているのですが、方法をご存知の 方がいましたら教えて頂けませんか。 ・warningメッセージ d:\projects\testlib\src\hoge.h(11) : warning C4142: 型が再定義されていますが、それはコード生成上何の効果もありません。 ・上記行数にあるコード typedef unsigned long U_INT32; ライブラリをビルドする際に宣言されたtypedefが、アプリを ビルドするときにも有効のまま残ってしまっているのだと推測 しているのですが、どう解消したらよいのか見つけられていません。 作業環境は以下のとおりです。 Windows XP Home SP2 MS VC++ 2005 Express Edition MS Platform SDK for Win Svr 2003 SP1 よろしくお願いいたします。
253 :
デフォルトの名無しさん :2006/11/08(水) 02:14:09
VC++.NET 2005 Pro(2003theSpokeユーザに配布されたもの)環境にて質問です。 あるソリューションで、DLLと、それを動かすテストアプリケーションを作成しています。 テストアプリケーションをコンパイルする段階で以下のコンパイルエラーが出ます。 エラー1fatal error LNK1104: ファイル 'd:\MyDocument\Visual.obj' を開くことができません。DebugTool このオブジェクトファイルが何なのか検討尽きません。 依存関係も設定済み・・・Visual...と名付けたファイルなども無しです。 プロジェクトファイルの位置はマイドキュメント直置きにしてるわけでもなく、ディレクトリ 設定を見てもMyDocumentを設定してる項目は無いと思います。 心当たりのあるかた、教えてください。お願いします。
>>252 hoge.hからその宣言を外し、ライブラリの方のhoge.hをインクルードしている方に移動すればよろしかろ。
http://support.microsoft.com/kb/315780 のページを参考に、GDI+を用いてグレースケールのGIFを作成するプログラムを作ってみたのですが、
一度ファイルに書き出したのち再度読み込み Bitmapインスタンスからパレットを取得してみると、
ColorPalette構造体のFlagsに設定したはずのPaletteFlagsGrayScaleが得られません。
Bitmap::Save() を用いて保存したんですけど、それでは不十分なんでしょうか
VC++2005 standard /MFC です。 OnActivateメッセージが発生したときに、 マウスカーソルのあるボタンのクリック動作をさせたいです。 マウスカーソルの下のコントロールを取得する方法を教えてください。
全然関係ないけどボタンにマウスオーバーしたとき ビットマップ変えるのどうやるんだっけ? と思ってCBitmapButton思い出したけど これマウスオーバーじゃなくてフォーカスだな ということはhittestでやらないとだめか
ツールバーはマウスオーバー対応してるね
259 :
256 :2006/11/09(木) 12:19:28
レスどうもです。 「マウスオーバー」で 少し検索してみたところ、 マウスポインタの座標から割り出す・・・みたいなことが。 メニューにマウス乗せたときや、webのリンクにマウスを乗せたとき、 いろいろと使ってそうなのに・・・。
>>257 ボタンのウィンドウにWM_MOUSEMOVEが飛んできたら、1回だけマウスオーバーの絵を描画
WM_MOUSELEAVEが飛んできたら絵を戻す
みたいな感じに俺はやってる
261 :
デフォルトの名無しさん :2006/11/09(木) 13:10:05
http://www.geocities.jp/supermisosan/kakusanseconddimension.html VC++proでこの計算をやってみようと思ったのですが
エラーがたくさんでて削除して他の例をしようと思ったのですが
エラーが引き継がれてしまいました。
解決策教えてください・・・。
コンパイルしています...
a001.cpp
c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'FILE' : 定義されていない識別子です。
c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'output' : 定義されていない識別子です。
c:\program files\microsoft visual studio 8\vc\include\sal.h(11) : error C3861: 'fopen': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(14) : error C3861: 'printf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(15) : error C3861: 'scanf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(59) : error C3861: 'fprintf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(61) : error C3861: 'fprintf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(64) : error C3861: 'fclose': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\stdio.h(69) : error C2378: 'FILE' : 再定義されています。シンボルは typedef でオーバーロードできません
c:\program files\microsoft visual studio 8\vc\include\stdio.h(131) : error C2143: 構文エラー : ';' が '*' の前にありません。
262 :
261 :2006/11/09(木) 13:57:01
別のプログラムを書いてみたんですが まったく同じエラーがでます。。。
>>261 つ[#include <stdio.h>]
264 :
デフォルトの名無しさん :2006/11/09(木) 14:34:49
>>263 ありがとうございます。。エラーはかなり激減したんですが
次はこんなエラーが出てしまいました。。。。
//三辺の長さと面積の計算
[#include <stdio.h>]
[#include <math.h>]
int main(){
float a,b = 10.7,c,h,s;
a=20.5;
c=14.5;
h=(a+b+c)/2;
s=sqrt(h*(h-a)*(h-b)*(h-c));
printf("a=%f b=%f c=%f \n",a,b,c,s);
return 0;
}
コンパイルしています...
a001.cpp
c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'FILE' : 定義されていない識別子です。
c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'output' : 定義されていない識別子です。
c:\program files\microsoft visual studio 8\vc\include\sal.h(11) : error C3861: 'fopen': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(14) : error C3861: 'printf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(15) : error C3861: 'scanf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(59) : error C3861: 'fprintf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(61) : error C3861: 'fprintf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(64) : error C3861: 'fclose': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\stdio.h(69) : error C2378: 'FILE' : 再定義されています。シンボルは typedef でオーバーロードできません
c:\program files\microsoft visual studio 8\vc\include\stdio.h(131) : error C2143: 構文エラー : ';' が '*' の前にありません。
265 :
261 :2006/11/09(木) 14:35:48
すいませんエラー部分間違えました 計算.cpp c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(2) : error C2014: プリプロセッサ ディレクティブのシャープ記号 (#) の前に、空白文字以外の文字があります。 c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(3) : error C3409: 空の属性ブロックは認められません。 c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(3) : error C2143: 構文エラー : ']' が '[' の前にありません。 c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(3) : error C2014: プリプロセッサ ディレクティブのシャープ記号 (#) の前に、空白文字以外の文字があります。 c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(5) : error C2337: 'int' : 属性が見つかりません。 c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(5) : error C2146: 構文エラー : ']' が、識別子 'main' の前に必要です。 c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(5) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(6) : warning C4305: '初期化中' : 'double' から 'float' へ切り詰めます。 c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(11) : error C3861: 'sqrt': 識別子が見つかりませんでした c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(12) : error C3861: 'printf': 識別子が見つかりませんでした ビルドログは "file://c:\Documents and Settings\PC-USER\デスクトップ\計算\Debug\BuildLog.htm" に保存されました。 計算 - エラー 9、警告 1 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
266 :
261 :2006/11/09(木) 14:49:15
] #include <stdio.h> ] #include <math.h> int main(); { float a,b = 10.7,c,h,s; a=20.5; c=14.5; h=(a+b+c)/2; s=sqrt(h*(h-a)*(h-b)*(h-c)); printf("a=%f b=%f c=%f \n",a,b,c,s); return 0; } ------ すべてのリビルド開始: プロジェクト: 計算, 構成: Debug Win32 ------ プロジェクト '計算'、構成 'Debug|Win32' の中間出力ファイルを削除しています。 コンパイルしています... 計算.cpp c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(1) : error C2059: 構文エラー : ']' c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(1) : error C2014: プリプロセッサ ディレクティブのシャープ記号 (#) の前に、空白文字以外の文字があります。 c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(2) : error C2014: プリプロセッサ ディレクティブのシャープ記号 (#) の前に、空白文字以外の文字があります。 c:\documents and settings\pc-user\デスクトップ\計算\計算.cpp(4) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?) ビルドログは "file://c:\Documents and Settings\PC-USER\デスクトップ\計算\Debug\BuildLog.htm" に保存されました。 計算 - エラー 4、警告 0 ========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ========== エラーだいぶ減らせたんですがここから どう改善したらいいでしょうか・・・ 長々とコピーすいません
ひろったソースをわけもわからずビルドしたって何の意味もないよ
268 :
261 :2006/11/09(木) 15:03:29
>>267 いえ、VisualC++による理工学問題の解法って本で
プログラムの数値計算の例題をしているんですが・・・
ダメだこりゃ
270 :
261 :2006/11/09(木) 15:06:59
’]’でヘッダーが使われなくなってしまうんですよね。。。 ググったんですがやはりVC++再インスコしかないんでしょうか
cppファイルの(1)行目と(2)行目のプリプロセッサ ディレクティブのシャープ記号 (#) の前に、空白文字以外の文字があるのが問題じゃないかな
272 :
261 :2006/11/09(木) 15:10:48
>>271 削除するとヘッダーの108エラー19警告が出てしまうんですが。。。
------ すべてのリビルド開始: プロジェクト: 計算, 構成: Debug Win32 ------
プロジェクト '計算'、構成 'Debug|Win32' の中間出力ファイルを削除しています。
コンパイルしています...
計算.cpp
c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'FILE' : 定義されていない識別子です。
c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'output' : 定義されていない識別子です。
c:\program files\microsoft visual studio 8\vc\include\sal.h(11) : error C3861: 'fopen': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(14) : error C3861: 'printf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(15) : error C3861: 'scanf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(59) : error C3861: 'fprintf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(61) : error C3861: 'fprintf': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\sal.h(64) : error C3861: 'fclose': 識別子が見つかりませんでした
c:\program files\microsoft visual studio 8\vc\include\stdio.h(69) : error C2378: 'FILE' : 再定義されています。シンボルは typedef でオーバーロードできません
c:\program files\microsoft visual studio 8\vc\include\stdio.h(131) : error C2143: 構文エラー : ';' が '*' の前にありません。
c:\program files\microsoft visual studio 8\vc\include\stdio.h(131) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
c:\program files\microsoft visual studio 8\vc\include\stdio.h(131) : error C2371: 'FILE' : 再定義されています。異なる基本型です。
略
まったくの初心者向けの本じゃなくて Cの基礎は知ってる前提の本じゃないかな?
それぐらいの簡単なことでつまずくようだったら もうちょっと短いサンプルで勉強したほうがいいよ。
C/C++言語自体の勉強が必要。 英語が分からないのに、英語の本で理工学の勉強するようなもんだ。
276 :
261 :2006/11/09(木) 15:20:17
Cはいちを勉強したんですが、、、 もう少しVC++の入門書読み返して見ます。。。
http://www.amazon.co.jp/gp/product/4526053597/ Visual C++による理工学問題の解法 (単行本)
佐藤 次男 (著), 佐藤 裕哉 (著)
本の題名は間違い。よく検討して買いましょう, 2004/12/27
レビュアー: カスタマー
この本、Visual C++とついていますが、流体のグラフィクス表示や
大規模数値計算の可視化を可能にする本ではありません。しかも、
VC++の説明もろくになく、簡単なグラフィクス表示、つまり計算結果
のグラフ表示しか書いてありません。題名は全くの検討違い。
プログラムの方もC++なのに全然特性を利用しておらず、後半の
内容はほとんどC言語です。内容も理工学問題とありますが、
明らかに振動を中心とした電気工学で理工問題ではありません。
>>276 VC++と名の付く本じゃなくて、C/C++言語の本で勉強しなさい。
>>261 >c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'FILE' : 定義されていない識別子です。
>c:\program files\microsoft visual studio 8\vc\include\sal.h(10) : error C2065: 'output' : 定義されていない識別子です。
c:\program files\microsoft visual studio 8\vc\include\sal.h を
>>261 のプログラム例で上書き
なんて馬鹿なマネはしてないよな?
280 :
261 :2006/11/09(木) 22:15:55
>>279 そうだったみたいです。
sal.h(なんだこれ)とstdio.hがぶっこわれたみたいです。
結局大学図書館いって再インスコしてきました・・・。
お騒がせしました。
281 :
252 :2006/11/10(金) 00:27:02
>>254 さん
レスありがとうございます。
書いて頂いた方法で解決できると思うのですが、
別々に管理するのは大変なので、出来れば
ライブラリをビルドする時のヘッダとユーザに
配るものとを共通にしたいのです。
(質問するときにちゃんと書くべきでした。
すいません・・・)
>>281 それじゃ、#ifdefマクロで宣言を括ってやって、ビルドするときはそのマクロを定義するってことで。
環境はVS2003のVC++です 新規でWin32プロジェクトを作成すると自動生成コードのおかげで 起動するとフォームが表示されてしまいます 簡単なファイルチェックだけしたいのでウィンドウは表示したくないのですが どこをコメントアウトしたらいいのか教えてください? コンソールプロジェクトでやってもコンソールウィンドウが出てしまって・・・
ヒント:Visable
CWnd::SetActiveWindow() って、どのウィンドウをアクティブにするか引数送れないのだけど どうやって記述すればいいのですか? static CWnd* lcwnd=GetActiveWindow( ); : //何かアクティブウインドウが変更される処理 SetActiveWindow(lcwnd); //←元のウインドウをアクティブに戻したい(コンパイルエラー)
287 :
285 :2006/11/10(金) 13:31:04
オブジェクト指向ってことで 見覚えのある記述をしてみました lcwnd.SetActiveWindow(); //× lcwnd::SetActiveWindow(); //× lcwnd->SetActiveWindow(); //○ コンパイルは 通りました(サンキュー☆)が 意図する結果にはなりませんでした オブジェクト指向ってことは lcwnd が示すオブジェクトに SetActiveWindow が用意されていない から 意図する結果にならなかった、と考えましたが あってますかね? とすると 不特定(別アプリ)のウインドウに対しては CWnd::SetActiveWindow() ではないものを使うべき・・・ ん〜〜
289 :
285 :2006/11/10(金) 14:06:24
>>288 おかげさまでできました! サンキュです
GetActiveWindow() ではなく
GetForegroundWindow() を使うべきだったのですね
ピクチャボックスを使ってグラフを書こうとしているのですが、 計算した数値結果をそのままグラフに反映させたいと思っています。 左上を(0、0)としていますが、左下を(0、0)と変換できるような関数はないんしょうか? 環境:XPでVC++EEを使っています。
座標系を
MM変えるか MM変えないで原点を移動して(x,-y)とか ほかにもいろいろ
295 :
261 :2006/11/10(金) 18:40:04
>>273 ,274,275,278
おとなしくCの初歩の本を借りて読んでみたらだいぶ理解できました。
ありがとうございました。
質問なのですが・・・ UNICODE文字(スペース含む)のバイト数がとれません。 なぜでしょうか?わかる方いましたらお教えください
英数字じゃなくて日本語ならうまくいくかも
298 :
296 :2006/11/10(金) 19:54:30
>>297 それは私に対しての回答でしょうか?
もしそうでしたらすみません。回答の意図がわからないです。
質問が少々曖昧でしたのでもう一度
CString ss = _T("山田 シスコ");
int nLen = _mbsnccnt( (unsigned char*)(LPCTSTR)ss,ss.GetLength() );
とした場合、nLenにはなぜか4が返ってきます。
半角もしくは全角を含んだバイト数はどのように取得すればよいのでしょうか?
4であってる
300 :
296 :2006/11/10(金) 20:05:50
すみません。 >半角もしくは全角を含んだバイト数 ではなく 半角もしくは全角のスペースを含んだ文字列のバイト数 です。 >4であってる ということは、スペースが入った文字列のバイト数は取れない ということでしょうか? それとも他に何か方法があるのでしょうか?
301 :
デフォルトの名無しさん :2006/11/10(金) 20:21:47
>300 今やったらsizeofで普通に取れたが
山田 シスコ &#x5c71;&#x7530;&#x3000;&#x30B7;&#x30B9;&#x30B3; 山田 シスコ こういうこと。
303 :
デフォルトの名無しさん :2006/11/10(金) 20:23:58
>300 通信バッファか何かとか?
304 :
デフォルトの名無しさん :2006/11/10(金) 20:27:48
>300 すまない、詳細読んでなかった。
ss.GetLength() * sizeof (TCHAR)ではだめか。 それとも俺は何か読み飛ばしているのか。
306 :
296 :2006/11/10(金) 20:36:09
ひたすら検索したところ int ret = WideCharToMultiByte(CP_ACP,0,(LPCWSTR)lpStr,-1,NULL,0,NULL,NULL); の戻り値で取れそうです。 本当にありがとうございました。
だったらこれはどうよ。MFC 7以降限定だが。 CStringA s(lpStr); s.GetLength();
308 :
296 :2006/11/10(金) 20:49:53
>>307 取れました。
情報ありがとうございます。
309 :
247 :2006/11/10(金) 22:02:11
>>247 は自己解決しました。
DllMain の前で
HINSTANCE hInstDLL; を宣言して、
hInstDLL = hInstance; をDllMain の冒頭に追加して
SetWindowsHookEx の第3引数を hInstDLL にしたら
フックはかかったようです。
310 :
デフォルトの名無しさん :2006/11/10(金) 22:05:48
VC++2005 で MFC ですが、初心者なのでこちらで BEGIN_MESSAGE_MAP(CvddocumntDoc, CDocument) ON_MESSAGE(IDC_DATA_ADD_Request, &CvddocmntDoc::OnMyAddData) END_MESSAGE_MAP() と定義しておいて、dllから SendMessage(NULL,IDC_DATA_ADD_Request ,wParam,lParam); で、 LRESULT CvddocmntDoc::OnMyAddData(LPARAM L,WPARAM W) {......... } を呼び出そうとすると、コンパイルできなくなりました。 エラーメッセージは .\vddocmntDoc.cpp(22) : error C2440: 'static_cast' : 'LRESULT (__thiscall CvddocmntDoc::* )(LPARAM,WPARAM)' から 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)' に変換できません。 どなたか初心者にお導きを〜〜〜〜〜〜〜〜〜〜〜〜
引数の型がおかしいだけじゃないの? エラーメッセージを読んで
メッセージはCWndの派生クラスに送れ CDocumentの派生クラスはWM_COMMANDだけ。
そういえばunicodeだと全角も半角も2バイトだっけ だから全角半角混在でも文字数数えるのは非常に楽
314 :
デフォルトの名無しさん :2006/11/11(土) 07:17:25
Visual C++ 7.1を使っています。 エスケープシーケンスについてなのですが、 ESC [y; xH のようなのをエスケープシーケンスドライバを組み込まなくても 同じような動作させたいのですが、どのようにしたらいいでしょうか? コマンドプロンプトで例えば 1: 現在の数値:○○ 2: 現在の数値:○○ のようにスクロールしないで同じ位置に表示させたいのですが。
\r
>>314 それはスクロールしているのじゃないのか?
単に同じ場所で情報を更新したいだけなら、こんなんでどうでしょ。
printf("現在の数値:%d\r", num);
>>315 ,316
レスありがとうございます。
1行なら\rだけでいいのですが、複数行を同じ位置に表示にさせたいのです。
例えばこんなかんじです。
時刻
JST:08:00:00
UST:23:00:00
時差:1秒以内です。
>>313 WindowsのWCHARはUTF-16なんで全て2バイトではない。
サロゲートペアを使って4バイトで1文字を表す文字もある。
相談です。 VC++2005EEにてビルドしたらこのようなエラー構文が出ました。 対処方法を教えてください。 ※○○はわしの名前 c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2653: ' MessageBox' : 識別子がクラス名でも名前空間名でもありません。 c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2664: 'void System::Windows::Forms::Form::Show(System::Windows::Forms::IWin32Window ^)' : 1 番目の引数を 'System::String ^' から 'System::Windows::Forms::IWin32Window ^' に変換できません。
すいません、なるべく煽らんで下さい
ていうか本の手順に沿ってやってっただけなんです。 まだ序盤なんです。こんなとこで躓いたら先にいけません
教えてクン養成マニュアル 明日の「教えてクン」を目指す、若き戦士達に以下の文章を捧げる。 日々精進し、パソコンヲタクどもの親切を蹂躙してやれ。 1. 努力を放棄すること いやしくも「教えてクン」たるもの、努力をしてはならない。 過去ログを読んだり、検索してはいけない。 「英語は苦手なので、分かりません。」は、高く評価できる。 辞書片手にマニュアルやReadMeを読むなど、決してしてはならない。 他力本願と言われようと、自分で調べたり試行錯誤したりせず、他人の努力の結果を搾取するのが、正しい「教えてクン」である。 また、「もう何が悪いのかサッパリ分かりません。」と言ってふてくされるのも有効である。 「サッパリ」という単語が「やる気の無さ」を効果的に表現している。 「原因を特定するには、何をすべきでしょうか?」と訊いてしまうと自己の積極性が現れてしまうので、「教えてクン」失格である。 2. 情報を開示しないこと 使用OSや、機器構成などの必須の情報を知らせてはならない。 マザーボード名やBIOSのバージョンも同様だ。 具体的なアプリ名やバージョンも隠蔽すべきだ。 「DVD再生ソフト」のように曖昧に表記しておけばよい。 反対に「前から欲しいと思っていた○○」とか「安売りされていた ○○」等の「どうでもいい情報」は、どんどん書いてやれ。 トラブルの場合は、状況を正確に記述してはならない。 「なんだかうまく動きません。」とか「エラーが出ます。」等と具体的なことは何も書かないことが重要である。 また、自分の試してみた事も具体的に書いてはいけない。 考えられる組合せのマトリックスを作成し、状況を整理するなどもってのほかである。 最悪の場合、それだけで問題が解決してしまうこともあるのだ。 「いろいろやってみたけど、動きません。」が理想的だ。
3. 答える人間のことを考えないこと 「教えてクン」は、孤高の戦士である。 相手のことを考えるようでは教えてクン失格というものだ。 以下のような行動が、望ましい。 初心者であることを高らかに宣言し、初心者向けの丁寧で分かりやすい説明を強要する。 専門用語の使用を禁じておくとさらに効果的である。 簡潔な説明を禁じられたヲタクどもは、同じ内容を説明するのに、何倍もの労力を強いられる。 自分は努力せず、相手には多大な努力をさせることこそが「教えてクン」の真骨頂である。マルチポストも有効である。 そのBBSを信用していないことを明確に示せる。 「どうせ、お前らじゃ分からんだろう。」という意志表示として高く評価できる。 もちろんマルチポストの非礼をあらかじめ詫びてはならない。 それでは、単なる「急いでいる人」になってしまう。 それは、教えてクンではない。質問のタイトルは、「教えてください。」で良い。 タイトルを読んだだけでは「何に関する質問」か全く分からない。 そういう努力は、答える人間にさせれば良いのだ。 とにかく、答える人間が答えやすいように気を使って質問してはならない。 傲慢で不遜な態度が必須である。「聞きたいことがあります。」など、プロの仕事であろう。 最後に、言うまでも無いことだとは思うが、答えてくれた人達に礼の言葉を返すなど言語道断である。 せっかく「教えてクン」を貫いてきたのに、最後にお礼を言っているようでは、画竜点睛を欠いていると言わざるを得ない。 質問だけしておいて、後はシカトが基本である。 上級テクニックとして、「そんなことはもう試しました。」とか、「そこまで初心者じゃありません。」などと言って、回答者の神経を逆なでしておけば完璧である。 以上のことを踏まえて質問すれば、君も立派な「教えてクン」である。 ビバ!教えてクン! 教えてクンに栄光あれ!!
重い処理をするとカーソルアイコンが砂時計になって、ウィンドウ操作が出来ない状態になりますが、 それを防ぐ手立てはありますか。
その重い処理を別に作ったスレでやれば良い。
332 :
330 :2006/11/11(土) 16:59:16
マルチスレッドってことですか。 ありがとうございます。
この質問ここでいいのかな? VC++(SDK)で、フォーム(でOK?)上の子ウィンドウ(コントロール)の フォントって全て共通に出来る? つまりは、 「フォントを与えると全部の子ウィンドウのフォントを一括して変えられるAPIがある」のか 「1つ1つ変えるしかない」のかって言うことなんだけど・・・ 誤字、用語間違いあったら許して。
共通のフォント使えば良いじゃん。
教えてください インストールしたのに使えません。 バクっているんでしょうか。 環境はウィンドウズです。
その通りです。 どうやらバクっているようですね。 で、何を教えれば良いのですかな?
質問に質問で返すな ぼけ
相手してくれるのをwktkしていたのが良く判る時間差ですね。
あるボタンを押したときに、PreTranslateMessageにVK_SPACEが押されたような メッセージを送りたいのですが、どうやればよいのでしょうか?
最近、VC6からVC++EEに乗り換えたんですが、参考書がないんですけど、 .NETに似てる感じがするんですけど、 .NETの参考書でも勉強するには十分なんでしょうか?
言語を勉強するのか、.NET Frameworkを勉強するのか、IDEの操作方法を勉強するのか
GetSafeHwnd()で得た値をCStringかchar型の変数に保存したいのですが、 どうすればよいのでしょうか?
CString::Format、sprintf、、、
>>342 現状C++で.NETな本はほとんどないから、他の言語を使った.NETの本を使い、
MSDNライブラリやWebでC++/CLIの構文の知識を補完するしかないと思う。
..345 ありがとうございました☆ そうします
VC++.netで開発をしています。 CString filename = L"abcdefg"; const char *cast; cast = (LPCSTR)(LPCTSTR)filename; とキャストをするとcastには最初の"a"しか入りません。 どうやってキャストをすればよいのでしょうか。
ポインタだからキャストしても中身は変わらんよ
>>347 Unicodeビルドだろうからchar*じゃ、まずいんじゃね?
const _TCHAR *cast;
cast = (LPCTSTR)filename;
どうしても char* が欲しいなら、wcstombc でマルチバイト文字列に変換
CStringAにキャストもありだな。
質問です。 ビューの中にあるコントロールの座標をTwips単位で 取得する方法を教えてください。
ぐぐったら1発でみつかった
Form1とForm2を作って Form1_Loadの中に Form2 *f2p = new Form2(); f2p->Show(); f2p->Activate(); って書いて起動時にForm2を表示してアクティブウィンドウにしたいんだけど、どうしてもForm1がアクティブになってしまうんだ。 Form1にボタン貼り付けて同じ内容コピペするとForm2がアクティブになるんだけど・・ 何ででしょうか? 他にもForm1_Loadの中に this->Hide();や this->Visible = false; って書いて非表示になるかどうかやってみたけどならないです。 初回起動時の処理をしたいんだけど上手くいきません何方かご教授をお願いします。 環境:VC++ .NET 2003
355 :
354 :2006/11/15(水) 23:51:59
ごめんなさい 調べたら原因が分かりました。 順番としてLoadが実行された後にFormが表示されてるんですね。 参ったな・・・
>>354 C++/CLIのWindows.Formの話をしてるならshownイベントが使える。
SDKでcreatewindowで作ったウィンドウの上に、 createwindowでチェックボックスを作ったのですが Tabキーでフォーカスの移動が出来ません。 WS_TABSTOPも入れてあります。 ダイアログならタブオーダーで設定できるみたいですが・・・ もし「これを忘れるとTabキーでフォーカスの移動できんよ」という注意点が在ったら 教えて下さい。
つ IsDialogMessage
いい加減メル欄直せ>俺 orz
360 :
1/2 :2006/11/16(木) 22:51:23
Windows2000、VC++7で開発してます MFC等使わず、CWindow・CDialogなどWin32APIのラッパクラスを自作してやってるのですが class CMainWnd : public CWindow・・・・ class CConfigDlg : public CDialog・・・・ という二つのクラスを作りました このときCMainWndは、メンバとしてCConfigDlgの実体m_confDlgを持ちます CDialogにはDoModal(仮想関数)という、内部でDialogBoxParamを呼び出してモーダルダイアログを作成するメソッドがあり CConfigDlgにはDoConfigという、いくつか引数を取り必要なデータを確保した後にDoModalを呼び出すメソッドがあります CMainWndでは、あるメニューを選択された時にm_confDlg.DoConfig(・・・)を実行します もう1週間くらいチマチマと開発しているのですが ずっと問題無く動いていたのですが、昨日から突然DoConfig内のDoModal呼び出し時に例外0xC0000005を吐くようになりました 他の部分はそれなりに書き換えたりしましたが、DoConfig・DoModal近辺は一切手を加えてないのでエラーの心当たりも無く どうしたものかほとほと困り果ててしまいました
361 :
2/2 :2006/11/16(木) 22:53:17
どうしたものかほとほと困り果ててしまいました
362 :
2/2 :2006/11/16(木) 22:57:33
以下がエラーのメッセージです test.exe の 0x0043ffe6 でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x0000006c を読み込み中にアクセス違反が発生しました。 DoConfigのコードは以下のようになっています int CConfigDlg::DoConfig(CWindow* pParent, LPCTSTR tID, CConfigData& kcData) { m_TemplateID = tID; SetData(kcData); m_blConfig = true; return DoModal(pParent); } DoConfig内を混合モードで追ってみたところ、以下のようなアセンブラコードで return DoModal(pParent); 0043FFD8 mov esi,esp 0043FFDA mov eax,dword ptr [pParent] 0043FFDD push eax 0043FFDE mov ecx,dword ptr [this] 0043FFE1 mov edx,dword ptr [ecx] 0043FFE3 mov ecx,dword ptr [this] 0043FFE6 call dword ptr [edx+6Ch] 0043FFE9 cmp esi,esp 0043FFEB call ILT+2245(__RTC_CheckEsp) (4368CAh) 0043FFE1のMOVで、edxには0x00000000が代入されて居ましたので、これが直接の原因ではないかと思ってます 関数テーブルが壊れてるとか、そういう問題なのでしょうか? それとも別のものなのか、良く分かりません どなたか、心当たりのある方はいらっしゃらないでしょうか
どこか全然別の関数でCConfigDlgのメンバを壊している悪寒。
>>363 さっそくのレスありがとうございます
まったく別の場所で破壊ですか
それだと、全体的に洗いなおした方がよさそうですね・・・
少し、コードと格闘して見ます
エラーが出始めた頃に新たに付け加えた関数とか、内容をいじくった 関数がわかればいいのだが。 そのためにも、完成するまでにセーブした日付入りソースは必須。 つまりエラーが出ないのはどこまでなのかさかのぼって比較して検討 できる。
変なエラーに悩まされずに済むし MFC使っててよかったなと思う
>>365 なるほど、確かにそうですね
今度から要所要所ででもバックアップ作成することにします
csvが便利だよ
cvsだったorz とにかくこれは自分には欠かせない
エディットボックスが3つあって、 特定の一つの値のみをUpdateData(FALSE)のような形で更新したいのですが、 どのような方法をとればよいのでしょうか。
371 :
362 :2006/11/17(金) 06:42:57
解決しました CMainWndのメンバに、それぞれBOOL*32、BYTE*256の配列があり、コンストラクタでZeroMemoryしてたのですが ヘッダを確認してたら、 BOOL m_bl[256]; BYTE m_cb[32]; と要素数が逆になっていたので、これを直したところエラーも消えました ここで、CConfigDlgのメンバまでZeroMemoryされてたんですね・・・ 皆さん、ご助言ありがとうございました
無駄にZeroMemory()するなという教訓だな。
え
>>370 ・DoDataExchangeに細工をする
・DDXを使わず、直接エディットボックスを更新する
ソースをビルドしようとしてもメニューにビルドが表示されていなくてできません。 odbc32.libというファイルをライブラリのフォルダに入れてみましたがそれでも改善されません。 他に何が必要か分かる方いたら教えてください。
プロジェクトを作っていない悪寒。
質問です ―――――――――――――――――――――――-| | | No | 社員名 | 社員コード | 住所 | 電話番号| |――――――――――――――――――――――― | | | 01 | あああ | xxxxxxxx | xxxx | xxxx-xxx | |+ | 02 | あいう | xxxxxxxx | xxxx | xxxx-xxx | ||-| | | | xxxx | xxxx-xxx | ||-| | | | xxxx | xxxx-xxx | ||-| | | | xxxx | xxxx-xxx | | | 03 | あおう | xxxxxxxx | xxxx | xxxx-xxx | | | 04 | かかか| xxxxxxxx | xxxx | xxxx-xxx | | | 05 | ききき | xxxxxxxx | xxxx | xxxx-xxx | |――――――――――――――――――――――― ちょっと見づらいかもしれませんが、このような表示形式のグリッド(VSFlexGrid)があります 列のヘッダにてソート(ソート対象はNo、ソートは降順)をかけたときに下記のような表示にソート されたいのですが、どのようにしたらよろしいでしょうか?ご教授をお願いします。 ソート後 ―――――――――――――――――――――――-| | | No | 社員名 | 社員コード | 住所 | 電話番号| |――――――――――――――――――――――― | | | 05 | ききき | xxxxxxxx | xxxx | xxxx-xxx | | | 04 | かかか| xxxxxxxx | xxxx | xxxx-xxx | | | 03 | あおう | xxxxxxxx | xxxx | xxxx-xxx | |+ | 02 | あいう | xxxxxxxx | xxxx | xxxx-xxx | ||-| | | | xxxx | xxxx-xxx | ||-| | | | xxxx | xxxx-xxx | ||-| | | | xxxx | xxxx-xxx | | | 01 | あああ | xxxxxxxx | xxxx | xxxx-xxx | |―――――――――――――――――――――――
それ作って売ってるやつに聞けよ ここサポートセンターじゃないよ
質問です。 CString ss = L"あああテスト1いいいテスト1ううう"; で、最初の「テスト1」のみ削除する場合、どのように すればよいのでしょうか?
質問になってない
>>380 最初の「テ」の所にカーソルを移動させて
Deleteキーを4回押下する。
383 :
380 :2006/11/17(金) 19:35:24
すみません。再度説明いたします。 例 CString s1 = L"テスト1"; CString s2 = L"あああテスト1いいいテスト1ううう"; //消去処理 結果 s2には"あああいいいテスト1ううう"; となるようにしたい s2にセットされている文字列から最初に見つかったs1の 文字列を消したいのですがどのようにしたらよいのでしょうか?
いろいろ方法あるけどCStringのメンバ関数使えばいいんじゃね?
CString::Remove これのソースまねたらできそうな気がするが
386 :
380 :2006/11/17(金) 20:00:44
>>384 , 385
レスありがとうございます。
確認してみます。
387 :
376 :2006/11/17(金) 20:28:20
>>377 ありがとうございます、その通りでした。
borlandのようにソースをそのままコンパイルとはできないのですね。
プロジェクトを作ったら無事にexeファイルを作れました。
>>387 スタートメニューのVisual C++のコマンドプロンプトを起動して、
そこでコンパイル・リンクする。
Modern C++ Design のオブジェクト・ファクトリの項を見て、以下のソースを試して見ました。まずヘッダです。 #include <map> template< class AbstractProduct, typename IdentifierType, typename ProductCreator = AbstractProduct* (*)() > class Factory { typedef std::map<IdentifierType, AbstractProduct> AssocMap; AssocMap associations_; public: bool Register( const IdentifierType& Id, ProductCreator creator ) { return associations_.insert( AssocMap::value_type( id, creator ) ).second; } bool Unregister( const IdentifierType& id ) { return associations_.erase( id ) == 1; } AbstractProduct* createObject( const IdentifierType& Id ) { typename AssocMap::const_Ierator i = associations_.find( id ); if ( i != associations_.end() ) { return ( i->second )(); } } }; class Shape {}; class Line : public Shape {}; class Circle : public Shape {}; class Porygon : public Shape {};
390 :
389 :2006/11/17(金) 21:12:56
次にソースです。 #include "Factory.h" Line* __cdecl createLine() { return new Line; } Circle* createCircle() { return new Circle; } Porygon* createPorygon() { return new Porygon; } void main() { Factory< Shape, const char* > factory; factory.Register( "Line", createLine ); factory.Register( "Circle", createCircle ); factory.Register( "Porygon", createPorygon ); //・・・・以下略 }
391 :
389 :2006/11/17(金) 21:15:21
で、ビルドすると、 error C2664: 'Register' : 2 番目の引数を 'class Line *(void)' から 'class Shape *(__cdecl *)(void)' に変換できません。 スコープ内でこの名前を持つ関数でターゲット型に一致するものはありません。 と、C2664 のエラーがでちゃうんだけどどうして?
392 :
389 :2006/11/17(金) 21:22:47
書いてて気が付いた。 Line* createLine() { return new Line; } は当然駄目で、戻り値を上位型の Shape* createLine() { return new Line; } にしなきゃ通る訳ないよな・・・・orz
>>380 よく見たらCString::Removeは1文字削除だった
たぶんこれ使えばできるだろう
CString::Find
CString::Delete
すいません。もう一度質問です。先ほども書いたように以下のコードをModern C++ Design のオブジェクト・ファクトリを参考に書きました。 #include <map> template < class AbstractProduct, typename IdentifierType, typename ProductCreator = AbstractProduct* (*)() > class Factory { public: bool Register( const IdentifierType& id, ProductCreator creator ) { return associations_.insert( AssocMap::value_type( id, creator ) ).second; } bool Unregister( const IdentifierType& id ) { return associations_.erase( id ) == 1; } AbstractProduct* createObject( const IdentifierType& Id ) { typename AssocMap::const_Ierator i = associations_.find( id ); if ( i != associations_.end() ) return ( i->second )(); } private: typedef std::map<IdentifierType, ProductCreator> AssocMap; AssocMap associations_; }; class Shape {}; class Line : public Shape {};
395 :
389 :2006/11/17(金) 22:33:32
先ほどのはヘッダ、こちらはソースです。 #include "Factory.h" Shape* createLine() { return new Line; } void main() { Factory< Shape, const char* > factory; factory.Register( "Line", createLine ); Shape* line = factory.createObject( "Line" ); delete line; } ビルドすると、訳のわからん警告と、エラーがでまくります。 Loki は VC++ ではビルドできないって話を聞いた覚えがありますが、やっぱり駄目?
>訳のわからん警告と、エラー 具体的に書けよ ・・・
エラーをコピペして晒せ。それが出来ないなら去れ。
つうか長文コピペされると迷惑
長ったらしいソースを見せたい場合は固めてロダに上げるのが普通
>397 いいの、かなりうざいよwww Factory.cpp C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\xtree(149) : warning C4786: '?$reverse_bidirectional_iterator@Viterator @?$_Tree@PBDU?$pair@QBDP6APAVShape@@XZ@std@@U_Kfn@?$map@PBDP6APAVShape@@XZU?$less@PBD@std@@V?$allocator@P6APAVShape@@XZ@3@@2 @U?$less@PBD@2@V?$allocator@P6APAVShape@@XZ@2@@std@@U?$pair@QBDP6APAVShape@@XZ@3@AAU43@PAU43@H' : 識別子が '255' 文字に切り捨てられました (browser 情報内)。 C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\map(46) : コンパイルされたクラスのテンプレートのインスタンス化 'std::_Tree<char const *,struct std::pair<char const * const,class Shape * (__cdecl*)(void)>,struct std::map<char const *,class Shape * (__cde cl*)(void),struct std::less<char const *>,class std::allocator<class Shape * (__cdecl*)(void)> >::_Kfn,struct std::less<char const *>,class std::allocator <class Shape * (__cdecl*)(void)> >' の参照を確認してください D:\TEMP\Factory\Factory.cpp(30) : コンパイルされたクラスのテンプレートのインスタンス化 'std::map<char const *,class Shape * (__cdecl*)(void),struct std::less<char const *>,class std::allocator<class Shape * (__cdecl*)(void)> >' の参照を確認してください D:\TEMP\Factory\Factory.cpp(43) : コンパイルされたクラスのテンプレートのインスタンス化 'Factory<class Shape,char const *,class Shape * (__cdecl*)(void)>' の参照を確認してください C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\xtree(152) : warning C4786: '?$reverse_bidirectional_iterator@Vconst_iterator@?$_Tree@PBDU?$pair@QBDP6APAVShape@@XZ@std@@U_Kfn@?$map@PBDP6APAVShape@@XZU?$less@PBD@std@@V?$allocator@P6APAVShape@@X Z@3@@2@U?$less@PBD@2@V?$allocator@P6APAVShape@@XZ@2@@std@@U?$pa ir@QBDP6APAVShape@@XZ@3@ABU43@PBU43@H' : 識別子が '255' 文字に切り捨てられました (browser 情報内)。 C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\map(46) : 以下、略。
401 :
389 :2006/11/17(金) 23:05:24
ちなみに以下の1行をコメントアウトすると、警告は大量にでるけど、ビルドはできる。 Shape* line = factory.createObject( "Line" ); そうそういい忘れた。環境はVC++6です。
#pragma warning (disable: 4786)
>402 THX D:\TEMP\Factory\Factory.h(24) : error C2039: 'const_Ierator' : 'map<char const *,class Shape * (__cdecl*)(void),struct std::less<char const *>,class std::allocator<class Shape * (__cdecl*)(void)> >' のメンバではありません。 D:\TEMP\Factory\Factory.h(24) : error C2146: 構文エラー : ';' が、識別子 'i' の前に必要です。 D:\TEMP\Factory\Factory.h(24) : error C2501: 'const_Ierator' : 識別名を宣言するのに、型が指定されていません。 D:\TEMP\Factory\Factory.h(24) : error C2065: 'i' : 定義されていない識別子です。 D:\TEMP\Factory\Factory.h(25) : error C2065: 'id' : 定義されていない識別子です。 D:\TEMP\Factory\Factory.h(26) : error C2677: 二項演算子 '!=' : 型 'class std::_Tree<char const *,struct std::pair<char const * const,class Shape * (__cdecl*)(void)>,struct std::map<char const *,class Shape * (__cdecl*)(void),struct std::less<char const *>,class std::allocator<class Shape * (__cdecl*)(void)> >:: _Kfn,struct std::less<char const *>,class std::allocator<class Shape * (__cdecl*)(void)> >::iterator' を扱うグローバルな演算子は定義されていません。(または変換できません)(新しい動作; ヘルプ を参照) D:\TEMP\Factory\Factory.cpp(27) : error C2227: '->second' : 左側がクラス、構造体、共用体へのポインタではありません。 cl.exe の実行エラー ブラウザ データベースを作成中... Factory.exe - エラー 7、警告 0
VC++ 8で試してみた。 createObjectがおかしい、const_Ierator⇒const_iterator、Id(仮引数宣言)⇒id。 そしてi == associations_.end()のときに、何も値を返さないという警告になるが、一応コンパイル・実行できた。 それでもだめだったら、VC++ 6の問題だから仕方ないと思うよ。 さあVisual C++ 2005 EEだ。
>404 駄目ですね。やっぱVC++6の仕様みたいです。 #template のネストもVC6では出来ないようだし・・・
まとめ Q C/C++の本に書いてあるコードでVCでコンパイルが通らないものがあります。 どうしたらいいですか? A その本の推奨する環境でコンパイルしてください。
無料でDLしたvisualc++を使ってるんだがさすが無料と言うべきか textoutつかって日本語表示させようとすると見事に文字化けする。 マジ使えねぇ
それが本当だったらとっくに大騒ぎになっているわ。
つ System.Windows.Forms.ToolTip
質問があります おもに猫でも〜を見てプログラムを勉強してるのですが datagridviewを使うにはどうすればいいのでしょうか? CLRというのを選択しないと出てこないのですが またMFCでもdatagridviewは使えるのでしょうか?
415 :
411 :2006/11/19(日) 13:20:17
>>412 ありがとうございます。
ツールチップって言うんですね。
ヒント or ヘルプ and 浮かび上がる
とかで検索しててまったくヒットしなかったので助かりました。
どうも。
Ellipse(hdc,10,10,100,100); この一文の事でお聞きしたいのですが、 これをWM_PAINT内に書くとウィンドウ上に円が描かれます。 しかし、WM_PAINTから呼び出した別の関数で 上記の文を実行させると、ウィンドウからはみ出したり 円が描かれなかったりします。 その関数には (HWND hwnd)や(HDC hdc)などを渡したりもしています。 何でだろう? 相当馬鹿なことやってるかもしれないんですけど
WM_PAINT部とその呼び出す関数を見せてみろ
418 :
416 :2006/11/19(日) 16:29:28
case WM_PAINT: hdc=BeginPaint(hWnd,&ps); Ellipse(hdc,10,10,100,100); //有効 EndPaint(hWnd,&ps); return 0; //以下略 switch(LOWORD(wParam)) { case 1: hdc=BeginPaint(hWnd,&ps); Ellipse(hdc,10,10,200,200); //これがおかしい EndPaint(hWnd,&ps); break; 質問の趣旨が間違ってました。すまんです。 WM_PAINTの中でのEllipseは有効なのに、ボタン(IDは1)を押しても 円が描かれません。と言う事です。
>>418 ではないが俺も質問させて下さい。
Ellipseを使って円をランダムに表示させたいんだがうまくいきません。
case WM_PAINTの中はこんな感じです。
rx1 = rand() % rc.right;
atm[j][0] = rx1; atm[j][1] = rx1; //x1, y1座標
atm[j][2] = rx1 + 10; atm[j][3] = rx1 + 10; //x2, y2座標
hBrush = CreateSolidBrush(RGB(255, 226, 0));
hOBrush= (HBRUSH)SelectObject(hdc, hBrush);
Ellipse(hdc, atm[j][0], atm[j][1], atm[j][2], atm[j][3]);
SelectObject(hdc, hOBrush);
DeleteObject(hBrush);
配列に値を入れてるのは他のとこでその値を使いたいので成ってます。
WM_CREATEのなかに
srand((unsigned)time(NULL));
を入れて表示させてますが、円が分身しちゃいます。
しないで一定の場所に保つ方法ってありますか?
>>418 それは正しい動作
おかしいと思うキミが理解できてない
MSDNのBeginPaintの解説を良く読んでみなさい
>>419 分身?
WM_PAINTの度にランダム生成してんだから同じ場所に出ないのは当然だと思うんだけど?
>>421 教科書のは大丈夫だったから良いと思ったら
仰るとおり再描画かけてたので分身してるっぽいです。
こんな質問するなんて、ほんと申し訳ないです。。。
今、地図を描くプログラムをVisual C++6.0 で作ってるんですけど、 データの格納方法は完成したんですが、 データをそのまま使ってピクチャボックスに描くには不可能です。 なので、どうにかして、そのデータを使ってピクチャボックスに描きたいのですが どうしたらいいでしょうか? データは(0、0) 〜 (10000、10000)までの大きさです。 それをピクチャボックス(500、500)の大きさに描きたいです。 よろしくお願いします。
縮小して描きゃえぇじゃん つか、データの構造も知らさずにいったい何を言えと?
>>424 1ファイルの中にX,Yの座標点のデータが入ってるんですけど、それを順番に読み込んで地図を描くってやつなんです。
データも、画面も、サイズは決定してるんだから ・データの座標系を画面の座標系に変換して描画する ・(0,0)〜(10000,10000)サイズのオフスクリーンのキャンバスを用意してそこに一旦描画→StrechBltで縮小して画面に表示 好きな方でどうぞ
スレ違いだけどドット画は縮小に向いてないね 馬鹿の考えた仕様は根本から作り直した方がいいかも
馬鹿に馬鹿って言うヤツが馬鹿。
もうね、みんなバカなんだしそれでええじゃないか('A`;
430 :
デフォルトの名無しさん :2006/11/20(月) 20:58:20
vc++2005でz=cos(x+y)+sin(y)などの関数を描画したいんですけどMFCないからやっぱ無理?
いいえ
432 :
デフォルトの名無しさん :2006/11/20(月) 21:05:00
できるの?! おしえてっ!!
1. Windows API 2. .NET Framework 3. その他のGUIライブラリ
これ忘れていた。 4. Academic or Standard以上を買う。
435 :
デフォルトの名無しさん :2006/11/20(月) 21:19:40
結局金が要るのか・・・ 僕には無理なのか・・・
> 1. Windows API 無料。 > 2. .NET Framework 付いてるだろ? > 3. その他のGUIライブラリ 無料のもあるだろ。
画像ファイルに落として適当なビュアーで見る手もあるし、 Excelがあるなら、csvファイルに出力してもいいね。
VC6 で言うところの 表示 - デバッグウィンドウ - メモリ は 2003 でもあるですか。 あるならどこにあるのか教えて頂きたいす。
>>438 デバッグ→ウィンドウ→メモリ
もしかしたら、デバッグ実行してないとメニューに出ないかも。
ビルド後、プログラムを実行すると以下のような例外が表示されます。 xxx.exe の 0x7c958fea で初回の例外が発生しました: 0xC0000005: 場所 0x00000010 に書き込み中にアクセス違反が発生しました。 今のところ特に問題は発生していないのですが、今後何かしらの 障害になりうるものであるならば早急に対処したいので、このエラーに関して 解決法、もしくはなにか情報をお持ちの方いましたらご教授をお願いいたします。 環境:WinXP Pro SP2 VS2005 MFC使用、MDIアプリケーション
有名なコピペ
VC++6を使ってるんですけど、ピクチャボックスの原点を左下にしたいんですけど、 どうしたらいいでしょうか?
自分で計算しなさい
そこをなんとか!! 座標(100,100)ってやって、左上からの座標じゃなくて、左下からの座標点を取りたいんですけど、 そういう関数ってないですか?
>445 ヒント:CRectを返すメンバを探すこと
SetOrigin()
原点を移動するには左下の座標を求めないといけないからな 原点移動しないで自分で計算した方がapi呼ばない分コーディングが楽
APIでピクチャボックスの初期時の背景を白にしたいんですけど、 どうしたらいいんでしょうか? MFCだと CWnd *myP = GetDlgItem(////); CClientDC myDC(myP); CRect myCR; myP->GetClientRect(myCR); myDC.FillSolidRect(myCR, RGB(255,255,255)); この部分のAPI化です。 APIのスレが書けなくなっていたので、スレ違いだとは思いますが よろしくお願いします。
ほとんどそのまんまの名前のapi使うだけ
>>450 MFCのソース見てみろ。
それだけならAPIを薄くラップしてるだけだ。
454 :
デフォルトの名無しさん :2006/11/23(木) 15:20:39
ウィンドウを表示するMFC拡張DLLを作成しているのですが、 なぜかdeleteのところでエラーが発生してしまいます やっていることは単純で、グローバルな変数(CWnd*)を グローバルな関数(外部アクセスの関数)で作成するだけです その関数内でnewの前に変数がNULL以外の場合はdeleteするようにしています 調べたところ、エラーは必ず発生するのではなく、ウィンドウを×ボタンで閉じて そのウィンドウへのポインタをdeleteした場合にのみ発生しています なぜこのようなエラーが発生するのかご存じないでしょうか? また、このエラーに対処するにはどのようにすれば良いのでしょうか? 参考になるサイトなどがありましたら教えて頂きたいのですが・・・
455 :
454 :2006/11/23(木) 15:22:20
補足です グローバス関数は何度も呼ばれることを前提としており、 呼ばれる度に前のウィンドウを破棄して新しく作る仕様です 以上、よろしくお願いします
> このエラー > このエラー > このエラー > このエラー > このエラー > このエラー
457 :
デフォルトの名無しさん :2006/11/23(木) 15:30:06
エラーメッセージはコピペが基本
460 :
デフォルトの名無しさん :2006/11/23(木) 15:58:43
>>458 すみません
学校に行かないと環境がないので今は無理です・・・orz
>>459 ありがとうございます
参考にさせて頂きます
462 :
デフォルトの名無しさん :2006/11/23(木) 16:34:31
>>461 情報系がメインの学校ではないので分かる人がいません・・・
追加で質問させて下さい
ウィンドウがすでにDestroyされていることを判断する方法ってありませんか?
例えば、下のようにウィンドウのポインタを定義します
CWnd* pTest;
これをnewしたりしてウィンドウを作ったとします
そして×ボタンが押された(DestroyWindowイベントが発生)とします
その時に、pTestからDestroyされたということを判断したいのです
そうすれば現在の問題は解決できるように思っています
どうかよろしくお願いします
DestroyWindow() ないでポインタにNULLを代入して幸せになれそうです
464 :
450 :2006/11/23(木) 16:56:21
HDC hDC = m_pict1.GetDC()->GetSafeHdc(); HBRUSH hBrush = CreateSolidBrush(RGB(255,255,255));//ブラシの設定 RECT rect; ::GetClientRect(m_hWnd, &rect); ::FillRect(hDC, &rect, hBrush); すみません。同じ質問となるんですが、 こうしたら、ピクチャボックスの左上からウィンドウの右下までが白になってしまいました。 ピクチャボックスの全領域だけを白にするにはどうしたらいいでしょうか?
>>464 myP->GetClientRect(myCR);
::GetClientRect(m_hWnd, &rect);
クライアント矩形を取る対象が違うと思うぞ
ピクチャボックスの領域を取れ
>>467 すみません。どうやったら取れるんでしょうか?
すみません。お願いします。
469 :
デフォルトの名無しさん :2006/11/23(木) 20:08:23
C#のDataGridViewみたいな表形式のコントロールを使い VC++では作れませんか?
>>469 C++/CLIなどを使ってよいのならVC++でもDataGridViewは使える。
単に表形式の表示がほしいだけならMSFlexGridがある。
>>470 HWND hWnd = m_pict1.GetSafeHwnd();
というふうにして領域を取得できました!
ご迷惑をおかけしました。。
473 :
デフォルトの名無しさん :2006/11/23(木) 21:29:38
>>471 レスありがとうございます。
MSFlexGridををViewにどう貼り付けるのですか?
474 :
デフォルトの名無しさん :2006/11/23(木) 23:08:59
Ctrl+VでOK
475 :
デフォルトの名無しさん :2006/11/23(木) 23:57:34
VC++2005なのですが #include <string>で宣言して string taro; ってうってるだけなのにエラーがでる? どうしてなの? エラー内容は・・・・ エラー2error C2146: 構文エラー : ';' が、識別子 'taro' の前に必要です。 エラー3error C2065: 'taro' : 定義されていない識別子です。 エラー1error C2065: 'string' : 定義されていない識別子です。 です。わけわかめ。
>>475 std:string
もしくは
using namespace std;
でFA?
477 :
454, 462 :2006/11/23(木) 23:59:29
>>463 よく分からないのですが、自身へのポインタをNULLにするには
どうやったらできるのですか?
処理は全体的にはシンプルなものです
ウィンドウを1つだけMFC-DLLによって表示させたいだけです
再呼び出しされたら以前のを消して新しく再表示させたいだけです
CWnd* pTest;//グローバル変数 同じcppファイル内のグローバル関数からのみ呼ばれる
アプリから呼ばれるグローバル関数
{
if(pTest != NULL) delete pTest;//←ここを2回目に通った(呼ばれた)時にエラー発生(Windowが閉じられた場合のみ)
//生成して表示する処理(略)
}
ただ、メモリ関連で大きくつまずいています(これによって進めなくなりました・・・)
ちょっと前までは明示的な処理によるメモリ開放という考え自体が全くありませんでした
(前に使ってた言語ではガベージコレクションで勝手に開放してくれたので・・・)
478 :
デフォルトの名無しさん :2006/11/24(金) 00:05:55
>>476 さん
ありがとうございました♪
こんなのに何時間もツマヅイテいたのかorz
479 :
デフォルトの名無しさん :2006/11/24(金) 00:43:40
エラー1error C2664: 'void System::Windows::Forms::Control::Text::set(System::String ^)' : 1 番目の引数を 'std::string' から 'System::String ^' に変換できません。(新しい機能 ; ヘルプを参照) こういう表示がでたらどうしたらいいですか?
>>479 > (新しい機能 ; ヘルプを参照)
> (新しい機能 ; ヘルプを参照)
> (新しい機能 ; ヘルプを参照)
C++/CLIはC++とは別言語なので注意
>>479 文字通りstd::stringからSystem::Stringへは直接変換できない(暗黙の変換がない)。
std::string s;があったとしてこんな感じで変換できる。std::wstringも同様。
gcnew System::String(s.c_str(), 0, static_cast<int>(s.size()));
482 :
デフォルトの名無しさん :2006/11/24(金) 01:00:56
>>481 なんとかデバックできたけど、複雑ですね。
もっと簡単なコードで変換とかできないのですか?
>>481 さん
詳しく教えてくださると幸いです。
>>482 そういうときには俺様ライブラリを作ってその中に放り込んでおくんだ。
inline System::String^ ToSysStr(const std::string& s)
{
return gcnew System::String(s.c_str(), 0, static_cast<int>(s.size()));
}
484 :
デフォルトの名無しさん :2006/11/24(金) 02:10:07
>>483 ありがとうございます!
参考になります!
>>485 括弧の数が合わないとかそんなのじゃないのかな?
38-40行目の括弧が怪しい感じだ。
487 :
485 :2006/11/24(金) 02:45:08
>>486 }多かったっす。。。ありがとうございます( ̄∇ ̄)b
でも、出来た画像が真っ黒で・・。
合成は出来ませんでした。。
何か問題ありそうです。
for(i=0;i<256;i++){ for(j=0;j<256;j++){ R=body1[i][j][2];//逆 G=body1[i][j][1];//逆 B=body1[i][j][0];//逆 //if ( R < 0x40 && G < 0x40 && B >= 0x80 ) { if ( R < 80 && G < 64 && B >= 100 ) { R=body2[i][j][2]; G=body2[i][j][1]; B=body2[i][j][0]; } //}余分 new_body[i][j][2] = R;//逆 new_body[i][j][1] = G;//逆 new_body[i][j][0] = B;//逆 } } if ((fp3 = fopen("photo3.bmp","wb")) == NULL) printf("ファイルオープンが出来ません\n"); else{ fwrite(head1, sizeof(head1), 1, fp3); //fwrite(head2, sizeof(head2), 1, fp3); おいおい fwrite(new_body, sizeof(new_body), 1, fp3); fclose(fp3); } ねる
489 :
485 :2006/11/24(金) 02:57:19
>>488 出来ました!!超感動です!!
ありがとうございます!!!!
おまいら構造体のプレフィックスってどうしてる? クラスなら C メンバ変数なら m_ ポインタなら P 文字列なら状況により str って付けてるけど、構造体は S だと文字列みたいだから、 とりあえず全て大文字にしているけど、おもいらどうしてる?
>491 そうだね。逝ってくる
493 :
デフォルトの名無しさん :2006/11/24(金) 14:05:56
VC++ 2005ですが、 デバックのところの ブレークポイント- フィルタの意味がわかりません。 これはどういうときに使うのでしょうか?
ちょっと一息入れたいときにコーヒー飲むために使うんだよ。
キーワード ブレークポイント フィルタ処理
スプリッタウィンドウのペインを差し替えることって可能でしょうか?
馬鹿には不可能
経験者は語る?
可能かどうかを訊く奴には不可能な法則
500 :
デフォルトの名無しさん :2006/11/26(日) 01:54:53
VC++2005でチャットプラグラムを作り、それを踏まえてネットゲームを作ろうと思ってます。
ネットワークはネットで色々調べて概念だけはなんとかわかるようになったんですが、
実際プログラム作成しようとしても上手くいきません。
2005用に作成されたソースやコードではないためだと思いますが
ttp://stylefree.net/main/nprogramming/windows/windows2.shtml このへんのサンプルをコピペしてもビルドできません。
("stdafx.h"をインクルードしろって言われて、それをインクルードするとさらにエラーが増える)
2005でも実行できるようなネットワークプログラミング講座みたいな
サイトや書籍で参考になるものがあれば教えてください。
もしくは、その他何か解決できる方法があれば教えてください。
よろしくお願いします。
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
あぁ、なんか二重投稿になってる・・・すいません
503 :
デフォルトの名無しさん :2006/11/26(日) 02:55:47
Visual Stdio .NET 2003でソースコードを自動整列させることってできますか
チャットプラグラムなんて言ってるしな
506 :
デフォルトの名無しさん :2006/11/26(日) 09:23:02
ちゃっとってjavaかperlCGIじゃないの?
意味もわからず打っても指の運動にしかならないし、 コピペした方が間違えなくていい > さて今回はネットワークプログラミング入門と言う事で > ネットワークプログラミングの雰囲気に簡単ですが触れてもらおうと思います。 > 詳しい説明はしないので下にあるコードを実際に打ってみてください > (コピー&ペーストはしないで実際に打つ)。
508 :
500 :2006/11/26(日) 09:50:44
レスありがとうございます。 ネットゲームの中でチャットを使いたいんですよ。 本とかを読んでいたらネットワークプログラムを学ぶのに初めはチャットが適しているってあったもので。 検索してみたら同じエラーの対処法などが書いてあり、 cppファイルかプロジェクトのプロパティで「プリコンパイルヘッダを自動的に使用」をチェックするとありました。 しかし、2005にはそんなチェックはなく、「プリコンパイルヘッダを使用しない」をチェックしてもエラーが増えるだけでした。 ソースコードはコピペです。 手打ちでやった後ビルドできなかったのでコピペに切り替えました。
ビルドすらできない初心者だったら この辺からやってみろ int main( int argc, char *argv[]) { return 0; }
こっちのがいいか 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; } このままビルドしたら問題なくビルドできました
>>508 それはどっちもまともな対処法ではない。説明するのも面倒だから、とりあえず
新しいプロジェクトを(プリコンパイル済みヘッダを使わない指定をしないようにして)作り、
そっちのプロジェクトへ全てのソースコードを移せ。
513 :
デフォルトの名無しさん :2006/11/26(日) 10:21:18
新規作成→プロジェクト→Win32 コンソールアプリケーション
で、このときプリコンパイル済みヘッダのチェックをはずして作成、
>>500 のソースコードを全部コピペしてみましたが、やはりエラーがでました。
stdafx.hをインクルードしたり、stdio.hのインクルードを消したりしてみましたが
やはり結果は一緒でした。
そういう場合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じゃなくて他のところが悪いんでしょうか?
>>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
心優しいのになぜ、上から目線なのかしらん?
ツンデレ属性なんだろ
んじゃ、心優しくないVer.
>>515 エラーメッセージも書かない能無しは死ね。
520 :
500 :2006/11/26(日) 11:10:09
>>516 ありがとうございます!
うまくビルドできました!
#pragmaを設定していなかったのと、空白を削除していなかったのが原因だと思います。
無意味な空白があるとビルドできなかったりするんですね。
>>519 すいません。
あまりにも量が膨大なので、リンクしようにもアップが面倒だったんです。
521 :
500 :2006/11/26(日) 11:12:17
それからレスをくださったみなさん、どうもありがとうございました。 やっと先に進むことができます。感謝、感謝です。
無意味な空白が原因じゃねーよ 空白に使ってる が駄目なんだよ なら問題ない
523 :
500 :2006/11/26(日) 11:34:12
なるほど、" "(全角スペース)だと読み込んでくれないわけですね。 文字列以外のところで全角は使っちゃいけないってことか。 エラーの時に言ってた読み込めない識別子がありますってこれのことだったんですね。
>読み込めない識別子があります このエラーメッセージを最初から書いていれば一発でしたね!
525 :
500 :2006/11/26(日) 12:21:42
そうですよね! ・・・ごめんなさい(´・ω・`)
>>515 <iostream>とかライブラリのヘッダのインクルードは全てstdafx.hの中に書け。
そのためのstdafx.hとプリコンパイルドヘッダだ。
527 :
500 :2006/11/26(日) 13:40:28
>>526 そうだったんですか!
目からうろこです。
じゃあ上のサンプルの<winsock2.h>とか<conio.h>とかも全部まとめちゃうんですね。
マジここの人達優しすぎ (つД`)
('A`) こうしてどんどんドツボにはまっていくのであった
いくつもあるファイルを1つのフォルダに収めてifstream in(・・・)でファイルを出したいんですけど、 どういう設定をしたらできるんでしょうか?
先ずお前の脳を日本語モードに設定しろ。 話はそれからだ。
531 :
529 :2006/11/27(月) 06:22:14
失礼しました。 フォルダの中に入っているファイルを1つ指定して開きたんですけど、 ifstreamを使う場合、どうやったら指定ファイルを開くことができるんでしょうか? したいことは「ループして次々にフォルダの中のファイルを開いていく」です。 できたら、指定ファイルを検索して開きたいです。
>開きたんですけど、 >ループして だから日本語で書けと。
質問です! APIを使ってピクチャボックスに絵を描いているのですが 絵を表示させるのが遅い場合、途中で強制終了することってありますか? やっぱりどっかがおかしいからそうなるんですかね?
534 :
533 :2006/11/27(月) 08:05:19
すみません。自分のミスでした。
質問です。 ビューが生成されているかどうかをしりたいのですが どうしたらわかるのでしょうか?教えてください
最近日本語でおkが増えたな
質問なんですけど CString ss = "可変長文字列 250件"; のようなデータがあったとして、数値データ(今回だと250)を 取り出す時にどのようにしたらよいのでしょうか? isdigit()なんかで一文字ずつ比較すればできそうですが データの長さによってはかなり検索が膨大になりそうなので なるべく簡易にしたいのです。よろしくお願いします。
一文字ずつ比較しないと見つけようがない。
一番最後に見つかったスペースからn桁とればいいんじゃないの?
// >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 レスありがとうございます。 入れ違いになってしまったようですね。 空白は場合により増えたりします。ですが 必ず一つはあるので空白を利用する方法も考えてみます。
>>542 例えばShiftJisで2バイト文字しか扱わないのであれば、単純に%2cで出力する手もある。
或いは、%.2sでもいい。
都合のいいメソッドがあったとしても 自分の代わりにその中の人がやるだけ
VC++EEを使ってるんですが、描画などの機能はAPIを使ったほうがいいんでしょうか? それとも、VC++EEの機能を使った方がいいんでしょうか? どちらも一緒のような気もするんですけど、 それらの利点や欠点などもあれば、上記の質問と一緒にお答えいただきたいです。 お願いします。
自分が使いたい方使えよ 利点欠点なんか自分で使わないとわからん
VC++EEの機能って何だろう?
MFC とか .NET とかのこと言ってんのかな?
あぁ、なんかそんな予感がするな
Express EditionではMFCは使えなかったはず
今、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 仕様なんで・・・。 それと、なぜ動的に作成するかと言いますと DBから持ってきたデータによっていくつ作るか 変わるからです。
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#ではそんなことすらできないんですか?
となると、要望の多い業務アプリにはやはり不向きなんですね
そんな事ここで言われても
あるボタンを押したときに、新しいダイアログを表示するプログラムで、 新しいダイアログの閉じるボタンを非表示にしたいと考えています。 どうすればよいのでしょうか。
何も試さず考えただけとか嫌だよね……(´-`)
試してみてるんですがわからないんですよ。 CMainFrameでメインウィンドウはできたのですが、子ダイアログの方法がわかりません。
その「閉じる」ボタンとはなんのことだね。
とりあえず思いついたのを適当に教えてやってもいいけど お前が試してみたのと同じ方法だったら嫌だし こうやってみ それはもう試したけどだめでした
閉じるボタンを使わせたく無いだけなら色々方法あると思うが
質問なのですが、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 おかげさまで解決しました、ありがとうございました。
20分でスタートアップコード書けるような奴がそんな質問するのか?
ボタンコントロールの表示はできたのですが 作成したボタンのクリックイベントの取得ができません。 どのようにしたらよいのでしょうか?教えてください。
>>566 returnしか書いてなかったりしちゃったりして
ダイアログバーはDDX使えなかったりいろいろ不便だよな どうせいじるなら自作した方が便利だぞ
VC++2005EEを使っています。 ウィンドウとコンソールを同時に使う方法を教えてください。 リンカで/SUBSYSTEMをつついてみたり WinMainの中でprintfからConsole::WriteLineとReadLineまで 色々呼んでみましたがダメでした。
AllocConsole()
AllocConsole はそのままだとstdio系は使えないから、 エントリーはmain()でウィンドウ作ったほうが楽。
>>570 /SUBSYSTEM:CONSOLEでいけると思うけど、指定の方法が悪いのでは。
あとから edlitbin /SUBSYSTEM:CONSOLE xxx.exe で試してみたらいい。
>>573 それってそのままstdoutとか使える?
575 :
570 :2006/11/28(火) 19:52:59
とりあえずAllocConsole()で急場はしのげそうですが、
色々やってみたいと思います。ありがとうございました。
>>574 は別の人です。
/SUBSYSTEM:CONSOLE /ENTRY:WinMainCRTStartup じゃだめかい?
俺ならコンソールプログラム(のプロジェクト)を作って、その中でウィンドウ作る。 インスタンスハンドルはGetModuleHandle(0)、WinMainの最後の引数はSW_SHOWDEFAULTで代用。 コマンドライン引数はargc, argvのほうが便利。(どうせグローバル変数にもあるけどさ)
コンソール付けると右上の閉じるボタンで強制終了されちゃうぜ? ウィンドウメッセージ取れないぜ?
std::cout << "押すなよ!閉じるボタン絶対押すなよ!" << std::endl;
std::cout << "だ が 断 る" << std::endl;
581 :
デフォルトの名無しさん :2006/11/29(水) 17:16:32
#include <iostream.h>が開けないって出てくるんだけどどういうこと?
iostream.hは古い仕様。
583 :
581 :2006/11/29(水) 17:22:44
どうすりゃいいの〜
現在の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
ちったぁ頭使えよ
最後の出力で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設定になっていたことが原因でした。
VC++(.net 2003)で勉強中なのです。 VC++とは、関係ないかもしれませんが、 sizeof(long double) * 8 で出力すると64ビットになるんですけど これはこれでいいんですか? Borland C++ Compilerで同じ事をすると80にちゃんとなるんですけど。
おk
VCにおいてlong doubleはdoubleと同等のサイズ MSDNのリファレンスにも「same as double」とちゃんと書いてある 一方BorlandC++ではlong doubleは10バイト使ってる
intは16ビットであるべきだよな。
ありがとうございます。 なにか、テキストどおりじゃないのが釈然としませんが、・・・ 大人の世界はいろいろとあるでしょうからそこはあきらめてVCとお付き合いしていきます。(T-T
規格上○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さんは、拒否された。
VC++は、修飾子 + [char, int, float]でなんとかなると・・・・ わかりやすいような・・・・わかりにくいような・・・・ でも・・・・、printfのformat指定子と一致するようにしたのかな?・・・・ まぁいいや! みなさんありがとうございました。
>>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は存在しない。
まぁ、PCじゃIntelが幅利かせてるからな
605 :
デフォルトの名無しさん :2006/11/29(水) 22:50:18
数週間ほど前からVC++を触り始めたばかりの初心者です SDIモードで作成したMFCウィンドウにコントロールを追加する方法が分かりません 以前Javaをやっていたので、基本的にコントロールのインスタンスを生成して配置して表示すれば良いということは分かります しかし、それをどこで行えば良いのかが分かりません ドキュメントビューアーキテクチャ?という独特な形式になっているのと、MFCで隠れた部分が多いのとでごちゃごちゃしている ように思えてしまい、どこにコードを記述して良いのかさっぱり分かりません(コンストラクタでやってみたら失敗しましたし・・・) この問題を解決するアドヴァイスまたは参考になるサイトについての情報を頂けないでしょうか? また、新しくウィンドウ(ダイアログではなく)を追加したい場合にはどうしたら良いのでしょうか? Javaの場合は単にFrameを継承したクラスのインスタンスを生成して表示メソッドを実行すれば良かったのですが、 VC++で同じようなことをしてみても上手くいきませんでした(アクセスがどうとかというエラーが出て落ちます・・・) やはりドキュメントビューアーキテクチャやMFC内部が関係しているのでしょうか? 解決に結びつくようなアドヴァイスを頂けないでしょうか?
コンストラクタだとウインドウがまだできてない 少なくともCWndのメンバ関数ぐらいは全部目を通しておいた方がいい。
まずJavaのことをきれいさっぱり忘れよう
CString ss[MAX_LENGTH]; MAX_LENGTHは最大いくらまで代入することができるんですか?
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を使えばいいと思うんですけど、 間にスペースとかコンマが入ってるときはわかりません…。 どうかよろしくお願いいたします。
そういうCString初めて見た
プログラミングをやってみようとVC++買ってきました。 ハードディスクに空き容量が足りないとメッセージが出てきました。 どうすればいいですか?
あきらめろ
パソコンもまともに使えないやつがVC買ってもしょうがない
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
一瞬フリーズして、それから「う〜んと、それぐらい自分で解決できないなら止めた方がいい」って言ったんだよ。
そしたら、涙流しながら激怒されて・・・・
女の子は・・・その涙流してるシーンだけで「教えてあげればいいじゃん」とかいいやがる!
事情を説明しても「誰でも最初は初心者」とか・・・・得意げに語り出すし・・・・・・・もう、おれ泣きたかった
スレ汚しごめんなさい。
ちょっと気が楽になりました。
>>608 配列サイズ(!=要素数)が0x7FFFFFFFを超えないこと。
コンパイルエラーC2148を参照
ハードディスクの中のエロ画像全部消せ、とか答えてやれ。
>>603 そういえば16ビット時代のMSCはlong doubleは80ビットだった。
32ビットのコンパイラで64ビットになって何でやねんと思った。
>>616 お前は泣いていい思う。
周囲が言いたいことも分らんのでも無いんだが……現実はなぁ。
621 :
605 :2006/11/30(木) 00:05:51
>>606-607 レスありがとうございます
それで、どこで生成すればよろしいでしょうか?
ピクチャボックスの描画時に起きた現象についての質問です。 その現象なんですが、何も設定していないピクチャボックスにピクチャボックスの領域を越える座標点の図を描きました。 実行してウィンドウの外まで越えることはなかったのですが、ピクチャボックスからはみ出て、ウィンドウの終端まで描画される事となりました。 そこで、ピクチャボックスのサイズでクリッピングをして解決しました。 で、今日そのことを大学の先生に話したのですが、ピクチャボックスの領域を越える描画をした場合は自動的クリッピングするという事と、 ピクチャボックスは専用のメモリを割いているから領域を越える事はない、と言われました。しかし、確かそうだった、と言われたのでココに書き込ませていただきました。 要はピクチャボックスに描いたのではなく、画面に描いた事になっているのでは?ということでした。 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点の問題点を教えて頂きたいと思います。 まだまだ若輩者ですが、今後のためにどうかよろしくご指導お願いいたします。
つ CS_PARENTDC
開発環境 VC++.net スライダをデフォルトでVisible Falseにしておいて あるボタンを押すと表示するようにしたいのですが、どうすればいいんでしょうか? CButton *btn = (CButton*)GetDlgItem(IDC_BUTTON1); btn->EnableWindow(true); ボタンであればこのようにすればいいのはわかるのですが。
>>624 表示したいのか有効にしたいのかはともかく、
ShowWindowもEnableWindowもCWndのメンバ関数だから。
後、MFCでダイアログのコントロールにアクセスしたいなら、メンバ変数にしておくと楽。
方法は「ダイアログエディタ メンバ変数」でVSのヘルプを検索しる。
>>621 ,624
使おうとするクラスやライブラリのリファレンスにすら目を通さない輩はやる資格無し
帰れ
>>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
>赤丸+バッテンのエラーメッセージが表示されてプログラムが落ちました デバッガ使えないの?
エラーメッセージの重要さを理解してない奴多すぎ
VC++6.0です。 実行ファイルを常に手前に表示させたいのですがどうすればよいのでしょうか。
追記です。 FormViewで開発を行っているのですが、 SetWindowPos( &wndTop, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE ); と記述してもダメでした。
wndTopMost
>>634 表示の順番を拡張子順にして、
a、b、c、dで始まる拡張子のファイルは
別ディレクトリに移動させる。
638 :
デフォルトの名無しさん :2006/12/01(金) 11:18:34
質問です。 今組み合わせを考えるプログラムを作ろうと思っています。 例えば1円玉、5円玉、10円玉、50円玉、100円玉、500円玉のチェックボックスを作り、 これで1000円を作る組み合わせは何通りか、そしてその内訳はどんなものかを表示するものです。 このとき、チェックボックスでチェックされていないものは除外するものとして、 まず "あなたの選んだ硬貨は ○と○と○ です" みたいな出力の仕方がわかりません。 ifでくくっていってわざわざ5!/2通りのプラグラムを組むのは違うと思いますし。 それから、その検索ルーチンも硬貨がふたつだけならなんとかなるんですが、 3つ以上だとどのように組んだらいいか手に負えません。 ヒントだけでもいいので上のプログラムの手ほどきをしてもらえないでしょうか?
「一円玉」とか「五円玉」とかの文字列を一つずつ接続していって全体の文字列文を作ったら?
ああ、出力の仕方がわからないのか。 とりあえずMessageBox() でいいんじゃね?
もうこれでよくね? s += ((is_a) ? (a) : ("")); s += ((is_b) ? (b) : ("")); s += ((is_c) ? (c) : ("")); ・ ・ MessageBox("あなたの選んだ硬貨は " + s + " です");
うるせえ、獲物が来たら骨までしゃぶり尽くすのがこのスレの流儀だ。
644 :
デフォルトの名無しさん :2006/12/01(金) 14:53:58
作業ディレクトリ外のファイルについて質問なのですが ウィンドウクラス(CWindow)を他のプログラムでも利用できる様に 作業ディレクトリとは別に置いて [ツール]-[オプション]-[ディレクトリ]で インクルードファイルとソースファイルを指定しましたが プリコンパイル済みヘッダーや、継承しようとすると C2065定義されていない等のエラーが発生してしまいました 別ディレクトリにあるファイルを継承等する場合 他にやるべき事があるのでしょうか? 前方宣言も効果なしでした。
ヘッダからほかのヘッダを参照のしかたがまずいとか
>ヘッダからほかのヘッダを参照のしかたがまずいとか 日本語でどうぞ。
定義されていないというエラーだったら、インクルード自体はうまく言っているという証拠では? インクルードがうまくいかないのだったら、ヘッダが見つからないというエラーになるはず。
648 :
644 :2006/12/01(金) 16:38:16
mainと継承先のヘッダーとソースに #include "CWindow.h" を加えないとエラーが出てしまうようで 直接置いてると継承先のヘッダーだけでいいのですが ヘッダーでインクルードしてるのに ソースでもインクルードとか、おかしいな。 後、ツールでディレクトリを指定しなくても動作する 2度ビルドするとエラー(警告ではない)が消える 分からん。頭冷やします。とりあえず再インストール
649 :
644 :2006/12/01(金) 16:45:48
×直接置いてると継承先のヘッダーだけでいいのですが ○直接置いてると継承先でインクルードするだけでいいのですが
だから参照のしかたがまずいとか
651 :
644 :2006/12/01(金) 17:21:38
>>650 [ツール][略で上から2番目に設定したら動いた!
何回か作り直してみます。
652 :
644 :2006/12/01(金) 17:31:27
無事解決しました。有難うございます。 [ツール][オプション][ディレクトリ]の設定において 出来るだけ上に指定してやる事で 継承先にヘッダーをインクルードするだけでいけました。 プリコンパイルの方はまだやってませんが
根本的に間違ってるけど、本人が満足してるようだし よかった
>>618 ,
>>620 取りあえず、じゃぁ初心者ということでパソコンの勉強から始めようね
と、パソコン技術体系 OS編とハードウェア編をあげて、
e-wordのサイトを教えました。
あいつには理解できないだろうが、
「これで、中学生以上なら独習できるよ。」と言い放ちました。
なんか、すっきりした。
関数ポインタで、 関数名(例えばfunc)⇒その関数へのポインタ ですが、'&'をつけて(&func)も、 別にかまわないのでしょうか? ちなみにvisual C++ 2005 EEでコンパイルしたところError&Warningはありません。
構わない。 逆に呼び出すときに*を付けても構わない。ただし演算子の優先順位に注意。
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 システムの時刻と乱数が関係していることが影響しているらしいのですがどうすれば 正常に毎回違う値が出力されるようにできるのでしょうか?
そんな風に同じ数字が並ぶのは、いくらなんでもお前のプログラムにもどこかおかしいところがあるからだと思う。
>>656 そうですか。(WEB上でどこかのHPにそれを説明していない
か探してみたんですが、見つからなくて不安でした。)
そう言いきってもらえると気持ちいいです。
ご指摘ありがとうございます。 具体的なプログラムは以下の通りですがどこかおかしい点が有ればご指摘お願いします。 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(); の部分をループの外で宣言することで問題は解決されました。 ご助言下さった方ありがとうございました。
VC++を始めて2週間。やはり本は2.3冊揃えたほうがいいのかな? サイトを回っても超初心者か中級、上級用の情報しかない・・・
いまさらな質問だけど、BOOLとbool、TRUEとtrueを混在させると良くないかな。 てか、自分で書くプログラムは全部bool、true/falseに統一したいんだけどな・・・ 大文字はShift押すのがめんどい。普段C#やってるし・・・
bool値なんてそんなに多用しないだろ。
665 :
663 :2006/12/02(土) 01:04:04
え、メソッドの戻り値とかによく使うけど。
>>663 > 大文字はShift押すのがめんどい。
変換→Shift、無変換→Ctrl にキーをリマップすると楽だぞ
っCaps Lock
Caps Lock には _ を割り当てている
VARIANT_BOOLが気を付けないと一番一番はまる。VARIANT_TRUEは-1。
670 :
663 :2006/12/02(土) 16:15:08
普通にif分で比較する分にはtrue、TRUE、false、FALSEが混在して入ってても問題なく通るよね? VARIANT_BOOLか・・・今、COMまわりやってるから、なんか見落としてそうだ。。。
質問です!! 最近、VisualC++をするようになったんですけど、 なんかAPIというのと、MFCがあるみたいなんですが、 APIを使って勉強です。 ここで、ちょっと困ったことが・・・・ピクチャボックスに簡単な図を書いたらピクチャボックスをはみ出してかかれるんですけど、 これをどうにかしたいんですが、どうしたらいいですか?
672 :
671 :2006/12/02(土) 17:41:09
あっ 勉強です>勉強中 に訂正ですw
upして。
671と同じ質問をどこかで見た
>>671 > これをどうにかしたいんですが、どうしたらいいですか?
適当にやりたいようにやってそのまま死んでくれ
まったく同じじゃないが、
>>622 がそのまま解決に導いてくれそうだな
普通にやったらはみだすわけがない。 むしろはみ出す方が高度なテクニックが必要
あっ 本当ですねw ありました☆ これで一度やってみます! ありがとーございました〜
>>670 if (b)のようにしたり、false系との比較は、混在してもコンパイルできてしまうし、問題なく動く。
bool以外でture系との比較はまずい。
>>622 ココの所で書かれている事でお聞きしたいんですけど、
これってピクチャボックスに書いてるんじゃなくて、ウィンドウに書いてる事になるんじゃないですか?
一般的にピクチャボックスに書くときってどういうコードになるんでしょうか?
>>680 外から書こうとした時点で微妙に間違っている。
ピクチャボックスをサブクラス化して、
OnPaintをオーバーライドして描画するのが本来のやり方。
>>671 まず、紙に書いてそれをスキャンするといいよ。
そうするとはみ出さない。
すみません。ピクチャボックスのサブクラス化というのがわかりません。 一般的な方法を教えてるようなサイトがあれば、教えてもらえませんか?
サブクラス化を一般的でないとのたまうきか。
>>684 すみません。勉強不足なんで、勉強しようと思いまし・・・。
教えてもらえないでしょうか?
本買え それで勉強しれ ネットで手に入る知識だけでやろうなんざ10年早い
まず自分で勉強してくれ。 どれも基本的な事だし、文字でしか伝えられない掲示板より イラストとか写真で解説してあるサイトや本で勉強したほうがいいよ。
ヤフーファイナンスから株価のデータをダウンロードするプログラムを作りたいのですが、 参考になるサイトや書籍等がありましたら紹介してください。
VC関係あるのか?
まったくもって関係無いな
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
ありがとうございました☆ 本買います!
メニューバーから [表示]−[その他のウィンドウ]−[出力]で消えます。
そもそもwarningは無視してかまわん
CPadみたいなの無いですか?
CPadのどんなことを求めているのか。
iPodじゃだめか?
699 :
勉強中 :2006/12/03(日) 08:42:19
Visual C++ 2003 SP1をインストールしたら エディターの1行目が変になりました。
かわいそうに
VCのエディタについての質問です。 関数の「定義位置を表示」からその定義に飛んだ後、 元の場所に戻りたいのですが、どうすればいいのでしょうか? 違うファイルならCtrl+Tabで戻れますが、 同じファイル内だった場合は、ちょっと参照したいだけなのにすぐに戻れなくなり、 いちいち元の場所を検索して戻っています。 どうにかならないでしょうか?
702 :
691 :2006/12/03(日) 12:18:32
>>693 あっはっはっはっは。
いや、私は視界に入れてないんでいいんですけれど。w
>>694 確かに警告の内容からしても無視していいような気もしているのですが。
消せる物なら消したいな、と思ってまして。ダッテ アレガ 200クライ デルンダモン
お二方とも、ありがとうでした。
質問するスレを選んだ方がいい。
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 調べてみたら、localtime関数を使用したコードで毎回出力されます。
(環境の問題でしょうか?)
MSDNライブラリをC4996で調べる、という考えは浮かばないものかね。
>>707 ありがとうございました。
「#pragma warningを使う」方法と
「_CRT_SECURE_NO_DEPRECATEを定義する」方法で
警告がでなくなることを確認できました。
なぁ、普通はF4押してF1やるだろう?
本を買ってみたんですけど、やっぱりはみ出しました。
>>622 のようにはみ出した部分はクリッピングしないとダメなんでしょうか?
712 :
711 :2006/12/04(月) 11:18:01
すみません。訂正です。 のようにはみ出した部分は::SelectClipRgn()を使ってクリッピングしないとダメなんでしょうか? 失礼しました。
>>712 クリッピングしなくてもはみ出ない。
君のコードが間違ってるだけ。
>>712 やっぱりそうなんですね。
ありがとうございました。
715 :
714 :2006/12/04(月) 12:36:12
>>713 やっぱりわかんないです。
あの、どういうコードを書くのか、教えてもらえませんでしょうか?
どういうコードを書いたらはみだすか知りたい
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);
というふうに書きました。
理由はわからんが、CWindowDCならはみ出ない。
>>718 つまり、自分が書いたコードでも本来ならはみ出すことはないって事でしょうか?
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 { 何かいろいろ }
>>720 ちょっと意味が理解できてないような気がしますが、
つまり、ウィンドウのクリッピング領域をピクチャボックスのクリッピング領域にセットすることになるから、
はみ出してしまうって事になるんでしょうか?
>>723 そうでした。ありがとうございます。
てことは、同じような図を描くことになると、
723さんなら、GetWindowDCを使って描かれるって事ですか?
違ってたら、簡略でいいのでコードを書いていただいてもいいでしょうか?
これが最後なのでお願いします。
質問です。 あるコントロール上でマウスカーソルが○秒以上停止 していた時にイベントを発生させたいのですが どのように記述したらよいのでしょうか? 環境:VC++2005 MFC
自分で判断する
>727 自分で判断すると言うことは マウスカーソルの停止時間を取得して 判定するのでしょうか? マウスカーソルの停止時間って 取得できるんでしょうか?
ウィンドウ上でマウスが動いけば必ずWM_MOUSEMOVEが来る マウスポインタはウィンドウ上にあるが、動いてない場合は来ない おk?
>729 なるほど・・・。 つまりWM_MOUSEMOVEメッセージが ○秒以上来なかったらって判断すればいいわけですね。 ありがとうございます。
>>725 ありがとうございました!
おかげで、目的の物ができました☆
ただ、くぼみと境界線を選択してたら、
右上から右下に、
左下から右下に、若干のズレが生じました。
これってくぼみの部分が影響してるからなんでしょうか?
まぁそれだけじゃ完璧じゃないが、後は自分で考えなされ
>>732 そうですねw
ここまでお付き合いいただき、ありがとうございました!
>>726 TrackMouseEvent(または_TrackMouseEvent)とWM_MOUSEHOVER
コントロール上にある時だけ必要なのにTrackしてどうすんだよハゲ
736 :
734 :2006/12/04(月) 20:06:31
>>735 TrackMouseEvent()でウィンドウハンドルと時間を設定しておけば
コントロール上で止まってたらWM_MOUSEHOVERくるけど。
なんか間違ってること書いてたら訂正するが・・・
>>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からガリガリ自前で書いていく?
キャストについて教えて下さい。 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型への変換ってどうやってやるんですか?
たぶんコンストラクタ 標準C++の質問ならC++スレへ行った方がいいよ
745 :
質問 :2006/12/05(火) 14:13:46
おまえは小学生か それぐらい自分で考えろよ
747 :
質問 :2006/12/05(火) 14:18:54
すみません。(ここもC++だと思ったので。スレッドが多すぎてよく分からないんです。)
ここは、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 スキップ ==========
#include "stdafx.h" あるいは、プロジェクトを作るときに、空のプロジェクトのチェックを入れておく。
751 :
749 :2006/12/05(火) 18:20:55
>>750 空のプロジェクトにチェックを入れることで「Hello!」の文字が表示されました、
ありがとうございます。
MDIアプリケーションで子フレームを作成するとメインフレームの[ウィンドウ]メニューに その子フレームのタイトルが追加されますが、その子フレームのタイトルを変更する 以外にメニューの表示名を変更することってできますか?
使ってるフレームワークがわからんからなんとも
MFCのソースみたけどたいしたことやってないよ
755 :
デフォルトの名無しさん :2006/12/06(水) 04:10:05
3×3行列の転置行列ってどうやったらいいですかね?
>>752 そんなアナタに、WM_MDISETMENU
IQ高い猿は踏み台を使ってバナナ取れるけど、 IQ低いと3×3行列の転置行列さえ途方にくれる。
さあ、はやく割り箸詰め作業に戻るんだ i | | | _____人__/ i_,,, r´_ _〉 ((テヽ!´ _ _ /_ _j ゝ_i  ̄ |  ̄ i ゝ ヽ (_、__j_)ヽ ノ , イ ヽ、 ii / / \ ヽ =ニ= / / \ `ーj---‐i´i\ \/ !j \ _ ,,,,_ /\ \ ,c、.c、 ___/´ 、、ヽ/i :|三三三三三三三\.ヽ.ヽ二l // \ \/ .i / ,.-、-、| |: | | | 、\ \ \! |:| ! | ヽ_,r.'\rj)、rj) !| | \___/ / | / / / | |
760 :
デフォルトの名無しさん :2006/12/07(木) 21:32:47
ド素人です
ttp://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N21 このチャットのサンプルをコピペしてもコンパイルできません
環境は
エディタ =VS2005 standard edition VC++
OS = XPsp2
で
警告が1つで
「ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください」
ってやつと
エラーメッセージは3つありますがどれも同じ
「指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。」
ってやつです
lstrlen とか lstrcpy っていう関数を使うところでエラーになってるみたいなんですが
どのように対策すればいいかご教授お願いします
>>760 プロジェクトのプロパティを開いて構成プロパティの全般にある文字セットをUnicodeからマルチバイトに変更。
763 :
デフォルトの名無しさん :2006/12/07(木) 22:47:32
>>761 すいません、ちょこっと手直し入れてるんで行数は当てにならないんですよね
えーと、
StrLength = lstrlen( Message ) + 1 ;
lstrcpy( ScreenString[ i - 1 ], ScreenString[i]);
lstrcpy( ScreenString[StringY], AddString );
この関数のところでエラーが出てるみたいです
基本的にこの関数のところでは手直ししていません
>>762 こんなエラーがでました
libjpeg.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_execute_transformation が関数 _main で参照されました。
libjpeg.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jcopy_markers_execute が関数 _main で参照されました。
libjpeg.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_adjust_parameters が関数 _main で参照されました。
libjpeg.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_request_workspace が関数 _main で参照されました。
libjpeg.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jcopy_markers_setup が関数 _main で参照されました。
libjpeg.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _write_stdout が関数 _main で参照されました。
libjpeg.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _read_stdin が関数 _main で参照されました。
libjpeg.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _read_scan_script が関数 _parse_switches で参照されました。
libjpeg.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _keymatch が関数 _parse_switches で参照されました。
おもちゃじゃないんだからさ
>>763 リンクするライブラリが足りないんじゃね。
visual c++ 2005 expressを使ってるのですが 過去に作ったC言語のソースをどうやって利用するのか教えてください。 ソースは開けるんですけど、実行することができないです。
初心者だったら入門書でも買って勉強すればいいよ 勉強もしないで適当にやってみたけど、できないから掲示板で質問 そんなやつに教えてやるだけ無駄
>>766 MSDNの「Visual C++ ガイド ツアー」を読め
>>760 <windows.h>をインクルードしろ。lstrlen/lstrcpyなんかはその中で宣言されている。
素人は黙ってた方がいいと思うよ
>>760 のやつは馬鹿でも簡単にゲームがつくれるライブラリらしいけど
馬鹿にはやっぱり無理のようだな
タスクマネージャのようにプロセスのメモリ使用量を監視するソフトを組みたいんですけども プロセスのメモリ使用量ってどうやって調べるのでしょうか なんか良い本とかありますか?
まぁなんつーか DXをやんわりと包むライブラリがあるだけで作れるゲームなんて 無くても作れるゲームだけだし
_ui64toaでULONGLONGを文字列に変換できるのは よいのですが、逆は関数がみあたりません。 なんかよい方法はないですか? vc++6.0
std::istringstream使えないか? だめなら、_strtoui64、sscanfの書式%I64uなんかがVC 6でも使えると思う。
cppファイルは実行ファイルではないので実行できません
>>778 実行しないでどうやって表示させるんですか?
つ CINT
>>780 関数やソフトではなく使い方が知りたいんですが・・・
>>781 >>768 次スレのテンプレには
| 三′ .._ _,,.. i三 |
ト、ニ| <でiンヽ ;'i"ィでiン |三.| MSDNも読まずに質問とな!
', iヽ! 、 ‐' / !、 ーシ |シ,イ
を追加すべきだな。
>>782 読んだけど俺の問題の解決になるようなことは何一つ書いてない
もうええわ
質問する側の説明手抜きだから どうやったらそんな状況になるのか理解不能 掲示板だから何やったか見れないのが残念
>>777 エスパーになってやろう。
今のVC++はプロジェクト作らないとビルドできないぞ。
下のページではプロジェクトを作らなくてもビルドできた古いバージョンを想定して書かれているようだ。
PictureBoxのサイズを途中で変更したいんですがどうしたらいいんでしょうか? Basicだとpicture.Widthやpicture.Heightで変更ができるんですが、VC++にはないようで・・・。
コントロールもウインドウだから ウインドウサイズ変更で調べればいい
コントロール サイズ変更 でぐぐったら1発でみつかるな
>>787 >>788 ありがとうございます。
そうだったんですか。
ピクチャボックス サイズ 変更って調べたときは出なかったのに・・・コントロールなんですね(笑
1発でした!
.net2005ですが、WindowsFormアプリで追加したクラスから listBoxにアイテムの追加等を行うにはどうしたらいいでしょうか?
listBoxの追加用メソッド使えばいい
ダイアログリソースで設定した各コントロールの サイズ、位置、フォントが、プロパティシートに割り当てて 表示したときに変わってしまいます。リソースで設定した 状態を維持したまま表示するにはどうしたらよいのでしょうか?
リソースでコントロールにフォント設定できたっけ?
失礼しました。フォントに関してはコントロールではなく ダイアログそのものの設定です。
MDIアプリケーションで開発しています。 実行するとメインフレーム+チャイルドフレームが表示されますが、 そのときメインフレームのメニューである[ウィンドウ]メニューに チャイルドフレームのタイトルが自動で追加されています。 このメニューを消したいんですがどうしたらよいでしょうか?
またお前か 自分でMFCのソースも読めないなら贅沢言うな
797 :
デフォルトの名無しさん :2006/12/12(火) 21:46:45
VS.net2003のVC++でMFCを使ってプログラムを作っております とても困ったことになったので、どうかお知恵を貸してください 状況は以下のようなものです CWndクラスを継承して作成されたコントロール(標準ではなく)があります そしてそのヘッダファイルとリブファイル、DLLファイルだけが提供されています このコントロールは自分でメンバ変数として定義してCreateすることで使うことができます しかし、そのコントロール上でマウスがダウン/アップしたなどのメッセージを受け取る 方法が分からなくてとても困っているという状況です コントロール関連の大まかな処理の流れとしては、 ヘッダ内でメンバ変数として定義 ↓ OnInitDialog内で生成&初期化&表示 ↓ メッセージ受け取りで処理 これだけなのですが、この一番下の処理だけがどうしてもできません 普通のコントロールであればプロパティウィンドウを使ってメッセージ処理の定義?が できるのですが、このコントロールではできません メッセージマップと書いてある辺りが怪しいとは思うのですが、リソースエディタでダイアログにペタペタ貼って メッセージ処理を追加した時に自動生成されるコードと同じようにヘッダとCPPに書いてみても駄目でした 周りに聞けるような人がいないので途方にくれております かといって、これを使わないというのは無理です(とても自作や他で代用できるようなシロモノではないので) 何かアドヴァイスまたは参考になるようなサイトを教えて頂けませんでしょうか・・・ ※なお、諸事情によりそのコントロールの開発者に直接聞くことはできません
Visual C++ 2003で、 タブと全角スペース だけ 表示したいのですが。 無理ですか?
>>797 CWnd::SubclassWindow を呼びつつ、
プロパティウィンドウでメッセージ選んでけばOKだと思う。
>>798 WhiteSpace でも始めるの?
カタカナで「リブファイル」って言うヤツ初めて見た
>>799 いえ、普通のエディターなら全角とタブと改行とか細かく表示設定できるのに、
なんでVCのエディターは出来ないのかなぁ〜〜と。
外国製ソフトだと、まともに日本語扱えなかったりするけど
>>801 の言う普通のレベルがすごく世間とズレてる気がする
804 :
デフォルトの名無しさん :2006/12/13(水) 22:45:32
質問です VC++でWindowsフォームアプリケーションからゲームを作ろうと思っています フォームにピクチャボックスを設置する時にいらない部分は透過させたいのですが 画像に透明色を塗ってもピクチャボックスの場合は透過しません ラベルとかボタンの場合は透過するんですが、どのような処理を行えばいいのでしょうか
805 :
デフォルトの名無しさん :2006/12/13(水) 22:56:44
806 :
デフォルトの名無しさん :2006/12/13(水) 23:05:30
できればDirectXを使わずに行きたいのですが やっぱりピクチャボックスの透明色を透過させるのは無理ですかね?
>>804 の後半2行が良くわからんけど、
-LayeredWindow
-DIBで自前で頑張る
808 :
デフォルトの名無しさん :2006/12/14(木) 01:11:55
後半2行はFormのプロパティでTransparencyKeyっていうのが透明色らしいんで 設定したその色でラベルやボタンのフォント、もしくは背景色にすると透過するんですよ LayeredWindowはMeでも大丈夫ですかね? DIBは今の自分の技量じゃとてもじゃないけど実装できそうにないです 素直にDirectXかなぁ
.NETの話だろ? Bitmap.MakeTransparentとかで透過情報を持たせれば 描画時に勝手に透過処理されるんじゃないの?
ありがとうございます Bitmap.MakeTransparentでなんとかできそうです ちょっと使い方わかんないけど、試行錯誤してみます
811 :
デフォルトの名無しさん :2006/12/14(木) 13:22:47
vc++6.0でビットマップを表示させたいのですがビットマップをインポートしてもエラーが起きます。 すごい馬鹿な質問ですが例えば写真などを表示することはできないのでしょうか? 256色以内であればペイントなどで作成し表示できるのでしょうか?超初心者なのでぜひ教えてください。。
ビットマップなら簡単
超初心者ならまずそれらしい本で練習しれ
VC++.net CFormViewで開発をしています。 ウィンドウをドラッグして動かしたときに、アプリケーションの左上の(x,y)座標 を取得したいのですが、うまくいきません。 WM_MOVINGとWM_MOVEを試してみたのですが、WM_MOVEには起動直後、 WM_MOVINGに至ってはウィンドウを動かしても一度も呼ばれませんでした。 何を使えば(x,y)を取得できるんでしょうか。
815 :
デフォルトの名無しさん :2006/12/14(木) 23:39:17
あげ
>>814 SDIならCFrameWndで取得しないと意味ないよ。
817 :
デフォルトの名無しさん :2006/12/15(金) 00:06:16
>>816 ありがとうございます、無事取得できるようになりました。
このOnMove(int x, int y)の
x,yは何をさしているんでしょうか。。。
MSDN読めよ・・・
しかしMSDN読むようなやつだったら、そもそもこんなところで訊いていないだろう。
MSDQN プ
windowsx.h見れば幸せになれる
質問です。 親ダイアログ(モーダル)からボタンなどのイベントでモードレスの子ダイアログを 動的に作成し、そのポインタを配列に保持しています。 ある子ダイアログが終了(閉じられた)したら、親に知らせたいんですけど どうしたら子ダイアログが閉じたというのが分かるのでしょうか?
WM_USER+なんちゃらのメッセージを送る イベントとかを使う
そこ、WM_USERではなく、WM_APPだろ。
常識的に考えてWM_APPだろ
827 :
823 :2006/12/15(金) 19:54:10
>>824-826 レスありがとうございます。
自作のメッセージを作って投げるってことですね。
参考にさせていただきます。
いきなりつまづきました。ご助言お願いします。 VisualC++2005 Express Editionです。 #include <string> using namespace std; String adress_str; に対して下記のようにエラーがです。 : error C2065: 'String' : 定義されていない識別子です。 : error C2146: 構文エラー : ';' が、識別子 'adress_str' の前に必要です。 : error C2065: 'adress_str' : 定義されていない識別子です。 string宣言に対してエラーが出ているのだと思うのですが標準ライブラリでサポート されているハズなので#include <string>以外は必要ないと思うのですが・・・ (他には<stdio.h>と <tchar.h>をstdafx.hでincludeしています)
Stringではなく、string。 それとも、.NET FrameworkのSystem::Stringを使いたければ、#using <mscorlib.dll>
830 :
828 :2006/12/15(金) 21:09:38
>>829 ありがとうございました。Sを小文字にすることで解決いたしました。
VC6が、コーディング中に、一時的にフリーズしまくるという現象が発生してしまいました。 ある特定のプロジェクトだけそうなります。 数年前にも一度起きてかなり悩まされた記憶があります。 原因は何でしょうか?
メンバ自動表示や型情報ヒントとかのオプションをはずせば解決するのは わかってるのですが、 対して大きなプロジェクトでもないのにフリーズする原因ってなんでしょうか?
>>832 では、そのプロジェクトを丸ごと圧縮しUPしてください。検証します。
質問です。 htmlをEncoding::GetEncoding(51932)で読み込んだ後に、Split()で分解しています。 分解した後の文字列に「1漢」のように任意の桁数の数字と漢字一文字からなる文字列 があるのですが、これに対してremoveやinsertなどさまざまな方法で漢字の部分を削除 しようとしても操作内容が全く反映されていません。 data->Remove(0,1)などの操作をしても結果が全く変わらないのですがどうしてなのでしょうか?
835 :
デフォルトの名無しさん :2006/12/16(土) 02:02:37
VC++.net SDIで開発をしてます。 Cxxx myDL; myDL.DoModal(); で新しいダイアログを表示したいのですが、 新しく表示するダイアログの起動位置はどうやって設定すればよいのでしょうか。
836 :
デフォルトの名無しさん :2006/12/16(土) 02:34:18
VS.NETとかVC++.NETとか使ってる人で知ってる方にお聞きしたいのですが 既に、VS6.0やVC++6.0がインストールされている環境に VS.NETやVC++.NETをインストールして、6.0と.NETを併用する事って可能でしょうか?
できる
838 :
デフォルトの名無しさん :2006/12/16(土) 03:16:27
>>837 そうですか。
同時にインストールすると、動作が不安定になったりとかの
弊害とかはまったく無いですか?
>>834 .NET?
もしそうなら、それ相当のスレに行った方が良いかも。
>>835 OnInitDialog で SetWindowPos
840 :
デフォルトの名無しさん :2006/12/16(土) 04:50:31
>>838 関連付けが混乱する弊害は(勿論)ある。
>>834 System::Stringはimmutable、一度作られた文字列の内容を書き換えることはできない。
data->Remove(0, 1)とやってもdataの中身はそのままで、
Removeした文字列が新しく作られて戻り値として返される。
data = data->Remove(0, 1);なんかはどうだ。
>>842 ご助言いただいた方法でうまくいきました。
大変助かりましたありがとうございます。
標準ライブラリで使えるstringを.NET;FrameworkのString形式に変換することは できないでしょうか? 標準ライブラリのstringを使って生成したWebアドレスを使って 下の文を使いたいのですが型があわないのでエラーが出て困っています。 wrGETURL = WebRequest::Create(sURL); // sURLはString形式 よろしくお願いします。
std::string s; gcnew System::String(s.data(), 0, static_cast<int>(s.size()));
>>841 ああ、それはそうですよね。
とりあえずインストールしてみようかな。
847 :
デフォルトの名無しさん :2006/12/16(土) 16:13:58
Visual Studio 2005 Academic Edition スタティックライブラリを作ってる。 メインのプロジェクトでlibファイルを作るんだけど、 そのライブラリを同じソリューションのほかのプロジェクトで使いたい。 ・いちいちlibファイルをコピーする ・debugフォルダとかにパス(ライブラリの)を通す のほかにやる方法はない? あとメインプロジェクトのヘッダファイルも使いたい。
出力先をソリューション内でで共通にしたらいい。 そうすればリンカの追加の依存ファイルのところを$(OutDir)/HogeHoge.libと共通して入力できるはず。
850 :
844 :2006/12/16(土) 19:31:45
>>845 gcnewではエラーになったのでnewを用いたらできました。
ありがとうございます。
連続した線をLineToを使って描き、さらにMoveToExを使って次の座標を移動する、 という作業を繰り返し行おうとしたんですけど、 1つ目の連続線を描いた後にMoveToExで座標を変えた場合、なぜか、前の連続線の終点からずっと線が続いており、 全ての連続線が1本の線となってしまいました。 これはどうしてなんでしょうか? int a=0; for(int i = 0; i < 1000; i++){ if(temp[i] != a){ a = temp; MoveToEx(hDC, x[i], y[i], 0);} else{ LineTo(hDC, x[i], y[i]); } というプログラムです。tempで連続線の種類を判定します。 種類が違っていた場合は座標を移動させて、次の連続線までLineToで線を描き続きます。あとはそれの繰り返しです。
>>851 >これはどうしてなんでしょうか?
いいか、一つ良いこと教えてやる
プログラムは書いた(記述した)ようにしか動かない
つまりはそういうことだ
そうですよね。 それでは、私がしようとしてる事に対して、このプログラムは間違ってるって事ですよね。 どうしたらいいんでしょうか?
> どうしたらいいんでしょうか? コードを見直せ。 上限が 1000 だと動作確認し辛いだろうから、 10 ぐらいとか、規模を小さくして希望どおりに動いてるか確認するべし。
ありがとうございます。 やってみます
質問です。 リストコントロールをレポート形式で表示しています。 (2列×10行、チェックボックス付き) ボタンのクリックイベントで新規行の挿入と同時に 選択状態にしたいのですが特に設定するような関数は 見あたりませんでした。どうやって設定すればよいのでしょうか?
何が?
858 :
ちょろねずみ :2006/12/19(火) 14:47:27
どなたかご存知の方、教えて下さい。 VC++ 6.0 で作成したレギュラーDLLをVB 6.0 で作成したプログラムから呼ぶと、 「ファイルが見つかりません: test.dll」となります。このDLLとVBプログラム は、同じファルダにあります。
859 :
名無し :2006/12/19(火) 15:12:46
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク):親プロセスは1+2+・・・+60の計算を行う。親はその結果を子プロセスに伝え、さらには子はその結果を孫にプロセスに伝える 親から子、子から孫に伝えられる結果をプロセス間通信で伝える為のプログラムを作成せよ [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual Studio 2003 [3.3] 言語: C [4] 期限: 今すぐにでも [5]特になし
終了コード 0 (0x0)。 が顔文字に見えて仕方がない今日この頃。
861 :
デフォルトの名無しさん :2006/12/19(火) 18:26:50
常駐プログラムを作成したいと考えてるのですが、 作り方が分かりません。 ある時間が来たら、別のプログラムを実行したり、 時間を記録するようなプログラムを作りたいのです。 教えて下さい。。
>>861 まずはWindowsアプリの作り方を勉強してください
863 :
デフォルトの名無しさん :2006/12/19(火) 21:27:27
フィールドに配列を宣言しようとすると複合型は認められません手出てくるんだけど、 これって配列をクラスのprivateに設定できないってこと?
VC2005Express Editionを使用しているのですが win32のwindowsアプリケーションが選択できません。 アプリケーションの種類の欄で選択できるのは、コンソールアプリケーションだけなのですが windows.hをインクルードで着ませんし。 どなたかご存知の方教えてください。
Express Editionじゃ選択できなくて普通だから気にしなくていい。
866 :
デフォルトの名無しさん :2006/12/19(火) 21:53:42
>>864 PlatformSDKインストールしてないと、そうなると思う。
867 :
デフォルトの名無しさん :2006/12/19(火) 22:00:13
>>866 ,867
ありがとうございます。
DLしてきます。
System::Stringでの文字コードの扱いについて教えてください。
環境:WindowsXPSP2,VisualC++2005 Express Edition
下記のページのサンプルコードを書き換えて日本語(EUC)のHPからデータを
吸い上げるプログラムを書いています。
ttp://support.microsoft.com/default.aspx/kb/815657/ja StringはUnicodeで宣言されているため、本来取得したい日本語列が
化けて抜けてしまい(おそらくエンコードでエラーとなり消されている)
困っています。
sLine = objReader->ReadLine(); (sLineはString^ 型です)
この部分がWebデータの取得部分のハズですので取得時に
文字コードの変換ができればうれしいのですが、
解決策はありますでしょうか?
よろしくお願いします。
System::String が関係してくる質問が頻繁に出てくる訳だが… ぐぐれよ。 MSDN ぐらい嫁よ。
872 :
ちょろねずみ :2006/12/20(水) 19:00:35
教えて下さい。 VB6のプログラムからVC++6で作成したMFCレギュラーDLLを呼ぶと、 「ファイルが見つかりません」エラーになります。 VBのプログラムファイルとこのDLLは、同じ場所にあります。 1. VB側: (1) サンプルコード Public Declare Function GetNezumi Lib "choro.dll" () As Long Sub test() Dim lngRet As String lngRet = GetNezumi() End Sub 2. VC側: (1)サンプルコード extern "C" __declspec( dllexport) int WINAPI GetNezumi() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 通常関数の本体はこの位置にあります return TRUE; } (2)プロジェクト名:choro (3)DLLの種類: MFCレギュラーDLL 3. VBでのエラーメッセージの内容 実行時エラー'53': ファイルが見つかりません: choro.dll 以上、よろしくお願いします。
内容の不明なバイナリをテキストに変換するプログラムを、 VC2005で作成しています。(C++では作成できました。) バイナリ→アスキーが出来ません。 問題点を指摘いただけませんでしょうか? CStdioFile fin; CString text,filename,temp; edit1.GetWindowText(filename); if (filename == "") return; if(!fin.Open(filename, CFile::modeRead | CFile::typeBinary)) {return;} text = ""; while (fin.ReadString(temp) !=NULL){ text = text + temp + "\r\n"; } edit2.SetWindowText(text); fin.Close();
>>872 それだとシステムフォルダにdllを探しに行くと思うよ。
>>875 勉強不足なのは判ってるんですがorz
データ解析を全て手で計算してきた弊害ですね。
生まれてくる時代間違えました。すいません。
>>873 > C++では作成できました
って事なら、動くものはコピペ(とちょっとした変更)で出来るかと思うぞ。
ファイル入出力は、fstream / FILE もつかえる。
MFC 使っているなら CString::Format を参考にするのも良いかもしれない。
VC2005でAfxMessageBoxz()使ってメッセージBOX表示するだけで3日もかかったわ。 _T()マクロの存在教えんHELP氏ね!!
ヘルプにも書いてあるが、お前が気付かなかっただけ。人のせいにするな。
880 :
デフォルトの名無しさん :2006/12/23(土) 00:01:05
MFCでフォルダを削除したいのですが、 APIでいうRemoveDirectoryのような関数はないのでしょうか
>>880 CFile::Remove()じゃディレクトリの削除は出来ないので、無いのでは?
APIじゃダメなの?
プロジェクトが複数あり、一つ一つ変えるのが面倒なのでソリューション全体に、 プリプロセッサの定義や、拡張命令セットを設定したいのですが、 どのようにすればいいでしょうか?
馬鹿だったらひとつひとつ手で変えるしかないだろう。
頭つかう
886 :
デフォルトの名無しさん :2006/12/23(土) 17:51:48
すいません。2年ぶりくらいにプログラミング再開したんですが 昔は std:vector<int> v; v[5] = 0; みたいにすぐに代入できてたんですが、新しくVC2005 買ってみたらエラーでやんのw 宣言だけでは実際にvが確保(インスタンス生成?)されてないみたいなんですけど この場合どうやって書くのがいいんでしょうか? コンストラクタで配列の個数を指定するか、一度push_backなりしてやれば、実際に生成されるみたいなんですが (reserveでは駄目でした) ダミーをpush_backするのも書き方として汚いし、どうかけばいいの?
887 :
デフォルトの名無しさん :2006/12/23(土) 18:26:00
よろしくお願いします。 画像処理なのですが、memcpyが含まれるループを回すとき、扱う容量が大きいとときどきフリーズしてしまうのですが、 memcpyはコピーする容量が大きいと、コピーが完了しないうちに次の命令に移ったりしますか? すぐ次の行にはループの回数を表示するprint文があるだけで、WaitForSingleObjectなどは使っていません。
>>886 vectorのメンバ関数くらい自分で調べろ。
>>887 大方memcpy()であらぬメモリを壊しているのだろ。
アドレスとサイズを出力してよくチェックして味噌。
891 :
デフォルトの名無しさん :2006/12/23(土) 18:41:39
んーわかんね Vecotrを 配列と同じに書いちゃってるプログラムなんだけどさー 実行すると「確保されてねーよ」って例外エラードカドカでるんだけど、、、 昔はこれで動いてたのに、いつの間にこんな仕様になったんだ? 俺の作ったプログラムじゃないんだけどねw どう直せば動くんかのう
893 :
デフォルトの名無しさん :2006/12/23(土) 18:59:46
えーそんな酷い話? vector<byte> buffer; buffer.reserve(filesize); で ファイルの読み込み先として &buffer[0] ってポインタで渡してるつもりなんだろうけど コンパイルは当然通って、いざ実行してみるとSTLのソース内で例外エラーが出る 簡単つーなら、対策一言で書いてくれよ。書けるならなwww
標準C++ならC++スレにでも行け ここはVC
895 :
デフォルトの名無しさん :2006/12/23(土) 19:09:06
VCのSTLの問題だろw 以前のVCなら通ってたし
1年生からやり直し 出直せ
897 :
検索中 :2006/12/23(土) 19:15:42
答え書いてよ。やり方わかるならさw くだらねーレスはいらねーつーの
898 :
887 :2006/12/23(土) 19:24:47
>>889 レスありがとうございます。
メモリのアドレス等の表示はやったことがありませんでした。
これから勉強します。
もうひとつだけ教えていただきたいのですが、
memcpyはコピー開始で次の行に移るのか、
それともコピー完了で移るのかを教えてください。
バッファを複数使って並列に作業をさせているらしいのですが、
後者であれば意味が無いと思いまして…。
すみませんが、よろしくお願いします。
関数は全てを終えてから制御を返す。 一般に何か並列に作業をしたかったらマルチスレッドにしろ。
900 :
887 :2006/12/23(土) 19:42:54
>>889 レスありがとうございます。
メモリのアドレス等の表示はやったことがありませんでした。
これから勉強します。
もうひとつだけ教えていただきたいのですが、
memcpyはコピー開始で次の行に移るのか、
それともコピー完了で移るのかを教えてください。
バッファを複数使って並列に作業をさせているらしいのですが、
後者であれば意味が無いと思いまして…。
すみませんが、よろしくお願いします。
DMA転送と勘違いしてるんだと思うよ。
>std:vector<int> v; >v[5] = 0; おやおや、>886ではこのように書いているのに >vector<byte> buffer; >buffer.reserve(filesize); >893ではいきなりreserve()していることにしちゃいましたよ。 この馬鹿は構うとどこまで書いてくるんでしょうかね。
904 :
887 :2006/12/23(土) 21:32:53
すみません、間違いました…
>>900 >>899 ありがとうございます。
疑問が解けました!
DMA転送の速度等に問題がある場合は、
データ取り込み用のバッファを複数用意して
順番に使うのは効果があるということでしょうか…?
905 :
887 :2006/12/23(土) 21:43:06
DMA転送は入力デバイスとメモリ間の問題で、 どちらにせよVC上ではマルチスレッドを使わなければ 並列処理のような制御はできないということでしょうか?
print文入れたらかなり遅くなる
マルチスレッド=並列処理
スレ違いだけど CPUが並列処理できないと擬似マルチ
909 :
887 :2006/12/23(土) 22:36:26
よくわかっていないためにおかしな発言をしてしまってすみません…。 memcpyの転送元は画像入力デバイス上のメモリにあるフレームバッファで、 転送先はグローバル変数で定義されているようです。 これはDMA転送になると思うのですが、 このような場合、フレームバッファを複数用意して順番に、 データ取り込み→memcpyを行うメリットはありますか? 過去に実験をした人が、バッファの数を1つから2つにして、 順番に使ったところ大きな画像データも扱えるようになったと言っていたのですが…。
そりゃぁ、フレームバッファの仕様次第じゃね?
これからC言語を始めるんですが、2005 Express EditionとToolkit 2003では初心者にはどちらがいいんですか? 今までプログラム等をしたことがなくまったくの初心者です Expressの方にはエディタも付いているみたいなんですがそれ以外にも違いがあれば教えてください 環境はwindows XPのホームです
Toolkit2003はもう配布してないんじゃなかったっけ?
913 :
検索中 :2006/12/24(日) 01:03:05
>std:vector<int> v; >v[5] = 0; おやおや、>886ではこのように書いているのに >vector<byte> buffer; >buffer.reserve(filesize); >893ではいきなりreserve()していることにしちゃいましたよ。 この馬鹿は構うとどこまで書いてくるんでしょうかね。 ぷ、どっちでもいいでしょ。例なんだし 別にReserveしないで [5]につっこんだから、問題になってるんじゃねーし まぁ、どうせあんたもわかんねーんだろw VC2003とかなら通ってたコードだし、調べても 「vectorのiteratorはポインタと同じ(ただし厳密には保障されない)」とか書いてるやつ多いしな 2005のSTLなって実装が変わったって話だし、意識したことない人は知らないんでしょ?w
914 :
検索中 :2006/12/24(日) 01:05:14
ちなみに、reserveした後、 &buffer[0]してみても領域確保されてないからw 実際に何か突っ込まないと、reserveも未処理のままなんでしょ。
一応.NET 2003あたりからvectorのイテレータはポインタでなくなったと思う。 特にこういうチェックをしていたわけではなかったと思うけど。
「914 = 検索中」じゃないけど 例えば、ファイルからデータを読み込んでそれを vector<char> vec; に格納する一番エレガントな方法ってどんなでしょうね? 自分の知識だと… char *pbuf = new char[size]; でバッファを一旦確保して、ifstream::read()等でバッファにデータを読み込んで それから vector にコピーするって方法しか思いつきません… ファイルの読み込み関数で直接空のvectorを指定出来れば楽だけど、 それだと関数側でvectorを操作してバッファを確保してもらう事になるんですが そんな便利な関数ってありましたっけ?
917 :
916 :2006/12/24(日) 03:49:27
一旦 char *pbuf = new char[size] に読み込んでからは copy(pbuf, pbuf + size, back_inserter(vec)); でコピー出来るんだけど、ファイルの読み込み関数で直接vector指定ってのは、やはりムリ?
918 :
916 :2006/12/24(日) 03:59:05
ちょっと話が脱線するけど、そもそも vectorは「ベクトル」なのか「ベクター」なのか。 自分はベクトルって言ってたのですが、なんか違う様な。 やっはり配列って意味の場合はベクターなのかな。
>>918 厳密に言えばvectorはvectorでしかない
>>919 更に分からなくなったw
参考までにあなたは何と呼んでますか?
ふぇくた〜 ふぇくとr− ヴぇくた ヴぇくtr− うぇww 舌っ足らずなもので・・・
>>918 ベクトルとベクタは違うと思うの?
どちらもvectorなんだけど。
>>922 いや、読みはどうなのかなと。
なんか配列って意味では、ベクタって言ってる人が多い様な気が…
そもそも使い分けが必要なのかとか。
もうどっちでもOKって事で良いですか?
単に発音を日本語表記する際の違いなんだけど、ベクトルっていうと 力学などで使う力の方向などを表す用語と解釈されそうなんで、俺は ベクタと言ってるな。
>>916-917 std::istream is;
vector<char> vec;
typedef std::istreambuf_iterator<char> isbuf_iter;
std::copy(isbuf_iter(is), isbuf_iter(), back_inserter(vec);
また、std::vectorの要素は連続することが保障されているから、
予めresizeしておけばis.read(&vec[0], vec.size());なんてこともできる。
プログラミングに関係ない話やVCじゃなくてC/C++の話になると人が増えるね ROMってるやつが大勢いるんだな
>>925 なるほど、色々ありますね。
やっぱC++は複雑だ。勉強になりました。
これの無料版インストールする時みんな登録した?
した
930 :
デフォルトの名無しさん :2006/12/25(月) 14:10:59
Visual C++2005なんですがツールバーの位置を固定する方法を教えてください。
VC++ 2005 MFCです。 アニメーションコントロールでaviファイル再生、停止後、画面に残っている再生画を 消したいのですが、どうすればいいでしょうか?
VC++2003 MFCで組んだアプリ(Releaseビルド)が異常終了するときにWinXPで 「問題が発生したため〜を終了します。ご不便を・・・」のダイアログが バグの種類によって表示される場合とされない場合があるようです。 どのような場合に表示されずに、いきなりアプリが落ちてしまうのか ご存知の方いればお教えください。 今までの感じからは、アプリ本体でなくDLLで異常の場合に表示されないことが あったような気がしますが検証はできていません。
933 :
天パ :2006/12/25(月) 16:19:29
VC++で電卓プログラムを作成しなければいけないのですが、全くわからず進みません、自分のためにはなりませんが、コードを教えていただきたいです。
宿題スレに行けカス
935 :
デフォルトの名無しさん :2006/12/25(月) 17:24:31
かなり初心者の質問なんですが。。。調べ方も分からないのでここで ここで質問させてください パソコン上の画面を画像として保存というかその画像をつくるのには どうしたらいいのですか?よくソースを出す時やmixiの画像とか・・・。 ああいう画像(?)ってどうやったら作れるのですか?? 質問の意味がよく分からないかも知れませんが誰か分かる人いましたら 教えてください。
937 :
デフォルトの名無しさん :2006/12/25(月) 17:35:14
>>936 スクリーンキャプチャっていうんですね
ありがとうございます!
>>935 つ[PrintScreen]
つ[PC初心者]
939 :
デフォルトの名無しさん :2006/12/25(月) 23:06:57
本に書いてあるソースを丸写しして警告がでたんだけどvisual C++って誤爆多い?
殆ど無い。とりあえず警告メッセージup
どうせ_CRT_SECURE_NO_DEPRECATEとかPOSIX 関数とかだろ。
942 :
デフォルトの名無しさん :2006/12/26(火) 00:09:22
そんな登録もできないほど後ろめたい人生を送っているのか。
>>943 いろいろ大変なんdねすよ・゚・(つД`)・゚・
個人情報なんてどうせどこかから漏れるもんなんだから、気にするな。 死ぬしか方法がなくなるぞ。
で結局CDからでも登録必要なんですか?
Webから公開当初ダウンロードしたものだけど要らんかったよ
ありがとうございます CDからインスコして見ます
質問! プロパティページ内にタブコントロールを表示することってできないんですか? シートのリソースにタブはっ付けてみたんだけど表示されない・・・orz
できる
952 :
デフォルトの名無しさん :2007/01/01(月) 03:07:20
age
953 :
デフォルトの名無しさん :2007/01/03(水) 01:50:55
新年明けましておめでとうございます。 VC++6.0 ダイアログベースで開発を行っています。 垂直スクロールバーを設置したいと思い、 右クリック→スタイル→垂直スクロールバー にチェックをいれ、OnVScroll関数に必要な処理を記述し 実行したのですが、起動するアプリに垂直スクロールバーが表示されません。 水平スクロールバーは表示されるのですが、なぜか垂直スクロールバーは表示されません。 解決策をご存知の方、ご教授願います。
954 :
953 :2007/01/03(水) 03:29:03
色々調べてみた結果、一度最小化をして最大化をすると 垂直スクロールバーが表示されるようになりました。 ただ、SetWindowPosやMoveWindow等でサイズを変更すると、 垂直スクロールバーが消えてしまいます。 サイズ変更後は最小化や最大化をして再描画してもスクロールバーは表示されません。 どなたか詳しい方宜しくお願い致します。
右クリック→スタイル→垂直スクロールバー これででる でなかったらでたやつを自分で消してるんだろう
>>954 SIF_DISABLENOSCROLL
これ
957 :
デフォルトの名無しさん :2007/01/04(木) 18:49:11
子スレッドにON_MESSAGEって使えます? C2440のエラーでCWndに変換できないとかでてくるんですが 子スレッドにメッセージを配置する場合メインとは違うなにか書き方があるんですか?
959 :
デフォルトの名無しさん :2007/01/05(金) 17:00:53
(VC++.net) DirectXでIMEエディットボックスを使ったプログラムを組んでいます。 テキスト入力後も日本語入力(半角/全角キー)のままだとキー周りが上手く動きません。 日本語入力対応に組み替えてもいいのですが分岐が多くなるため避けたいです。 そこでテキスト入力後に半角英数入力になるようにしたいのですがどうすればいいのでしょうか。 DirectXのプログラムですがVC++で出来ると考えこちらに質問させていただきました。 もし違ってたら申し訳ありません。
960 :
デフォルトの名無しさん :2007/01/07(日) 01:56:06
スピンコントロールの使い方を教えてください ネット検索でエディットコントロールの右にくっつける方法は分かりましたが、 どうやって範囲内でのカウントアップ&ダウンを行うのかが分かりません やりたいことは単純で、10〜100の範囲で数字を1ずつ上下させ、OKボタンを 押下した時にその値を基に計算を行うだけです どうすれば範囲内で値を上下させることができますか?
962 :
デフォルトの名無しさん :2007/01/07(日) 12:06:48
VC++ 2005 EEなんですが、調べてみたら、MFCが入ってないから FindWindowとかのWin32APIが使えず、PlatformSDKでないと使えないとわかりました。 これであってますか? となるとプロジェクトの新規作成でWindowsフォームアプリケーションでは Win32APIが使えない、ということですよね。
でたらめ言うのもほどほどにしてほしい。
PlatformSDK導入しろ。 それとWindowsフォームアプリケーションは.net仕様。
965 :
デフォルトの名無しさん :2007/01/07(日) 13:00:22
C++って色々種類があるんでしょうか?VCとか その中で一番優良なものを教えて頂きたいんですが宜しくお願いします
十人十色です
>>965 C++言語の規格は1つ。
C++コンパイラはいろんなメーカーから出てる。
VC++はその一つ。(コンパイラだけでなく、エディタ等も含んだ統合開発環境)
優良の基準がわからんので、どれがいいかは何とも言えん。
>>962 API が使えないのはPlatformSDKが入ってないから。
MSのサイトから無料でダウンロード可能。
MFCはVSのstandard edition以上に含まれるC++のライブラリで
多くのAPI 呼び出しの煩わしさを軽減してくれるが嫌ってる人も多い。
これはSDKを入れても使えない。
VisualStudio.net 2003を使っているんですが、gccなどにあるisinf関数のように 引数が無限値であるかどうかを判定する関数ってVC++にあるんでしょうか?
IsInfinity?
971 :
960 :2007/01/07(日) 16:09:37
>>961 そうです、ありがとうございます
「猫でもわかるプログラミング」ですか・・・
これで分からなかったら自分は猫以下ってことですね(汗
>>968 それC99だからVCはサポートしてない。
独自拡張の_finiteを使う。
974 :
969 :2007/01/07(日) 17:24:43
>972 ありがとうございます!
975 :
デフォルトの名無しさん :2007/01/08(月) 06:01:14
【ネガティブ派遣根性チェック】 3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。 □偽装派遣先の社員の意見にはたとえ間違っていても反対しない □偽装派遣先から「いつまでもここで仕事してくださいね」と言われるようになりたい □自社に仕事を持ち帰れるように言われるとムカつく □自社で仕事なんてできるわけがない □派遣/受託の差異を指摘する人間はムカつく □偽装派遣先には仕事だけでなく自分のプライベートについても指示して欲しい □自分の月額金額を知らない □偽装派遣先社員より自分の生涯収入が低いのは当然だ □偽装派遣先に尻尾を振り、いつまでも一緒に仕事をすることが大切だ □今のプロジェクトが終わっても同じ偽装派遣先に常駐したい
976 :
962 :2007/01/08(月) 10:54:19
レスありがとうございました。よくわかりませんが。 とりあえず、.net仕様でAPIを使える方法を探してみます。
977 :
デフォルトの名無しさん :2007/01/08(月) 17:21:09
ウィンドウ(コントロール含む)のハンドルというのは、 IDのようなものだと考えてOKですか?
978 :
デフォルトの名無しさん :2007/01/08(月) 17:33:05
VC++2003でコンボボックスコントロールに初期データをセットする方法を教えてください データ値(変更なし)をプロパティウィンドウのData項目に指定区切り文字(セミコロン?)で 区切って10〜20件程度入れているのですが、それが反映されずに困っています (実行した時にコンボボックスに表示されません) コンボボックスのスタイルはダウンリストで選択オンリーにしてます 他に何か処理が必要なのでしょうか? (参考としている書籍やサイトではコレでできているようなのですが・・・・・・)
>>977 いいえ、窓についている取っ手(=ハンドル)のようなものだと思ってください。
#必要に応じて窓をコントロールする取っ手を追加できるところがアナロジーにならないけれど。
>>978 区切りって改行じゃなかったっけ?
あと、リストの高さを調整し忘れてないか?
外人の書いた、VC6 C++のプログラムで日本語が使えるようにコンパイルスイッチを UNICODEにしたらコンパイルエラーを100個以上も出しやがった、じっくり何処が悪いのか 検証も兼ねて主導でプリフィックスにTEXTとか(LPWSTR)付けてたが、流石に飽きてきた 残り30個くらいなのだが、プリフィックスを簡単に変換する方法はないですか?
別にUnicodeじゃなくても日本語使えるけどな。
983 :
デフォルトの名無しさん :2007/01/08(月) 23:08:21
>>980 レス、ありがとうです
その辺をもう一度調べ直してみます
TEXT なら LPWSTR じゃなく LPTSTR じゃね
うむ。 LPWSTR に固定するなら L"hoge"; のほうがry
981です
みんさんどうもありがとう
>>982 手っ取り早く日本語に出来る方法があれば教えてください
>>984 そこら辺が少し曖昧なので、学習中です
>>985 それも考えましたが、学力が無いので最初の"と二番目の"にTEXTとか(LPWSTR)
付いてしまい、叶いませんでしたせいぜいgrepで""の付いてる行を抜出す程度の
能力なのでスマスソ良かったら教えてくださいませませ
>>986 そうなんですか、そもそもこの型変換って作業は変数を固定することと考えればOK?
なのでしょうか、pinとかptrとかも出てきますよね、
あ〜頭が混乱します。
>>987 VC6の正規表現の仕様忘れたけど
置換前 "[^"]*"
置換後 TEXT(\0)
でいけるんでは?
もっとも、これだと#includeの""や既にTEXT("hoge")になっている部分も置換されてしまうので
注意が必要だが…
>>987 _UNICODEじゃなく_MBCSにしたほうが修正量はずっと少ないと思う。
現状で日本語がでないのはUNICODEのせいじゃなくリソースの
言語設定が日本語になってないからじゃないかな。
今後のこと考えるなら_UNICODEでも良いけどね。
_MBCSだと、2バイト文字を考慮してない文字列処理があるとまずいと思うけど。
>>987 です、
>>990 さん
>>991 さんどうもありがとうございます。
質問の趣旨が少し変わってきましたけど、外人さんの作ったVC6のプログラムで
日本語を使う方法を教えてもらえませんか。
コンパイルの設定を具体的にどの様に設定したらいいのでしょう?
ソースはVC6で書かれているのですが、自分はVS2005しか持っていません
関係しそうな設定ですが
構成プロパティ全般の設定で
文字セット マルチバイト文字セットを使用する
共通言語ランタイムサポート 共通言語ランタイムサポートを使用しない
大雑把ですがこのようになっています。
まず2005用のサンプル探して比べてみる
994 :
デフォルトの名無しさん :2007/01/09(火) 18:56:30
VC2005EEのビルド作業の最後に「"user32.lib"が開けません」と出たのですが .NET2003を消さずにVC入れたのがいけなかったみたいで… どこにパスを書いたらいいのかが分からないです。教えて偉い人!
>>992 試しにドイツ語のVC6 MFCプロジェクト(_MBCS定義済み)を持ってきて
VC8(VS2005)で開き「バージョン情報ダイアログ」を日本語化してみた。
手順
1.プロジェクトのプロパティでリソースのカルチャを日本語にする
2.リソースビューでIDD_ABOUTBOXをシングルクリックしプロパティのLanguageを日本語に
3.リソースビューでIDD_ABOUTBOXをダブルクリックしFontを日本語Fontに変更
4.ダイアログに適当に日本語を設定しビルド
これで日本語が表示されました。あとPG内で_tsetlocaleはしておいたほうが無難。
UNICODEとMBCSで、どっちが楽かはソース見ないと判断できない。
>>96 >>992 です
ありがとう
1.プロジェクトのプロパティでリソースのカルチャを日本語にする
は直分かったのですが
2.3.のリソースビューってのは何処にあるのでしょうか?
リソースビュー分かりました
999 :
デフォルトの名無しさん :2007/01/09(火) 21:32:58
>>995 有難うございました。本当に2003は関係無く出来ました。
もう一つだけ質問なんですけど、「指定されたファイルが見つかりません」と
出るのは置いてる位置が悪いんでしょうか。デスクトップに置いてるファイルで
ビルドを自動でやってくれるファイルなんですけど
1000 :
デフォルトの名無しさん :2007/01/09(火) 21:34:32
質問です。板違いだったらごめんなさい。 OS:winXP コンパイラ:Borland C++Compiler 5.5 プログラム:#include <stdio.h> int main(void) { printf("hello, world\n"); return 0; } エラー:エラー E2209 a.c 1: インクルードファイル 'stdio.h' をオープンできない 警告 W8065 a.c 5: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main ) *** 1 errors in Compile *** その他状況:bcc32.cfgとilink32.cfgはcfgファイルになっており、binの中に入っています。内容に間違いもありません。 pathの末尾には;c:\borland\bcc55\binを付け加えています あと気になっていることで、stdio.hがローカルディスク(c)の中にないか、検索したのですが、見つかりませんでした。 ダウンロードも何度かやり直してみたのですが、どうにもなりません。 どうすればよいでしょうか。教えてください。お願いします。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。