★初心者にVisual C++を教えるスレ★ Part14
1 :
デフォルトの名無しさん :
04/08/28 15:02
6 :
デフォルトの名無しさん :04/08/28 17:54
VC++6で.cppと.defファイルをDLLにコンパイルする方法を教えて下さい
8 :
デフォルトの名無しさん :04/08/28 22:37
>>6 ウイザードでDLLのプロジェクトを作成する。
cppとdefを書き換える。
コンパイルする。
はじめまして 環境:Visual Studio 6 C++にある、setというコンポーネントを使おうとしてます。 勉強段階として、次のデータ型を --- ///データ型 typedef struct{ stringid; stringname; stringdetail; } DATA; template<typename DATA> bool operator<(DATA const &a, DATA const &b){ return a.id < b.id; }; --- 以下のsetに次々と登録していきたいと考えています。 set<DATA> idlist; が、次のようなエラーが出てしまいます。 error C2667: '<' : 2 個のオーバーロード関数があいまいで最適な変換ができません。 (新しい機能 ; ヘルプを参照) error C2593: 'operator <' があいまいです。 idの部分を、intに変えた場合はうまくいきました。 なぜ、stringにするとダメなのでしょう…? 何かご存知の方がおられましたら、ご教授の程お願いいたします。
// これはいらないんじゃないか? → template<typename DATA> bool operator<(DATA const &a, DATA const &b){ return a.id < b.id; }; ってか、stringのあとにちゃんと空白を入れろと。
>>10 さん
ありがとうございました。できました。
template宣言いらないのか…
空白をTABにしていたので、消えちゃいました;;
次から気をつけます(^^)ゞ
アプリケーション配布ライセンスって Visual C++ 6.0 Professional Editionで作ったものって売っても問題ないの?教えてください 使用許諾書のを読んだけど、問題ないみたいが。
質問です。 ネット上で拾ったDLLモジュールのソースをコンパイルして使用したいのですが VCTK2003+PSDKの環境で VCTKの方のコンパイラを使用してます cl /c AutoAcce.cpp link /dll AutoAcce.cpp /DEF:AutoAcce.def それで以下の結果に終わってしまいます。 何がいったい原因なんでしょうか? Creating library AutoAcce.lib and object AutoAcce.exp AutoAcce.obj : error LNK2019: unresolved external symbol __imp__KillTimer@8 referenced in function "void __stdcall DefaultEquip(struct HWND__ *,unsigned int,unsigned int,unsigned long)" (?DefaultEquip@@YGXPAUHWND__@@IIK@Z) AutoAcce.obj : error LNK2019: unresolved external symbol __imp__SetTimer@16 referenced in function "int __stdcall OnSend(unsigned char *,int)" (?OnSend@@YGHPAEH@Z) AutoAcce.dll : fatal error LNK1120: 2 unresolved externals
よくわからないのですがKillTimerとSetTimerを他のLibから引っ張らないといけないのでしょうか?
15 :
デフォルトの名無しさん :04/08/29 18:43
稀にソフトウェアのバージョンアップ内容を見ると ・開発環境を VC++ 6.0 から VC++ .NET に移行した と、開発環境の変更だけの更新内容を見かける事があるのですが VC++ 6.0 から VC++ .NETへ移行することで 起動の早さ等、ユーザー側に何らかの影響を及ぼすのでしょうか? VC++素人の質問ですみません、よろしくお願いします
dllのバージョンとか最適化とか
>>15 manegedで書き直した場合なら、実行にCLRランタイムが必要になるし
起動速度なんかも大分かわってくるんじゃないの?
そんなぁ…orz
>>18 では「インストールできます」ってことにしておきますね
XP買いなはれ。
最近使ったファイルがデフォでコンパイルした場合表示されるのですが、 (MRU?) そのファイル名を取得できる方法をお教えください。
>>23 VC6.0付属MFCには、CWinAppのprotectedメンバにm_pRecentFileListがある。
MSDNには載ってないけど多分これ使えばいいんじゃね?
>>23 レジストリから漁ったりなんかしちゃったりして
コマンドプロンプトよりユーザID、パスワードを入力させ、 RADIUSサーバにRADIUSプロトコルで送信し、 ユーザの認証を行うRADISUクライアント用のAPをVCで作ろうと思っています。 Active DirectoryでRADIUSを叩けるという話を聞きまして、 調べてみたのですが、ADSIでActive Directoryにアクセスするという所までわかったのですが、 具体的にどのようなことをすれば良いのかわかりませんでした。 そこでみなさんの知恵をお借りしたいのですが、ご存知無いでしょうか? 参考になるサイト、書籍やアドバイスがございましたら、ご教授くださいませ。 宜しくお願い致します。 開発環境は Windows2000pro Visual Studio.NET です。
29 :
デフォルトの名無しさん :04/09/01 02:11
VC6,0でリソースエディタにて、画面を作成しました。 その画面には、[OK]ボタンがデフォルトボタンになってます。 また、リストビューが表示されています。 このリストビューを、サブクラス化してエンターキーを押した場合に、 ダイアログを出そうと考えています。 ところが、エンターを押すとデフォルトボタンの[OK]が実行されてしまいます… どうしたらいいでしょうか… 試しに、スペースキーを入れてみましたが、スペースはうまくいきます。 サブクラス化した一部です。 switch(message) { case WM_KEYDOWN: switch(wParam){ case VK_RETURN: MessageBox(hWnd, "えんたー", NULL, MB_OK); break; case VK_SPACE: MessageBox(hWnd, "すぺいす", NULL, MB_OK); break; : :
>>29 OnOK()
で
//CDialog::OnOK();
とコメントアウトする
適当な処理をそこに足す
SDKの質問にMFCで答えるスレはここですか
32 :
デフォルトの名無しさん :04/09/01 08:13
#include<stdio.h> #include<stdlib.h> int main(void){ FILE *fp; if((fp=fopen("sintai.dat","w"))==NULL){ printf("File not open\n"); exit(1); } int i; struct sintai { char *name; int height,weight; }; static struct sintai a[]={ {"nagata" ,180, 85}, {"nisimura" ,185, 95}, {"nakanisi" ,175, 80}, {NULL,0,0} }; for (i=0 ; a[i].name != NULL; i++){ printf("%s\t%d\t%d\n",a[i].name,a[i].height,a[i].weight); fprintf(fp,"%s\t%d\t%d\n",a[i].name,a[i].height,a[i].weight); } return 0 ; } これはstruct sintai a[]を初期化してsintai.datへ書き出すプログラムですが これの逆をする場合、つまりsintai.datが 先に与えられている条件でsintai.datを読み込んで struct sintai a[]へ代入する場合はどうすればいいでしょうか
fscanfを使え!てかスレ違いだ
メモ帳が保存できません
>>34 メモ帳を終了させてから notepad.exe をバイナリエディタで読み込み保存しろ
>>30 、
>>31 すみません。環境説明が足りなかったです…
おっしゃるとおり、SDKなのでOnOKの処理はありません。
デフォルトボタンはリストビュー以外では有効にしておいて
リストビューでのエンターに対してのみ、ダイアログを表示したいのです。
この手の動きをするアプリはいくつかあるので、実現可能なはずなのですが…
visual c++.netでcppファイルからヘッダーファイルを作る方法を 教えてください。 m(__)mお願いします。
>>37 自分で.cppファイル解析して書くしかない。
ヘッダ間違って消したのか?
ダイアログベースのアプリケーションを作りたいんだけど 他の人が作ったファイルの機能などを取り込みたい、 でもそっちにもメインウィンドウがあってしかも機能がウィンドウに密着している(と思う) このウィンドウは全然要らないので 必要な関数だけを読んでコードを書きました。 コンパイル、ビルドにはエラーはありません。 実行時に Debug Library Debug Assertion Failed! というエラー 多分メインウィンドウが重複しているとかだと思うのですが.. もっと詳しく書かないとアドバイスもらえませんかね。
>>39 Assertしたならその行がわからないと。
「再試行」でその行に止まるからそれを見て自己解決か再投稿。
ソース抜き出し再利用とかでは気をつけないとよくある。
おそらくVCでコピーした時だけど コピー前にクリップボードに "retun 1;"がはいっていて "hoge()"を選択して おそらくCtrl+Cを押すと retun 1;hoge() がクリップボードに入ってる時がたまにあるんだわ。 これって、Ctrl+C以外を押したときになるの? それとも、VC以外の機能?
環境は VC6 WindowsNT4 です。 他に常駐は「紙」 インストールしているエディタは、 秀丸と EmEditorと サクラエディタと xyzzy です。
>>43 はい。
ショートカットキーでコピペすると
たまに、古いクリップボード内容がくっついてるんです。
何か別のキーを押してたのかもしれません。
そんな機能ってあります?
>インストールしているエディタは、 (´ー`)y−〜〜
>>44 今、数十回やってみたけど、そんな事一度も起こらんよ。
とりあえず、SPはあててるの?
47 :
デフォルトの名無しさん :04/09/01 19:10
今日学校にVisual C++6.0があったので友達とコピーしてたのですが、 これって違法ですよね?
すみません…先ほど番号を間違えました… デフォルトボタンをやめて確認しようとしたところ、 VK_RETURNに入りませんでした! つまり、デバッガで、VK_RETURNとVK_SPACEのMessageBoxにブレイクポイントしても スペースは止まるが、エンターだと止まらないのです… 調べてみたのですが、MFCの場合は「PreTranslateMessage」を使う ということはわかったのですが、SDKの場合はどうすれば良いのでしょう?
49 :
デフォルトの名無しさん :04/09/01 20:11
directplayでmsnZONEみたいな自動起動プログラムをつくりたいのですが どうすればよいのでしょうか?
MFCでツールバーをフローティングしたりドッキングしたりする アプリ作れますか? 作れるか作れないかで結構です。 それによって、VCかBCBにするか決めるので・・・
#includeで取り入れたいヘッダーファイルの場所を指定するにはどうすれば よいのでしょうか? #include<A> #include<B> #include<C> A,B,C全て異なるフォルダから参照することはできますでしょうか?
>>50 出来る。
でもBCBの方が遥かに楽。
でも仕組み知っておきたいならMFCか。
BCBは、これ以上バージョンアップしない予感だし
仕事ではVCが遥かに多い。
とりあえず
両方知っとけ。
>>53 ありがとうございます。
とりあえず、将来性に期待してVCを覚えます。
ゆくゆくは両方覚えられるといいかな・・・
開発環境:VC++6 SP5、最新のPlatform SDKインクルード、Windows XP Pro SP1 エクスプローラ上で、ファイルやフォルダのアイコンの上で右クリックすると、 「開く」「印刷」「検索」などの項目で構成されるメニューが表示されますよね。 項目を非表示させる、あるいは項目名が灰色表示で選択できない、というプログラムを 作りたいです。 イメージとして、作りたいと思うプログラムが起動されているとき、項目の非表示、 あるいは灰色表示で選択できなくなり、起動されていないときは普通に表示されて 選択ができる、というものです。 VCのシェルプログラミングに関するサイトをいろいろ見たのですが、イメージに ぴったり合うサイトが発見できませんでした。 メニューに項目を追加する、というものならたくさんありましたが…。 どなたかやり方、あるいは参考リンクをご存知でしたら教えてください。
CMenu EnableMenuItem(item, MF_GRAYED);
>>56 ありがとうございます。
それで、関連して2つ質問があります。
(1)EnableMenuItemの第一引数に設定する情報ですが、afxres.hをインクルードして、
ID_FILE_XXX、又は、ID_EDIT_XXXで始まる定数を設定すればよいですよね?
(2)作りたいと思うプログラムは、MFCのダイアログベースでやりたいです。
試しに新規にプロジェクトを作成後、クラスウィザードでOnRButtonDownを追加して、
以下のように組みました。
(例:ファイルを右クリックしたときに、「開く」を無効にしたい場合)
void CClickDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
CMenu *hMenu;
CWnd* cwParent = GetParent();
DWORD dwStyle = cwParent->GetStyle();
hMenu = cwParent->GetSystemMenu(FALSE);
hMenu -> EnableMenuItem(ID_FILE_OPEN, MF_GRAYED);
CDialog::OnRButtonDown(nFlags, point);
}
上でビルドして実行ファイルが立ち上がっている状態で、あるテキストファイルのアイコン上で
右クリックしました。
しかし、「開く」の項目が無効になりませんでした。
これは、ソースの組み方そのものがおかしいのでしょうか?
ダイアログベースでできるのであれば、プロジェクト新規作成後からの手順を
教えていただけたらうれしいです。
visual c++.net やってますが正直さっぱりわかりません。 javaはそれなりに出来ますがc++自体初心者です。 MFCアプリケーションだとすでに、ヘッダーファイルやcppファイルなどが 作られていますがその中の文法がわかりません。 2,3さつ本持っていますが、どれもコンテンツの加え方みたいなものしか書いていません。 中で何が行われているかわからないと、この先壁にぶち当たるような気がしていて とりあえず、中でどういう順番で何が行われているか理解しようと思っています。 こういう自分にお薦めのvisual c++.netの本がありましたら教えていただけないでしょうか?
なら純粋なCやC++の本を買った方がいいんじゃないの?
61 :
デフォルトの名無しさん :04/09/02 22:43
javaは簡単っつーことだな。
>>59 自分も最初はMFCどころかC++の文法も分からなかったけど
C/C++の文法を覚えてからMFCでのプログラミングを練習したよ。
最初は、ホント滅茶苦茶なコードしか書けず何度何度も破綻したけど、
色々な書籍やサイトなどの文献を読み漁って(時には2chでの質問も)
諦めずにやっていたら、いつの間にやらそれなりにまともなコード書けるようになってたよ。
今では、公開しているソフトがそこそこ評価してもらえるくらいになったよ。
ちなみに、自分で「まとも」だと思えるアプリが作れる様になるまで3年くらいかかったけどね…
>>59 >こういう自分にお薦めのvisual c++.netの本がありましたら教えていただけないでしょうか?
ごめん、ここの部分のレスがなかったね…
う〜ん、自分の場合は書籍よりもWebの方が有意義な情報が多かったような気がするなぁ。
>>59 1冊目 MFCによるWindows95プログラミング
ウィザードの吐き出したソースの変更ではなく
1からスクラッチでソースを起こす方式で
SDK的にMFCを解説
Win32APIの知識は無くても読める
C++の知識は必要
2冊目 MFCアンサーブック
前半にドキュメントビューアーキテクチャの解説がある
MFCのフレームワークが理解出来る
>>64 MFCによるWindows95プログラミングは、MFCによるWindowsプログラミングとして、改訂版がでてますよ。
MFCアプリケーションについて質問があります。 ソースファイル |_MainFrm.cpp _SOFT.cpp _SOFTDoc.cpp _SOFTView.cpp _stdafx.cpp ヘッダーファイル |_MainFrm.h _Resource.h _SOFT.h _SOFTDoc.h _SOFTView.h となっていて、MainFrm.cppの中でCMainFrame::OnCreateやCMainFrame::PreCreateWindow など、MainFrm.hの中にあるメソッドについて何か操作をしているようですが、 これは一体何をしているのでしょうか? あと、上記のソースファイルの中ではclassが定義されていませんが、classがある時と ないときで何が変わるのでしょうか?
↑ あ‥メソッドを上書きしているのですか?
>>58 やりたいことはそのとおりです。
教えていただいたURLですが、実はシェルプログラミングの別件の調査で、
少し前に発見していました。
コーディングをするならEnableMenuItemを使うのではなく、レジストリ操作で
やる方法になるんですか…。
69 :
デフォルトの名無しさん :04/09/03 20:44
ウィンドウに描画された矩形をマウスでドラグするという
単純なテストプログラムを作ってみたんですが、どうもうまくいきません。
どうすればいいか教えて下さい。
説明が難しいのでワークスペースごとUPしてしまいました。
ごく短いVC++6、WinAPIのプログラムです。
ttp://gamdev.org/up/img/1157.zip こんな事も分からない俺…orz
よろしくお願いします。
↑ウィルス
>>69 意図的に作られたものではないにせよ、実質ウィルス。
まじで?なんか感染してる? そうじゃなくてアフォプログラムでPCバグったとか そういう意味だったらすいません。。。
何をしたいのかってのを明確にした方が早いと思うけどなあ。
すいません。古いのをUPしてたんで消しました。
新しいのをUPしようとしたけど(どっちにしろまともに動かないけど)
やっぱ恥かしいので止めときます。
>>70 >>71 とりあえず氏ね。
いちいち反応して暴言吐いてる香具師には多分無理w
マウスボタンON/OFF情報を保存するフラグ変数を用意して マウスボタンON時は、マウスポインタが矩形内にあるか判断した上でフラグをTRUEにする。 マウスボタンOFF時は、フラグをFALSEにする。 で、その変数がTRUEの場合だけ、マウス移動と連動して矩形を移動させれば良いのでは?
>>76 69でUPしたのはなんだかでたらめのやつをUPしてしまったんですが
76と同じ意味の事をやってるつもりのバージョンでもできないんですよねぇ。
WM_MOUSEMOVEは使いたくないし。。。
>>77 どの辺りが分からないのかをハッキリさせないと
多分誰も答えてくれないと思うよ。
79 :
デフォルトの名無しさん :04/09/04 00:01
他人が書いたWinソフトのソースコードを見ると 標準出力の起動しないアプリケーションで よくprintfが描いてあるのですが、これはどういった効果のためでしょうか?
sprintfの見間違いと思われ
81 :
デフォルトの名無しさん :04/09/04 00:07
いえ、見間違いでは有りません、 デバッグのときだけ認識するようですがこれはなんなのでしょうか
visual c++.netでおすすめの本ってありますか?
>>79 標準出力の起動しないってどういう意味だ?
デバッグ用の出力だろ。
コンソールアプリでなくても標準出力はできるぞ。
パイプ開くツールから起動してログ取ったりする。リダイレクトも出来るだろ。
>>78 すいません。昨日の部分はうまくいったんですが別の問題が発生したので改めて、、、
APIで矩形を描いてそれをマウスで掴んで動かす実験をしてます。
GetAsyncKeyStateでマウスボタンの押下状態を取得してるんですが、
外からボタンを押したまま矩形に接しただけでも矩形を掴めてしまって困ってます。
(連射しながら近づいているような扱いになっているためフラグとか使うのも無理っぽい)
ウィンドウメッセージのswitchを使わずに、
きちんと矩形内でマウスボタンを押下する以外には掴めないようにできないものでしょうか?
なにか方法があったら教えてください。お願いします。
↓ソースです。(VC6++です)
ttp://gamdev.org/up/img/1162.zip
脳内コンパイルだけどこれで駄目ですか? static int oldX,oldY;; static bool bDrag=false; //左ボタンが押されてたら移動 if(bDrag) move(mouseX-oldX,mouseY-oldY); if (GetAsyncKeyState(VK_LBUTTON) & 0x8000){ //カーソルが矩形内にあるかどうか判定 if (mouseX>=wndX && mouseX<=wndX+wndW && mouseY>=wndY && mouseY<=wndY+wndH){ bDrag=true; } } else bDrag=false; oldX=mouseX; oldY=mouseY;
>>85 すいません、駄目でした。。。
動き的には今までと同じ模様です。
じゃあこれは if (!bDrag&&GetAsyncKeyState(VK_LBUTTON) & 0x8000)
んーこうかな? int oldX,oldY;; static bool bDrag=false,bFst=false; //左ボタンが押されてたら移動 if(bDrag) move(mouseX-oldX,mouseY-oldY); if (!bFst&&GetAsyncKeyState(VK_LBUTTON) & 0x8000){ bFst=true; //カーソルが矩形内にあるかどうか判定 if (mouseX>=wndX && mouseX<=wndX+wndW && mouseY>=wndY && mouseY<=wndY+wndH){ bDrag=true; } } else{bFst=bDrag=false;} oldX=mouseX; oldY=mouseY;
ヘッダーファイル |_A.h |_B.h とあって、ヘッダーファイルAの中ではclass Aが定義されていて、ヘッダーファイル Bの中ではクラスBが定義されています。 ここで、 #include "B.h" class A : public BとしてクラスBを継承したいのですが どうしても、C2054 の「定義されていない基本クラスが宣言されています」の エラーが出てしまいます。 逆に、ためしに #include "A.h" class B : public A とやると、エラーはでません。この理由がわかりません。この場合クラスAとBの 違いは何が考えられるでしょうか?
ごめんおれへっぽこだな if (!bFst&&GetAsyncKeyState(VK_LBUTTON) & 0x8000){ bFst=true; //カーソルが矩形内にあるかどうか判定 if (mouseX>=wndX && mouseX<=wndX+wndW && mouseY>=wndY && mouseY<=wndY+wndH){ bDrag=true; } } else if(bFst){bFst=bDrag=false;}
すまん、先行宣言関係ないじゃん…
>>90 原因を突き止めるためにsimplifyしてみたら?
----- A.h -----
#include "B.h"
class A : public B {};
----- B.h -----
class B {};
ここまでやれば通るでしょ?
>>91 どうもです。
これでもだめっぽいです。
やっぱ時間を細切れに考えると連射で矩形内に侵入してることに
なってるんでしょうか。。。頭がこんがらがって…
すいません、ちょっと別のところで聞いてくることにします。 色々お世話様でした。助けてくれた方ありがとうございました。
すいません、課題が進まなくて困っています、誰か教えていただけないでしょうか? 目的は、すでにあるテキストファイルを次々に読み込んでその中の一部のデータだけを まとめて一つのファイルに出力したいのですが・・・、 次々にファイルを読み込む命令で, fpopen(fp,"ファイル名+number","r"); みたいな形でnumberの部分for文で次々に変えていきたいのですが うまくいきません(T_T) strcatやstrcpyを使うことは考えたのですがint型はchar型では渡せないとかなんとかの エラーが・・・。雑な説明ですがどうぞご教授願います。
おお!? 試してみます! ご返事ありがとうございます!!
>>96 そんなに難しい事かな?
以下のコードで出来るよ(確認済み)。
static POINT BoxPos;
static POINT OldCurPos;
static BOOL DrgFlag;
POINT CurPos;
GetCursorPos(&CurPos);
ScreenToClient(hWnd, &CurPos);
if(GetKeyState(VK_LBUTTON) & 0x80){
if(!DrgFlag){
if(CurPos.x >= BoxPos.x && CurPos.x <= BoxPos.x + 64 &&
CurPos.y >= BoxPos.y && CurPos.y <= BoxPos.y + 64){
DrgFlag = TRUE;
OldCurPos.x = CurPos.x - BoxPos.x;
OldCurPos.y = CurPos.y - BoxPos.y;
}
}
}else{
DrgFlag = FALSE;
}
if(DrgFlag){
BoxPos.x = CurPos.x - OldCurPos.x;
BoxPos.y = CurPos.y - OldCurPos.y;
}
ソースファイル A1.cpp ヘッダーファイル B1.h をビルドするとエラーが出ませんでした。後にソースファイルにA2.cppを追加したらエラーが でました。そしてその後A2.cppを消して再ビルドすると以下のエラーが出て どうしても解決しません。 error LNK2020: 未解決のトークン fatal error LNK1120: 外部参照1が未解決です。 調べると、変数が見つからないという類のエラーらしいのですが、だとしたら 一度通ったコードが通らなくなる理由がわかりません。 誰か教えてください!
>>100 ありがとうございます。実は昨夜何とか解決しました。
100の方法試させて頂きましたが、
ドラグ状態で矩形に近づくと掴んでしまいません?
>>102 ああ、それが問題だったのね… 解決したなら、もう必要ないとは思うけど
以下修正コード。ちょっと汚いけど。
BOOL GetLBtnState(void)
{
static BOOL flag = FALSE;
if(GetKeyState(VK_LBUTTON) & 0x80){
if(!flag){ flag = TRUE; return TRUE; }
}else{
flag = FALSE;
}
return FALSE;
}
void Main(void)
{
static POINT BoxPos, OldCurPos;
static BOOL DrgFlag;
POINT CurPos;
GetCursorPos(&CurPos);
ScreenToClient(hWnd, &CurPos);
if(!DrgFlag && GetLBtnState()){
if(CurPos.x >= BoxPos.x && CurPos.x <= BoxPos.x + 64 &&
CurPos.y >= BoxPos.y && CurPos.y <= BoxPos.y + 64){
DrgFlag = TRUE;
OldCurPos.x = CurPos.x - BoxPos.x; OldCurPos.y = CurPos.y - BoxPos.y;
}
}else if(DrgFlag && !(GetKeyState(VK_LBUTTON) & 0x80)){
DrgFlag = FALSE;
}
if(DrgFlag){ BoxPos.x = CurPos.x - OldCurPos.x; BoxPos.y = CurPos.y - OldCurPos.y; }
}
MFCをでコードを組んでいて、Onpaintで描画しようと思っています。 あるダイアログボックスの中に、Edit Controlを4つ、ボタンを1つ用意し ボタンを押した瞬間に、Edit controlに入れられた値をパラメータとする四角形 をビューウィンドウに描画するようにしたいのですが、 Onpaint関数だと、ボタンを押した瞬間には描画してくれません。 又、Invalidate();を使うとビューウィンドウではなく、ダイアログボックスの中に 描画されてしまいます。 何か良い方法はありませんでしょうか?
よくわからんけど、RedrawWindow()じゃダメ?
一部追加。 void CChildView::OnBnClickedOk() { Invalidate(); OnPaint(); } ボタンが押された時に呼び出される関数OnBnClickedOk()の中で上のように 書くとダイアログボックスの中に描画されてしまいます。 RedrawWindow()やupdatewindow()でもうまくいきません。 OnBnClickedOk()メソッドの中で再描画をコードしてはいけないのでしょうか?
>>106 OnPaint()が、CChildViewのメンバ関数だからじゃね?
描画すべき親の関数を呼び出してみては?
>>104 矩形表示用のウィンドウと値設定用のダイアログがあるのかな?
それなら値を格納する変数はとりあえずグローバルにしておいて
ダイアログのボタンを押したときに表示用ウィンドウ側に、
WM_PAINTメッセージでも送ってやったらどうだべ?
で表示用ウィンドウ側ではそのデータを元に矩形を描くと。
109 :
デフォルトの名無しさん :04/09/05 16:46
String Tableでは扱えない大きさの文字列をリソースにして読み込みたいのですがよい方法はありませんか?
main関数があるソースの場合 cout <<を使えば、そこを通る値が確認できデバッグしやすいのですけど、 MFCでコレに近いことってできませんかね。 ある場所を通る値を簡単に出力できるような方法がないですかね?
MessageBox
>>109 バイナリリソースにして埋め込んでは伺か?
それを読み込む方法がわからないです
115 :
デフォルトの名無しさん :04/09/05 20:01
#pragma once というのは、どこまで制御が及ぶんですか? #pragma once #include "a.h" #include "b.h" #include "c.h" だと、"a.h" "b.h" "c.h"全てに制御されますか?
>>114 LoadResource(hModule, FindResource(hModule, lpName, lpType));
117 :
デフォルトの名無しさん :04/09/05 20:33
#pragma onceまで
>>117 挟むんですか、なるほど。
ありがとうございます。
いきなりで申し訳ないですが質問させてください。 MDIのプログラムで別スレッドで1秒ごとにデータを受けながらそれを表示する というようなプログラムを作っていたのですが、たまにその表示が固まってしまい 更新しなくなってしまいました。(このときCPU稼働率が100%になっていた) これは 「for」もしくは「while」の条件文がどこかでおかしくなっている、と判断して よいのでしょうか? 上の二つ以外にも可能性がありえるとしたら教えてください。 Win2k/VC6++
エスパー登場 ↓
123 :
デフォルトの名無しさん :04/09/06 16:38
標準コントロールのエディットボックスIDC_Aがあるとします。 直接コーディングでSetDlgItemText(hdc,IDC_A,"aaaa\r\naaa") とすると自動で改行表示さます。 しかし、別のエディットボックスに同じように「aaaa\r\naaa」と手で入力し、 それをGetDlgItemTextして、 その文字列をIDC_Aにセットすると改行されないのは どういう仕組みなんでしょうか。
124 :
デフォルトの名無しさん :04/09/06 16:46
.net XP sinやcos、tanを使いたいのですが、 error C2668: 'sin' : オーバーロード関数の呼び出しを解決することができません。 などというエラーが出てしまいます。 変数=sin(数値); という形にしているのですが使い方が違うのでしょうか?
>>123 前者はキャリッジリターン(0x0d)と改行(0x0a)の文字コードになる。
後者はただの「\r\n」という文字列。
127 :
デフォルトの名無しさん :04/09/06 17:11
>>125 kakudo(float型)=sin(20);
という形にしていますが、PIも使えないようなのでラジアン云々の計算すらできないです。
>>127 ダメダメ
kakudo(float型)=sin((double)20);
129 :
デフォルトの名無しさん :04/09/06 17:19
>>128 oops..
ありがとうございます。
sin・cos・tanはエラーが出なくなりました。
・・・その中に使う円周率のPIが使えないのですが、PIの前後に何か付くのでしょうか?
error C2065: 'PI' : 定義されていない識別子です。
3.14159・・・でも誤差は僅かなのですがほぼ正確な円周率を使いたいです。
131 :
デフォルトの名無しさん :04/09/06 18:30
>>130 自分でやらないと駄目なのか(;´Д`)
PIと書いて、カーソル合わせると #define PI 3.141592653589793 とツールチップでヒントが出るので、どっかに定義されてはいるみたいだな ただ、どのヘッダーをincludeすれば良いのかは分からない・・・ (なら、ヒント出すなよ・・・)
>>123 ソースコード中の「\r\n」と通常(この場合エディットボックス)の「\r\n」は意味が違うよ。
エディットボックスに入力された「\r\n」はプログラムと違ってエスケープシーケンスとして認識出来ないよ。
だから、エディットの「\r\n」はコード上での「\\r\\n」と同義になるよ。
134 :
デフォルトの名無しさん :04/09/06 19:53
余計な問題が出ますたorz selectのcase内で宣言したR[][]をグローバル変数R2[][]に入れるという作業をしたいのですが >: error C2059: 構文エラー : ']' 「R2[][]=R[][];」をするとこうなりました。 *R・R2は2×2の行列 行列の中に行列を入れると言う動作は1発でできないのでしょうか。 できないならできないで2重ループで1つずつ処理すれば大丈夫そうだけど・・
135 :
デフォルトの名無しさん :04/09/06 20:38
構造体かmemcpy
どこに定義されてるかわからんようなのはgrepかけるなりwinの 検索なりで探せよド素人が。
137 :
デフォルトの名無しさん :04/09/06 20:50
VC++初心者です。 よろしくお願いします。 DHCP環境のWin2000/XPマシンがあります。 このマシンの ・IPアドレス ・サブネットマスク を取得したいのですが、どのようにすればよろしいのでしょうか? 固定IPなら、gethostbynameが使えるのですよね。。。 今日一日、ネットで私なりに色々検索したのですが、分かりませんでした。 手がかりだけでも良いので、ご教授よろしくお願いします。
138 :
デフォルトの名無しさん :04/09/06 20:51
>>135 レスありがとうございます。
構造体・・・かorz
> 固定IPなら、gethostbynameが使えるのですよね。。。 hostsファイルに自分のホスト名とIPアドレスがあれば、と言うことですよね。 そのIPアドレスが固定じゃない(hostsにIPアドレスが記述されていない)DHCP環境では、 どうしたら良いのか。。。
>>137 > このマシンの
> ・IPアドレス
> ・サブネットマスク
そもそもそれ違ってるだろ
システムにアドレスがあるんじゃなくてアダプタに付いてるもんなんだから
142 :
デフォルトの名無しさん :04/09/06 21:41
memcpyは初めて聞いたので使い方がビミョンヌ(´・ω・`) memcpy(R2,R,2)?;
144 :
デフォルトの名無しさん :04/09/06 21:55
MSDNに書いていることって初心者には難しい(知らない言葉が出てくる)のはどうにかならないものかorz とりあえず組みなおした後適当に試してみます。
>>120 凄い質問だなw
さて問題です。織田信長はどうでしょう?
みたいな。
おまいら標準Cの関数はマスターしたほうがいいぞ、できないと書けるコードが少なすぎるマになるぞ
147 :
デフォルトの名無しさん :04/09/07 00:09
132じゃないんですが、気になったので・・・ PIってどこで定義されてるか、どのようにすれば 分かるのでしょう?
148 :
デフォルトの名無しさん :04/09/07 00:12
MSDNでPIを検索
3.1415あたりで検索かけりゃわかりそうなもんだが・・
ありゃ、確かにHITしないな
うーん・・・ 難しそうですね。 そんなに重大問題では無いので、きっぱり諦めます。
DirectXSDKにあった #define D3DX_PI ((FLOAT) 3.141592654f)
>>141 そうですね。
では表現を正しくして、複数LANカードがささっているDHCPマシンの
・IPアドレス
・サブネットマスク
を知るには、どうすれば良いのですか?
VC++6を使用しています。 ダイアログボックス内に配置したスタティックテキストに線を描画させることが出来ません。 スタティックテキストのIDは「IDC_CANVAS」としました。 *.exeファイルを実行すると、ウィンドウは開かずにダイアログボックスのみを開くようにしてあります。 //関係のある部分のみ抜粋 /* global変数 */ HDC hdcMemCanvas; /* キャンバスのメモリデバイスコンテキストのハンドル */ HBITMAP hbmCanvas; /* キャンバスのビットマップのハンドル */ HBITMAP hbmDefCanvas; /* キャンバスのデフォルトビットマップのハンドル */ /* ここまで */ BOOL CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ /* case WM_INITDIALOG内 */ HWND hwndCanvas; /* キャンバスのウインドウハンドル */ HDC hdcCanvas; /* キャンバスのデバイスコンテキストハンドル */ RECT rectCanvas; /* キャンバスの矩形 */ /* キャンバスのためのメモリデバイスコンテキストを作成する */ hdcCanvas = GetDC(hwndCanvas); hdcMemCanvas = CreateCompatibleDC(hdcCanvas); ReleaseDC(hwndCanvas, hdcCanvas); /* キャンバスのためのビットマップを作成する */ GetClientRect(hwndCanvas, &rectCanvas); hbmCanvas = CreateCompatibleBitmap(hdcMemCanvas, rectCanvas.right, rectCanvas.bottom); /* ビットマップを選択する */ hbmDefCanvas = SelectObject(hdcMemCanvas, hbmCanvas); /* case WM_INITDIALOG内はここまで(以下の処理は省略) */ Draw(hWnd); } /* DialogProcここまで */
/* 線の描画 */ Draw(HWND hwndDlg){ MoveToEx(hdcMemCanvas, 30, 30, NULL); LineTo(hdcMemCanvas, 200, 200); SendDlgItemMessage(hwndDlg, IDC_CANVAS, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hbmCanvas); } スタティックテキストの位置と、線を描画する座標は合っています。 どこがオカシイのでしょうか?ご教授願います。
>>155 うわぁー。これで解決するかもしれません!
早速試してみます。
ありがとうございます。
スタティックテキストに直接、線なんて描けるの? スタティックコントロールの派生クラスを作って そこのPaintかなんかで描画した方が簡単なような
MFCでコーディングしているとどうしてもドキュメントクラスに処理が集中してしまうのだが どうしたらいいのだろうか。処理の意味的にビュークラスやアプリクラスには入れられない。 メニュー処理、ダイアログ表示、処理実行等、ドキュメント変更にかかわるもの全てドキュメントクラス上にあります。 MFCのアプリってのはこういうものなのでしょうか?
HDC hdc; hdc=GetDC(GetDlgItem(hDlg,IDC_EDIT));//(GetDlgItem(コントロールの親ハンドル,コントロールのID) MoveToEx(hdc, 30, 30, NULL); LineTo(hdc, 200, 200); って感じに簡単にエディットボックス内に線が引けた。
OS再インスコするのですが,VC6.0のカスタマイズのファイルって バックアップできますか?
.hファイルにクラスのメンバやメンバ関数をいれ、 .cppファイルに関数の中身を書くというのはよく行うこと なんでしょうか。 みなさんはどのようにファイルをまとめていらっしゃいますか? かなり気になる== もしいいサイトあったら教えてほしいです。よければお願いします。
>>164 そんな感じで問題ないと思うけどね。
余程短いコードならヘッダに直接書いちゃう事もあるけど。
>>160 釣りか?
ドキュメントが処理ではなく、ドキュメントへ「通知」すると考えれば、
自然と各ビューに処理が分散される。
そもそもコマンド系がアプリやメインフレームに少なかったり、
ダイアログの処理がダイアログになかったりするなら、
なにか根本的な考え方に問題がある。
コマンドがアプリやメインフレームに集まる方こそおかしくないか? アプリは GetViewList/GetDocumentListとか、Application.Exit Application.Clone とかだけでいいと思うんだが。
>>165 >>166 レスありがとうございました。
そうですか。なんかちょっと別の方法を期待してたのですが。
でも、そうと分かればしばらくその方法でいこうと思います。
慣れるまで。
続けて質問すみません。
WM_のウィンドウメッセージをキューから削除するような関数って
有りませんか。ちょうど、SendMessageやPostMessageの逆みたいな
関数。本やリファレンス調べてみたけど見つからない。
有りそうな関数だと思うんだけど。やろうとしているのは
ウィンドウ作成時にWM_ACTIVATEを呼びだすのを止めたいのですが。
でもでも、DefWindowProcに送らなくても大丈夫か。。?
実装してるコードが気になるが、リファレンスで探してみるも
また見つからない。検索の仕方難しい。
フラグで処理すればいいかも知れないが、何かとできない処理が
見つかればすぐにフラグが思い付く私は、、、、(ry
長文スマソ。。
GetMessageでもPeekMessage(PM_REMOVE)でも。
171 :
デフォルトの名無しさん :04/09/08 02:48
デスクトップ上のマウスの動きをプロシージャに送りたいのですが、どのようにしたら宜しいのでしょうか? SetCapture()を使ったのですが、全然WM_MOUSEMOVEとかのメッセージがきません・・・
>>171 timerセットして、GetCursorPos()で監視とかではダメ?
>>171 マウスフック
SetCaptureはドラッグしている間しか効かなかった気がする。
174 :
デフォルトの名無しさん :04/09/08 18:13
VC++6.0 MFCを使ったダイアログベースのシリアル通信アプリケーションを作りたいのですが、 受信したものを表示させるところで行き詰っています。 char型の受信バッファをエディットボックスにいい感じに表示するにはどーすれば良いですか? 受信バッファ rcvBuf エディットボックスのID IDC_EDITrcv といった感じで、 ReadFile(hComm, rcvBuf, dwCount, &dwRead, NULL);//ファイルからデータを読み取る(char) CString aiu; rcv = rcvBuf; SetDlgItemText(IDC_EDITrcv,rcv); と、今はこんな感じです。 何やら無理やりCStringにしてるんですが、charのままエディットに表示できたりしないですか? あと、これでも表示されるんですが、0x40と16進で表示させたいにもかかわらず ・@と文字コードで表示されてしまいます。 ご覧の通り初心者ですが、何かアドバイスお願いします。
すいません、訂正です。 ReadFile(hComm, rcvBuf, dwCount, &dwRead, NULL); CString rcv; rcv = rcvBuf; SetDlgItemText(IDC_EDITrcv,rcv);
>>175 普通にこうじゃないの?
SetDlgItemText(IDC_EDITrcv, rcvBuf);
ゴメン 0x40 みてなかった・・・
>>170 削除じゃ無くて拾えば良かったんだ。
ありがとです。
>>176 すんません、普通に
ReadFile(hComm, rcvBuf, dwCount, &dwRead, NULL)
SetDlgItemText(IDC_EDITrcv,rcvBuf);
で表示できますね。無駄にCStringにしてました。意味なかったっぽいです。
↑これでchar型のままエディットボックスに表示できたのはいいんですが、
やはり、文字コードの・@と表示されてしまいます。
ちなみに、
SetDlgItemInt(IDC_EDITrcv,dwCount);
とすると、16と表示され、受信データは16バイトのはずなのですが、先頭の40しか表示できていないのも気になります。
まずは@の文字コードを40と表示できるようになってから16バイトすべて表示させてやろうと考えております。
何度も書き込み申し訳ありません。
そら0x40は@だからなあ・・・・そう表示されちゃうべ。 通常の数字やアルファベットはそのまま表示して、特定のコードだけ 16進で表示しようとしてるんかね?
181 :
5歳の女をレイプマン SS :04/09/08 20:11
ss(おしゃれやん芸人)は和田明子を車で引かしたのでしょうか。
182 :
デフォルトの名無しさん :04/09/08 21:51
すみません・・・間違えて書き込んでしまいました
>>172 さん
>>173 さん
どうもありがとうございました。
フックでやってみます
>>180 >通常の数字やアルファベットはそのまま表示して、特定のコードだけ
>16進で表示しようとしてるんかね?
そうです。
@にならないように、0x40、もしくは40とエディットボックスへ表示するにはどうしたら良いでしょうか。
>>184 sprintf(mojiretu, "0x%x", suuji)
>>185 ReadFile(hComm, rcvBuf, dwCount, &dwRead, NULL)
sprintf(rcvBuf,"0x%x",rcv)
SetDlgItemText(IDC_EDITrcv,rcv);
ということでしょうか。
何はともあれアドバイスありがとうございます。
現在は開発環境が無いため、明日朝一でアドバイスを元に試行錯誤してみます。
>>186 逆だよ。一桁づつしか変換できないし。
sprintf(rcv, "%#x", rcvBuf[0])
SetDlgItemText(IDC_EDITrcv, rcv);
ちょっと気になることがあるので教えてください。 1、 TypeA& func() { return *new TypeA; } 2、 game->fire(new CBullet(iX+12,iY-6,0,-10,game)); ↑のコードはどっちもネットで見つけたものなんですが、どこにもdeleteが書いてないんですがこれってメモリリークにならないんですか?
前者は大抵の場合リークになるだろうな。 ただ、際限なく増えつづけるような悪質なものとは限らない。 後者はfireの中でdeleteしてるかもしれないしなんともいえない。
>>190 レスどうもです。
やっぱりリークするんですか。
ネットに載せるくらいだから間違いないんだろうな〜と思ってたんですが、そうでもないみたいですね・・・。
すっきりしました。
>>191 リークするかどうかは、newのオーバーライドやその後のコードによるんだよ。
参照にしたものからわざわざポインタを取り出してdeleteする事もできるし、
ヒープ以外から確保するようにnewをオーバーライドしているかもしれない。
ついでに言えば使い方次第ではdeleteしなくても間違いじゃない。
ネットに載せてあるソースなんて、大抵間違いだらけ
194 :
デフォルトの名無しさん :04/09/09 15:35
VC++6を使用しています。 ウィンドウを作らずにダイアログボックスのみを開くプログラムを作成しています。 プログラム実行と同時に線を描画させたいのですが、上手くいきません。 ・global変数として「HDC hdc_field」を作成。 ・ダイアログプロシージャ関数の case MW_INITDIALOG 内で hdc_field = getDC(hWnd); @↑のgetDCの命令の下に、線を描画させる関数を配置。 A線を描画させる関数を、ダイアログボックスに配置したボタンを押したときに呼ぶ関数内に配置 Aでは線が描かれるのですが、@では線が描かれません。 同じ関数を呼び出しているのに、どうしてなのでしょうか? また、プログラム実行と同時に線を描画させるにはどうしたら良いのでしょうか? (ウィンドウを開くプログラムではこのような問題は生じなかったのですが…) よろしくお願いします。
>>194 WM_INITDIALOGが送られてくる時点ではまだダイアログは画面に表示されてないから何描いても無駄。
WM_PAINTに処理書くとか、WM_INITDIALOGでWM_APP+nをpostしてそこで描くとか。
ありがとうございました
>>195 むむ、そうですか。やってみます。
ありがとうございました。
>>196 自分の番号と、レスアンカーを付けた方がよろしいかと。
198 :
デフォルトの名無しさん :04/09/10 05:36
えーとC言語歴一週間のヘタれですが これからVC++とMFCというやつで色々作って行こうと思ってます。 ベクターとかで公開してそこそこダウンロードしてもらえる様な物を作るのが当面の目標です。 この版見ているとMFCが難しいと言う意見が多いんですが 実際自分でちゃんとしたアプリが作れる様になるには平均的にどのくらいかかるもんなんですか? その辺は人によりけりだというのは百も承知ですが 参考までに最低でもこの位の期間が必要だというのを教えていただければ幸いです。
下積みの有無によるものが大きい。 MFC使った事なくても、JavaAppletとかで画面イベントに慣れていれば1ヶ月くらいでいけるかも。
>>199 レスどうもです。
下積みですか。でも自分は下積みどころかプログラムするのも初めてなんですよ・・
こんな感じだとやっぱり結構時間がかかるんでしょうね・・
それともう一つお聞きしたいのですが
ボーランドのC++ビルダーとかは使いやすいと言う意見が多いのですが
具体的にどの辺がMFCと比べて使いやすいのか教えて頂けると助かるのですが。
場合によってはそちらの方に乗り換えようかとも考えていますので。
コードを書かなくても外見だけは作れる
パソコン買ったけど使えなくて挫折する VC買ったけど使えなくて挫折する どっちもよく聞く話
全く経験ない場合は、CとC++をやってから、MFCに移行だけど、はっきり言って 相当に時間がかかるし、エネルギーも必要。大抵の人は挫折を途中にはさみ ながら、紆余曲折を経て目的に到達というところだろう。 趣味でなく、学生とか仕事だとしたら、向けられるエネルギーも多いだろうから 一気に行ける場合もあるかも知れない。 いずれにせよプログラミングってのは、ただパソコンいじるのと別次元の難しさ があるから、あんまり甘い期待を持たないことだ。
205 :
デフォルトの名無しさん :04/09/10 12:12
マルチメディアタイマーを使用しています。Visual C++だと #include <windows.h> #include <mmsystem.h> #pragma comment(lib,"winmm.lib") を書けばうまくいくのですがBorland C++だとうまくいきません。 リンクができないところが原因だと考えています。設定の仕方を教えてください。 また時間の精度として1msを必要としていてマルチメディアタイマーを使っています。 もし他に何かいい方法をご存知でしたら教えてください。詳しくお願いします。
はじめまして 厚かましいお願いなんですが、VC++6.0のMSDNコレクションのCDの中身を アップしてくださいませんか?ヘルプが使えなくて困っています。 だめならそのCDが売っている所を教えていただけると嬉しいです。
>>205 Borland C++の事など知ったこっちゃありません
普通のMSDNライブラリなら秋葉の怪しい店で売ってる。
210 :
デフォルトの名無しさん :04/09/10 12:29
>>208 もしよければなにか具体的に使用したプログラムの例はありますか?
>>210 こんな感じかなぁ。
#include <iostream>
#include <windows.h>
using namespace std;
int main(void)
{
LARGE_INTEGER freq, now, old;
UINT r = 60;
QueryPerformanceFrequency(&freq);
while(!(GetKeyState(VK_RETURN) & 0x80)){
cout << "fps: " << r << endl;
QueryPerformanceCounter(&now);
while(now.QuadPart - old.QuadPart < freq.QuadPart / r){
QueryPerformanceCounter(&now);
}
QueryPerformanceCounter(&old);
}
return 0;
}
>>206 犯罪を犯せというお願いですか。
凄いですね。
厚かましいとかいう次元の問題ではないですね。
夏ですね。
214 :
デフォルトの名無しさん :04/09/10 13:46
>>211 親切にしていただきありがとうございます。試してみます。
すみませんでした。 秋葉原を探してみます。
217 :
デフォルトの名無しさん :04/09/10 15:42:05
>>211 Borland C++ではまたエラーがでてしまいました。
>>211 さんはVisual C++ですか?
もしBorland C++でのやり方を知っていたら教えてください。
★初心者にVisual C++を教えるスレ★ Part14 Visual C++入門者・初心者からの質問を、 お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。
>>206 MFCとかATLは無理だけど、PlatformSDKのドキュメントなら
PSDK Updateについてくるからそれ使えよ。
他のが見たければMSDN Library Online使うしかないけど。
まじめに、どこから手をつけたら良いかわかりません。 みなさんがプログラミングを始めたきっかけとかどういった感じに勉強したかを教えてください。
結局やる気の問題じゃないかな。 当然まず環境から揃えなきゃならんけど。
>>221 消防のころ電気屋でパソコンを見て欲しくなった。
買ってもらえなかったんでチラシの裏にBASICでプログラム書いてた。
(チラシの裏でゲームはできなかったので。)
>>221 とりあえず入れ物から行く人が多いんじゃないかな?
まずVC買って、自分のカネで用意したからにはそれなりにやろうという気になるし。
後は書籍だろ。他人の推薦とかより立ち読みして自分に合ったの見つける方が良い
とオレは思うけど。
226 :
デフォルトの名無しさん :04/09/11 13:34:46
VC2003のエディタで質問なんですが、 選択した範囲のインデントを整形してくれるショートカットキーって どうやるんでしたっけ? なんかやり方忘れたのか、はたまた効かなくなってるのか・・・ for(;;){ a=0; } ↓(Alt + ?) for(;;){ a=0; } こうなるヤツです。
ツール オプション テキストエディタ
>>224 私も買ってもらえなくて(小3くらい.),
べーマガとか月刊マイコンなんか買ってリストを読んでたなぁ.
さすがに224さんみたいに処理系手に入る前に自分で書くようなことはしなかったですけど.
CString strから'\n'を判定して1行ずつ文字列を得たい場合どうすればいいですか?
>>227 ちがうんです><
スマートインデントじゃなくて、後からインデントを一発で整形するヤツです!
みんな使わないのかなぁ・・・
Atl+F8だろ。
232 :
デフォルトの名無しさん :04/09/11 18:31:09
VC++6.0を会社の研修で使ってます。 自宅でも勉強しようとVC++.net2003を購入したんですが Win32コンソールでソース書いて開始してもコマンドプロントが実行後すぐに 終了してしまいます。 どこか設定で終了させないようできるのでしょか? #include <stdio.h> void main(void) { printf("テストです。\n"); } などと書いても一瞬表示されて自動終了します。 コンパイルもビルドもエラーはありません。 会社で使っているVC++6.0では表示されたあと何か キーを押すと終了されるようなっています。 ちなみに会社も自宅もWinXPです。
>>231 ありがとう!それを手掛かりに、
オプション→キーボード マップ スキームを「Visual Studio 6」
に設定したら直りました。
快適快適☆
>>232 あ、それ知ってますよ
Ctrl + F5
です
>>234 ありがとうございました!
非常に助かりました。感謝します!
勉強がんばるぞ!
236 :
デフォルトの名無しさん :04/09/11 19:43:59
すいません。Visual C++ 6.0 でメンバテンプレートを コンパイルするには何かコツがあるんでしょうか? いま手元にソースや環境がないので詳細な例とか エラーメッセージとか出せないので申し訳ないんですが、 class MyClass { template <class Type> static bool fetchValue(Type & value); } こういった感じのコードをコンパイルできないんです。 gccとかVisual C++ .NETでは通るのに。。 何か関連する情報をご存じでしたら教えていただけませんか?
237 :
232 :04/09/11 20:16:02
すいませんもうひとつ質問させてください。 VC++6.0のときのようにワークスペースを切り替えできるようなものはVC++.net2003ではどのように設定すればいいのでしょうか? ソリューションエクスプローラからスタートアッププロジェクトに設定でことをすませておりますが、 以前のようにワークスペースをメニューバーから簡単に切り替えられないものかと思います。 どうぞご教授お願いします。
>>236 VC6はテンプレートに完全に対応してないとか聞いたが
>>236 typoだと思うけど
template <class Type>
class MyClass {
...
でしょ?
とりあえず必要十分なソースを出してくれ。
話はそれから。
>>240 なるほど、それで分かった。
VC6 はメンバテンプレートには対応してないんだ。
俺、VC6 しか使ってないから、
>>239 みたいのでも
メンバに使ってればメンバテンプレートって言うのかと思ってたよ。orz
>>236 さん、あきらめてください。
>>236 のコードは、VC6でも通るぞ。
ただ、
MyClass::fetchValue<char>(0);
という感じで、型指定をしている場合は通らないハズ。
自動的に型を判別出来る場合は通る。
>>236 class MyClass {
public:
template <class Type>
static bool fetchValue(Type & value)
{
value = Type();
return true;
}
};
int i;
MyClass::fetchValue(i);
VC++6SP6で通ったけど素直に.NETに移行した方がいいと思う。
244 :
デフォルトの名無しさん :04/09/12 00:13:47
MFCなんですが、ダイアログベースでメニューを追加したんですが、 メニューの所が窪んだ感じ(視覚的に)なって、動きには関係ないんですが、 どうにかあの窪み(?)を無くせませんか? VC++2003です。
245 :
虎夫 :04/09/12 02:38:59
現在作っているプログラムで、 割り込みによって一定時間ごとにデータを取得しております。 このとき割り込みの周波数を100[Hz]に設定すると、 プログラムは0.01秒毎にタスクを行います。 (PCのCPUが十分であると考えて) たとえばタスクA,B,Cを割り込みの1周期に1度行うとすれば、 Aのタスクは0.01秒ごとに遂行されます。 しかし、もしBというタスクが常に2秒かかるタスクだとすれば、 それぞれのタスクは2.01秒に1回しか遂行されません。 これはあれ程度しかたありません。 現在私の悩んでいる問題は、 A,Cというタスク(1回に1msもかからない)を0.01秒ごとに 遂行して、ある条件の時にBというタスクを行いたいとすると、 今のままでは、A,Cは普段0.01秒に1度タスクが遂行されますが、 Bが遂行されるときにはタスクが2秒(Bの遂行時間)待ちが生じます。 こんなとき、BをA,Cとは並列に遂行させ、 常にA,Cを0.01秒ごとに遂行させるにはどうすればよいでしょうか? (ここで、Bが遂行中に次のBの命令がくることはないとします。)
246 :
デフォルトの名無しさん :04/09/12 04:46:42
>>242 >MyClass::fetchValue<char>(0);
>
>という感じで、型指定をしている場合は通らないハズ。
げ、まさにそれです。
>>243 みたいに <> を付けないで呼び出せばよかったんですね。
情報ありがとうございました!
ただ、
class MyClass {
public:
template <class Type>
static Type fetchValue(const MyInstance & instance, const string & key);
};
int i = MyClass::fetchValue<int>(instance, key);
こんなことはVC++6ではできないということなんですよね。。。
>>246 >こんなことはVC++6ではできないということなんですよね。。。
うむ。
VCToolKitとか、VC2005Expressβとか落として使ってみるのも手だけど、
おそらく、たくさんコードを書き換えないと動かない予感......
>>245 A,Cの処理は10ms以内に収まるのであれば割り込みトリガそのもので
シーケンシャルに動かして、Bの処理は割り込みトリガからスレッド起動で
処理するとか。A,CとBは同期してる必要がなければ、ね。
これ初めて使うんですが、 何かサンプルコードとかがあって、わかりやすいHPあれば教えて下さい。
252 :
デフォルトの名無しさん :04/09/12 14:30:26
VCを勉強するのに最適な本、教材があれば教えて下さい。
>>252 最適は人によってそれぞれ。
よって答えることは不可能。
初めまして、C++初心者なのですが、さっそく質問です。 例えば、coutで"数値を入れてください"と表示させて 数値を入れた後に"数値を入れてください"の部分が消え 数値を入れた後の答えだけがでるようにするにはどうすればいいのでしょうか? それとdos画面でreturn 0;とcoutの間に改行を入れるにはどうしたらいいですか? ご教授お願いします。
>>255 完全なスレ違い
それはVisual C++ではなくてC++
今日VisualC++.NETを買ってきました。 プログラミング経験は無いです。 よろしくおねがいします。
出来るよ。 ただし、組み合わせによっては無効になるものもある。
262 :
デフォルトの名無しさん :04/09/13 03:36:10
環境:VC++.NET 2003 A, B, Cという3つのプロジェクトがあって、 BはAのソースとヘッダを、CもAのソースとヘッダを 自らのものと混ぜて一緒にコンパイルしたいのです。 このとき、BやCのソリューションエクスプローラに Aのソースとヘッダを登録しないとだめなのでしょうか。 Aの構成を変えたときに、BとCの両方を変更するのが 面倒くさくて…。
DevPartner Profilerの.NETバージョン(7.0)を落としたんですが、VC++7.0で使えません。 ネイティブコードでも使えるようなこと書いてあったんですが、どうすればいいんでしょうか。 ちなみに使えないというのは、プロファイラを有効にして実行しても何も起こらないって意味です。 誰か助けてください。
VC6と.NETの違いってなんですか? 経験だと.NETアプリって重いから移行したくない…。 日曜プログラマみたいな自分でも移行してたほうがいいですか?
>>265 VC.NETは.NETアプリだけでなく、
従来通りのWin32ネイティブのアプリも作成可能
VC6 = Win32アプリ
VC.NET = Win32アプリ or .NETアプリ
移行の必要はさほどないと思います。
質問があります。 Win2000/VC++環境にて、LANアダプタのDHCPの設定(Enable/Disable)は どのようにすれば取得できるのでしょうか? 色々調べたのですが、解りませんでした。 ご教授、宜しくお願いします。
新VisualC++.NET入門 ビギナー編 林晴比古 という本を買ってきました。
>>270 3部に分かれてますね。
・VC++.NETの操作法
・VC++.NETを使ったプログラミング
・C++の説明
の3つです。。。Amazonのレビューにもありましたがマニュアルって感じです。
書店でVC++.NETの本を探したのですが他の本は体系だてて説明していないのでこれにしました。
273 :
デフォルトの名無しさん :04/09/13 17:46:03
vc++6使用です。 ダイアログボックスベースのファイルを作っています。 *.exeファイルのアイコンの設定方法がわかりません。 ウィンドウベースの場合では、int WINAPI WinMain関数中に WNDCLASSEX wcl; char iconName[] = "IDI_ICON1"; wcl.hIcon = LoadIcon(NULL, iconName); とすることでアイコンを設定できますが、ダイアログボックスベースの場合は どこに、どのように既述をすればよいのでしょうか?よろしくお願いします。
SetIcon
HICON hIcon; hIcon=(HICON)LoadImage〜 って感じでアイコン読み込んで SendMessage(hDlg,WM_SETICON〜 でメッセージ送ればできるのではないだろうか。多分。
>>267 GetAdaptersInfo関数かなあ。
複数ネットワークカードがささってる場合の処理に気をつけた方が
よさそう。(IP_ADAPTER_INFOのNextに次のへのポインタ、など。)
どっかスレと似たような質問と回答だな
278 :
デフォルトの名無しさん :04/09/13 22:05:16
新VisualC++.NET入門 ビギナー編 林晴比古 いいんだけどさ・・・・ちっともシニア編が出ない訳よ。 近刊ってなってから1年経つんだけど、もう出すの辞めたの? 頼むよ晴比古クン。
死
もうVC++6.0入門シニア編を脳内変換するしかなお
基本クラスのメソッド内で派生クラスのメンバを使わせる方法ってありませんか? class Data : public Photo{ protected: Point pt; } class Photo{ protected: PhotoData *pData; char FileName[128]; public: void LoadPicture(){ WinLoadPicture(pData, FileName); } void Draw(){ WinDraw(Data::pt, pData); //ここ } } こんな感じの使い方がしたいです。即席で作ったので間違ってるかも。 へぼへぼ。
DataがPhotoを継承するの?
>>281 Photoで
virtual Point& getPoint() = 0;
ってやってDataで
Point& getPoint() {
return pt;
}
って実装させればいいじゃん。
284 :
デフォルトの名無しさん :04/09/14 01:18:10
ウィンドウを半透明にしたいのですが、ソースの一番上で、 #define _WIN32_WINNT 0x0500 としてるのですが、コンパイル時に error C2065: 'WS_EX_LAYERED' : 定義されていない識別子です となって、コンパイルできません WinUser.hの中を検索したのですが、WS_EX_LAYERED というものが見つかりませんでした・・・ わかるかた、よろしくお願い致します
>>282 >>283 Photoクラスをそのまま使い、Dataクラスは
Data1、Data2とかそれぞれ固有のメンバを持つ
クラスを作成しようとしてます。
だから、Dataクラスが基本で、Photoクラスを
派生にしました。
うーん、やっぱり派生クラスでデータを吐き出して
基本クラスで読み込むしかないのかなぁ...
それとも、継承を逆にするか、もう一回考え直します。
質問する事で頭の中が整理されたような気がします。
する前はパニック状態でした。ありがとうございました。
自分で考えるしか無さそう...
すみません。開発環境を書き忘れました WindowsXP、VC++6.0 です。
>>284 MS行って最新のPlatform SDKダウンロードして来い
プラットフォームSDKで導入されたから CDからインスコしただけのVCのヘッダには 当然入っていない。VC++6でしょ?
ディレクトリを設定する。リストの一番上にSDKを持ってくる。
>>284 #ifndef WS_EX_LAYERED // 念の為、トラブル回避
#define WS_EX_LAYERED 0x00080000
#endif
↑を、自分のソースにコピペすればいいよ。
>>285 template<class D> class Base {
public:
void Draw() {
static_cast<D*>(this)->Draw();
}
};
class Derived : public Base<Derived> {
public:
void Draw()
{
// 略
}
}
WTLキタ━
>>289 スタートメニュー -> Microsoft Platform SDK -> Visual Studio Registration -> Register PSDK Directories with Visual Studio
AlphaBlend関数を使おうとしてコンパイルしたら通りました。 ・・・がビルドしようとしたら以下のようなリンクエラーが出ました。 error LNK2001: 外部シンボル "__imp__AlphaBlend@44" は未解決です fatal error LNK1120: 外部参照 1 が未解決です。 こういった場合どうすればいいんでしょうか? 誰か知っている方がいましたら教えていただけませんでしょうか。 お願いします。
すみません初心者すぎる質問なんですけどよかったら答えてくれたらうれしいです string str; for(i=0; i<30; i++) { str.insert(str.length(),filename[i]); str.insert(str.length(),"\n"); } Edit_SetText(hEdit, str.c_str()); とゆう感じでエディットボックス?に文字列もセットしたんですけど、文字列が全部つながって一行に表示されるんですけどどうしたらいいのでしょうか・・・ multilineにしちるし編集する時にはエンターで改行も出来ます
>>292 はっきりとは理解できないのですが(勉強不足)
派生クラスのメソッドが基本クラスになってる(?)。すごい
ある一つのメンバが基本クラスにコピーされているのでしょうか
結局、継承を逆にするとスムーズにいかないので派生のメンバを
渡すことにしました。というか、継承してないです。。。
基本クラスをメンバに持たせたらごく自然に上手くいきました。
お騒がせしました。恥。。。ホントすみません。
>>297 あとinsertより
str += filename[i];
と書いたほうが見やすいと思う。
>>290 さん
Program Filesの中探してたらありました!どうもありがとうございます
>>291 さん
直接書くっていう方法もあったんですね。今後何かあったらやってみます。
>>295 さん
私のではなぜかスタートメニューにありません・・・
>>305 なけりゃ実物を探せよ。
つーか別ユーザのスタートメニューに入ってるんだろ。探せよ。
OnKeyDownで、アローキーの左と下、右と上、等の同時押しの判定はどうやるんですか?
308 :
デフォルトの名無しさん :04/09/16 11:54:02
Borland CでのBGIによるgraphics.hの内容をVisual C++で描きたいのですが 書き換えの仕方を教えてください。
>>307 if((GetKeyState(VK_UP) & 0x8000) && (GetKeyState(VK_DOWN) & 0x8000)){
MessageBox("!");
}
mozi配列に代入した平仮名(カタカナ含む)をローマ字に変換してans配列に代入したいのですが上手くいきません。 説明しづらいので簡略化したソースは、 char mozi[20],ans[40]; strcpy(mozi,"ひろゆき"); //変換したい文字列を代入 //mozi配列の一文字目が'ひ'であればans配列にHとIを代入 if(strncmp ( mozi , "ひ" , 1 ) == 0 ) { ans[0]='H'; ans[1]='I'; } 平仮名を使っているせいか関数strncmpあたりの判定がおかしくなってしまいます。例えばmozi配列を'ろゆき'にしてしまっても関数strncmpが0を返しえてしまいif文内の処理が実行されてしまします。 初歩的な質問だと思いますがアドバイスお願いします.
あんまり難しいこと考えずに文字列扱いたいならCStringとか使えば?
レスありがとうございます。
>>313 if(strncmp ( mozi , "ひ" , 1 ) == 0 ) {
の1を2にしたらできました。2バイトってのは解ってたんですがstrncmpの使い方が悪かったんですね。
>>314 初耳だったんですがぐぐってみたら便利そうですね。早速試してみます.
簡単なタブブラウザが作りたいのですが ダイアログベースでも出来ますか?
317 :
デフォルトの名無しさん :04/09/16 22:34:54
プログラミング超・ド・素人ですがプログラムを組まなくならなければなりません。 まずどういうソフトを作りたいか概要を書きます。 パルスパターンジェネレーター(以下PPG)で任意のパターンを発生させるためにテキストデータから そのPPGに合うデータを作らなくてはなりません。そこでテキスト→バイナリー変換のプログラムを作りたいのですが MFCで組、GUI環境で波形を確認しながら作りたいです。 何からやったらいいですか?PPGのバイナリーデータはすでにあります。 環境 Win2000 VC++6.0 です。どうか教えてくださいです。 バイナリの勉強もしなければならないので何か参考になる書物、サイトもお教えください
318 :
デフォルトの名無しさん :04/09/16 22:44:35
319 :
デフォルトの名無しさん :04/09/16 22:46:05
/GR オプションは、実行時にオブジェクト タイプをチェックするコードを追加します。このオプションを指定すると、コンパイラが _CPPRTTI プリプロセッサ マクロを定義します。特に指定しない限り、このオプションはクリア (/GR-) されます。 開発環境でこのオプションを指定するには、[プロジェクト] メニューの [設定] をクリックします。次に、[C/C++] タブをクリックし、[カテゴリ] ボックスの [C++言語] をクリックします。 ラインタイム型チェックの詳細については、「C++ ランゲージ リファレンス」の「ランタイム タイプ情報」を参照してください。
320 :
デフォルトの名無しさん :04/09/16 22:46:22
書き忘れました、VC++6.0使用でwindowsXPsp1使用です。
321 :
デフォルトの名無しさん :04/09/16 22:52:40
322 :
デフォルトの名無しさん :04/09/16 23:23:42
.NETの入門書見ながらVC++6.0で勉強してるんですが、 プロパティーウィンドウのメッセージの追加ボタン(?) (この機能を使うと自動的に関数やメッセージハンドラが追加されるらしい) が見当たりません。6.0でやるにはどうしたらいいですか?
>>322 VC++6では、ClassWizardと呼ばれる機能です。
>>323 ありがとうございます〜!
しかし、ClassWizardの項目が選択できない(灰色)のですが…
作成したプロジェクトの名前を途中で変更することって、できませんか?有ったら教えて下さい。 プロジェクトをまるまるコピーする事が多いので、どれがどんなプログラムか 分かりにくいです。
>>326 できる。project fileの内容を変更すればいい。
328 :
デフォルトの名無しさん :04/09/18 02:37:32
すいません。CListBoxについて教えてください。 やりたいことは、CListBoxへの1行ずつのログ出力です。 最新のログは常に一番下へ追加し、自動スクロールさせて 常に最新ログが見える状態にしたいのです。 また、リソース消費を抑えるために、ある一定以上の古い ログは消去したいんです。 == ソース一部抜粋 == ulines++; if(lines > 50){ m_list_log.DeleteString(0); …(1) } m_list_log.InsertString(-1, strLog); m_list_log.SendMessage(WM_VSCROLL, SB_LINEDOWN, 0); ============= 上記のようにすると、(1)の処理でキャレットが一番上に 移動してしまいます。 常にスクロールバーが一番下になる方法ありませんか? (最新が常に見える状態にする方法) SetScrollPosとRedrawWindowの組み合わせでも出来なかったので よい方法があれば教えてください。よろしくです。
329 :
デフォルトの名無しさん :04/09/18 02:54:23
m_list.AddString("(- -;)"); m_list.DeleteString(0); m_list.SetCurSel(49);
330 :
328 :04/09/18 13:44:20
>329 ありがとうございます。 みごと出来ました!
ファイルのプロパティを表示させる関数とかってありますか? あったら何関数を使ったら良いのか教えてください。 よろしくお願いいたします。
332 :
デフォルトの名無しさん :04/09/18 15:52:03
特定のウィンドウのタイトルバーの高さのサイズを変更したいのですが、 できますでしょうか? 自分で擬似タイトルバーを作成すればできると思いますが、できれば、 標準のタイトルバーで実装したいです。 GetSystemMetrics(SM_CYCAPTION); で、タイトルバーの高さが取得できるのは、分かったのですが、 タイトルバーの高さの設定方法は、分かりませんでした。 どうぞ、宜しくお願い致します。
>>331 SHMultifilePropertiesとか
>>332 できない。
自分でタイトルバーを書くのは、DrawCaptionと言うのがあるのでそれを使って書くしかないと思う。
335 :
& ◆oUgkzAA5Yw :04/09/18 18:11:23
あのう VC の _setjmp() と _setjmp3() の違いを 教えていただきたいのですが。。。
そんな関数あるんだ たぶん一生つかうことないんじゃないか?
ウィンドウの上のコントロールにWS_TABSTOPの属性をつけたのに[TAB]で移動できないんですけど何が原因なんでしょうか
>>338 IsDialogMessage(hWnd, &msg)
見たいにして使ってみたんですけど[tab]を押したときにフォーカスがどこかに行ってしまいました orz
調べてみたところモードレスダイアログによく使われているんですけど
親ウィンドウ(メインウィンドウ)に直接コントロールを置いているんですけどこの関数は使えるのですか?
340 :
デフォルトの名無しさん :04/09/19 22:53:14
MFCでFormViewを選択すると、 CFormViewの印刷サポートは使用できません とでるんですが、印刷はできないんですか?
>>339 MSDN読めよ。
>Although the IsDialogMessage function is intended for modeless dialog boxes,
>you can use it with any window that contains controls, enabling the windows
>to provide the same keyboard selection as is used in a dialog box.
344 :
元unixプログラマ :04/09/20 00:22:53
VC++6上で、wininetを使ってHTTPSクライアントを書いています。 あるWEBサーバに接続したあとで、どうすれば、現在接続中の クライアントのIPアドレスを知ることができるでしょうか。 IPアドレスが複数ついているマシンを使っているときはどうすれば。
345 :
デフォルトの名無しさん :04/09/20 04:30:24
すいません、ダイアルアップについて質問です。 VC++6.0(2000/XP)でRASDial関数を実行するとエラー(668)になります。 問題のソースは以下です。 =============== memset( &entry, '\0', sizeof( RASENTRY ) ); memset( &rasprm, '\0', sizeof( RASDIALPARAMS)); rasprm.dwSize = sizeof( RASDIALPARAMS); dwSize = entry.dwSize = sizeof( RASENTRY ); lstrcpy( rasprm.szEntryName, lpRasEntryName); dwret = ::RasGetEntryDialParams(NULL, &rasprm, &bret); dwret = ::RasGetEntryProperties( NULL, rasprm.szEntryName, &entry, &dwSize, NULL, NULL ); lstrcpy( rasprm.szPhoneNumber, entry.szLocalPhoneNumber ); dwret = ::RasDial( NULL, NULL, &rasprm,NULL, (void *)&RasFunc,&m_hrasconn); =============== ちなみに、ユーザ名、パスワード、電話番号は取得できています。 エラー情報から接続スピードを下げるとかそんなことが書いてありますが 普通にrasdaialで繋がるので、プログラム的に問題があると思っています。 何か設定(処理手順)で見落としているんでしょうか? わかる方おりましたら教えてください。 よろしくお願いします。
解決しました、コントロールにWS_EX_CONTROLPARENTを指定していたので動作がおかしかったようです ありがとうございました!
347 :
デフォルトの名無しさん :04/09/20 23:06:02
Intellisenceが働かない関数があるのですが、それはしかたのないことなのでしょうか? どこかを設定すればよかったりするのですか?
>>347 *.ncbのファイルを削除するとよかったりする
349 :
デフォルトの名無しさん :04/09/21 09:07:21
VisualCでファイルを選択して読みこんだりできますよね? 例えば、あるフォルダFolder1にName1.txtとかName2.txtとかってあるのを 1つ選択するみたいな。 じゃあ、こんなことできますかね? あるFolder1に3つのテキストファイルa.txt, b.txt, c.txtに対して a.txtをひらくと残りのb.txt, c.txtも読みこめるようなことってできます?? フォルダFolder1, Folder2, ...というふうにフォルダがたくさんある中で、 これら全てのフォルダの中にa.txt, b.txt, c.txtといった3つのファイルがあるとします。
>>344 複数IPが割り当てられたクライアントの場合は
接続に使われた1つ分のIPしか分からない。
352 :
デフォルトの名無しさん :04/09/21 13:27:42
VC++.netでSQLデータベースにアクセスするのに最小限必要なソースとはどのようなものでしょうか? というか、 CDatabase を使ってOpen()をやるのだろうと思ったのですが "afxdb.h"をインクルードするだけで error LNK2019: 未解決の外部シンボル __beginthreadex が関数 "public: int __thiscall CWinThread::CreateThread(unsigned long,unsigned int,struct _SECURITY_ATTRIBUTES *)" (?CreateThread@CWinThread@@QAEHKIPAU_SECURITY_ATTRIBUTES@@@Z) で参照されました。 error LNK2019: 未解決の外部シンボル __endthreadex が関数 "void __stdcall AfxEndThread(unsigned int,int)" (?AfxEndThread@@YGXIH@Z) で参照されました。 何が問題なのでしょうか?
353 :
デフォルトの名無しさん :04/09/21 13:32:03
一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 微かなる麦笛 一面の菜の花 上の山村暮鳥の詩を表示するプログラムをできるだけ少ない文字数で つくりたいんですがどうしたらいいですか?
ATOMってなんですか?
int i=0; while(i<7){ if(i==6){ printf("微かなる麦笛\n一面の菜の花"); break; } printf("一面の菜の花\n"); i++; }
>>355 for(int i=0; i < 7; ++i)
printf("一面の菜の花\n");
printf("微かなる麦笛\n一面の菜の花");
for(int i=0; i < 9; ++i) { if(i==7) printf("微かなる麦笛\n"); else printf("一面の菜の花\n"); }
#define a "一面の菜の花\n" #define b "微かなる麦笛\n" for(int i=0;i<7;i++) printf(a); printf(b a);
VCと関係ないのに釣られるなよ
361 :
デフォルトの名無しさん :04/09/21 14:17:09
一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 一面の菜の花 微かなる麦笛 雲雀のお喋り 病めるは昼の月 一面の菜の花 一面の菜の花 一面の菜の花 すいませんスレ違いみたいなんですけどついでに上の詩もいいですか?
#define a "一面の菜の花 " for(int i=0;i<7;i++) printf(a a a +"\n"); printf("微かなる麦笛 雲雀のお喋り 病めるは昼の月\n"); printf(a a a);
>>361 質問する前にROMっとけ
そういう質問向きのスレが見つかるまで質問するな
364 :
デフォルトの名無しさん :04/09/21 14:28:30
LINK : fatal error LNK1181: 入力ファイル "dinput8.lib" を開けません ビルドするとこんな↑エラーが出るのですが、どうすればいいのですか?
365 :
デフォルトの名無しさん :04/09/21 14:34:19
>>360 コンソールアプリケーションです。
新規作成→プロジェクト→win32プロジェクト→
アプリケーションの設定→コンソールアプリケーション
MFCでのプログラムを昨日はじめたばかりの初心者です。 SDIでスケルトンを生成し、プログラムを開始したはいいものの マウス関連処理で困っています。 マウスのスクロールボタン(真ん中)を押して、 イベントを発生させたいのですが、クラスウィザードでメッセージを見ても それらしきものがありません。(スクロールはありますが) CView::OnMButtonDown を手動でインプリメントしたのですが、 機能はしてくれませんでした。 この場合、どのように対処したらよいでしょうか? よろしくお願いします。 開発環境:VC6.0, WinXP Pro
>>367 ハンドラの追加でフィルタを「ウィンドウ」にすれば出てくる。
わかりました! ありがとうございました!
VC++.netでSQLデータベースにアクセスするためには何か設定が必要なのでしょうか? どこ調べても簡単なソースだけ書いて こうすればSQL操作ができるとかあって何か設定が必要であるかなんかはわからないんですが SQLサーバはすでに動いています。 ユーザとデータベースも作ったのでアクセスはできると思うのですが String *query = "SELECT * FROM table1"; SqlConnection *sql = new SqlConnection(); sql->ConnectionString="server=localhost;database=database1"; sql->Open(); SqlCommand *sqlCommand = new SqlCommand(query, sql); sql->Openの時点でSystem.Data.dllのエラーがどうとか この方法以外でもっとシンプルでわかりやすい方法があればそちらを使いたいのですが. localhostのところを実際のIPアドレスに変えてもだめです
371 :
デフォルトの名無しさん :04/09/21 17:45:29
SP6についての質問です。 今日、今更PS6が出てるのに気付いてあわてて導入したんですよ。 構造体の要素を変更しても、入力候補の方で更新されないバグが直るかなー。 ぐらいの気持ちで入れたんです。 それなのに適用後、とりあえず確認のためと思い、作成中のプログラムをコンパイルしてみたら 何故かコンパイルエラーが出てしまいまして・・。 stdarg.h(48) : fatal error C1001: 内部コンパイラ エラー (コンパイラ ファイル 'msc1.cpp', 行番号 1794) というエラーが、2回でてしまうのですよ。 その2つが指す行は共に同じ場所で、stdarg.hの typedef char * va_list; という場所です。 ここから、恐らく可変長引数の周りでなにかしらの不具合が起こっていると思い、可変長引数を ひとまずコメントアウトしてみたら(可変賞引数を使った関数は今後の為に作っておいたのですが、 メインプログラムではまだ未使用な状態でした。)今度は例のエラーが出る回数が3回に増えてしまいました。 お手上げ状態です。(´・ω・`) 尚、他のプログラムも複数試しましたが、それらはどれも問題なく動きました。 よりによって数ヶ月かけて書いてるプログラムがコンパイルエラーなのですよ(つд`) どなたか対処法をご存知の方がいらっしゃいましたら、どうかご教授ください。 よろしくお願いします。
多重継承についての質問なんですが、 階層の深さとかに限界があるのでしょうか? VC++(.NET 2002)では、コンパイルはとうるのですが、ただしく動作をしません。 メモリへの不正アクセスのようなエラーがでます。 しかし、まったく同じコードをIntelC++ですと問題なく動作します。 なにがご存知でしたら教えてください。
C1001の場合は、エラー発生個所と問題の個所に関連が無い事も多いよ。 テンプレートクラスの中にネストしたテンプレートクラスを作ったりすると、 デバッグモードでのみSTLのヘッダでエラーが起こったりする場合があるし。 もちろん、該当クラスが依存しているところでSTLを利用していなくても。
多重形状のエラーですが、0xC0000005がでます。 class A class B virtual public A class C virtual public A class D virtual public B, virtual public C class E virtual public B, virtual public C class F public D, public E というような継承をしています。 class Fから class Aの関数をコールしている場所でエラーが 発生します。 よろしくお願いします。
自己解決致しましたので報告します。
コンパイルモードをデバックモードにしたら正常にコンパイルできたので、
リリースモードでリビルトしてみたところ、正常にコンパイルできました。
気が動転して、足元を見損なっていました。
お騒がせして申し訳ありませんでした(´・ω・`) < こんなことに2時間費やしちゃったよ。
>>373 レスありがとうございました。
1001という数字が少しトラウマになりました(´・ω・`)
星野仙一
377 :
デフォルトの名無しさん :04/09/21 19:13:11
おとといM$のサイトからC#の評価版をおとしてみた。 たとえば「Console.」を打てばその次に来る候補が でていき長い物やよく使わないメソッドなどは大変 楽であった。このような機能はVISUAL c++ でも 搭載されているの?インテリセンス?だったっけ。
もちろん。 入力補完機能が付いていない開発環境は 今では見向きもされないだろう。
379 :
デフォルトの名無しさん :04/09/21 19:18:50
>>378 お前は、今、Del厨犬厨Java厨等、様々な厨を敵に回した。
Delphiの開発環境って入力補完機能無いの? JavaでもEclipseくらいならあるんじゃないの?無いの?
382 :
デフォルトの名無しさん :04/09/21 19:25:32
>>380 弁解しても無駄。
俺がお前の立場なら一人では出歩かない。
へいきへいき Visual J++があるよ
384 :
デフォルトの名無しさん :04/09/21 21:43:55
ただの入力補間ではなくて、クラスやメソッド名を打ち 込むときに終わってからではなく数文字打ているときに 候補一覧が出てくる素早さや、何のショートカットキーを 使わず自動的にとまったところでも出てくるとこがいい。 あとEMACSキーカスタマイズがついてたこと。これは俺に とっては夢のようだ!ちなみにこれはC#トライアルバージ ョンでC++はショートカットキーを押さないと候補が出てこ なかった。
385 :
デフォルトの名無しさん :04/09/21 22:58:23
あるプログラムでデバッガを使用しようとするとSTRSTR.ASMのパスを入力してください と出ます。 そして自分にはまだ理解できない混合モードになってしまいます。 少し前までは出ていなかったのでテキスト形式のソースプログラム上で一行ずつ実行など行えていました。 そして他のワークスペースのプログラムではデバッガはいつも通り使用できます。 混合モードとは何か、こんなダイアログが出たときどうすればいいか調べたのですがわかりませんでした。 Visual C++6.0を使っています。こんな質問ですいません。よろしくおねがいします。
>>385 VC6でもデバッグモードなら呼び出し履歴から
エラーの発生箇所がわかるんでない?
>混合モードとは何か、こんなダイアログが出たときどうすればいいか調べたのですがわかりませんでした。
余力があればアセンブラについて勉強すると幅が拡がるかモナー。
>>385 自分で書いたソース以外の所で止まってるから
388 :
デフォルトの名無しさん :04/09/22 08:52:00
自分で書いた以外ソース以外が、表示されている時 誤って変更&保存しても、大丈夫ですか?
> 自分で書いた以外ソース以外 混合モードで表示されてるコードを編集してしまって大丈夫かってこと? それだったら、混合モードじゃ編集は出来ないと思うぞ。
390 :
デフォルトの名無しさん :04/09/22 12:31:35
>>389 混合モードで、アセンブラが表示されるんですが、
その時ソースも開けるようになって(例えばwinfrm.cpp)
そこでは、編集も出来てしまうんです・・・
これいじると、取り返しの付かない事になりそうで・・・
どうなんでしょう?
// This is a part of the Microsoft Foundation Classes C++ library.
ちなみに、一行目には、このようにコメントされています。
流れ図書いたことある人っている? 資格試験の問題と、教本でしか見たことない
質問が流れて
>>352 誰か何かヒントを下さい〜
よく分からんがとりあえず #include <process.h> をインクルードしてみろ。 それと、プロジェクトの設定のC/C++タブのところにあるコンボボックスから コード生成を選び、マルチスレッド対応のランタイムライブラリを指定して リビルドしてみろ。 解決しなかったらまたいらして下さい。
>>352 本も見ないでやってるとは、超初心者か?超ベテランか?
おそらく仕事でやってるんだろうけど、
本の値段より時給の方がはるかに安いのか?
CPUがSSE3に対応しているかどうかをプログラム中で取得したいのですが どうしたら良いのでしょうか? よろしくお願いします。
>>397 アセンブラのcpuid命令で取得出来たと思う。
MFC(VC6で作成)の質問です。 スプリットウィンドウを CSplitterWnd で複数作成して、 そのスプリットウィンドウのどこかでイベントを発生させたら、 すべてのスプリットウィンドウを更新するにはどうしたらいいんですか?
>>390 つーかwinfrm.cppを書込み禁止にしておけばいいし。
そうじゃなくても、あとから上書きすればいいし。
また、編集できるつっても、どーせアセンブラ言語の行は
変えられないんでしょ?
変えられたとしても、C++のソースに反映されないでしょ?
反映されたとしても、winfrm.cpp をまるごと上書きすればいいし。
また、編集
>>401 ありがとうございます。
こんな関数があるんですね。
これは C***View でマウスとかの取得をしても
できるものなんですか?
C***Doc.cpp の何処かに記述するんですよね?
結局やりたいことは、OpenGL の描画を同期させたいのですが。
連続質問で申し訳ありません。
404 :
385 :04/09/22 22:08:39
ありがとうございます。レス遅れました
>>386 さん
>VC6でもデバッグモードなら呼び出し履歴から
エラーの発生箇所がわかるんでない?
そうなんですかぁ。呼び出し履歴というものをちょっと調べてみます。
>余力があればアセンブラについて勉強すると幅が拡がるかモナー。
そうなんですか。まだまるっきしCしか使えないのでちょっとしたら手を出したいと思います
>>389 さん
>自分で書いたソース以外の所で止まってるから
これはそういうことなんですかー。デバッガがドコで停止したか調べてみたら
strstrをあるワークスペースAのプログラムから呼び出そうとしたときでした。
他のワークスペースBのプログラムでstrstrを実行しても平気なので、
Aのstrstrに関係する内容をいつの間にか変更していたのでしょうか。
新しくワークスペースBを用意してAの物を持ってきたら
Bではデバッガが止まる事はありませんでした。
ありがとうございました。
コピペミスって class foo : public foo { になったクラスのメンバ関数内でインテリセンス起動→VC6いきなり落ちる。 たのむよ〜。原因がわからなくてもう少しで最インスコしてたよ。
手持ちのVC6で試したところ スマートポインタ(std::auto_ptrやboost::shared_ptr)の->演算子にはインテリセンスが効きません 最新のVCでも同じでしょうか?
いえ、VC7.1では、しっかり表示されます。
>>408 おお。すばらしい。
そろそろ買い換えるとするか。
410 :
& ◆R7PNoCmXUc :04/09/23 16:45:47
__FILE__ マクロを wchar_t 型にできないでしょうか。。 void DebugAssert(bool ok, wchar_t* file, int line); #define ASSERT(b) DebugAssert((b), __FILE__, __LINE__) こんなんしたいんですけど。。
>>407 プロジェクトにヘッダを追加すれば表示されるんじゃないの?
>>410 #define TOWSTR(s) L##s
TOWSTR(__FILE__)
質問です。BitBlt関数で描画が上手くいきません。 背景の上に絵を表示させたいのですが、張り付けた部分が 下の背景の色で塗りつぶされます。 StretchBltとBitBltを混ぜて使ってます。AlphaBlendも 後から使おうと思ってます。混ぜて使うとき、注意すべき点は 何か有りませんでしょうか。多分そこから失敗してると思うので。
質問: VC++5.0 の英語版はどこで買えますか? 御存知のかたいらっしゃったらご教示下さい。
管理ツール→データソース→追加 が必要だったとは これで一応SQLデータソースに接続でき、先の問題は解決しました。 しかし... CDatabase data; try{ data.OpenEx( NULL, 0); }catch(CDBException* e){ このようにして手動でデータソースを選ぶと、正常に動作します。 このときのdata.GetConnect()の内容を控え ダイアログを出さないようにしたいのでこのようにしました。 data.OpenEx( connectstring, CDatabase::noOdbcDialog ); しかしdata.GetConnect()で取れる文字列を完璧にコピーして入れても CDBExceptionが 「データソース名および指定された規定のドライバが見つかりません。」 noOdbcDialogを指定した場合のみ上の例外が発生します。 これは何故なのでしょうか
>>413 それだけじゃちょっと厳しい気がするなあ。
とりあえず何処で描画してるかってのがまずわからんと。
>>413 どうせMERGECOPYとかにしてるんだろうよ。
マスクとかその辺から勉強し直せよ。
>>411 だめでした。
インテリセンスがオペレータオーバーロードもしくは、テンプレート含みには
対応していないと思われます。
と思って簡単なサンプルで試したらちゃんと表示されているじゃないかぁぁ struct S { int a; }; template<typename T> struct B { T *v; T * operator-> () { return v; } }; B<S> b; b-> // インテリセンスが効く std::auto_ptr<S> p (new S); p-> // 効かない ClassViewでauto_ptrをみるとメンバに THROW0() や初期化子の _Ptr() がある!
420 :
デフォルトの名無しさん :04/09/23 22:36:02
本に付属していたサンプルプログラムを実行してみようとしたのですが、 旧バージョンで生成されたプロジェクトで、 新しいファイル形式に変更してビルドしてみても proto.obj : error LNK2001: 外部シンボル ""int __cdecl D3Z_CreateDirectDraw (struct HWND__ *)" (?D3Z_CreateDirectDraw@@YAHPAUHWND__@@@Z)" は未解決です ….\Debug/proto.exe : fatal error LNK1120: 外部参照 5 が未解決です。 とエラーが出てしまいます。 どのサンプルを実行してみても同じ状態になってしまい、 一歩も進むことが出来ません。どうすればいいのでしょうか。
ddraw.libをリンクすように設定し直せ
>>420 D3Z_CreateDirectDrawのあるライブラリをリンクして下さい。
あ、421だけど多分違うな・・まあ該当するlibってことで。
424 :
デフォルトの名無しさん :04/09/23 22:43:30
ファイルを読み込んで、文字とキーワード(unit 30) のような文字列をfgetsで読み込んで返した文字列の中からスペースの 後のキーワードを見つける方法を教えてください。
読み込んで返した文字列の中からスペースの位置を 見つけてその場所より後の部分を抽出とか 色々
>>424 CommandLineToArgvW()を使ってみるとか
ありがとうございました
428 :
デフォルトの名無しさん :04/09/23 23:17:37
>>428 VisualC++やる前にCかC++を勉強した方がいい。
430 :
デフォルトの名無しさん :04/09/23 23:50:21
ごめんなさい 勘違いしてました。 自分Cの話でした!
431 :
デフォルトの名無しさん :04/09/24 01:26:46
CListViewの特定のカラムにプログレスバーを表示したいんだけど どうすればいいの?
CListViewの子としてプログレスバーを作る。 LVM_GETITEMRECTとかLVM_GETITEMPOSITIONとかで プログレスバーを作るべき座標は得られる。
お答えいただいて有難うございます。 どうやらDirect3z.libに有るらしいのですが、リンクの方法が解りません。 プロジェクトの設定のリンクからオブジェクト/ライブラリモジュールに Direct3z.libと入れてみても以前のエラーメッセージと、 link.exe の実行エラーというのが表示されてしまいます。 連続質問で申し訳ありませんが、どうしたらいいのでしょうか。
>>433 link.exe の実行エラーと言われても、エスパーじゃないのでわからん。
ただlink.exe の実行エラーとだけ表示されて、他には何も書いて無いんです。 ツール/オプションのディレクトリタブからも Direct3z.libの有るファイルを設定しましたが、 依然としてエラーが出てしまっています。 …諦めて新しい本を買った方が良いでしょうか?
>>433 もうDirect3z.libのフルパスを書いちゃえよ
D:\Direct3D Programming Guide Book\Direct3Z\Direct3z.lib です。度々すいません。
#pragma comment(lib, "D:/Direct3D Programming Guide Book/Direct3Z/Direct3z.lib ") を、ソースのファイルのどっかに入れてみたらどうや?
>>438 有難うございます。ですがやはりリンクで躓いてしまいます。
>>435 本についてるのはサンプルだから、そのまんま使う必用はない。
自分で新規プロジェクトの作成から順番にやっていくのが無難。
それができないと自作のプログラムは作れない。
>>420 ぐぐれば、答えが出てるような気が......
442 :
デフォルトの名無しさん :04/09/24 11:16:14
VC++5.0 はもう手に入らないのですか? サポートの対象外でも構わないから、なんとか手に入れたいのですが。 出来ることなら英語版が好ましいです。
>>442 Yahooオークションとか中古ソフト屋を探してみれ
445 :
デフォルトの名無しさん :04/09/24 12:11:05
vc++に限った質問ではないかもしれませんが、ここで質問します。 SDK, vc++6.0です。 以下のように構造体変数を宣言しました。 enum{ SET_A, SET_B, SET_C } state = SET_A; stateがSET_Aのときには0を、SET_Bのときには1を、SET_Cのときには2を返す ような関数は存在するでしょうか?よろしくお願いします。
>>445 それは構造体じゃないし、そこで関数使う必用ないし、スレ違い
>>445 state == SET_A ? 0 : state == SET_B ? 1 : state == SET_C ? 2 : -1;
>>445 enumは0から順番に値を割り当てるんじゃなかったっけ?
449 :
デフォルトの名無しさん :04/09/24 12:24:35
DDV 機能を利用してエディットボックスの数値入力範囲を設定しているのですが、 入力範囲を 0 〜 int の最大値2147483648を指定し、入力すると範囲外の数値として 再入力を求められてしまいます。 何が間違っているのか教えていただけませんでしょうか? 環境はVS2002です
MS固有の__declspec(selectany)はどのバージョンから対応しているとか そういう情報はどこかに載ってないでしょうか? 例えばクラスを作るとヘッダに自動的に挿入されるこれ。 #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 1000より新しいバージョンで対応してるんだなとわかります。 selectanyは_MSC_VERがいくつ以上なら対応しているんでしょうか?
>>449 intの最大値は2147483647だ。
>>448 しかも最初の一個だけ明示的に与えてやれば、
あとはインクリ
0-2147483647までの 2147483648個
金enum元大統領
なんでINT_MAXを使わないの? しかもintは実装依存…もしVC++以外にソースを持っていくような事が あったら困ることがあるから最大値ぎりぎりまで使うならlong intに した方がよいです
もしくはint32_t
DDV使ってるソースを、VC以外に持っていくことはないだろ w
459 :
デフォルトの名無しさん :04/09/24 12:52:14
>>458 将来VC++のintのビット長が変わる、なんていうことないとも限らないし、
もしそうなったら、それだけで多くの箇所を変更しなければならなくなる。
少しでも危険が考えられることは、簡単な事であればなるべく安全な物に
置き換えるのがよい。
64bit環境でもVC++のintは32bitだからなあ。 そう心配すんなよ。
そもそもマジックナンバーは良くない。
互換性よりintの最大値ということをアッピールするためにINT_MAXを使う という意味の方が重要かもしれん。
>>462 DDX/DDVの設定ダイアログで、最大値・最小値にマジックナンバー以外を
入力出来るのかい?
>>464 出来なくても適当な値入れて手作業で修正すればよかろう。
>>465 ここは初心者スレだぞ。
偉そうなことだけ言ってないで、何処を修正すればいいか教えてやれよ。
>>466 DoDataExchangeメンバ関数のDDV_MinMaxIntのところ。
CXxxDoc 内で定義したメンバ変数 y に ((CXxxDoc*)GetDocument())->y でアクセスできるのはなぜですか? メモリ的にどうなってるんですか?
なぜなぜな〜に?
471 :
デフォルトの名無しさん :04/09/25 00:18:13
最近、BorlandのつかえないコンパイラからVCに乗り換えた初心者です。 Viewについての質問です。 Viewは基底クラスをいくつかのViewから選択できますよね ですが、エクセル見たいな入力可能なGridをViewに選択することは できないのですか?
ListViewでがんがるか、ActivXとかでMSDBGridを使う
473 :
デフォルトの名無しさん :04/09/25 03:10:32
いまウインドなしのdllからウインドを生成したいのですが、 WNDCLASSにセットするHINSTANCEはどうすれば取れるのでしょう? そもそもこれは何のためにセットするのでしょうか? あとでアイコンとか取得したいときに必要になるからGetWindowLongで取得できるように WNDCLASS作成時にセットするだけですか?もし使う予定がないならNULLでよいですか? それとも必要ですか?もしそうならdllのようにクライアントアプリケーションのプロセス内にロードされる 場合、クライアントアプリケーションのHINSTANCEを使っても良いのですか? いろいろお聞きしますがよろしくお願いします。
>>473 DLL側のHINSTANE/HMODULE。
これの意義はウィンドウクラスの所有権を把握するために使うのだったと思う。
(WindowsはEXEがアンロードされるときにそこが所有するウィンドウクラスを自動的に破棄するようになっている。DLLのクラスは9x系だけ自動破棄)
>WNDCLASSにセットするHINSTANCEはどうすれば取れるのでしょう?
取り方はDllMainでグローバル変数にコピーしておくか、あるいはDllMainでウィンドウクラスを作るのが一般的だと思う。
475 :
デフォルトの名無しさん :04/09/25 05:52:01
質問 VC6.0を使用しているのですが、 templateのアロー演算子のoperatrorのオーバーロード がうまくいきません。 そういうものなのでしょうか? template <class T> class Hoge { public: T* operator->() { return m_p; } private: T*m_p; };
”の”がいっぱい。。
CreateCompatibleDC(NULL)と CreateCompatibleDC(hdc)とでは具体的にどう違いますか?
>>477 hdcがプリンタDCだったり情報DCだったりしたときに出来上がるDCの形式が違う
そもそもCreateCompatibleDC(NULL) って、どんな DC が作られるの? 何のコンパチを作るのよ?
>>480 ヘルプも読んでないくせに態度がでかいぞ。
482 :
デフォルトの名無しさん :04/09/25 12:28:44
BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg) : char d=(TCHAR)pMsg->wParam; if (d == 'A') … if (d == ??) バックスペースが押されたか判断したいんですが、 ??の部分はどの様に記述すれば良いのでしょうか?
"BS" もしくは "BackSpace" キーボードによって違うから気をつけろ
VK_BACK
ありがとうございます
>482 if (d == 'A') … <- 右親指を立ててる顔に見えなくもない。
d='A';
d=(^ _^)
d=(T_T);
d(^-^)b
q=('A');
494 :
デフォルトの名無しさん :04/09/25 16:54:26
UTF-8でXMLファイルを出力したいんですがどうしたらいいんでしょうか? fp=fopen("〜.xml","a"); char * pstr = sjisToUtf8("変換する文字"); fput(pstr,fp); ってな感じでやってます。
495 :
デフォルトの名無しさん :04/09/25 17:10:19
,"a")オイオイマジカヨ
>>474 ありがとうございました。助かりました。
497 :
デフォルトの名無しさん :04/09/25 17:33:47
vc++6です。 友人から、「WinProcって何?」と訊かれて言葉に詰まってしまいました。 どのように説明すれば良いのでしょうか? よろしくお願いします。
qsort()に渡すような感じで RegisterClass()に渡すためのもの
自分のIPアドレスを取得したいんですけど、 自分のIPアドレスを取得する関数って何ですか? よろしくお願いします。
またこの質問か
GetIpAddress()
>>494 MultiByteToWideChar() で SJIS -> UTF-16
WideCharToMultiByte() で UTF-16 -> UTF-8
504 :
デフォルトの名無しさん :04/09/25 22:29:01
それって文字コードを変換するやつとちゃうんか? >503
506 :
デフォルトの名無しさん :04/09/26 03:47:57
コンボボックスのストリング型をchar型に直したんだけど、 このchar型をさらに16進表示にしたいのです。 CString writeblock; m_COMBO_writeblock.GetWindowText(writeblock); char wb[1]; strcpy(wb, writeblock); char Write[13] = {・・,・・,〜, wb[1], ・・, ・・,} こんな感じで 例えば、コンボボックスの04を0x04といった感じでwbに入れてやりたい んですが、今のままだと、34となってしまいます。 wb[1]に04となるようにしたいのですが、分かりません。 どなたか良い方法教えてください。
507 :
デフォルトの名無しさん :04/09/26 04:35:02
about:blank これがエクスフローラ開くとどうしても最初に立ち上がってしまう これって治せるのかな?
>>507 とりあえず"エクスフローラ"の作者かサポートに質問
VC++6を使っています 質問なのですが、実行結果をテキストファイルに出力するには どうしたらよいでしょうか? 100万個ほどの数値の統計を取りたいのですが、 DOSプロンプト上には最後の1000個ほどの結果しか残らないので 困っています。 初心者な質問ですが、よろしくお願いします。
こりゃまたずいぶん
stdout=fopen(hogehoge);
>>509 それだとメモリを増設しないといけないな。
スレ違いなのでここまで。
>>509 とりあえずデータがテキストファイルになれば良いのだったらリダイレクトが簡単.
例えばhoge.exeってプログラム名だったら
hoge.exe > hage.txt
って感じで入力すると,画面に出力されてたものがhage.txtに出力できますよ.
>>513 それはスレ違い。
ここはVC++のスレ。
こんなに早く質問に答えていただいてありがとうございます。
とりあえず
>>513 の方法で出来たので、しばらくはそれでいこうと思います。
何分、Cを始めたばかりの未熟者ゆえ・・・。変な質問しちゃって
すいませんでした。とても助かりました。
>>513 それは承知.ただまぁ509が解決する際の選択肢になればいいからね.
516は514へです.
>>515 使い難さを感じたら511あたりも検討してください.
>>514 VC++でリダイレクトを使ったらいけないのか?
VC++でソケット使えるからソケットプログラミングの話もここでいいですか?
>>518 リダイレクトはシェルの機能。
シェルスレでやれ。
>>520 解決方法がスレ違いの内容だからって一言もそれに触れなかったら
質問者はいつまでたっても回答を得られないぞ。バカジャネーノ。
質問の解決を第一に考えようよ.(なんか,みなさん縦割好きだね.行政みたいだ.) 509に513は問題ないでしょ? そのあと更に509さんがリダイレクトについて質問してきて 長くなりそうだったら誘導すればいいんだし.
プログラミング始める前にパソコンの使い方ぐらい覚えろよ。 CUIのプログラム作っててCUIが使えないんじゃ話しにならん。
そうだぞ、 ダブルクイックも出来ないで プログラミングなんて100年早いわ。
ダブルクィックって何?聞いたこと無いんだが…
ダブルクイック ディスクトップ ワーニング アップリケーション
スッタク
VisualC++で.NETアプリケーションの開発をやるメリットって何かあります?
.NET対応アプリケーションを作れるというのが メリットでは?
532 :
デフォルトの名無しさん :04/09/26 16:10:08
MC++ってSTL使えますか? std::vector<CView*> VecView; なんて書いたら怒られました
MC++ってなんだよ VC++なら使えるぞ
ManagedC++だろ
Microsoft C++ に決まってるだろ。
536 :
デフォルトの名無しさん :04/09/26 16:47:39
クズばっか(w
WM_COMMANDのwParamの上位ビットには何が記録されているのでしょうか? 入門書では下位ビットにコントロールやメニュー項目などの識別子が入っているとあるのですが上位ビットについては省かれていて非常に気になります。
>>538 The high-order word specifies the notification code if the message is from a control.
If the message is from an accelerator, this value is 1.
If the message is from a menu, this value is zero.
541 :
デフォルトの名無しさん :04/09/26 21:13:17
VC++.NET 2005 のβ版いれたらVC6.0のファイルの関連付けが全部ぶっ飛んでしまったのですが、 2005をアンインストールしても直りませんでした。 元通りにもどすにはVC6.0を再インストするか、手動で一つ一つ関連付けしていくしかないのでしょうか?
>>540 素でMSDNってどういうものなんでしょう。。。
543 :
デフォルトの名無しさん :04/09/26 23:51:31
Win32SDKの日本語に翻訳したお勧めの書籍を教えてください
544 :
デフォルトの名無しさん :04/09/27 00:27:10
>>544 wb[1] = atoi(writeblock);
>545 うそつき
>>544 _tcstol(writeblock, NULL, 16);
548 :
デフォルトの名無しさん :04/09/27 07:09:47
ListView の特定のカラムにプログレスバーを入れたいけど 無理?
オーナードローしろ。 プログレスバーを配置する事もできるけど リストアイテムの数だけ作る事になるから 何万ものウインドウを作る事になる。
550 :
デフォルトの名無しさん :04/09/27 07:35:53
>>548 みたいな質問する初心者が
その程度のアドバイスでできたら
1年後は優秀なクラッカーになるだろう
552 :
デフォルトの名無しさん :04/09/27 14:51:56
CWebBrowser2で表示したページが NotFoundであることを取得するにはどうしたらいいでしょうか?
ウェブ CWebBrowser2 の検索結果のうち 日本語のページ 約 30 件中 1 - 10 件目 (0.21 秒)
予想される検索キーワード: Iwebbrowser2
Win32API 質問箱
... 17 名前: デフォルトの名無しさん 投稿日: 2001/06/04(月) 22:55
>>15 IWebBrowser2
を使えばできる。 18 名前: 17 投稿日: 2001/06/04(月) 22:55 VC持ってるなら、CWebBrowser2
のソース見れば?汚いけど。 19 名前: デフォルトの名無しさん ...
pc.2ch.net/tech/kako/991/991576947.html - 101k - キャッシュ - 関連ページ
IEコンポーネントを使い倒すスレ
... 使用している単純なサンプルなどあればいいのですが・・・ 26 名前:
デフォルトの名無しさん 投稿日: 2001/02/27(火) 15:25 ↑ CWebBrowser2
も使ってはいけないってこと? それなら、難しくて分からないや。 27 名前 ...
piza.2ch.net/tech/kako/982/982930049.html - 63k - キャッシュ - 関連ページ
554 :
デフォルトの名無しさん :04/09/28 00:03:13
VC7で無名namespaceの変数を使うと、入力補助(メンバとかの自動候補)や 型や引数のポップアップが出なくなるんですが、何か対処方法あります?
555 :
デフォルトの名無しさん :04/09/28 00:21:47
VC++.NETでSTLは使えないの?????
556 :
デフォルトの名無しさん :04/09/28 00:38:54
だ か ら 〜 ListView の特定のカラムにプログレスバーを入れたいけどどうすればいいの?
特定のカラムの上にプログレスバーを描画すればいいだけ
559 :
デフォルトの名無しさん :04/09/28 12:01:47
APIを使用したwindowsプログラミングを学習中なのですがウインドウプロシージャのswith文でbreakを記述しないのはなぜなのでしょうか? switch (message) { case WM_DESTROY: // ウインドウが破棄されたときの処理 PostQuitMessage(0); return 0; default: // デフォルトの処理 return DefWindowProc(hWnd, message, wParam, lParam); } ↑こんな具合に。 C++を勉強していたときにはswithはbreakを記述しないとすべての処理を行ってしまうため、必ず記述するものだとあったのですが。。
561 :
デフォルトの名無しさん :04/09/28 14:04:33
windowsプログラミングではswithでbreakの代わりにreturn 0が使用できると言うことでしょうか。 ブレイクとリターンでは意味合いが変わってくるような気もするのですが、どちらの手法を利用するべきなのでしょう?
562 :
デフォルトの名無しさん :04/09/28 14:06:11
>553 検索してもわからなかったから質問したんですけど
>>561 returnしないとDefWndowProc呼んじゃうんだよ、デフォルト処理したくない時はreturn
>>561 swithじゃなくてswitch break return のことなら C/C++スレへ
別にWindowsでもVC++特有の問題でもない。
>>561 これを追ってみるといい
#include <iostream>
using namespace std;
void hoge (int p) {
switch (p) {
case 0:
cout << "0" << endl;
return;
case 1:
cout << "1" << endl;
break;
case 2:
cout << "2" << endl;
case 3:
cout << "3" << endl;
break;
}
cout << "last" << endl;
}
int main () {
hoge (0);
cout << "----" << endl; hoge (1);
cout << "----" << endl; hoge (2);
return 0;
}
>>561 そもそもbreakとreturnの意味が違うってところまで分かってんならもう少し考えたら
分かるだろうよ。switch文ならbreakっていう決まりがあるわけじゃなくて、breakの機能
が必要だからそこに入れるってことだろ。
そんなことに熱くなるより>554も答えてくださいよ皆の衆
>>567 普通はそういうことがあっても気にしない。
気にする人は自分で解析するんじゃないか?
インテリセンスに頼るような奴は修行が足りない。
携帯普及率の増加に比例して電話番号を覚えられない人も増加しているのは有名な話。
571 :
デフォルトの名無しさん :04/09/28 21:03:30
>>565 わかりやすいコードありがとうございます。
動かしてみたらリターンとブレイクで処理に違いがあることがわかりました。
572 :
デフォルトの名無しさん :04/09/28 22:28:21
>>570 何の関係があんだよ。おまいバカだろ(w
>>572 バ、バカだとぉぉ!!!!
キサマぁぁぁあぁ
Ω ΩΩ<お、お前らおちおちおちけもつっうつ
いや、馬鹿だとは思わないよ。実際には結構頭いいんだと思う。でも 時々、深く考えないでカキコしちゃうことがあって、しかもそういう時に 限っていらん所を突っつく奴が出て来るから、結局かかないでいい恥を 掻いてしまうタイプなんだと思う。まあ、犬に噛まれたと思えばよし。
577 :
デフォルトの名無しさん :04/09/28 23:20:12
つか、Doc/Viewってなんだよ。まじ意味わかんねー BCBに浮気から本気になりそうな悪寒
1.25ジゴワット
>>577 データの保持や操作はDocumentで管理し、Viewはユーザーとの対話/表示に専念させよう
という概念。
>577 Doc/Viewなんてわかんなくても無問題 ダイアログベースから始めるべし つーか、いきなりDoc/ViewはRPGでゆーとLV1でラスボス戦に匹敵w
>>568-569 そりゃないぜセニョール
インテリセンスが使えるのを前提でクソ長い名前をつけまくったんだよ。
いちいちコーディングのたびにネームスペースをコメントアウトして
書き終わってからまた戻してる現状・・・
あのう大変あつかましいのですが 簡単な画像ビューアーなどを作ったりしたことがある 職歴無しの現在無職の28歳なんですが それでもPGできますでしょうか? やっぱりNEにさせられるんでしょうか? 釣りでもネタでもないです。マジレスなので ここだと実際にPG経験者がいるみたいなので リアリティのある返答が期待できると思いまして。 スレ違いかもしれませんがお願いします
>>583 すみません移動します
ありがとうございました
585 :
デフォルトの名無しさん :04/09/29 14:36:48
>>552 を教えてください。
ヒントでもかまわないので・・・
HTTP/1.1 404 Not Found VC持ってるなら、CWebBrowser2 のソース見れば?汚いけど。
BitBlt等で描画できますが、ピクセル単位ではなく ピクセルより細かく描画することってできませんでしょうか? 最初は1ピクセルで動かして2ピクセルにすると 2倍の速度になってしまうので、急なスピードアップになってしまいます。タイマー使わなくても遅いので細かくする必要があるかなと思いまして。
>>587 ピクセルって最小単位だよ?
例えば、点を動かしたいのなら、座標、移動速度のベクトル、を点ごとに
保持し、
次の座標=現在座標+移動速度のベクトル×時間
という計算をすれば次の時間の座標が解かるでしょ
座標というデータを実数型にして、描画するときは小数点以下を切り捨てれば良い
>>589 プログラム一周してくるのが遅いから
1ピクセルをより早く動かすことができないのです。
かといって2倍の2ピクセルにすると速すぎるし。
別に特別重い処理をしてる訳でも無さそうです。
描画の数増やしても遅くならないし。
>>590 べつに整数倍で動かさなくても良かろう。
>>589 の言ってるように移動量を実数倍で持てばいい。
例えば1.5づつ動くとすると
1.5 3.0 4.5 6.0 7.5…
小数点以下を切り捨てれば
1 3 4 6 7…
となって、全体でみると1.5づつ動いてるように見える。
勘違い。move_size=1;
y+=move_size;みたいな使い方してたのが間違いだった。
線形補間使えば、精度上がるんだ。
それともyとmove_sizeを実数型にするか。
>>588 ~
>>591 みなさんありがとうございました。
質問です。トラックバーなのですが case WM_CREATE: ic.dwSize = sizeof(INITCOMMONCONTROLSEX); ic.dwICC = ICC_BAR_CLASSES; InitCommonControlsEx(&ic); hTrack = CreateWindowEx(0,//拡張ウィンドウスタイル TRACKBAR_CLASS,//ウィンドウクラス "",//ウィンドウの名前 WS_CHILD | WS_VISIBLE | TBS_ENABLESELRANGE | TBS_FIXEDLENGTH ,//ウィンドウスタイル 25, 7, 150, 15,//位置、大きさ hWnd,//親ウィンドウ (HMENU)0x10,//コントロールID hInst,//インスタンスハンドル NULL); このように宣言し、 case WM_HSCROLL: iPos = SendMessage(hTrack, TBM_GETPOS, 0, 0); wsprintf(szStr, "%d", iPos); SetWindowText(hEdit,szStr); iPosはint型で、szStrはchar型です。 SetWindowTextでエディットコントロールへ トラックバーの位置を表示しようとしたのですが、取得できていません。 初心者な質問ですみません。
DLL作りたいんですが、コンパイル時に mfcs42d.lib(dllmodul.obj) : error LNK2005: __pRawDllMain はすでに ModArtDLL.obj で定義されています mfcs42d.lib(dllmodul.obj) : warning LNK4006: __pRawDllMain は ModArtDLL.obj で定義されています; 2 つ目以降の定義は無視されます ライブラリ Debug/ModArtDLL.lib とオブジェクト Debug/ModArtDLL.exp を作成中 Debug/ModArtDLL.dll : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました link.exe の実行エラー というエラーが出てコンパイルできません。
フーン よかったね
>>594 DllMain()が定義されてるとか?
自己解決したからえーわ つかえねーなお前等
>598 まったくもって同意だ。
601 :
デフォルトの名無しさん :04/10/01 00:12:15
ちょっとMFCにて質問です CMyDialog.cpp(独自のクラス)から、CxxxViewクラスの関数を使うため、 #include "CxxxView.h" を冒頭に入れたら、 error C2143:構文エラー:':'が'*'の前にありません。 error C2501:'CxxxView::CxxxDoc' : 識別名を宣言するのに、型が指定されていません。 error C2501:'CxxxView::GetDocument' : 識別名を宣言するのに、型が指定されていません。 と怒られてしまいました・・・ どうしたら良いでしょう?
>>601 MFCの前にC++の勉強をお願いします。
>>601 #include "CxxxView.h"
の前に
#include "CxxxDoc.h"
を挿入
VisualStudio.NET 2003について質問です。 ビルドする際にビルド番号の自動インクリメントを行いたいのですが、 アドインを探してみてもVC6用しか見つかりませんでした。 マクロを組むしかないのでしょうか?
すみません。自己解決しますた
CreateFile("test.bmp", 以下略);の戻り値(HANDLE型) とHBITMAPって同じ扱いができますか? ReadFile( (HANDLE)hBMP, pBMP, 略); //キャストOK?? 要はHBITMAPの色情報にアクセスしたいんです。 HANDLEでBitBltができるならHANDLE使うのもOKだけど。
609 :
デフォルトの名無しさん :04/10/01 19:33:19
VisualC++.NETであるディレクトリにあるテキストファイルを全てコンボボックスのデータに入れたいのですが、 どうすればいいですか? ディレクトリのパスはCString型の変数で受け取ります。
>>609 検索キーワード教えてやるよ。
CFileFind
CComboBox::AddString
>>608 それでプログラム走らせたら、エラー起こっちゃった。
レスありがと。
>>612 余計なお世話かもしれないけど、
ビットマップファイルを読みたいんだったら
LoadImage で LR_LOADFROMFILE を指定すればできるよ。
エディタ作ろうと思うんだけど、注意する部分って何?
よく、ぐぐる事
>>613 どうもありがとう。
BMPファイルを直接アクセスしようと試みてます。
が、なかなかうまくいかなくて。。。調べ不足気味です。
>>616 BMPファイルの構造
------
BITMAPFILEHEADER
BITMAPINFOHEADER
RGBQUAD[(1<<bpp)<=256 ? (1<<bpp) : 0 ]
ビットデータ
ビットは高さが正のときは下から、負のときは上から、
横幅は確か4バイトアラインになってた気がするので注意。
別にファイル直接操作しなくても
LoadImage で LR_CREATEDIBSECTION して
GetObject で DIBSECTION が取って来れるが。
あるBMPファイルを読み込みそのデータをもとに hForeBMPを作成しようとしてます。 おそらくアクセスエラーだと思うんですが、 どこが間違ってるんでしょう? あとDWORD単位でデータの改変できないのかな。 サンプルとか見てみると皆BYTE使ってるし。 最初DWORDで試みたけど同じくダメでした。 617さんレスありがとうです。 DWORD iFileSize=0; BYTE *pReadData, *pData; //ここは関係有りませんがpData取得の為載せました。 hForeDC=CreateCompatibleDC(NULL); hForeBMP=CreateDIBSection(hdc,&biInfo,DIB_RGB_COLORS,(void**)&pData,NULL,0); SelectObject( hForeDC, hForeBMP ); //ハンドルの取得 HANDLE hBMP=CreateFile(FileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); iFileSize=GetFileSize( hBMP,NULL ); //ハンドルから読み込み pReadData=(LPBYTE)HeapAlloc( GetProcessHeap(), 0, iFileSize ); ReadFile( hBMP, pReadData, iFileSize, NULL,NULL ); CloseHandle(hBMP); //色データ位置へ pReadData=(BYTE*)(pReadData+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)); pData=(BYTE*)(pData+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER));
続きです。長文ごめんなさい。
//データの改変
int max=0,min=width;
for(int i=0; i<height; i++){
for(int j=0; j<width; j++){
if(pReadData[j*3+i*height]==0x00 &&
pReadData[j*3+i*height+1]==0x00 &&
pReadData[j*3+i*height+2]==0x00) { //黒なら白に
pData[j+i*height]=GaugeColor & 0xff; //B
pData[j+i*height+1]=(GaugeColor
>>8 ) & 0xff; //G
pData[j+i*height+2]=(GaugeColor
>>16 ) & 0xff; //R
}else{ //白なら黒に
pData[j+i*height]=0x00;
pData[j+i*height+1]=0x00;
pData[j+i*height+2]=0x00;
}
}
}
HeapFree( GetProcessHeap(), 0, pReadData );
>>619 "j*3+i*height"とか"j+i*height"のあたりがダメダメ。
もう一度サンプルをよく見てみ。
開発はVC++.netですが、 Win32APIとか覚えないといけませんか?
622 :
>>619 :04/10/02 06:30:50
void CBbbDlg::OnButton1() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください CString fname = "c:\\test.bmp"; HANDLE hFile = CreateFile(fname, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); DWORD FileSizeH, FileSizeL; FileSizeL = GetFileSize(hFile, &FileSizeH); LPBYTE lpBMP = new BYTE[FileSizeL]; DWORD dwRead = 0; ReadFile(hFile, lpBMP, FileSizeL, &dwRead, NULL); LPBITMAPFILEHEADER pFileHeader; LPBITMAPINFOHEADER pInfoHeader; pFileHeader = (LPBITMAPFILEHEADER)(lpBMP); pInfoHeader = (LPBITMAPINFOHEADER)(lpBMP + sizeof(BITMAPFILEHEADER)); int offset = pFileHeader->bfOffBits; LPBYTE pPixcel = lpBMP + offset; int PixBuffLen = FileSizeL - offset; int BmpHeight = pInfoHeader->biHeight; int BmpWidth = pInfoHeader->biWidth; CloseHandle(hFile);
//変換(24bitのみ) ASSERT(pInfoHeader->biBitCount == 24); int x, y; LPBYTE p = pPixcel; for(y = 0 ; y < BmpHeight ; y++) { for(x = 0 ; x < BmpWidth ; x++) { if(p[0] == 0 && p[1] == 0 && p[2] == 0) { p[0] = 0xFF;p[1] = 0xFF;p[2] = 0xFF; } else if(p[0] == 0xFF && p[1] == 0xFF && p[2] == 0xFF) { p[0] = 0;p[1] = 0;p[2] = 0; } p += 3; } } HWND hWnd = GetSafeHwnd(); HDC hDC = ::GetDC(hWnd); int lines = ::StretchDIBits(hDC, 0, 0, BmpWidth, BmpHeight, 0, 0, BmpWidth, BmpHeight, pPixcel, (LPBITMAPINFO)pInfoHeader, DIB_RGB_COLORS, SRCCOPY); ASSERT(lines == BmpHeight); ::ReleaseDC(hWnd, hDC); delete [] lpBMP; } でどうかな?
>>623 BMPの1行分は4バイトアラインになっていることは考慮しているかい?
4バイアラン
File View の外部依存関係ってなんなんでしょうか? というのも、参考書買ってサンプルプログラムで勉強しているんですが、 外部依存関係のところに宣言だけしてあって肝心の定義がみあたらないんです・・・。
>>624 考慮してませんでした。
とりあえずyのループで次のようにポインタ調整追加してみますた。
for(y = 0 ; y < BmpHeight ; y++)
{
for(x = 0 ; x < BmpWidth ; x++)
{
略
p += 3;
}
if((BmpWidth * 3) % 4) p += 4 - ((BmpWidth * 3) % 4);
}
へんなやり方でスマソ。もっとスマートな回答者、よろ。
628 :
デフォルトの名無しさん :04/10/02 17:30:53
やだ
622さんのコード真似てみました。 GetFileSize関数の戻り値がいつもlongの最大値に なってしまうんですが、どういうことなんでしょうか。 どのファイルを指定し取得しても、ファイル名をデタラメにして 取得(そしたら新規ファイルができると思ってやりました(調べて無いです))しても同じ結果で、42..(略)が戻ってきます。 原因はこれだと思いますが、コードも一応.... BYTE *pWriteData; hForeDC=CreateCompatibleDC(NULL); hForeBMP=CreateDIBSection(hdc,&biInfo,DIB_RGB_COLORS,(void**)&pWriteData,NULL,0); SelectObject( hForeDC, hForeBMP ); //ハンドル取得 HANDLE hBMP=CreateFile(FileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); DWORD FileSizeL=GetFileSize( hBMP,NULL ); if(!hBMP) DebugMSG("File=%s:hBMP is NULL"); //ハンドルからデータを取得 LPBYTE pReadData = new BYTE[FileSizeL]; DWORD dwRead=0; ReadFile( hBMP, pReadData, FileSizeL, &dwRead,NULL ); CloseHandle(hBMP);
続き。
//オフセット値を求めてピクセル情報の位置へ
LPBYTE pPixel[2]; //[0]:読み込み側、[1]:書き込み側
for(int i=0; i<=1; i++){
LPBYTE pData = (i==0)? pReadData : pWriteData;
LPBITMAPFILEHEADER pFileHeader = (LPBITMAPFILEHEADER)(pData);
LPBITMAPINFOHEADER pInfoHeader = (LPBITMAPINFOHEADER)(pData+sizeof(BITMAPFILEHEADER));
int offset = pFileHeader->bfOffBits;
pPixel[i] = (BYTE*)(pData+offset);
}
以上です。アラインは無視。
スプライトっぽい使い方をしたいので、元画像もしないといけないっぽいから....。このコードどうでしょうか。。。
//データの改変
LPBYTE pr=pPixel[0],pw=pPixel[1];
int max=0,min=width;
for(int i=0; i<height; i++){
for(int j=0; j<width; j++){ //黒なら任意の色へ
if(pr[0]==0 && pr[1]==0 && pr[2]==0){
pw[0]=GaugeColor & 0xff; //B
pw[1]=(GaugeColor
>>8 ) & 0xff; //G
pw[2]=(GaugeColor
>>16 ) & 0xff; //B
}else{ //白なら黒へ
pw[0]=0, pw[1]=0, pw[2]=0;
}
pw+=3;
pr+=3;
}
}
delete[] pReadData;
ごめん。変なところに文章はいった。
単にファイルのパスが間違ってるだけだろ。 それよりファイルハンドルにhBMPとか名前つけるのやめれ。
アンチハンガリアンキタ━━(゚∀゚)━( ゚∀)━( ゚)━( )━( )━(゚ )━(∀゚ )━(゚∀゚)━━!!!!!
900
HANDLEとHBITMAPは違うってことじゃないのか?
>>632 は
・ファイルハンドルに対して"BMP"という名前は相応しくないから止めろ
・ハンガリアン記法は止めろ
・その他の理由
どれだろう
「ファイルハンドルに」としてるから1番。
638 :
デフォルトの名無しさん :04/10/02 18:45:36
VC++ってカコイイUIを作るのには不向きなの? BCBだと簡単にカコイイUIが作れるからそう思ったのですが みなさんどうでしょうか?
BCBとVC++ってそんなにUI作る環境違うの?
>>629 CreateFile()が失敗したときの戻り値はNULLではなくINVALID_HANDLE_VALUE だ。
どんなサンプルを参考にしたんだ。
VC++6.0SP6なんだけど、全てのC++例外をキャッチしようと try {} catch(...) {} と書くとアクセス違反のような構造化例外?もキャッチしてしまいます。 throwで投げられた例外のみキャッチする方法はないでしょうか? 例外の基本クラスを統一するとかしないと駄目ですか?
javaならスッキリ例外処理が書けます。
647 :
デフォルトの名無しさん :04/10/03 01:12:36
std::stringで書式指定で値をセットしたい std::string str; str.sprintf("%d\t%d",1,2); なんて出来ないの?
>>647 #include <iostream>
#include <sstream>
#include <boost/format.hpp>
using namespace std;
int main () {
ostringstream oss;
oss << boost::format ("%d\t%d") % 1 % 2;
string str (oss.str ());
return 0;
}
#include <iostream> #include <boost/format.hpp> using namespace std; int main () { string str(boost::str(boost::format ("%d\t%d") % 1 % 2)); return 0; }
>>647 boostが嫌ならcout風に使うstringstreamか、それも嫌ならCStringにする。
#include <boost/format.hpp> using namespace std; int main () { string str ((boost::format ("%d\t%d") % 1 % 2).str ()); return 0; }
ここはVC++スレか?
VC++スレだ。
654 :
デフォルトの名無しさん :04/10/03 17:55:03
ダイアログベースで印刷プレビューを表示したいんですが どのようにすれば良いのですか?
自前で出す。
あーあ、FormViewベースで作っとけばよかったのに。
658 :
デフォルトの名無しさん :04/10/03 19:58:23
ダイアログベースやFormViewベースを好む香具師は℃素人確定でつ
えー?ドユコトデスカー?シャチョー(´Д`;)
660 :
デフォルトの名無しさん :04/10/03 20:11:56
まだ入手すらしてなくて恐縮なんですけど、 出来る限り安くVC++を入手するには、どうすればいいんでしょう? 7000円とか、8000円とかは高くて・・・・・
662 :
デフォルトの名無しさん :04/10/03 20:18:04
winnyはやめとけ。便利だとは思うけど、際限が無くなるからさ。 Spokeも安いけどさ、それならオークションで落としたほうがまだ安いよ?
オークションはなぁ・・・ 前にβ版を詳しくないとか言い訳して製品版として売ってたやついたからなぁ・・。 しかもノークレームだよ。
皆さんアドバイスありがとうございます。 カリキュラムを確認したところ、C言語でした。 Winnyはさっぱりわかりません。 オークションって、詐欺にあったりしませんか?
>>665 その話題は別スレだろ。
マルチは氏ね。
C言語の講義だけだったらフリーのコンパイラだけでいいじゃん。 どうせ数値計算ぐらいだろ。
マルチかよ。 オークションで詐欺って、おまえみたいな無知が引っかかるんだよ。
秋葉のワゴンで外国人がVS6.0Professionalを5千円で売ってたぞ。
670 :
デフォルトの名無しさん :04/10/03 22:06:24
マジ質問です。 VC++ってコントロールが凄く少ないじゃないですか? C***Viewでも数少ないですよね? どうやってUIを作成していくのでしょうか? なにか良さげHPありませんか?
UIってなに?ユーザーインターフェイス?
>>671 そう。
CUI=文字だけのインターフェース
GUI=ウインドウとか絵とかマウスとか使ったインターフェース
PUI=ロボットが見ぶり手ぶりしたり、マウスが画面の端にぶつかったりするとマウスが物理的に動かなくなったり、人の直観で操作・認識できるインターフェース。
>>670 少ないって何が足りないんだ?
具体的に何がないか書けよ
675 :
デフォルトの名無しさん :04/10/03 23:19:09
VC#とVC++を比較すれば一目瞭然
アクティブXコントロールの追加で幾らでも入れられるから 別にどうでもいい
677 :
デフォルトの名無しさん :04/10/03 23:49:55
そのアクティブXコントロールをどこに配置すればいいのかがわかりません。 VC#みたいにフォームにポトってわけじゃないですよね? それともCFormViewでポトってやるんですか?
VC++でもポトだよ。
VC++6.0だとメニューのプロジェクトへ追加ー>コンポーネントおよび コントロールから選ぶんだけど.netだとどうなっているのかな。
質問なんですが Visual C++ 6.0 Standard と Microsoft Visual C++ .NET Standard 2003 この2個は何か違いがあるのでしょうか?
managed C++のサポートと ISO C++のサポートと ユーザーインターフェイスかな。
初心者なんですが 買うとしたらどっちの方がいいでしょうか? 今のところ無償のを使っているのですが かってみようかなぁと思いまして
VC6何年前のだと思ってんだよ。
684 :
デフォルトの名無しさん :04/10/04 00:38:42
ttp://hp.vector.co.jp/authors/VA019882/tips/data/data01.htm#018 で紹介されている関数を応用してプログラムを組んでいたのですが、
コンパイルをすると this->getFiles(FileFind.GetFilePath() , bSubFolder , csFileArray );のところで
>グローバル関数にアクセスするための 'this' ポインタがありません。
>左側がクラス、構造体、共用体へのポインタではありません。
というエラーが出てしまいます。C++は入門書を持っていないのでthisの意味がよく分からないのですが、
どういう物なのでしょうか?googleで検索をかけても「"this" は一般すぎる言葉のため、 検索には使用されていません。」
と出てしまい、調べらません。
>>684 +thisとすれば一般的な言葉も検索できますよ。
686 :
デフォルトの名無しさん :04/10/04 01:05:41
>>685 おお、本当だ!!ありがとうございました。
あほ?構造体ポインタ変数宣言してないだけだろ
688 :
デフォルトの名無しさん :04/10/04 01:24:06
構造体ポインタ変数宣言…? 参考にしたソースには書かれていなかったのですが、どのように宣言すればいいのでしょうか?
>>688 相手がわからないと思って適当な事言ってるだけだから気にしちゃだめだよ。
>>684 そのままコピペでもしたからだろ?
そのTipsはクラスのメンバ関数として作られることを前提にしてるから、
グローバル関数にしても使えない。
どこかのクラスに入れるか、this->を消せばOK
おお、+つけりゃストップ語も検索できるのか。 実はCOMが検索できんで困ってたんだ。トンクス
HBITMAPのことを質問した者ですが、みなさんありがとうございました。
>>632 さんの仰る通りパス間違ってました。CreateFile関数の
場合、パスが厳しくチェックされるみたいですね。あと
戻り値がINVALID_HANDLE_VALUEというのも参考になりました。
SetPixel関数を使えばしっかり任意の色に塗られるのに
バイト単位で書き込む(pPixel[0]=0xffみたいに)と白の斜線に
なってしまうという疑問が出たのですが、ここはSetPixelでごまかしときます。。。
ともあれ、解決できたんで、ありがとうございました。
694 :
デフォルトの名無しさん :04/10/04 01:51:33
>>689 (゚д゚)ノ ハイ
>>690 なるほど。一箇所でしか使わないしわざわざクラスにする必要もないかなーと思って作らなかったのです。
消したらうまくいきました。ありがとうございました。
695 :
695 :04/10/04 15:11:50
DualCPUをフル稼働させてプログラムを走らせたいのですが・・ #include <stdio.h> #include <time.h> #include <windows.h> #include <winbase.h> /**************/ /* メイン関数 */ /**************/ void main() { clock_t start, end; start = clock(); void * hProcess; int fRet; hProcess=GetCurrentProcess(); fRet=GetProcessAffinityMask(hProcess,&dwProcessAffinityMask,&dwSystemAffinityMask); fRet=SetProcessAffinityMask(hProcess,dwProcessAffinityMask); //SetProcessAffinityMask(hProcess,4); for(;;){ printf("表示\n"); } end = clock(); printf("処理時間: %f秒\n", (double)(end - start) / CLOCKS_PER_SEC); } と参考書通りに書くと,dwProcessAffinityMask,dwSystemAffinityMaskが定義されていません。 とエラーがでます。何度かエラー解除を試みているのですが,エラーが消えません。 目的はDualCPUのフル稼働です。並列処理ではありません。誰か教えてください。
その参考書無茶苦茶だな
697 :
デフォルトの名無しさん :04/10/04 15:35:31
winapp error LNK2019: 未解決の外部シンボル _main が関数 _mainCRTStartup で参照されました。 winapp fatal error LNK1120: 外部参照 1 が未解決です。 というエラーがでます。どうしてですか?
>>697 コンソールプログラムを作るための設定になっているから。
アフィニティーマスクって数字を指定しないと駄目では? CPU1なら0 CPU2なら1 だったかな?
700 :
デフォルトの名無しさん :04/10/04 15:45:03
有難うございます。そこで、win アプリケーションでしたところ、ビルドは できたのですがデバッグで、このようにでました。 'WinApp.exe': 'C:\WINNT\system32\NTDLL.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'WinApp.exe': 'C:\WINNT\system32\KERNEL32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'WinApp.exe': 'C:\WINNT\system32\USER32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'WinApp.exe': 'C:\WINNT\system32\GDI32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'WinApp.exe': 'C:\WINNT\system32\imm32.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'WinApp.exe': 'C:\WINNT\system32\ADVAPI32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'WinApp.exe': 'C:\WINNT\system32\rpcrt4.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 プログラム '[1760] WinApp.exe: ネイティブ' はコード 87 (0x57) で終了しました。 これはなんですか?
リンクするライブラリが違う悪寒
>'WinApp.exe': 'C:\WINNT\system32\rpcrt4.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
このような内容の行は無視しても大丈夫
ついで言うと
>>697 よく分からなかったらエラー番号の上にカーソル持っていって F1 キー
704 :
デフォルトの名無しさん :04/10/04 16:04:43
'WinApp.exe': 'C:\WINNT\system32\NTDLL.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'WinApp.exe': 'C:\WINNT\system32\KERNEL32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'WinApp.exe': 'C:\WINNT\system32\USER32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'WinApp.exe': 'C:\WINNT\system32\GDI32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'WinApp.exe': 'C:\WINNT\system32\imm32.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'WinApp.exe': 'C:\WINNT\system32\ADVAPI32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 'WinApp.exe': 'C:\WINNT\system32\rpcrt4.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。 プログラム '[1760] WinApp.exe: ネイティブ' はコード 87 (0x57) で終了しました。 と表示されます。どうしてですか?
コンパイルのオプション全部書け
マルチうぜぇ。 相手にする香具師もうぜぇ。
お前が一番ウザイ↑
709 :
デフォルトの名無しさん :04/10/04 16:31:06
704ですが、わかりません。教えてください。
ageんな
>>709 いい加減にしろ。向こうのスレでも答えてもらってんだろ。
712 :
695 :04/10/04 17:43:52
695です。 #include <stdio.h> #include <time.h> #include <windows.h> #include <winbase.h> /**************/ /* メイン関数 */ /**************/ void main() { HANDLE hProcess; int fRet; DWORD dwProcessAffinityMask,dwSystemAffinityMask; hProcess=GetCurrentProcess(); fRet=GetProcessAffinityMask(hProcess,&dwProcessAffinityMask,&dwSystemAffinityMask); fRet=SetProcessAffinityMask(hProcess,1); for(;;){ printf("表示\n"); } } と書き直したらエラーは消えるのですが,CPUは以前と1/4しか使っていません。 どうすればCPUをフル稼働させることができますか?教えてください。
713 :
デフォルトの名無しさん :04/10/04 18:09:10
ぎゃはははは
15秒間フル稼働のプログラム↓ #include <stdio.h> #include <windows.h> #include <process.h> #include <stdlib.h> #include <time.h> static void task(void* id){ SetThreadAffinityMask(GetCurrentThread(),1UL<<atoi((char*)id)); clock_t start=clock(); printf("タスク%sの開始\n",id); while(clock()-start<15*CLOCKS_PER_SEC){ //何か } printf("タスク%sの終了\n",id); } main(){ HANDLE t1=(HANDLE)_beginthread(task,0,"1"); task("0"); WaitForSingleObject(t1,INFINITE); return 0; }
( ´,_ゝ`)プッ
716 :
695 :04/10/04 19:23:17
ありがとうございます。 試してみたいと思います。
VC++6.0でツールボックス(?)ボタンとかテキストとか貼りつけるやつ が出てこなくなりました。どうしたら表示できますか? かれこれ1時間近く探してます・・。・゚・(ノД`)・゚・。
あった━━━━(Д゚(○=(゚∀゚)=○)Д゚)━━━━━!!
左側にツリービューコントロールがあり、ツリーから選んだ項目が右側に出る という設定ダイアログを最近よく見かけるようになりました。(WinAMPやOpenJane等で使われている) こういうダイアログは自作なのでしょうか?
そりゃあ、勝手には出来ないわな
>>720 いやそういう意味ではなく
ツリービューを配置したダイアログを作成して、ツリー項目が選択されたら子ダイアログを右側に表示
とかそういうコードをシコシコ書いているのか、
SHBrowseForFolderみたいに一発で表示できるとか、
MFC等のライブラリにそういうものがあるのかな、と。
最近でもないけどね。netscapeではずっと前からそういう設定ダイアログに なっている。 >ツリービューを配置したダイアログを作成して、ツリー項目が選択されたら子ダイアログを右側に表示 とかそういうコードをシコシコ書いている たぶんそうでしょう。これ自体は数行で書けるから技術的な問題は ほとんど無いかと。
>>721 明らかに見た目も機能も(右クリックへの対応など)ばらばらなのに同じAPIで実現されてるわけ無いだろ。
725 :
デフォルトの名無しさん :04/10/05 23:35:51
よく、ちょっと変わったListViewのアプリケーション見かけますよね? あれって、 CListCtrlから派生クラスを作成(例えばCListCtrlEx)するんですよね? そのCListCtrlExをViewに選択するときってどうするんですか? プロジェクト作成時のViewはCViewでも良いのでしょうか?
>>721 漢なら自作するに決まってるだろ。
コモンダイアログすら使うことは許さん。全て自前で書け。
727 :
デフォルトの名無しさん :04/10/05 23:57:03
>>726 みたいなバカはシカトでOKだよ
そのCListCtrlExクラスのインスタンスを作成してCreateを呼べばCViewに表示されるよ
728 :
デフォルトの名無しさん :04/10/06 00:47:24
なんでVC++なの? BCBじゃだめ?
そんなしけた燃料投下でこの俺様が釣られるかクマー
すんません、糞な質問で申し訳ないのですが リソースエディタでは256色までのBitMapファイルしか 取り込めないのでしょうか? クライアントに32Bitや16BitのBMP画像を表示するには どうすればいいのでしょうか・・・。 CHtmlViewを描画の基本クラスにすれば 画像ファイルを指定して読み込んで表示できるようですが、 CViewを使ってやるにはどうすればよいのでしょう。 ほんとアホな質問で申し訳ありません。 環境はWindowsXP:Home,VisualC++6.0です。
732 :
デフォルトの名無しさん :04/10/06 08:54:38
エクセルみたいな表型式にしたいんだけど、 グリッドコントロールみたいのないの? VC.NET(アンマネージ)
あるよ
734 :
半日潰れた :04/10/06 17:18:41
MFCでstrncpy使うと、debugビルド時に'\0'を 勝手に付加してコピーしてくるんですけど・・・ なんなの?
デバックビルドだと配列が0クリアされるからじゃねーの。
>>735 すまん・・・
その通りでした。orz
軽く聞き流してやって下さい・・・
737 :
デフォルトの名無しさん :04/10/06 19:19:25
無理
739 :
デフォルトの名無しさん :04/10/06 22:07:13
VC6+MFCです。 ドキュメントクラスで、ワーカースレッド立ち上げて、 そこから、Viewクラスに情報を渡したいんですが、 こういう場合、一般的にはどうするのでしょうか? グローバルでやりとりもスムーズも余りきれいにはいかないですし、 Documentクラスのポインタをワーカースレッドに渡して仲介すべきなのか、 Viewのポインタを渡した方がいいのか、、、スマートな方法を教えてください。 よろしくおねがいします。
740 :
デフォルトの名無しさん :04/10/06 22:33:48
UpdateAllViews GetDocument
741 :
739 :04/10/07 00:04:10
レスどうもです。 すみません、UpdateAllViewsだと、Viewのイベントになりますよね。 補足ですみません、しばらく考えましたが、 ワーカースレッドから、Documentにメッセージを送れるとよさそうです。 SendMessageでいけるかと思ったのですが、ハンドルがもちろん無いので駄目でした。 ワーカースレッドから、Documentにメッセージを送る方法はあるでしょうか?
Documentクラスになんかメンバ関数を作ってその中に必要な処理を書く Documentクラスのポインタをワーカースレッドに渡して仲介 スレッドの中からそのポインタで上のメンバ関数を実行
なるほど、そうですね。 明解、ありがとうございます。 そうすると、ワーカースレッドがDocumentの型を意識する事になるので、 ちょっと躊躇していましたが、仕方なさそうですね。 ありがとうございます。
>>743 そもそもドキュメントに対してなんらかの処理をするワーカスレッドが
ドキュメントの型に依存してないわけが無いのではなかろうか・・・。
745 :
デフォルトの名無しさん :04/10/07 14:45:29
ビットマップファイルをリソースに追加できません。 マイピクチャフォルダに入っているビットマップは、リソースに追加可能なのですが、 このフォルダ以外の場所においてあるビットマップはリソースに追加できません。 やったことは リソースビューの .rc を右クリック → リソースの追加 → Bitmapを選択してインポート → ビットマップファイルを選択 → 開く これで、なぜかマイピクチャに入っているものは追加可能でしたが、それ以外のフォルダや マイピクチャ下に作ったフォルダの中に保存していたビットマップは開くボタンを押してもリソースビューに追加されませんでした 追加したいファイルのあるフォルダはどこかに事前に登録しておく必要とかあるのでしょうか? それとも、ビットマップを追加するとき制約でもあるのでしょうか? 解決方法を教えてくださいm(_ _)m Visual C++ .NET 2003 Windows XP home SP2
>>745 ソース階下のRESフォルダに入れてみては?
あと、ファイル名が全角とか。
747 :
745 :04/10/07 16:21:40
>>746 レスありがとうございます。
それもやってみたのですが、だめでした。
ファイル名はすべて半角英文字です。
スレ違いかもですが・・ YahooでVisual C++6.0欲しさにオマケソフトが色々付くと有ったVisualStudio6.0買ったんですが 肝心のC++6.0がセットアップできませんorz というかC++のCDがありません; ひたすら検索しても妙な説明ページに引っかかりまくるばかり・・ どなたかセットアップ方法紹介しているサイトなり有ったら教えてください、 変な欲出さなきゃ良かった・・ ||orz
749 :
デフォルトの名無しさん :04/10/07 16:37:11
MFCスレにも書かせてもらったのですが… 子ウィンドウにタブとかスライダー等、色々配置したいのですが どうすればいいか迷っています。 プロパティシートを使えばという気もしますが [OK]ボタン等が必要ないので、他にいい方法があれば 教えていただけませんでしょうか? よろしくお願いします。
CDないならセットアップの仕方調べてもしょうがないんじゃ...
>>749 1時間も経たんのにマルチポストするような香具師には答えたくない
MCIの質問です。よろしく。 CD再生しようとしているんですが TMSF(トラック:分:秒:フレーム)で取得したDWORD値 をどうすれば秒に変換できますか? というかそもそもそれは再生位置の移動(シーク)だけに使用 する値なんでしょうか。だったら、 別の方法で取得しなければいけませんが。
>>745 ルートにビットマップファイルを置いて読み込んでみたら?
フォルダ名・ファイル名だけでなく、Pathの途中にスペース、
全角等があると、読み込めない筈。
755 :
デフォルトの名無しさん :04/10/07 19:38:09
スレ違いかもしれませんが、他に見当たらなかったので質問させてください。 VB6.0でラベルをフォームに配置するときに、メニューバーで配置するのではなく、 コードを使って座標などを指定して配置したいのですが、どのようにすればいいのでしょうか・・? また、lineメソッドなどで書いた図形が、他のアプリと重なった時に消えないようにするには どうすればいいのでしょうか。 どなたかお願いします。
すいません・・そっちできいてきます。
758 :
デフォルトの名無しさん :04/10/07 22:37:52
自作アプリに、ユーザ認証機能(ログイン画面)を追加したいのですが、 そういうDLLはありますでしょうか? ご存知のかた教えていただけると助かります。
>>754 まったくそのとおりです。
ルートフォルダなら問題なくできました。
いろいろ試したところ、パス名に全角文字が入っていた場合に読み込みできないことがわかりました。
ありがとうございました。
760 :
デフォルトの名無しさん :04/10/07 23:58:18
VC++って最初のウィザードでViewを選択したら(簡単に)変えらんないの? クライアント領域に一つのViewしかつくれないの?(分割しなかったら) ほんとつかいずれーよなw
ageて煽りたい年頃なので放置してやってください
VC++のエディタで列番号を1行目の上に表示する方法教えてください。
できない
>>764 サンクス。
ほかの場所にでも無理ですか?
(右下の貧弱なのだけ?)
>>763 つか、VC++のバージョンを書いとけよ…
VS2003だったら、
オプション -> テキストエディタ -> C/C++ -> 全般
にある
このスレも.NET以前と以降に分けた方が良さそうな悪寒
managedC++スレあるじゃん。
次スレ立てる香具師はタイトルにどっちか書いておけ
VC 6.0 を使っています。 MFC AppWizard(exe)で作ったプログラムではメインをいじったりできませんか? というかメイン関数を見ることすら出来ないんですが・・・。
>>770 何をしたいのか知らんが、WinMainはMFCの中にある。
レスありがとうございます。 ええ。実はそれ自体は知っているんですが,どうにかしていじれないですか? やっぱり1から自分で作らないとダメでしょうか?
>>772 何をしたいのか知らんが、大抵のことはWinMain()以外で充分できる。
どういじりたいのか書かないので何とも言えんが どうしてもWinMainをいじりたいなら当然自分で作らないとダメ。
>>772 メッセージで動くから、メインなんかいじってもしょうがない。
776 :
デフォルトの名無しさん :04/10/08 18:44:24
ディレクトリのパスを受け取って、その中の全てのテキストファイルに対して作業をする為に以下のようなコードを書いたのですが、 1ファイル目はうまくいくのに2ファイル目以降がfin.open((LPCTSTR)(dirname + "\\" + filename));でオープンに失敗してしまいます。 while(getline(fin, line))の部分をコメントアウトすれば成功するので、おそらく原因はそこなのでしょうが、何故なのかがわかりません。 出来れば解決法も含めて教えてください。開発環境は Visual C++.NETです。 CString dirname; /* ディレクトリの名前 */ CString filepath; /* dirname\*.txtに適合するファイルのパス */ CString filename; /* dirname\*.txtに適合するファイル名 */ CFileFind FileFind; BOOL bfnf; /* FileFind.FindNextFile()の成否 */ string line; /* ファイルから1行読み込む時のバッファ */ ifstream fin; filepath = dirname + "\\*.txt"; if(!FileFind.FindFile(filepath)) return FALSE;// dirname\*.txtなるファイルを取得。なければ終わり do{ bfnf = FileFind.FindNextFile(); if(!FileFind.IsDots()){// .\や..\の除外 filename = FileFind.GetFileName(); fin.open((LPCTSTR)(dirname + "\\" + filename));// dirname\filenameのファイルを開く(CString->char*) if(!fin)return FALSE; // ファイルのオープンに失敗したらFALSEを返し終了 while(getline(fin, line)){// 1行取って来る(失敗したら終了) /* 色々な作業 */ } fin.close(); } }while(bfnf);
777 :
デフォルトの名無しさん :04/10/08 19:22:32
777
>>776 「色々な作業」でFileFindかなにかを壊している悪寒。
whileブロックをコメントアウトしたら動くのなら、少しずつ戻していってどこで動かなくなるか試してみ。
#ソース晒した方が早そうだが。
779 :
776 :04/10/08 20:28:29
>>778 ありがとうございます。/* 色々な作業 */の所は今の所全てコメントアウトしているので、
多分関係ないのではないか、と思います。
2ファイル目でfin.openが失敗して(多分) if(!fin)が成り立ってreturn FALSE実行される↓
fin.open((LPCTSTR)(dirname + "\\" + filename));// dirname\filenameのファイルを開く(CString->char*)
if(!fin)return FALSE; // ファイルのオープンに失敗したらFALSEを返し終了
while(getline(fin, line)){// 1行取って来る(失敗したら終了)
/* 色々な作業 */
}
fin.close();
if(!fin)が成り立たず、全てのファイルでfin.openが成功しているのを確認↓
fin.open((LPCTSTR)(dirname + "\\" + filename));// dirname\filenameのファイルを開く(CString->char*)
if(!fin)return FALSE; // ファイルのオープンに失敗したらFALSEを返し終了
// while(getline(fin, line)){// 1行取って来る(失敗したら終了)
// /* 色々な作業 */
// }
fin.close();
こんな感じです。
>>779 getline()の第2パラメータの型とlineの型を調べよ。
#少なくとも>776はコピペミスしてそうだ。
std::ifstream::clear()じゃないよな?
>>781 それだ!!というかこんなのあったんだ…fstreamとか使うの初めての上適当にやってたので全然知りませんでしたorz
1つめのファイルのgetline(fin,line)がFALSEになった時にfinのファイルストリームがEOFにセットされてるから必要になるんですね。
ありがとうございました。
>>780 さんもありがとうございました。
>>766 > VS2003だったら、
> オプション -> テキストエディタ -> C/C++ -> 全般
> にある
列を上に表示するオプションなんてないぞ??
ちゃんと探せ
785 :
デフォルトの名無しさん :04/10/09 00:38:18
Visual C++6.0をDOSプロンプトでコンパイルするにはどうすればいいかを調べています VCVARS32.BATを実行した際に、 環境変数のための領域が足りません と表示される場合には、 どうすればよいのでしょうか? 今からC言語を勉強しようとしている初心者です。 よろしくお願いします
786 :
デフォルトの名無しさん :04/10/09 01:09:17
なぜ今更C言語なのかしらん?
グローバル変数と引数/返り値なしの関数で いっぱいのwin32 C++のソースを元にして、 さらに進めていかなくてはいけない状況です。 VS2003で、整理してクラス化するのに うまい方法はないでしょうか。 JavaやVS2005のC#やVBにはリファクタリングと いう便利な機能があると聞いたのですが C++>C#という変換というのもなさそうですし、 かといって手作業でとなると膨大で悩んでいます。
>>788 弊社の優秀なスタッフが動作検証まで含めてクラス化を行ないます。
規模によりますが、ほぼ0からの設計と同程度の時間と費用が掛かるとお考えください。
790 :
デフォルトの名無しさん :04/10/09 02:33:25
あるベンダーから配布されたActiveXコントロールを使用しようと 思ってるのですが ダイアログベースじゃないアプリの場合、コントロールはどこに 貼り付ければいいのですか?
ウィンドウに貼り付けて下さい。
792 :
デフォルトの名無しさん :04/10/09 03:05:50
ウィンドウってなに?
お前が今見ているもの
795 :
デフォルトの名無しさん :04/10/09 03:19:27
>>793 おまえバカだろ?
どうやって貼るんだよ
ダイアログベースじゃないっつってんじゃんよ
マジ死んでくれ
まあもちつけド素人
797 :
デフォルトの名無しさん :04/10/09 03:34:23
なんで餅つかなきゃなんねーんだよ ばかかおめー
すみませんホントにどなたか教えていただけないでしょうか・・?
ちなみに
>>795 とか
>>797 はわたしではありません。
フォームビュー使えば。
801 :
デフォルトの名無しさん :04/10/09 04:38:45
CViewから派生させた独自のViewをつかっているので無理
>790 ActiveXコントロールといってもいろんな種類があります。 単なるDLLとして使うのであれば.hをインクルードして .libをプロジェクトに追加します。
そのActiveXの作者サイドに聞けばいいじゃん。
>>789 委託できるほど研究費がもらえた際にはぜひ貴社に。
むぅ、機械科が作ったソースなんて・・ orz
>766 >784 VS>ツール>オプション>テキストエディタ>全般。。。 列表示が見つかりません。 VS>ツール>オプション>テキストエディタ>C,C++>全般。。。 にも見つかりません。 .NETなんですが、 .NETって2003ですよね。
VC6でも、VS2003でも 列の表示できないな。 VSで行の表示が追加されたぐらいだ。
列の表示って一見役に立ちそうでまったく役に立たないからな。
>806 そうですか、ありがとうございました。 >807 そんなことはないですよ、かなり役に立ちます。
つーか、なんでもVisualStudioでやろうとするのが間違い。 適当なテキストエディタ用意してVisualStudioに登録しておくのがいいかと。
エディタはVisualStudioのものを使用するに限る。
>809 ツール>外部ツール? あれは新しく開くから使いにくいのだけれど、ほかに方法があるのか?
そりゃぁ毎回新しく開くエディタが悪い。
Addin
814 :
デフォルトの名無しさん :04/10/10 01:15:43
VC++6のときにあった プロジェクトへ追加 コンポーネントおよびコントロールは VS2003でなくなっちゃったの?
...
816 :
デフォルトの名無しさん :04/10/10 16:09:29
詳しい人教えてください。 CImageで読み込んだ画像をIntegerのフィールドに 転送したいのですが、GetPixelを使うと遅すぎてつらいです。 なにか良い方法はないでしょうか。 画像サイズは4800 x 4800 の、BITMAPを読み込んだものです。 色数は 1ビット、および8ビット(モノクロ256階調)です。 転送先は、new int[4800*4800] で、書き込みは、転送元が 白でないなら、intの特定のビットをONにしています。 高々25Mピクセルの転送に数分(1.4GHz)かかっているので 多分関数オーバーヘッドおよびGetPixelの過剰な処理が効いているのだと考えています。 メモリ転送系で一気にバッファに写す、あるいは少なくとも CImageの各ピクセルにポインタで直接アクセスしたいのですが。
>>816 それだけの大きさの画像なら、自前でbmpを読むか外部のライブラリを使うなどしたほうが無難な気がする。
819 :
デフォルトの名無しさん :04/10/10 16:54:09
>>817 若かったころは.magを読み込んで使うミニゲームなど作ったもんですが。
(ロジックの解説を読んでローダを自作しました)
ちかごろとんと根気が無くなってしまいました。
>>818 一度GetBits()を使ったことがあるのですがなんか上手くいかなくて。
たとえば、各ピクセル1バイトなら、GetBits()が返すのが
バッファの先頭バイトなので、
unsigned char* pcTop = (unsigned char*) CImage.GetBits();
と仮定して
cPixelValue = pcTop[4800*y + x];
みたいな感じですか。
あるいは一気に行くことができるのか・・・。
unsigned char pcMegaBuffer = new unsigned char[4800*4800];
memcpy(pcMegaBuffer,pcTop,4800*4800);
>>819 BMPの1ラインは4バイトアラインになっていることに気を付けよう
と思ったけど、4800ピクセルなら関係ないか
822 :
デフォルトの名無しさん :04/10/10 17:40:09
>>820 ,821
すみません。よくわかりません。
16ビット時代のintegerのバイト並びがひっくり返ってるとか
その手の話でしょうか。
あるいは一行の最低単位が4バイトで端っこに余白が出るとか
そっち系ですか?
そっち系です
824 :
デフォルトの名無しさん :04/10/10 17:54:07
>>823 ありがとうございます。
今、GetBits()を使って得た番地をもとに
1ピクセル1ビットのフィールドをintのフィールドに転送する
ループを組み立て中なので、まもなく勝利か玉砕の報告を
させていただきます。m(_ _)m
>>816 GDI++はアホのように重いから・・・使うな。
828 :
デフォルトの名無しさん :04/10/10 20:37:25
とりあえず動作しました。 踏んだ地雷 ・GetBits()が返していたのは実は「ビットマップバッファの末尾近く」のほうで そこから先をアクセスしようとしてアクセス違反。(前回の失敗はこれらしい) 自爆 ・向きを間違えて水平鏡面転送してしまい、確認するのに小1時間。 埋め込んだ地雷 ・「末尾近く」ってどこ?なんか転送がずれるんですけど。 とりあえず謎の定数を埋め込んでおおむね転送可能にしたけれど 完全に一致してるんだろうか。 ・仕様 最終1ラインでアクセス違反が出るので最後1ラインだけ転送せず。 まーいーや。端っこはどうせ使わないし。ケンチャナヨ〜 というわけで3分近くかかるため敬遠されていた函数群が 1秒強まで短縮できたので、判定は「大勝利」ということで。 皆様有難うございました。m(_ _)m さて、飯でも食いながら戦後処理(ソースをにらんで作ったきり忘れ去られた 函数群を発掘する。動作不明のショートカットキーを紙に書き出す)でも はじめます。
>>828 CImage::GetBits()は
「返されるポインタは、座標 (0, 0) のピクセルを指します。」
らしいよ。
bmpは上下反転している罠。
表示でソースで見れるんじゃないですか?
天地無用
836 :
デフォルトの名無しさん :04/10/10 22:58:19
つか、もうVC++の時代は終わったから初心者諸君 無理して勉強する必要はないよ
またDel厨か!!
838 :
デフォルトの名無しさん :04/10/10 23:32:40
いえ、C#厨ですが、何か問題でも?
Visual C++で質問があります。 ダイアログボックスにドラッグドロップを使って、ファイル名を選択できるように したいのですがやり方がわかりません。 プロパティで"ドラッグドロップを許可"にチェックをいれましたが、ここから先が わかりません。ご教授ねがいます。
840 :
デフォルトの名無しさん :04/10/11 04:34:44
以下のプログラムをWinXPで実行すると問題ないんですが 以前、9x系OSで試した所、失敗した様な記憶があります。 テストしようにも、今現在 9x系OSの環境が無いのでテスト出来ません。 宜しければどなたかお教え願いませんでしょうか? CFile File; char path[_MAX_PATH]; ::GetModuleFileName(NULL, path, _MAX_PATH); if(!File.Open(path, CFile::modeRead)){ TRACE("Error!\n"); } File.Close();
>839 とりあえずヒント 1.ダイアログボックスの「ドラッグドロップを許可」を有効にする 2.「WM_DROPFILES」メッセージハンドラを用意し、処理する
>>840 ファイル共有違反になるね。
CFile::modeRead | CFile::shareDenyWrite
なら開けるよ。
>>841 アドバイスありがとうございます。
力不足により、まだ解決していないため、再度アドバイスお願いします。
ダイアログボックスの「ドラッグドロップを許可」を有効にし、
WM_DROPFILESのメンバ関数OnDropFiles(HDROP hDropInfo) を作成するところまでは
できましたが、ファイルをドロップしても、この関数が呼ばれません。
この関数が呼ばれれば、処理はなんとかなると思うのですが、関数が呼ばれない理由がわかりません。
DragAcceptFiles
>843 試してみたら確かに呼ばれない・・・と思ったらCAboutBoxに作ってた。 後は、ClassViewからCHogeDlgを右クリックして「Windows メッセージハンドラの追加」 「クラスで使用可能なメッセージ用フィルタ」を「ウィンドウ」にして「W_DROPFILES」を選択し 「ハンドラの追加」ボタンをクリックしてますか? 当方、VC++6.0(SPなし)にて呼ばれることを確認。
>>845 アドバイスどうもです。
845さんが書かれている通りのやり方で、メンバ関数OnDropFiles(HDROP hDropInfo)を
インプリしてますが、未だに上手くいってません。
>>844 ,845
DragAcceptFiles() をOnInitDialog() に書いて見ると、全てのダイアログでOnDropFilesが
呼ばれるようになりました。 ですが、ドラッグドロップを許可」を有効にてある、ダイアログ
だけは、反応がありません。
再度質問ですが、
1. ダイアログのプロパティで 「ドラッグドロップを許可」を有効にした場合、DragAcceptFiles()を
記述する必要があるのか?
2. 記述する必要がある場合、どこに記述するのか?
もしわかりましたら、よろしくお願いいたします。
>>846 自己レスです。
状況がわかりにくくすみません。もう一度整理します。
やりたいことは、ダイアログアプリケーションに貼り付けた、エディットBox で、ドラッグ&ドロップをしたい です。
エディットBoxのEditプロパティで「ドラッグドロップを許可」を有効にしていますが、OnDropFiles が上手くよばれません。
試しに、 全体のダイアログプロパティで同様のことをやってみたら、OnDropFilesが呼ばれました。
先ほど自分で質問した、"DragAcceptFiles() をOnInitDialog() に書いて見ると〜" というのは、たぶんこのことと
同じことをやっているのだとようやく理解できました。
エディットBoxでドラッグ&ドロップを受けたい場合には、なにか特別のやり方があるのでしょうか?
>846 1.どちらかを行えばいい。両方やると重複するだけ。 2.記述する場所について特に決まりはない。OnCreateやOnInitDialogなど。 >847 CEditをサブクラス化すればできなくはないが、 よりお手軽な方法はダイアログ内の座標で判断するとか。
D&Dをエディットだけに限定したいなら エディットをサブクラス化して、エディット宛てのWM_DROPFILESを処理するのが簡単なのでは。
親のOnDropFilesが呼ばれているから 子供(Edit)のOnDropFilesが呼ばれていないだけでは? (メッセージは1つしか飛ばない)
>>842 なるほど、そうでしたか。
お陰で解決出来そうです。
情報をありがとうございました。
852 :
デフォルトの名無しさん :04/10/11 17:29:15
みなさん、ぶっちゃけ、Document/Viewつかってる? 漏れはいっつもダイアログベースばっかりだから疑問に思いました。 Document/Viewだとコントロール使えないから不便で仕方ない FormViewつかえばいいが、それだったらはなからダイアログベースで問題ない
854 :
デフォルトの名無しさん :04/10/11 19:19:39
basicはかけません
855 :
デフォルトの名無しさん :04/10/11 23:12:09
>>852 Document/Viewなんてそんなにこだわる必要ないよ
ほとんどの人は
Documentについて知り過ぎたView
Viewについて知り過ぎたDocument
なんて実装してるから、Document/Viewの意味がない
過ぎたの度合いに寄るが ふつうViewはDocumentを熟知している。
ドキュメントへの依存が非常に強固なのはDoc/Viewの特徴だろ。 それを避けたければ、コントローラを分離してあるMVCを採用するべきだし 当然関連が分散して保守もその分難しくなる。
Viewが多数存在し、それぞれが連動させようという状況で、Doc/Viewの方がすっきりすると思う 厄介なのはビューがドキュメントをひとつしか扱えない点とか、ダイアログ表示にしずらい部分か
859 :
デフォルトの名無しさん :04/10/12 00:10:08
>>858 なにいってるの?
まったく意味がわかないんですが
しづらい
>>848 とりあえず、ダイアログでメッセージを受け取る方法でプログラムを完成させました。
いろいろとアドバイスありがとうございました。
C:\Program Files\Microsoft Visual C++ Toolkit 2003\vcvars32.bat cl /01 main.cpp /LD /link user32.lib /def:ts.def とやると、windows.hが無いぞと怒られます。 Microsoft Visual C++ Toolkit 2003を使ってるのですが、どうやれば良いのでしょうか?
Toolkit 2003 単体だけでは無理
864 :
デフォルトの名無しさん :04/10/12 01:15:44
CScrollViewが派生元Viewを使っているのですが スクロールバーが表示されないのですがどうすれば 表示されるのですか?
>CScrollViewが派生元Viewを使っているのですが 状況がわからんん
866 :
デフォルトの名無しさん :04/10/12 01:26:14
わからんなら書き込みするなぼけ
867 :
デフォルトの名無しさん :04/10/12 01:30:27
「ですが」がくどいYO!
868 :
デフォルトの名無しさん :04/10/12 01:46:11
わからんなら書き込みするなぼけ
>>864 CScrollViewがウィンドウサイズとスクロール ビューのサイズを比較して、必要なら表示される。
表示がはみ出しているのにスクロールバーが表示されないなら、SetScrollSizes に
指定しているサイズが小さすぎるということ。
870 :
デフォルトの名無しさん :04/10/12 02:03:28
書き込みするなぼけ
871 :
デフォルトの名無しさん :04/10/12 02:09:42
872 :
デフォルトの名無しさん :04/10/12 02:37:01
質問 !!! 皆さん、なぜVC++を使われるのですか? 圧倒的にC++Builderの方がGUIは作りやすいと思うのですが・・・
>>872 自分の場合は、まだ、プログラムを覚えようとしていた時、
買ってもらったのがVC6(アカデミック)だったからかな。
2つ買うのはもったいないでしょ。
商用ソフトを作るときは、BCCでコンパイルしてexeを作る。
Win32API直書きで作るけど、どちらの場合も作りにくいと思った事は無い。
>>872 圧倒的情報量の多さ、高機能なエディタ、コンパイラの最適化が優秀、一応M$製...etc
やっぱり使っている人間が多いというのが大きいかも(必然的に情報量が多くなるので)。
そうだな。昔コンパイラ買おうとした時にボーランドのは老舗とか 盛んに言っててパッケージのデザインも暗くて重苦しい感じだったし、 書籍とかもあんまり無かったのでどうかなぁ〜と思って躊躇した。 VC++は書籍も多かったから色々調べるのに便利だろうし 何より明るいパッケージで取り掛かり易そうな感じがしたからだな。 まあ、何も分からないで買ったんだが、今になってみれば正解だった。 ボーランドはインプライズと社名を変えて再びボーランドに戻る なんていうことしてるから、やっぱりなんか不安な印象がある。
少し前からいるその変な奴にマジレスすんな。
パッケージの色合いで決める875は、表紙の絵で売上が決まるエロ小説愛読者 と同じルーチンの匂いがする。
このスレは、諸々の事情で VC++ を使用せざるを得ない 奴らが集まるスレだろ。他の言語の素晴らしさを語りたい奴らは 他所でやれ他所で。('A`)
インテリヘンスまんせー。
>>880 CTはconstだったはず
ちがったっけな
ハンガリアン記法
で検索汁
>>881 惜しい。
C は const
T は TEXT(らしい。なぜか。おれはTRANSITIONALのほうがふさわしいと思ってるが・・・。
LPCSTR/LPCWSTRもある。
883 :
デフォルトの名無しさん :04/10/12 23:15:10
Visual Studio 2005Express Β1を使っているんですが、 dllファイルを使用するときに、ファイルをそのプロジェクトや systemディレクトリにコピーせずに、 includeファイルやlibファイルみたいに読込先を指定して 読み込む方法は無いですか?
>>883 1年くらい前にちょろっとやっただけなんですっかり忘れたが、
そん時のソース発見した。
遅延読み込みを使用する。
#include <delayimp.h>
#pragma comment( lib, "delayimp.lib" )
をヘッダに入れて
FARPROC CALLBACK DelayLoadHook(unsigned dliNotify, PDelayLoadInfo pdli)
{
if ( dliNotify==dliNotePreLoadLibrary )
{
TCHAR dllPath[MAX_PATH];
PathCombine( dllPath, _T("DLLの場所\\"), pdli->szDll );
return reinterpret_cast<FARPROC>( LoadLibrary( dllPath ) );
}
else return 0;
}
とか作って
extern "C" PfnDliHook __pfnDliNotifyHook2 = DelayLoadHook
っていれる。
コンパイラオプションで目的のDLLを遅延読み込み指定する。
で出来ると思う。
多分。
885 :
デフォルトの名無しさん :04/10/12 23:51:03
TTCHAR LPlong poniter hhandle Cconst
881 882 885さん、レスありがとうございます。 ハンガリアン記法は一般的なものだと思ってたんですが、 もともとMSの人の発案なんですね。検索したらいくつか 略語の解説がみつかりました。 CTでひとまとまりだと思ってたら、まさか一文字が略語とは 気づきませんでした。女子高生のさらに上をいきますね(^^;
*用途で覚えておこう Cが付くのはconstで読み出し用 Cなしは書き込み用 Tが付くのはUNICODE互換でワイドとの切り替えあり
888 :
デフォルトの名無しさん :04/10/13 13:21:31
STLPortってなんですか?
参考書をみた ↓ 入力 ↓ 動いた ↓ ちょっと変えてみる ↓ で? ↓ 何も得ない って状態なんだが・・・・・・ あと、コンパイルに時間が掛かるのは仕方ないのかな・・・・・・(体感10秒くらい)
>>889 ああ、30分とか1時間とかじゃないんだ
幸せだな
>>889 プリコンパイル済ヘッダー
#include "stdafx.h"
ってのを使うと、コンパイルが速くなるよ。
新規にプロジェクト作って、
標準的な"Hello World! アプリケーション"
で作ると、stdafx.hとか、stdafx.cppってのが作られるけど、
これらが速くしてくれる。
今はちょっと長々と説明できないんで、これにて。
未だにVC++5.0使ってます。 lseek64()を使ってますが、2GB以上のファイルを扱えず、 2の31乗以上の値を指定するとエラーになります。 どうすればいいですか?
>>892 OSとHDDのフォーマット方法も関係するけど
>>894 OSはWinNT4.0SP6、HDDはNTFSです。
ソースファイルに何らかのマクロを定義すれば扱えるように
なるとか、そういう方法があればいいのですが・・・
>>889 新規プロジェクトで、初めからstdafx.hとかある場合は、
そのstdafx.h内で、よく使うヘッダーをincludeする。
手動でやる場合は、
:stdafx.h、stdafx.cppを新規にプロジェクトに追加
(どっか別に新規プロジェクト作って、そのstdafx.h、stdafx.cppを持ってきた方が無難かも)
:よく使うヘッダーは、stdafx.hでincludeする。
:すべてのcppファイルの先頭で、stdafx.hをincludeする。
:プロジェクト「設定」>「c/c++」>カテゴリ「プリコンパイル済みヘッダー」>「プリコンパイル済みヘッダー(,pch)を使用」
:「このヘッダーまで」の欄に「stdafx.h」を入力してOK。
これで速くなると思う。初回は変わらんかもしれんけど、ちょっとした修正程度なら、抜群に速くなると思う。
ただ俺もそこまで詳しくないから、足りん部分があるかもしれんけど、
とりあえず俺はこれで毎回1分30秒くらいかかってたのが、3〜5秒になった。
別に時間なんかかかってないだろ アホな初心者の独り言だってば
>>892 long 桁以上なら2回に分けてseekする。
>>898 2回に分けただけじゃ2^33-2バイトしか扱えないぞ。
んじゃ、3回に分けようか。
>>887 const 定数はそういう意図がなんですか。
TextはそれでUnicodeなんですね。
意味が分かると段々ソースを眺めても頭痛がおこら
なくなりました。ありがとうございます。
脳内の問い合わせエラーが減ったのかも(^^;
>>901 Unicodeじゃねーよ・・・何勝手にあさっての方向に脳内補完してんだよ。
903 :
デフォルトの名無しさん :04/10/13 23:13:22
>>902 ちょっと知ってるからって偉そうにすんなよ
ヲタ君w
UNICODE対応が _UNICODE,UNICODEと二つに分かれてるのは何でだろ
905 :
デフォルトの名無しさん :04/10/13 23:27:32
hoge.hを編集中にhoge.cppを編集したい、また逆に hoge.cppを編集中にhoge.hを編集したいことってありますよね? その際にキーボードから一発でできませんか? BCBだとCtrl+F6でいけるんだけど・・・ VS2003を使っています。
そんなアドインマクロをどこかで拾った事あるよ VC6.0だけど まぁ難しくないから作ってみれば
907 :
デフォルトの名無しさん :04/10/13 23:39:39
あんたアフォでつか? 作れるくらいなら最初から質問しない
>>904 _UNICODEはOS依存APIの切り替え指定、UNICODEはCRTのテキストルーチンマッピング(_tcs系)
911 :
デフォルトの名無しさん :04/10/14 08:27:38
Windowのサイズを変更したいんだけど、どうすればいいの?
>>911 Alt+Space S ← で幅を変えられる。
高さを変えたいなら ↓ だ。
>>905 その質問と回答って最近別スレで見た
マルチはだめだよ
>>912 SetWindowPosのことだと思われ。
分かってて書いてるのかも知れんが。
始めまして VC初心者です Win2k VC6 を使ってます。 指定したディレクトリ以下のファイル・サブディレクトリ(もちろん中身あり多階層) 全てを削除するプログラムを書きたいのですがさっぱりわかりません。 ファイルを消すのは FindFirstFile と FindNextFile で検索して 順次 DeleteFile で消していくという方法でできたんですが、 ディレクトリが絡んでくるとさっぱりわかりません・・・ orz とくに多階層になってるとどのような手法で消していけばいいのかさっぱり・・・ どなたかこのド素人に手法を伝授してください
>>916 *全体をループで構成する
*見つけたのがディレクトリなら中身がないか確認する
*中身を消す(中身に中身があったらまたループ)
*中身がなくなったらディレクトリを消す
*全部なくなるまで繰り返す
>>916 DeleteAllFile(char *){
フォルダを見つけたらDeletAllFile();
}
みたいな感じで再帰的にやってみたら?
>>916 system("deltree /y 削除したいディレクトリ");
ゴミ箱に移動汁
SHFileOperationでいっぺんにできなかったっけ
アドバイスありがとうございます なるほどなるほど関数作って while あたりでループ組んで FindFirstとNext でフォルダを見つけたら再帰的に自分与呼び出せばいいわけですね で、ファイルがなくなった時にそのフォルダを消してから return していけば 全てのファイル処理が終わったときには全部のファイルとサブディレクトリが消えてるってわけですね。 確かにこれならいけそうです。 この方法なら応用すれば、指定ファイルだけ消していったりもできそうですしね。 ありがとうございます。この方法でがんばってみます!
>>922 boostだと
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>
int main () {
boost::filesystem::path dir ("hoge");
boost::filesystem::remove_all (dir);
return 0;
}
でhoge以下が消せます
Visual Studio 2003ですが、プロジェクトのDEBUGディレクトリに IDE上でファイルをコピーするには、どうすればいいんでしょうか? プログラムから、カレントディレクトリにある画像ファイルを読み込みたいんですが。
VS2003を使っているのですが、Bitmapをうまくリソースに追加できません。 アイコンのような画像なら読み込めるのですが、 写真などは何度やってもできません。 宜しくご指導お願い致します。
ありがとうございました。 できました。
928 :
デフォルトの名無しさん :04/10/15 01:12:24
Appウィザードで適当なプロジェクト名をつけた。ABC するとCABCView,CABCDoc等ができるがこれを簡単に変更することはできませんか?
ウィザードでプロジェクト作るときに変更できるよ。
930 :
デフォルトの名無しさん :04/10/15 01:34:06
コードフォーマットの整形はどうやるんですか?
931 :
デフォルトの名無しさん :04/10/15 02:16:10
>>929 プロジェクトを作ってしまった後に変更したいのですが
無理ですか?
933 :
デフォルトの名無しさん :04/10/15 02:38:04
935 :
デフォルトの名無しさん :04/10/15 02:48:26
VC2003学生限定PACKを買いました。現在は評価版を使ってます。 新しいプロジェクトを造ろうとメニューを見るとマネージドC++プロジェクトのアイコンがありません。 評価版には入ってないのでしょうか。
936 :
デフォルトの名無しさん :04/10/15 04:10:34
全部書き換えるくらいの根性が無くてどうする。 やれ
937 :
デフォルトの名無しさん :04/10/15 05:21:57
>>936 君らが書いてるような小さなサンプルプロジェクトならいいんだけどねw
938 :
デフォルトの名無しさん :04/10/15 05:30:05
>>937 大規模開発やってらっしゃるのですね・・・
アドインがあるのでインストールしてください。
というか、おそらくすでにインストールされているはずです。
あなたのプロジェクトの命運は、私たち2チャンネラに左右されるわけですね。
微力ながら一生懸命尽くしたいと思います。
939 :
デフォルトの名無しさん :04/10/15 05:45:58
>>937 お前本当にプログラム作れんのか
書替えツールを自作すればいいんだよ役立たず
というかAppWizardで作られるファイルなんてそんな多くないはずだが。
馬鹿ばっかり
943 :
デフォルトの名無しさん :04/10/15 06:33:23
>>940 じゃ、おまえは必要なものすべて自作してるのか?
「やってますが、なにか?」なんて台詞吐くつもりなら
最低でもOSから自作してね
ここで煽ってる暇あったら書き換えろ。 AppWizardで作ったならファイル数は10もないだろ。
∧∧ Sir! . ( ゚Д゚)ゝ スレのタイトルを読み直した方がよろしいかと思います! | |
誰が必要なものすべて作れなんて話してるんだ
947 :
デフォルトの名無しさん :04/10/15 07:08:57
作らなくても在りますよ^^
928 :デフォルトの名無しさん :04/10/15 01:12:24
Appウィザードで適当なプロジェクト名をつけた。ABC
するとCABCView,CABCDoc等ができるがこれを簡単に変更することはできませんか?
932 :デフォルトの名無しさん :04/10/15 02:34:18
>>931 全部書き換えればいいじゃん。
933 :デフォルトの名無しさん :04/10/15 02:38:04
>>932 おまえ、バカだろw
936 :デフォルトの名無しさん :04/10/15 04:10:34
全部書き換えるくらいの根性が無くてどうする。
やれ
937 :デフォルトの名無しさん :04/10/15 05:21:57
>>936 君らが書いてるような小さなサンプルプロジェクトならいいんだけどねw
検索&置換すりゃええんでねぇのか。 100、200くらいなら書き換えるのも大変じゃないだろうに。 ファイル名だって、10本そこそこだろう。
バカにされたからどんどん話を大きくしようとしてるのがバレバレだね。
ファイルの書き換えもできないのに大規模開発かよ
952 :
デフォルトの名無しさん :04/10/15 15:38:17
ほんと、ここ奴らってショボイのしか書いたことないんだね そうファイル数100を超えるような中規模程度のものすら 知らないんだろうhw
だからスクリプトでも組めよ 無能だなぁ
なんかすごいことになってるなw というかプロジェクト作り直せ
>>928 自分は、コンソール/ウィンアプリでしかやった事無いけど、
同じようにプロジェクト名を変えたくなった事がある。
自分の場合は、新しいプロジェクト(ワークスペース)を作って、
そのワークスペースのフォルダに全てのファイルをコピー。
ウィンドウ上のコマンドのプロジェクト→プロジェクトへ追加→ファイル
を選んで、ファイルを新しいプロジェクトに追加する。
それからビルドすれば完成。
956 :
デフォルトの名無しさん :04/10/15 16:01:12
↑真性アフォハケーン
100で中規模?ありえねぇ・・・。
>>952 元の質問
>>928 がAppWizardが作ったファイルを変更したいって質問だろ。
他のファイルが100あろうが関係無い。
>>958 同意。
もしかして、大規模(?)プログラムの全部の関数を、
Doc,Viewに突っ込んでるのかも知れん。
Document クラスに500近く関数あったら萎えるなぁ。
だから手作業で直すのに時間かかりそうなら スクリプトでもいいし、マクロでもいいし、簡単なプログラムでもいいし、 それなりに頭使えばたいして時間はかからんだろう。 それぐらいできないようならプログラマには向いてない。
>>956 すまん。そのタイプのプロジェクトはやった事無かったから。
962 :
デフォルトの名無しさん :04/10/15 16:53:34
そろそろ次いってみよう
たくさんレスしてもらって 幸せな奴だな。
次スレたってる?
965 :
デフォルトの名無しさん :04/10/15 17:55:21
ちんこはたってますが、なにか?
966 :
デフォルトの名無しさん :04/10/15 18:05:42
ワークスペース名を(WORKSPACE)します。 ある構造体をViewヘッダファイルで宣言します(構造体名:KOZO)。 その構造体を引数とした関数を作成します。(関数名Func) そうすると、void CWORKSPACEView::Func(KOZO *kozo) というのができあがりますが、ClassViewから、その関数名を ダブルクリックしてもジャンプできません。 そこでKOZOの前にCWORKSPACEView:を追加するとジャンプできるのですが、 kozo->と書いたときに現れるメンバが自動表示されません。 これはどうすれば表示されるようになるのでしょうか。もしくはジャンプする方法で 何か違う方法があるのでしょうか。
>>966 とりあえずコンパイル通れば、あとは気にしない。
ジャンプしたいところにマークでもつけとけばいい。
あのC言語って何ですか?C言語ってD前だからC何ですか?
ボケたつもりなんだろうが そ の 通 り だ
970 :
デフォルトの名無しさん :04/10/15 19:28:13
大規模開発やっているなら、すでにアドインが入っているはずですよ^^ 上司か同僚に聞いてみたらいいですよ^^ 入っていないなら、あなたのプロジェクトは手作業で書き換える開発スタイルだってことです^^
>>968 メイドさんしぃしー(製作・販売ライブドア)がこの言語によって作られたから。
972 :
デフォルトの名無しさん :04/10/15 20:56:49
#include <functional> struct Equala : public binary_function < CDeviceBase*,CDeviceBase*,bool > { public: bool operator()(CDeviceBase* lhs,CDeviceBase* rhs) const { return *lhs == *rhs; } }; *******\Device.h(34): error C2504: 'binary_function' : 定義されていない基本クラスが宣言されています。 ってなんで?
>>972 std::binary_function
?
974 :
デフォルトの名無しさん :04/10/15 21:33:03
>>973 さん
マジありがとうございます。
解決できました。
感謝感激
975 :
デフォルトの名無しさん :04/10/15 21:40:47
さて蒸し返すぞ。 ファイルが100あろうがなんだろうが打ち変えろ。 置換で一つ一つ確認しながらやれば一日でできるだろ。 そもそもそんな規模のものにABCとかつけるなよ。
976 :
デフォルトの名無しさん :04/10/15 21:50:04
次スレは、どこかのスレを乗っ取りたいな。 JavaスレあたりでVCの話がしたい・・・
977 :
デフォルトの名無しさん :04/10/15 22:03:03
VCは糞 Windowsアプリの作成はBCB最強 まちがいない
エディットコントロールに文字を転送して表示してるのですが なぜかアルファベットが2バイト文字のようにすこし大きくなります。 表示された文字を別のメモ帳にコピペするとふつうの1バイト文字になります。なぜでしょうか? お願いします。教えてください。お願いします。お願いします。お願いします。
どこかにスクリーンショットでもUPしてみたら