★初心者にVisual C++を教えるスレ★ Part10
1 :
デフォルトの名無しさん :
04/01/24 17:45
2 :
デフォルトの名無しさん :04/01/24 17:45
前スレの 1-2 に、前スレへのリンクを足しただけですが こちらのほうでよろしかったでしょうか。
新スレ乙。
VCが無駄にしてるメモリ領域ってなんですか? 完全な最適化をしきれていない分のコードが締めるメモリとか? 使ってない機能はリンクされないんだからヘッダをいじっても 何も変わらないと思うんだけど、具体的に何がどうなるの?
>>5 は前スレの991のレスに対する疑問かね
------------------------------------------------------
991 名前:デフォルトの名無しさん[sage] 投稿日:04/01/24 13:46
そこまで大きいメモリを連続して取るなら、
アッセンブラを多少勉強したほうがいい、
なぜ個体によって動いたり動かなかったり、
完全に動かすにはどうやるのかわかるよ。
どのレジスタにどの情報を入れるかはっきりと指定できるからな。
ただし、何メガもアッセンブラでやることは無いと思うが。
そもそも16Mや配列1マン取らないといけない設計自体に
疑問を感じる。
VCはただでさえ無駄にメモリ領域を消費している。
ヘッダや元からついてくるソースに入っていって使ってない機能を
削除するとか、いろいろ方法も考えられる。
VCはふつうのソフトの開発やデバッグややりやすいが、いったんデバイス(メモリ)
で引っかかったら、永久に原因が究明できないのが大欠点。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの?
>8 StdAfx.hをインクルードしてないんじゃない?
10 :
デフォルトの名無しさん :04/01/25 11:24
前スレの最後でも質問させていただいたのですが、 文字列リソースを使用するうえで、個数の上限、又は 総バイト数の上限などはあるのでしょうか?
まったくわからなくて困っています。 古いスタイルのオープンダイアログにおいて(OFN_ALLOWMULTISELECTをしていするオープンダイアログ) 右側にあるディレクトリを選択するツリービューを作成するにはどのようにすればいいのでしょうか。 ツリービューで自作しようと試みたのですが、あそこまで快適なものをつくるには私はあまりにもスキル不足でした。 なにとぞご指導お願いします。
12 :
デフォルトの名無しさん :04/01/25 19:07
一般のCView派生クラスにSetFont って無効なんですかね? SetFontしてGetFontしてもNullポインタが返ってくるんですが。 OnDrawの中で毎回、LOGFONTからCFontを作成して SelectObjectをやってますけど。
13 :
デフォルトの名無しさん :04/01/25 19:10
>>11 CFileDialog?
ツリービューなんてあったっけ?
リストビューじゃなくて?
14 :
デフォルトの名無しさん :04/01/25 19:22
質問です。 ビューの中にボタン(CButton)を配置して、 ボタンがクリックされたとき、メッセージをCButtonじゃなくて、 その親ビューが受け取るようにすることはできるんでしょうか? CButtonの派生クラスを作らないで実現したいのですが。
普通ボタンが押されたときのメッセージってのは親に飛ぶものだが。 クリックされたときボタンを押されたくないとか複雑な事情か?
16 :
デフォルトの名無しさん :04/01/25 19:28
>>12 ちょっと分かりにくかったかも知れないですが、
GetFont で CFont* を入手できないので
>OnDrawの中で毎回、LOGFONTからCFontを作成して
>SelectObjectをやってますけど。
でやっているということです。
SetFont が 毎回取得するデバイスコンテキストに
影響を与えるとするなら、一度 SetFont すれば
SelectObjectは不要なのでしょうが、実際には
何も表示されるフォントに変化がないので、毎回
OnDraw でpDC->SelectObjectをやってから描画して、
また元のフォントに戻している状況です。
>>14 押されたボタンのメッセージはデフォルトで
親に伝えられてるはずだよ。ボタンの解説書を
読むといいと思う。
>>13 適当にボタンを作って
void CTESTDlg::OnButton1()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
OPENFILENAME ofn;
char fn[MAX_PATH];
int r;
fn[0] = '\0';
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.Flags = OFN_ALLOWMULTISELECT;
ofn.lpstrFile = fn;
ofn.nMaxFile = sizeof(fn);
r = GetOpenFileName(&ofn);
}
でボタンを押すと出てくるダイアログです。
ちなみに自作で作ってみたのが以下のものです。 ちらつきが激しくてストレスがたまってしまいました。 // lpszDirPath:カレントディレクトリのフルパスです。 // m_dirtree:CTreeCtrlのコントロールを指すメンバ変数です。 void CTestDlg::SetTreeView(LPCTSTR lpszDirPath) { TCHAR lpPath[_MAX_PATH+1]; _tcscpy(lpPath, lpszDirPath); ULONG uJudge;
TCHAR lpDirectoryPath[_MAX_PATH+1]; TCHAR lpExtension[_MAX_EXT+1]; TCHAR lpDrive[_MAX_DRIVE+1]; TCHAR lpDir[_MAX_DIR+1]; TCHAR lpFname[_MAX_FNAME+1]; CString csFileName = _T(""); CStringArray csaTreeItem; HTREEITEM htiTreeItem[65535]; CString csBuf; long iItem = 0; long ulCount;
uJudge = (ULONG)GetFileAttributes(lpPath); if((uJudge & FILE_ATTRIBUTE_OFFLINE) || !(uJudge & FILE_ATTRIBUTE_DIRECTORY)) { // ★★★ ここにエラー処理 ★★★ // lpPathの示すフルパスが予想外のものである // 強制的にlpPathをカレントディレクトリにする if(!(GetModuleFileName(NULL, lpPath, sizeof(lpPath)))) { // ★★★ ここにエラー処理 ★★★ // 自分のフルパス取得に失敗
} else { _tsplitpath(lpPath, lpDrive, lpDir, lpFname, lpExtension); _tcscpy(lpDirectoryPath, lpDrive); _tcscat(lpDirectoryPath, lpDir); csFileName.Format("%s%s", lpFname, lpExtension); }
} else { _tsplitpath(lpPath, lpDrive, lpDir, lpFname, lpExtension); _tcscpy(lpDirectoryPath, lpPath); } // lpDirectoryPath : ディレクトリパス // lpDrive : 上のディレクトリのドライブ PathSplit(lpDirectoryPath, csaTreeItem); if(m_dirtree.DeleteAllItems() == 0) { // ★★★ ここにエラー処理 ★★★ // TreeViewのItemの削除に失敗
} else { htiTreeItem[0] = m_dirtree.InsertItem(csaTreeItem.GetAt(0), 0, 1); ulCount = csaTreeItem.GetSize() - 1; for(iItem = 0; iItem < ulCount; iItem++) { csBuf = csaTreeItem.GetAt(iItem+1); if(!csBuf.IsEmpty()) { htiTreeItem[iItem+1] = m_dirtree.InsertItem(csBuf, 0, 1, htiTreeItem[iItem]); } } }
CStringArray csaChildDir; CStringArray csaChildFile; int iChildDirSize; int iChildFileSize; GetChildren(lpDirectoryPath, csaChildDir, csaChildFile); iChildDirSize = csaChildDir.GetSize(); iChildFileSize = csaChildFile.GetSize(); if(iChildDirSize >= 1) { for(iItem = 0; iItem < iChildDirSize; iItem++) { csBuf = csaChildDir.GetAt(iItem);
if(!csBuf.IsEmpty()) { m_dirtree.InsertItem(csBuf, 0, 1, htiTreeItem[ulCount]); } } m_dirtree.SortChildren(htiTreeItem[ulCount]); m_dirtree.SelectItem(htiTreeItem[ulCount]); m_dirtree.Expand(htiTreeItem[ulCount], TVE_EXPAND); m_dirtree.Select(htiTreeItem[ulCount], TVGN_FIRSTVISIBLE); } else { m_dirtree.SelectItem(htiTreeItem[ulCount]); m_dirtree.Select(htiTreeItem[ulCount], TVGN_FIRSTVISIBLE); } }
// PathSplit // たとえばlpPathが C:\hogehoge\alpha\test としたときに // csaArrayに順番に C: hogehoge alpha test と配列に格納します void CTestDlg::PathSplit(LPCTSTR lpPath, CStringArray &csaArray) { CString csPath; csPath.Format("%s", lpPath); int iPos = 0; CString csSep; CString csItem; CString csBuf;
if(csPath.Find(_T("\\\\"), 0) != -1) { // 共有ディレクトリパスの処理 } else { csSep = _T("\\"); } do { iPos = csPath.Find(csSep, 0); if(iPos != -1) { csItem = csPath.Left(iPos); if(!csItem.IsEmpty()) { csaArray.Add(csItem); } csBuf = csPath.Mid(iPos + csSep.GetLength()); csPath = csBuf; } } while(iPos != -1); if(!csPath.IsEmpty()) { csaArray.Add(csPath); } }
>>19-28 以上をウィンドウにファイルやディレクトリをD&Dしたときに
ディレクトリパスを取り出し、そのパスを引数にSetTreeViewを呼び出しているのですが
呼び出す事にツリービュー内が激しくちらつきます。
また読み込むスピードも遅いです。
改良できるならこれを改良したいのですが知恵を貸してください。
ファイル開くダイアログってリストビューだと思うんだけど、 何をしようとしているのか分からん。 ディレクトリを選択するダイアログなら、IEのコンポーネント あたりのものを利用する方法があるよ。
31 :
デフォルトの名無しさん :04/01/25 21:59
32 :
デフォルトの名無しさん :04/01/25 22:08
それにしてもソースを交換して議論できる 掲示板ってないんですかね? ここではソースにインデントも付かないし、 使いにくすぎる。
>>32 子ウインドウなら、親ウインドウのクライアント領域を離れて
表示されることはないと思うのだが。
デスクトップの子ウインドウとして作れば?
親 hwndParent = CreateWindowEx( 0... 0 ... ); 子 hwndSub = CreateWindowEx( 0... hwndParent ... ); これで別々のウィンドウを作ってます。 おそらくMDIのことかと思いますが、 私がやりたいのは モードレスダイアログボックスのように、 メインウィンドウとサブウィンドウを別々に処理を行いたいのです。 MDIだとメインウィンドウの外にでれないので、不便なのです。
親 hwndParent = CreateWindowEx( 0... HWND_DESKTOP ... ); 子 hwndSub = CreateWindowEx( 0... HWND_DESKTOP ... ); これでウィンドウの切り替えがうまくできました。 ありがとうございました。 しかし 問題のHWND_DESKTOPの部分は描画関係のハンドルなのかな? うーむ 色々やってみます。どうもでした。
>>37 親ウインドウをNULLにして、ウインドウを作成したらどう?
俺はメインウインドウの外に置くウインドウは
これで作成してるよ。
VC++わっかんないぃぃぃーーーーー!うあーーーーーーん! 処理どこに書いたらいいかわっかんないぃぃぃぃいーーーーええーーーん!!!
lpShellFolder->GetAttributesOf(1, &lpItem, &ulAttrs); この行をビルドしたら C:\WINDOWS\デスクトップ\VC++\debug_build\FileView.cpp(215) : error C2664: 'GetAttributesOf' : 2 番目の引数を 'struct _ITEMIDLIST ** ' から 'const struct _ITEMIDLIST ** ' に変換できません。 変換で修飾子が失われます。 と出ました。どうしたらよいですか?
>>42 lpItemの宣言に const をつけてみたらどお?
>>43 違うところでエラーが出てしました・・・。某所で
constを付加するのですから,
const_castを使ってターゲットの型である,
LPCITEMIDLIST *にキャストしてやればよいです。
と書いてあったんですが
lpShellFolder->GetAttributesOf(1, (LPCITEMIDLIST)&lpItem, &ulAttrs);
とするのではないのですか?
>>44 それでうまく行った?
C++なんだから
lpShellFolder->GetAttributesOf(1,
&const_cast<LPCITEMIDLIST>(lpItem), &ulAttrs);
とするのがbetterな気がする。
子ダイアログから、親ダイアログのチェックボックスを 直接いじる方法教えて下さい。 SendMessage()を使えば出来るであろうと思ってますが、 親ハンドルの取得方法が良く分かっていないのと、 どのように投げたらいいか分かりません。 よろしくお願いします。
>>46 BM_SETCHECKをSendMessageしたいんだと思うが↓の方が簡単。
GetParent()->CheckDlgButton( nIDCheck, nCheck );
HWND使うんなら適当に読み替えてちょ。
>>47 ありがとうございます。早速今日試してみます。
ちなみにSendMessage()は、USER_MESSAGEを投げて、
力技でなんとかしようと思ってますた。
VC++は知らないテクがあると、簡単な?ことが非常に
面倒で困りまつ。
49 :
デフォルトの名無しさん :04/01/27 04:32
メインウインドウの外側に常時配置するモードレスダイアログ を作成するのに、CDialog派生クラスを使いました。 それで、そのダイアログテンプレートにはエディットボックス を配置しました。 実際に実行してエディットボックス内部でリターンを押すと ダイアログも消えてしまうんです。どうもモーダルダイアログ の際のIDOKを返すのと同じ処理が行われているんじゃないかと 推察するのですが、これ、リターン押しても消えないように するには、どうしたらいいんでしょうか?
50 :
デフォルトの名無しさん :04/01/27 04:45
>>49 自己解決しますた。
CDialogのOnOK()をオーバーライドして、
何も処理しなかったら、消えないように
なりますた。
これはVC++の仮想関数の追加では表示
されなかったんですが、こういう関数も
時々ありますね。ちと紛らわしい。
51 :
デフォルトの名無しさん :04/01/27 12:43
RSAなどの暗号処理をVC++で実装しようと思ったら 自分でコーディングするか、javaや.netframework使うしかないの?
別にopensllもVCで使えるし、CryptoAPIもあるでしょうに。
>>52 ありがとうございます
CryptoAPIはなんとなく分かりますが、opensslはどのように実装するんですか
54 :
デフォルトの名無しさん :04/01/27 16:42
親ウインドウのサイズに子ウインドウを合わせるには GetClientRectを使いますが、逆に子ウインドウのサイズに 親ウインドウを合わせるにはどうしたらいいですか? 親のCWndに子としてCListBoxを貼り付けたのですが、 CListBoxをMoveWindowすると、勝手に適当なサイズに 整形されるみたいなので、逆にCListBoxのサイズに 合わせて、親ウインドウのサイズも変更したいんですが。
>>54 親に対してGetWindowRect、GetClientRect。
取得したサイズから枠の幅を計算して、子Windowのサイズに加えて変更。
56 :
デフォルトの名無しさん :04/01/27 23:00
>>55 なるほど。
結構手間ですけど、しょうがないのか・・。
ありがとうございます。
AdjustWindowRect…と言おうと思ったが、 ひょっとしてリストボックスの方に LBS_NOINTEGRALHEIGHT付ければ済む話か?
http://www.42ch.net/UploaderSmall/source/1075252383.JPG 親 hwndParent = CreateWindowEx( 0... HWND_DESKTOP ... );
子 hwndSub = CreateWindowEx( 0... HWND_DESKTOP ... );
これでウィンドウの切り替えの問題をクリアしたのですが、
上の画像のように、1プロセスなのにウィンドウが2つできてしまいます。
親 hwndParent = CreateWindowEx( 0... HWND_DESKTOP ... );
子 hwndSub = CreateWindowEx( 0... hwndParent ... );
こっちにするとウィンドウは1つしかでてこないので、hwndParent のところは
やはりハンドルの関係の継承だと思うのですが、クリックでの切り替えがうまくできません。
うーむ やはりMDIしかないのだろうか・・・
MapChipの画像がバグってるのは仕様です
// 別に気にしなければいいかな
とりあえず気にしないことにします スレ汚しスマン
60 :
デフォルトの名無しさん :04/01/28 11:24
>>32 ヤりたい事は分ーった。アンタァ,これで幸せになれるはずだ。
子 hwndSub = CreateWindowEx( WS_EX_TOOLWINDOW, ..., HWND_DESKTOP ... );
61 :
デフォルトの名無しさん :04/01/28 15:21
プログラムを実行した後、閉じて少しコードを変更してまたビルドすると 次のようなエラーが出ます LINK : fatal error LNK1168: 書き込みモードで Debug/Project.exe を開けません link.exe の実行エラー これはリビルドするともとに戻るのですが、理由として、メモリ が開放しきれていないのではないことだと思っています。 デコンストラクタで、メモリの開放free()を使っています。ただし、 このプログラムでは200MBほどのファイルを読み込んでいます。 これだけのメモリを開放しきれていないと思っています。 原因はこれで正しいのでしょうか。 また、このような場合はどうすればいいのでしょうか。容量の多い ファイルをうまく扱うにはどうすればいいのでしょうか。 質問ばかりですいません。よろしくお願いします。
>>60 タイトルバーが気に入らないというレスが付く悪寒
その場合hwndSubを不可視のウインドウの子として作るしかない
幸せになる〜 ひと〜とき♪ たしかにタイトルバーが変わりましたが、幸せなので大丈夫です。 ここらへんで妥協します。 あんまり影響しないんで
fatal error c1010 : プリコンパイル済みヘッダーの検索中に予期しないEOFを検出しました ってどういうことでしょうか? VCのエラーメッセージはドラクエの呪文みたいでワケわからんですね。
ほわっ。 解決しました。 ありがとうございます。
最近同じ質問を何度も見た気がする。デジャヴかな。
CImageList に追加するイメージを動的に作成するために ウインドウのデバイスコンテキストあるいはそれと互換性のある メモリデバイスコンテキストから、CBitmap を作成したいのですが、 どうにもうまくいきません。 その方法についてご存知の方居られないですか? 以下はうまくいかなかったソース。
これで作成したイメージは単なる黒塗りの矩形となりました。 bitmapオブジェクトに描くというようなことはできないのでしょうか? CImageList* CExtListView::MakeDragImage(NM_LISTVIEW *pNMListView) { CDC *pDC, memDC; CBitmap bitmap; pDC = GetDC(); memDC.CreateCompatibleDC(pDC); bitmap.CreateCompatibleBitmap(&memDC, 200, 50); memDC.SelectObject(&bitmap); memDC.TextOut(0,0, "テストストリング"); ReleaseDC(pDC); CImageList* pImageList = new CImageList; pImageList->Create(200,50, ILC_COLORDDB, 1, 3); pImageList->Add(&bitmap, RGB(0x00,0x00,0x00)); return pImageList; }
>>69 (・А・) CreateCompatibleBitmap(メモリDC)
(・∀・) CreateCompatibleBitmap(画面のDC)
>>70 うーん。これでも黒い矩形のままでした。
なんでだらう。
CImageList* CExtListView::MakeDragImage(NM_LISTVIEW *pNMListView)
{
CDC *pDC;
CBitmap bitmap;
pDC = GetDC();
bitmap.CreateCompatibleBitmap(pDC, 200, 50);
ReleaseDC(pDC);
CImageList* pImageList = new CImageList;
pImageList->Create(200,50, ILC_COLOR32, 1, 3);
pImageList->Add(&bitmap, RGB(0x00,0x00,0x00));
return pImageList;
}
72 :
デフォルトの名無しさん :04/01/29 02:49
質問です。 xmmレジスタを使いたいのですが、「インラインアセンブラの構文エラーです」と言われてしまい コンパイルできません。 いろいろとgoogleで検索してみましたが使い方がわかりません。何が必要なのでしょうか。 環境はpen4,VC++6.0です。VC++.netも持っていますが使いづらくて使っていません。 よろしくお願いします。
>>72 VC++6.0でSSEを使いたいなら、
サービスパック4以上とプロセッサーパックをあてなきゃ駄目。
プロセッサーパックは、VCがプロ以上のバージョンじゃないとあてられないけどね。
.netなら素で使えたと思うけど?
>>74 >.netなら素で使えたと思うけど?
そうなのですか。知らなかったです。
使ってみます。ありがとうございました!!
>>73 書くということは pDCに対して描画するのですか?
それだと画面上に描画されることになりますが・・・。
参考までにシンプルなMFCプロジェクトで テストできるようにOnDrawに実装したサンプルを 書いてみました。 void CBitmapView::OnDraw(CDC* pDC) { CBitmapDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: この場所にネイティブ データ用の描画コードを追加します。 CDC memDC, memDC2; CBitmap bitmap; memDC.CreateCompatibleDC(pDC); bitmap.CreateCompatibleBitmap(&memDC, 200, 50); memDC.SelectObject(&bitmap); memDC.FillRect(CRect(0,0,200,50), CBrush::FromHandle((HBRUSH)::GetStockObject(GRAY_BRUSH))); memDC.TextOut(0,0, "テストストリング"); //pDC->BitBlt(0,0,200,50,&memDC,0,0,SRCCOPY); memDC2.CreateCompatibleDC(pDC); memDC2.SelectObject(&bitmap); pDC->BitBlt(0,0,200,50,&memDC2,0,0,SRCCOPY); } 最後の3行で画面に出力されるような CBitmapを作成したいわけです。 上記のコードでは何も表示されませんでした。
ペゾルド見ながら研究してんですが、
>>77 は適切じゃないみたいですね。
memDCとbitmapをメンバ変数にして初期化で設定、それを
OnDrawでウインドウにコピーすることはできました。
しかし、それをCImageListに加えようとするとうまくいかない
んですよねぇ・・・。
#ifndef INC_TEST_H__ #define INC_TEST_H__ #pragma once int testproc(int n) { return -n; } #endif とだけ記述したヘッダファイルをインクルードしてtestproc()を使用すると、リンカのエラー2005番 「"int __cdecl testproc(int)" (? ......) は既に stdafx.obj で定義されています」 が出てしまいます。やはりヘッダファイルには宣言のみを書き、定義は.cpp等に書くべきなのでしょうか。 WTLなど、ヘッダのみで構成されているライブラリなんかは、これをどのように回避しているんでしょうか。
クラス
マルチかよw
83 :
デフォルトの名無しさん :04/01/30 09:06
CRect を返す関数で NULLを return したら どうなるんですかね。なんかコンパイラ通っ ちゃったんだけど、NULL って CRect(0,0,0,0) と等価なんかな? それともNULLの代わりにCRect(0,0,0,0)を 返すようにすべき?
ポップアップメニューで教えて下され まずリソースエディタでポップアップメニューリソースを作成。 これをLoadMenuでリソースから取り込んでTrackPopupMenuでメニューを出すと、 ポップアップメニュー自体は出るんだけど、リソースエディタで指定したキャプションの 文字列が表示されず文字無しの縦に細長いポップアップになってしまいます。 LoadMenuでハンドルは取れてるし、その妙な細長いメニューも項目数やセパレータの数は 合っているんでLoadMenuやTrackPopupMenuは問題なさそうなんですが… (リソースファイルから該当部分の抜粋) IDR_MENU2 MENU DISCARDABLE BEGIN MENUITEM "Mode1", UID_EDIT1 MENUITEM "Mode2", UID_EDIT2 MENUITEM "Mode3", UID_EDIT3 MENUITEM SEPARATOR MENUITEM "抜ける", UID_QUIT END ↑これの"Mode1"とか"抜ける"といったキャプションが表示されませぬ 考えられる原因があれば教えて下さい。
言語入門書のコードを試してみたいのですが、 VC++.net2003を使って、どうやって.netではない コンソールアプリを作るのかわかりません。 最初のプロジェクトを作成するところから、すでにわからなくなっています。 ちなみに、ソースはこんなのです。 #include <stdio.h> void main() { printf("Hello, world!\n"); } 宜しくお願いします。
(゚д゚)
>>88 できますたマリガトウ
ポップアップはすべてサブメニュー扱いだったのね
90 :
デフォルトの名無しさん :04/01/31 16:49
コーティングの質問ではないのですが教えていただけたら助かります。 VisualC++6.0でタブのオートインデントタイプをスマートにしてるんですが、 switch文を書くときになぜかcase文のインデントが一段下がってしまいます。 switch(msg){ case WM_CREATE: みたいにしたいのに、なぜか switch(msg){ case WM_CREATE: になっちゃう感じです。 これを抑止したいんですが、可能でしょうか?
スマートインデントを切る
92 :
デフォルトの名無しさん :04/01/31 18:01
VC++でMFCを使わずに、ディレクトリの中身以下を全て 列挙したいのですがどうしたらいいのでしょうか? 1.dirent.h みたいなインクルードを教えて 2.opendir(pathn)みたいな関数。 3.ディレクトリとファイルの判定方法。
FindFirstFile(Ex)/FindNextFile
。・゚・(ノД`)・゚・。 釣りやネタじゃなくて、マジでわからないんです。 このソース自体はBCCでコンパイルすることはできたんです。 でも、せっかく高いお金出してVS.net買った(2003はただで貰った)ので、使い方を覚えようと・・・ Win32コンソールアプリケーションってのでプロジェクトを作っても、 stdafx.hなんて言う訳わからないのがでてくるし。 ちなみに、 プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 というエラーがでます。 先ほどのコードをVC++.netでコンパイルするための方法を教えてください。 お願いします!
>>90 考え方だけど、case XXXをラベルって考えれば、それで納得できると思わない?
慣れれば、それほど気にならないと思うけど
switch〜caseつかうと増長なインデントになりがちだしこの仕様は悪くないと思うけど
>>97 VCだと、stdio.hは使えないんでしょうか?
入門書の内容を、そのままコンパイルできたらいいなと考えているんですが・・・
BCBを使いなさい。 VC++はうんこい。
101 :
デフォルトの名無しさん :04/01/31 19:41
ステップインでデバッグしてるとCTR0.Cとかいうファイルを求められるんだけど何なのでしょう?
>>100 参考になった、ねぇ。
スマートインデントを切るって言ったのは
細かいカスタマイズの手段が提供されてない以上不可能って意味な。
>>101 ランタイムのソース
>>98 使える。
stdafx.hはVCでアプリ作るときのおまじないだから気にすんな。
.NETでないコンソールアプリはプロジェクトの作成するとき、
左のプロジェクトの種類でWin32を選べば出てくる。
俺がVisual C++ 6.0 買ったときは ひととおりウィンドウズアプリケーションの 製作方法が書かれたマニュアルが入ってたが 一度 全部読んだのか? この手の質問いつも疑問に思うのだが・・・
それってラーニングだかスタンダードだかにしかついてこない教本じゃないか?
俺が買ったのはスタンダードだから スタンダードには間違い無く入ってる 他のバージョンは買ったひとにしかわからへん
MSでもまともなマニュアルを添付することがあるのか。
じゃあそれだろうな、プロ以上には入ってこない奴。 スタンダードはライセンスや最適化の有無で 購入してない奴が多いんじゃないか? 学生はアカデミック帰るし、社会人はVS買ってただろうから。
MFC一直線コースのマニュアルだ まぁそこらへんに落ちてる参考書よりははるかにマシだったな しかし、この程度の質問するやつが ぷろふぇっしょなる 買うとは到底思えんな
>>110 YES! YES! (多分そんなんだった)
112 :
デフォルトの名無しさん :04/01/31 23:47
Visual C++ 5.0 Professionalを使っているんですが、 ビルド時に「リンク中..」と出たまま止まることがよくあります。 強制終了でVC自体を終了して再度ビルドすると問題なく完了するのですが。 原因が何か分からないでしょうか? 使用環境 WinXP Home ベアボーンノートPC(Clevo D520P) P4HT 2.4C PC2100 512MB
質問させてください。 VC++6.0/XP で、SDIアプリケーションを開発しています。 アプリケーションのウィンドウがクリックされたり、タスクバーから クリックされたりして、アクティブな状態に変化した時に処理を行おうと 思い、MainFrame に、 OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) を追加して、 if( nState == WA_ACTIVE ){(行いたい処理);} と記述しました。しかし、タスクバーからクリックされた場合は この条件で拾えるのですが、画面上にこのアプリケーションと、 アクティブになった別のアプリケーションを表示した状態で、 このアプリケーションのウィンドウをクリックしても、この条件では 拾ってくれません。この場合は、WM_ACTIVE が飛んで来ていないのでしょうか?
マウスクリックのときはWA_CLICKACTIVEで。
以前少しさわったvisual studio 6.0では、空のプロジェクトに、 前述のソースを追加するだけでビルドできたので、VS.net2003でも同じようにできるのかなと 思ったのですが・・・ そういう意味では、VS6.0の方が使いやすいように思えてなりません。 質問続きになってしまいますが、 stdafx.hをインクルードしないと、VC++.netでアプリは作れないのでしょうか? できるとしたら、その方法、もしくは、その方法が乗っているサイトを 教えていただけませんか? ちなみに、購入したのはProfessionalなので、教本はついていませんでした。 いい加減、VBを卒業したいのです・・・
プロジェクト→プロパティ (Alt-P-P) 構成プロパティ>C/C++>プリコンパイル済みヘッダー 「プリコンパイル済みヘッダーを使用しない」を選択
ちなみに俺はCもVS.NETもまだ昨日始めたばかりだぞ。 俺も86と同じとこでつまづいたが色々いじって解決方法を発見した。 86もがんがれ。
いろいろ試していたら、stdafx.hを使わずにコンソールアプリをビルドすることができました。
1.新しいプロジェクトから、Win32プロジェクトを選択
2.ウィザードの、アプリケーションの設定から、
コンソール アプリケーション、空のプロジェクトをチェックし、完了
今までは、アプリケーションの設定画面で、
空のプロジェクトにチェックが入っていなかったのがいけなかったようです。
>>97 さん、
>>103 さん、ありがとうございました。
ボタンが押されるとエディットボックスの数字が 1上がるようにするには void CtestDlg::OnButton1() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください } に何を書けばいいですか?
121 :
デフォルトの名無しさん :04/02/01 23:17
>>86 もちろんその方法でもいいけど、
空のプロジェクトをチェックしなくても可能だよ。
#include "stdafx.h" はプリコンパイル済みヘッダーっていって、
滅多に変更されないヘッダファイルを、
(自分でつくった他のファイルの)コンパイルのときに、
その都度コンパイルしていると時間がかかるから、
先にコンパイルしとくわけよ。
で、MFCが用意してくれるプロジェクトの設定では、
必ず各ファイルに"stdafx.h"という名前のプリコンパイルを、
includeで取り込んでおかなければならないから、
これを削除したりすると、「検索中にEOFエラーが」と出る。
(直接ソースファイルでincludeしなければならない)
普通のCプログラムを書きたいときも、
#include "stdafx.h"
#include "stdio.h"
と追加して書けば問題ない。
もしくはstdafx.h内に、stdio.hを追加するか。
>>120 SetDlgItemInt( IDC_EDIT , (int)GetDlgItemInt( IDC_EDIT )+1 );
123 :
デフォルトの名無しさん :04/02/01 23:24
>>121 自己訂正
>MFCが用意してくれる
じゃないな。Visual Stdioか。
お願いします。 VCで、拡張メタファイル(EMF)→BMPファイル変換の方法を探しています。 VBならば、 Picture1.Picture = LoadPicture("x:\xxx.EMF") SavePicture Picture1.Image, "x:\xxx.BMP" Delphiならば、TMetaのコンバート関数一発で、TBitMapに変換可能です。 VCでも簡単にできる手法はありますでしょうか?
CImageListとかどうだっけか
replace関数を使おうとしているのですが 定義されていない識別氏と出てきます。 algorithmをインクルードしています。 また、void replace(_FI _F, _FI _L, const _Ty& _Vo, const _Ty& _Vn) の引数をご教授願えませんでしょうか VC6.0 XP環境です。
130 :
プロジェクトのコピーについて質問です :04/02/02 13:56
既に完成されたプログラム(ワークスペース)があって、そのコピーを作成して(ワークスペース名は別にしたい) 改良を加えたい場合、どういった手順がよいのでしょうか。 一からプロジェクトを新規作成してファイルの追加やリソース(アイコン等)の作成を行うべきなのでしょうか。 ご教授お願いいたします。
>>128 std::replace()
としないといかんのでわ?
違うかも知れんけど。
MSDNライブラリが分かりずらいです。 素人の自分には読んでも分からないことばかり。 皆さんは、MSDNライブラリが分かりずらいと 思いませんか? 是非、意見を聞かせてください。
分かりずらいです。まず全体の構造が捕らえにくい。
アイコンについて聞きたいことがあります。 MFCで勝手に作られるアイコンを、VCのエディタで修正しても、 そのアイコンに変わりません。 自分でアイコンを作ったものを、自作アプリケーションに使用するには どうしたらいいのでしょうか? 教えてください。お願いします。
>>133 そうですよね。
同じ意見の人がいて嬉しいです。
>>132 わかりづらい。でも一番詳しいのがMSDN。
はじめは参考書で勉強するしかないよ。
>>134 試したけど変わるよ。
32x32のアイコンだけ修正して、16x16の
小さなアイコンを見ているのでは?
>>113 レスが遅れてすみません。
ServicePackは入れてました。念のためもう一度入れましたが、症状に変わりなしです。
時間が空いた時にOSごと再インスコしてみます。
Word2000が終了時にエラーを吐くという症状もあるんで、それも治ることを期待して。
iostreamヘッダをインクルードできないYO!! #include <iostream> だけじゃだめなのか?
140 :
デフォルトの名無しさん :04/02/03 00:12
コンポボックス表示のの値が時々変わってしまうのって 何か処理が足りないんでしょうか?
>>139 それで問題ないはず。
どういうエラーメッセージがでるの?
>>140 デフォルトの表示が毎回変わるってこと?
143 :
デフォルトの名無しさん :04/02/03 00:59
説明不足でした デフォルトはOnInitなんたらで設定しているからいいんだけど ボタン押したときとかに、クラスウィザードで作ったm_strComb1 を使うんだけど、その後なぜか表示が変わってる メッセージボックスとかデバッカとかで 追いかけられるとこまで(ボタンが押されたという関数内) 追いかけたんだけど変化してなくて、その後、表示だけ変わってる 何でなんでしょう?
さっぱりわからん
UpdateDataを呼び忘れてるんだろうな
DDX絡み?
148 :
デフォルトの名無しさん :04/02/03 16:00
始めまして、mdbファイルの接続について質問させていただきます。 開発環境:Visual Studio.NET 2003 Professinal 開発言語:Visual C++ DB :Access2002(.mdb) 接続方法:OLE DB (MFC SDIアプリで使用) ADOとODBCは事前に登録が必要等の理由で不可 上記の方法でデータベースを操作・入力を行うアプリを作ろうとしていますが 現在、参照だけしか出来ずレコードの内容が変更できません。 ボタンを作り、メッセージ ハンドラにて GetDlgItemText(IDC_EDIT1,m_pSet->m_Name,51); m_pSet->UpdateAll(NULL,NULL,NULL); と記述しましたが内容が反映されませんでした。 これを解決するためにはどうしたら良いでしょうか? また、現在1つのテーブルを固定で参照している状態ですが、 他のテーブルに参照を切り替えるにはどうすればいいでしょうか? よろしくおねがいします。
149 :
デフォルトの名無しさん :04/02/03 16:30
エディットコントロール上にマウスカーソルが来た時にだけ カーソルを任意の物にしたいのですがうまくいきません。 Window2000,VC++4.0,MFCダイアログ デフォルトでは I になりますが、これが嫌だったので 変えようと思い下記のようにしました。 (サブクラス化した WM_SETCURSOR ハンドラ内) HCURSORhcur; hcur = AfxGetApp()->LoadStandardCursor(IDC_ARROW); SetCursor( hcur ); しかし、何も変化はありませんでした。 あと、なぜかこのハンドラ内で、 CWaitCursor wait; とすると、I にも砂時計にもならず、通常の矢印のままになりました。 最終的には自作のカーソルにしたいと思っています。 SetCursor() をどのタイミングで呼び出すべきなのでしょうか? それとも全く的外れでしょうか? どうかご教授下さい。
// メッセージの表示 MessageBox(NULL,"メッセージ","タイトル",MB_OK); ↑でコンパイルしたらエラーがでました。 「error C2660: 'MessageBoxA' : 関数が不正な 4 個の実引数をともなって呼び出されました。」 第1引数のNULLを消したらコンパイルできたのですが、オーナーウィンドウの指定っていらないの ですか? ちなみに、言語:VC++6.0 OS:WinXPです。 どなたか教えて下さい。
>150 最初の引数がいらないんじゃない?
>150 連投スマン どうしてもその引数で使いたいなら頭に :: 付ければ MFCでなくAPI関数の方を呼び出す。
>150
>>152 >>153 どうもありがとうございます。
MFCなら最初の引数がいらなくて、どうしても使いたいときは
頭に::付けるのですね。(API関数)
すっきり解決しました。感激です。
TeraPadのように、縦と横方向にスクロールバーを付けるには、 MFCを使う場合どうすればよいでしょうか? EditViewは縦しか出ないし。 なんか簡単な方法はありますか?
コントロールのプロパティでHoriziontal ScrollとVertical Scroll をTRUEにする
>>157 コントロールのプロパティってどうやったら表示できますか?
くだ質に質問したのですがスルーされたのでこっちに質問。 VC++.netのstdでは作成したアプリを公開できないと聞いたのですが本当ですか?
>159 まず、その情報を何処で仕入れたのか教えてみそ
>>141 error C2065: 'cout' : 定義されていない識別子です。
だそうな。
>>159 金は取れない。公開は可能。以上
using namespace std; ↑これ書いたら動いた。これどういう意味?
>>161 それは std::cout にしろってことでは?
もしくは
using namespace std;
164 :
デフォルトの名無しさん :04/02/03 22:55
>>149 試してみたけど、そのやり方で普通にできたよ。
BOOL CMyEdit::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
HCURSOR hcur = ::AfxGetApp()->LoadStandardCursor(IDC_ARROW);
SetCursor( hcur );
return 0;
}
これでダイアログのエディット内にマウスカーソルがきても、
矢印のままになった。(CMyEditクラスはCEditの派生)
165 :
デフォルトの名無しさん :04/02/03 23:45
std::vector<char> v; v.push_back('a'); v.push_back('b'); v.push_back('c'); v.push_back('\0'); char *p = v.begin(); // ここでエラー … p=&v[0]ではok cout << p; 上のソースはVC++6.0では通るのですが、VC++.NETでは 『 error C2440: '初期化中' : 'std::vector<_Ty>::iterator' から 'char *' に変換できません。 with [ _Ty=char ] この変換を実行可能なユーザー定義変換演算子がないか、 または演算子を呼び出せません。 』 と怒られてしまいます。p=&v[0] または p=&v.at(0) では、どちらのコンパイラでも通ります。 なぜ.NETのほうではp=v.begin()でエラーが出るのでしょうか。何かオプションが足りないんでしょうか。
いやエラーコードそのまんまだろ。 biginはイテレータを返すんだと。 VC++6.0で通って.NETで通らないのはbiginが変更されたってこった。 ヘルプ見れ
>>165 v.begin()が返すのは反復子だから、char *p で
受けるのは問題があるんじゃないか?
std::vector<char>::iterator pos;
pos = v.begin();
にする必要があるのでは?
vectorなら v.front() と v.back() が使えます。
ああ、自分は全然理解してませんでした。確かに、イテレータを返すんなら イテレータで受けなきゃいけないですね。 # そうすると、挙動からしてVC++6.0のbegin()はただのポインタを返してたのかな。
169 :
デフォルトの名無しさん :04/02/04 00:43
AVIファイルを再生するプログラムを作ったのですが 映像のフレームの1ラインのみ、常に赤線を引いておきたいのです。 しかし、赤線が時間ごとにいつも消えてしまいます。 OnTimerを使ってもちらついたようにしか表示できません。 常にラインを表示するにはどうすればいいのでしょうか。
ソースによる
>>164 レスありがとう。
何か間違っていたのかもしれません。
もう一度やってみることにします。
それぞれのWindowはマウスカーソルを登録しておける
>>164 できました。
違いは、OnSetCursor()内で処理した後、親クラスの呼び出しCEdit::OnSetCursor()
をしている事でした。
AppWizard ではデフォルトでこのコードが作成されるのですが、これをコメント
アウトしなければカーソルは変化しませんでした。
174 :
デフォルトの名無しさん :04/02/04 12:00
エディットコントロール内の文字色を変更したいのですが、 今はダイアログ内の OnCtlColor() にてコントロールIDを 判断して文字色を変更しています。 これで問題ないと思っていたのですが、WM_CTLCOLOR は描画される 前に必ず飛んでくると思っていたのですが、内容に変更が無い場合は 来ない事が分かりました。 つまり、エディット内に「123」とあった時、「456」と出力すれば メッセージは来ますが、「123」と出力してもメッセージは来ません。 そうなると、文字列を変化させない限り、現在の方法では文字色を変化 させることができなくなってしまいます。 このような場合、どうすれば良いのですか? 教えて下さい。
「123」と入力されているエディットに「123」と出力すると、 OnCtlColor() に来ますけど・・・。 あと、再描画を要求するだけなら InvalidateRect()がイイかな。
176 :
デフォルトの名無しさん :04/02/04 20:44
>>174 そのエディットの自作クラスを用意してるなら、
WM_PAINTメッセージを受け取るOnPaint関数をオーバーライドして、
そこへ色を変える処理を割り込ませる、という手でいけるかも。
(でもその自作OnPaint関数でCPaintDCオブジェクトを作らないように。
で、色を変えたら、CEdit::OnPaintを呼び出す。)
レスありがとうございます。
>>175 例えば、SetDlgItemText()等で出力していますか?
当方は UpdateData() でメンバ変数経由での更新なので、その違いかもしれません。
>>176 サブクラス化したクラス側でOnPaint関数をオーバーライド、ということですね。
やってみます。
>>177 そうです。Visual C++側が自動的に関数内にCPaintDCオブジェクトを、
書いてくれると思うけど、それは必ず削除しておいてください。
あと、色を変更したら(例えば何らかの変数に色を記録しておくとする)
エディットのInvalidate()を呼び出して、WM_PAINTが発生するように、
しておく必要もあるかも。
OnPaintの中で、色を記録した変数にしたがって、
実際に文字色を変更する関数を呼ぶ。という感じになるかと。
179 :
デフォルトの名無しさん :04/02/04 23:16
今、実行ファイルとは別にMIDIファイルを読み出して音楽を再生しているのですが これをMIDIファイルを実行ファイルの中に含ませて再生したいと思っています。 ですがどうすればいいかわかりません。 Wavファイルも同じように実行ファイルの中に含ませて再生するために リソース化してそしてPlaySound()で再生はできたのですが、 MIDIについてはリソース化してもMCIを使うのでPlaySound()のように リソースからは再生できないようです。 それでどうすればいいか調べていくうちに他にはリソース化した MIDIファイルをテンポラリファイルとしていったん書き出して それを再生するというやり方があると知ったのですが それはどうやればいいのかわかりません。 こちらの環境は開発環境はVisualC++.NET2003、で言語もVisualC++です。 OSはWindows2000です。よろしくお願いします。
>>177 CWnd::SetWindowText() と CWnd::SendDlgItemMessage()の両方を
試しましたが、どちらも正常に動作しました。
そちらでうまく動作しないのは、DDXの仕様かもしれませんね。
しかし、再描画の度にOnCtlColor()が呼ばれるのは同じだと思うので、
エディット側のInvalidate()またはInvalidateRect()を呼び出してみては
どうでしょうか?
VC++6.0 のマニュアルが欲しいんですが、どうすればいいでしょ。
割れか?
たぶん割れだな
割れ割れはウチュウジンだ (喉を叩きながらですよ)
>>175 >>176 色々やりましたが、エディットの Invalidate() を呼び出す方法が簡単だったので
それを採用しました。
ただ、ヘルプを見ても、なぜこの関数で解決できるのか理解できないので^^;
もう少し調べてみます。
ありがとうございました。
現在VC++6.0Proで勉強しているのですが、将来へ向けてC#など.NET Frameworkも 勉強しないといけないと思い、Visual Studio .NET 2003を購入しようと思ったのですが MSのサイトで動作条件をよく見てみると、モニターが1024x768以上とか書いてあって 手持ちのノートPC3台はどれも800x600なんですが、どうすればいいのでしょうか?
外部モニターは置き場所が無いし、うざいので嫌です。 1024x768の液晶のノートを買うようなお金はありません。 なんとかがんがって独学してきたけど、もうだめぽです。 今の時代、お金が無いと満足に勉強することもできないんですね(泣
当然、仮想解像度なんて気の利く機能は手持ちのノートPC3台にはついてません。
SDKでやれ。あとC#やりたいとか基本的にスレ違いなことに気づけ。
>>186 アコムとかプロミスとかレイクとかいっぱいあるじゃん。
ノートPC3台も要るのか? 全部売って、液晶モニタ+デスクトップPCが買えるのでは?
192 :
デフォルトの名無しさん :04/02/05 15:58
std::floorの機能について調べたいとします。 VS.NETのヘルプでキーワード検索しても見つかりません。 そういうときどうやって解決してますか? 手元の本の索引にもなく、キーワード検索にもひっかからず、ぐぐるとひっかかりすぎる。 そういうとき(´・ω・`)なのです。
SDIで、簡単なテキストエディタを作ろうとしています。 Viewの基本クラスをCEditViewにすると、縦方向のスクロールバーは表示されますが、 横方向のスクロールバーは表示されません。 縦横両方スクロールバー付きのエディタを作りたいのですが、 どうすればいいでしょうか? Viewの基本クラスを変えたほうがいいのか、 なにかオプションで横方向のスクロールバーも表示できるのでしょうか? 教えてください、お願いします。
194 :
デフォルトの名無しさん :04/02/05 16:17
>>193 LONG style = GetWindowLong(GetEditCtrl().GetSafeHwnd(), GWL_STYLE);
style |= WS_HSCROLL;
SetWindowLong(GetEditCtrl().GetSafeHwnd(), GWL_STYLE, style);
これでどお?
>>194 記述の場所はCEditViewのOnCreate がよさげ。
>>194 この3行をどこに追加すればいいのですか?
>>195 たびたびすいません。
OnCreateという関数が見当たらないのですが。
PreCreateWindowに追加してみたけど、変化がありませんでした。
CMainFrameにOnCreateがあるのですが、
ここに追加しても、エラーが出てしまいます。
>>198 WM_CREATE のハンドラを作ると
OnCreate になりまつ。
>>198 ヽ(・ω・)/ ズコー
\(.\ ノ
>>199 WM_CREATE のハンドラ作り方がわかりません。
こんなことまで聞いてすみません。
初心者なので、どうか教えてください。
ヘルプみろよ・・・
>>201 左側のクラスの一覧で
CEditViewの派生クラスがあるでしょ?
そこで右クリック->「Windowsメッセージハンドラの追加」を選択。
WM_CREATEを選んで「追加と編集」
これで作成されるはず。
ハンドラは作れて、スクロールバーも表示されるのですが、 バーが機能しません。 長い文章を入力しても、バーが使えない状態です。 どうすればよいでしょうか?
横スクロールバー作成できたの?
>>205 バー自体は出てるのですが、機能しません。
長い文章が、端で改行されてしまう状態です。
ES_AUTOHSCROLL
なんつーか、スレタイがそうさせるのかなぁ……
211 :
デフォルトの名無しさん :04/02/05 17:37
MFC の CString についてなのですが、 例えば ------------------------------------ CString csData( _T("12345") ); csData = csData.Left( 3 ); ------------------------------------ これってアリですか? 実際処理は問題無さそうですが、同じ領域同士で操作しているようで 何となく不安です。 ちなみに今は、こうしています。 ------------------------------------ CString csData( _T("12345") ), csTemp; csTemp = csData; csData = csTemp.Left( 3 ); ------------------------------------ アリなのであれば、当然1つの領域で処理したいです。 教えて下さい。
Left()はCStringを返す それは、元のCStringとは全く別の物
レスどうも。 なるほど。 これで効率よくコーディング出来そうです。 ありがとうございました。
>>210 Google検索でひっかかりました。
ありがとうございました。
VC++で、Web上の辞書サイトから英単語を検索して、 意味を文字列として取得することは可能でしょうか? 簡単な方法を教えてください。 あとこういう用途に向いた辞書サイトってありますか?
>>215 簡単な方法はないと思う。(w
MFCで言えば、CHttpFile でネットからHTMLファイルを
取得して、自分で解析することになるのでは?
217 :
デフォルトの名無しさん :04/02/06 01:45
スプレッドシートを使いたいんですが、MFCでは 適当なライブラリはないですか? リストビューはちょっと違うみたいだし、 自分で実装することになるのかな?
MFCの使用ってなぜ控えた方がいいんでしょうか?
MS的には、.Net環境に対応してなからでないの?
>>182 >>183 きみら、誰に言ってるの。
ms vc++ 知ってれば、何を言っても良いのか。
ms vc++ 知らざるものは、人にあらずか。
msdn でぐぐってモニタで見るだけでは、やはり同時性、一覧性がない。
マシンデバッグ、マシン読本だけでは、第一、楽な姿勢になれず疲れる。
だから、6.0の中古本のマニュアルあれば、それを譲って(買取させて)
もらおうと思っていただけ。印刷するのは大変だから。
ソフトは会社所有で数も1パックじゃない。だから「割れ」ではないんだ。
>>220 そもそもマニュアルって何を指してるのよ。
>>181 だけじゃStandard版に付いてくる本ともとれるしMSDNライブラリのCD-ROMともとれる。
「どうすればいいでしょ。」って、本が欲しけりゃ買えよ。
222 :
デフォルトの名無しさん :04/02/06 12:20
>>220 その必死さから、割れが濃厚になってしまった。
残念です。
アスキーから出てるオフィシャルリファレスとか、ペゾルド本でも買っとけよ。
224 :
デフォルトの名無しさん :04/02/06 14:00
CStringを多用するとcharなんかを使って処理する場合に 比べるとおそいんですか?
そりゃ、CStringは内部ではcharを処理してるんだから 速くなる事は無いだろ
もちろん処理の内容によるけど、CString の方が速いケースもありうるだろ。
>>224 が CString 作った奴より上とは限らんし。
要は、
>>224 次第ってことだ。
>>224 下手なコード書くよりMFC使った方が断然速いよ
STD版VCとか最適化がカスタマイズできないコンパイラの場合は特に
やってみればわかる
CStringはメモリを動的に確保・拡張するから遅い。 サイズを事前に決定して、拡張する必要が無いのなら (サイズ以上の文字列はカットするだけとか) char 配列のが段違いに速い。 速度が求められていないところでは CStringでいいけど。 コードの書き方や最適化云々の話では無いと思うが。
>>228 > サイズを事前に決定して、拡張する必要が無いのなら
そんな仮定を勝手に置けばそうなのかもしれないな。
> 速度が求められていないところでは CStringでいいけど。
> コードの書き方や最適化云々の話では無いと思うが。
はぁ...、未だにこんな思い込みをしてる奴っているんだな...。
確かCStringってMFC4.0の頃にだいぶん改善されたよな。
>>229 >そんな仮定を勝手に
勝手にも何も、そういう場合は往々にしてあるが。
長大な文字列を確保して一時的処理をするようなことを連続するとかなりの オーバーヘッドが生じる。でもそれって標準関数使っても同じことだし。 CStringの気安さからそうしがちってことならあるかも。 CString使うならFindやMidで頻繁に加工すると思うけど、それを代わりに 標準関数で手前コード書くとかなり遅くなる。
>>231 だからなに ?
あんたが「勝手な仮定を置いた」と言う事実は消えないが、何か ?
235 :
デフォルトの名無しさん :04/02/07 13:05
>勝手な仮定を置いた
なんじゃこいつは?
使い方によって状況が変わってくるんだから例を挙げるのは当然のことだろ。
いかなる場合においてもMFCが最高ならば、あんなに糞扱いされてないんだろうな。
>>233 なんでこいつこんな必死なん?
>>234 >>228 > CStringはメモリを動的に確保・拡張するから遅い。
if 文の外にありますが何か ?
>>233 その「勝手な仮定」って主張する意味がわからんよ。
仮定もクソもない。場合によって使い分けるのは当然だろう。
てか、「勝手な」などと言われるほどスペシャルケースでもないぞ・・・
どっちの場合もよくあること。仕事してないでしょ。学生さんか。
あと
>>229 >はぁ...、未だにこんな思い込みをしてる奴っているんだな...。
思い込みじゃない。断じて。
メモリ確保・拡張のオーバーヘッドはかなりのもの。
それが解らないのなら、そういう問題にあたったことが無いんだろね。
経験ないのなら黙ってな。
>>235 ,
>>237-238 > 場合によって使い分けるのは当然だろう。
そう、当たり前。
だから、
>>228 の一行目で
> CStringはメモリを動的に確保・拡張するから遅い。
なんて、断定するのがおかしいだけ。
char * でも同じようなことすればたいして変わらんよ。
>>224 がそういうこと (=動的確保・拡張) をしたいのかどうかはわからんけど、わからん間はあんたの「勝手な仮定」と言われてもしょうがない。
それとも、CString のメモリ管理に重大なオーバーヘッドを生む要因があるのか ?
それならそれを指摘すればいい。
240 :
デフォルトの名無しさん :04/02/07 14:23
このままいっても、堂々巡りぽいな。
>>224 が
>「CStringを多用するとcharなんかを使って処理する場合に
>比べるとおそいんですか?」
こんな抽象的な質問するからいけないんだ、てことにしておこうじゃないか。
もしまだ、
>>224 居るなら、どういう風に使うのか言ってみたらどうか
本当に速度にシビアな状況なら、そもそもMFC自体使わないだろう。
>>240 > 本当に速度にシビアな状況なら、そもそもMFC自体使わないだろう。
プッ、言ってるるそばから....。
速度的に MFC のどこがどうまずいのか指摘してからにしてよね。
動的な文字列において、 中身に頓着しない単純なデータがほしいのならCStringは無駄の無い優れた選択。 マルチバイト文字列やパスのような先頭から走査する必要のあるデータの場合には 長さや終端を保持するメモリ領域やコードが無駄になる。 ほしいのがブロックなのかストリームなのか、最低限その辺だけ抑えればあまり無駄にはならない。
#include <string> using namespace std; string str("(`・ω・´) シャキーン");
244 :
デフォルトの名無しさん :04/02/07 19:17
すごく初歩的な質問で申し訳ないのですが HSPなどでは上から下へプログラムが実行されていくので非常にわかり易いのですが VC++もMain関数が終わった後にウインドウプロシージャが実行されてプログラムが終わるのでしょうか?
>>244 基本は上から下に流れるけど、
下から上にいくことができる。
99.99999% 下から上にいくことがある。
入り口は一個 出口も一個
途中は分岐、繰り返し、呼び出し
>>239 >断定するのがおかしいだけ
くだらん揚げ足ウザイ
お前は「ただその一点だけ」でここまで食い下がってるんだよ。
いいかげんにしとけアフォ
それにしてもお前は全然解ってないようだ・・・
>CString のメモリ管理に重大なオーバーヘッドを生む要因があるのか ?
動的なメモリ確保・拡張そのものがオーバーヘッドかかるんだよ。
何もMFCが悪い、CStringが悪いなんていってねーだろが。
管理もクソもねーんだよ。
動的なメモリ確保のコストなんて加算1回+αまで短縮できるし、 それ以外の方法となるとスタックに配置した「固定長の文字配列」を 文字列代わりに使うしかなくなるわけだが。
>>246 > 何もMFCが悪い、CStringが悪いなんていってねーだろが。
やれやれ、ヴァカは自分の書いたことすら忘れてるのか ? (藁
>>228 > CStringはメモリを動的に確保・拡張するから遅い。
> 速度が求められていないところでは CStringでいいけど。
>>240 > 本当に速度にシビアな状況なら、そもそもMFC自体使わないだろう。
>>248 「遅い」とは書いてあるが「悪い」とは書いてないような。
「遅い」=「悪い」なのか?
CStringが速いのはCStringからの初期化と代入くらいじゃないの?
>>241 MFCのソースを見たことがあるのだろうか?
>>249 > 「遅い」とは書いてあるが「悪い」とは書いてないような。
それじゃまるで子供のいいわけだな。(藁
で、彼は MFC は悪くないのに「本当に速度にシビアな状況なら、そもそもMFC自体使わないだろう。」とか言っちゃってんだよね。
速度にシビアな状況で、「遅い」ことは「悪い」ことじゃないの ?
悪くないならなぜ使わないの ?
> MFCのソースを見たことがあるのだろうか?
心配しなくとも見る事できるから、バージョンとファイル名と行数を書いてくれれば大丈夫だよ。
で、君が彼に代わって指摘してくれるの ?
251 :
デフォルトの名無しさん :04/02/08 10:31
CString と std::string はどっちが速いでつか?
char *とCStringの比較なら、長さを求めるのに strlenをいちいち発行しなくてはならない点で、 char*は不利かもね。
なんじゃ?このスレの流れは? 子供の喧嘩?
>>251 自分で測定しな。
処理の内容も、クラスライブラリのバージョンも実行環境も君と俺では違うだろうから。
>>252 char * 側も長さ情報を持つようにすればいいだけ。
もっともそういうのをやりだすと結局 CString と同じようになるわけだが。
あとは、その実装をやる奴の腕と CString の作成者の腕の勝負になるだけのこと。
まあ、実装をやる奴 = 使う奴なら個別の最適化が可能なので腕が同じ程度なら char * が幾分有利。
ただ、CString の作成者に比べて腕がショボーンかもしれないので、勝負はやってみないとわからん。
参照 →
>>226 >>253 脊髄反射で、
>>225 を書き込んだヴァカがからかわれてだけだろ。
char を処理する方法でCStringは作れるが逆はできない
だからなに ?
>>254 >
>>253 > 脊髄反射で、
>>225 を書き込んだヴァカがからかわれてだけだろ。
間違いでは無いと思うけどなー。
CString が Pascal のように文字長を持ってれば話は違うのだろうが。。
>>251 inline を多用しているSTLの方が速いと言う話も。
つか、VC++ で std::string を使ってる香具師って居るのけ?
>257 struct CStringData { long nRefs; // reference count int nDataLength; // length of data (including terminator) int nAllocLength; // length of allocation // TCHAR data[nAllocLength] TCHAR* data() // TCHAR* to managed data { return (TCHAR*)(this+1); } }; _AFX_INLINE CStringData* CString::GetData() const { ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; } >258 std版では最適化が効かないからどうだろうねぇ。
最近のパソコンで速度なんて気にする必要あるのかね。
>>257 > CString が Pascal のように文字長を持ってれば話は違うのだろうが。。
はぁ ?
>>252 を読んでないのか ?
ちなみに、手元の MFC のソースは...と思ったら、
>>259 が貼ってた。
「脊髄反射」じゃないとしたら、真性なのか... ?
とにかくもう少し落ち着いててから書いたほうがいいぞ。
>>260 君の作るプログラムなら、必要ないと思うよ。
>>259 CString は NULLターミネート文字列を使ってるが内部の処理では
NULLターミネート使わずに処理してるのね・・・ ソス見ずに脊髄反射してしもうた _| ̄|○
strcpy, strcat, .... 使うより速い鴨。。
>>260 本物のプログラマは、たった数μS速くするためにでも命を賭ける。
厨なプログラマは厨に分かるようなプログラムを書く。
漏れは厨なプログラマのままで良い。
>>259 CString の中の人も大変だな。
std版では、inline キーワードは無視されるの? そりゃクソだな。w
>>263 > 厨に分かるようなプログラムを書く。
これができれば、厨とは言わない。
厨の書くプログラムはワケワカメ。
> 漏れは厨なプログラマのままで良い。
だから、改心しろ。
何 か 微 妙 な 流 れ で す が …
誰が作ってもCString / std::string / std::wstring の
パフォーマンス超えるものは作れませんよ。
できるのはパフォーマンスの調整ぐらい。
要はクラスの性質を理解してパフォーマンスを生かすように使わないと。
それは、char* を使う場合でも同じ。
最適化 = inline展開 な
>>264 にパフォーマンスなど関係ないかもしれんが。
267 :
デフォルトの名無しさん :04/02/08 13:43
>>266 >できるのはパフォーマンスの調整ぐらい。
どうやってやるの? 教えてクレ
>>270 はい。
で、どうやってパフォーマンス調整をするのか聞いてるのですが
何か問題でもありますでしょうか?
>>266 漏れの天才的な頭脳と __asm {} を持ってすれば不可能は無い。
>>271 >>266 で
>パフォーマンス超えるものは作れない
と書いてます。もし、同じようなものを自作しても
パフォーマンスの調整版にしかならないと書いているのです。
文字列というのは要するに固定長の配列なわけです。
それを可変長であるかのように振舞わせるわけですから
パフォーマンスの調整の余地があるわけです。
おわかりになりますか?
>>266 ようは、
実 行 速 度 な ん ぞ 気 に す る な
と言うことでよろしいか?
>>273 分かり難い文章ですが言われてる事は分かりました。
一般的にパフォーマンス調整(パフォーマンスチューニング)と
言うと、パフォーマンスの改善、つまり速くなることと理解しますが。。
「初心者に・・・」というスレタイ向けにまとめれば 普通は心配せずにCStringを使っておいて間違いはない という結論かと
>>274 違う、
藻 ま え ら の よ う な ア フ ォ は ブ ビ で も 使 っ と け。
と言う意味。
>>275 オレは書いた人じゃないけど
パフォーマンス・チューニングじゃなくて「パフォーマンスの調整くらい」
つまり「パフォーマンスの調整程度」というニュアンスだろ
普通に文意を汲めば「多少の加減」という意味だと思うが
>>276 殆どの場合の文字列操作は、char [] と ANSI C 文字列関数を使うより
MFC CString を使った方が速い。
ということかと。
\ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ そんな餌で俺様がクマ――! 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ \ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ (´⌒; (´⌒;;
で、VC++ でウイソのアプリを作るのに std::string を使ってるヤシは居るのか? 漏れはそれが知りたい!!
>>266 > 誰が作ってもCString / std::string / std::wstring の
> パフォーマンス超えるものは作れませんよ。
またこんな断定するヴァカが出てくるし...。
何の根拠があってこんなこと書くかなぁ。
もうネタの投下はいいよ。
>>282 ヴァカはお前の方だ。STLの仕様はC++標準委員会で
詳細に決まってんの。
無知は怖いね。
>>283 藻まいのようなヤシをプログラマーに使いたくないぞ。
何が出来るか分からないから。
>>274 , 277, 279
おぃおぃw
>>281 漏れはCStringが必要なとき以外はstring/wstringだね。
>>284 ご自分の勉強不足を反省してはいかがですか?
>>283-284 決まってるからどうかしたのか ?
それが最高のものである保証はどこにあるんだ ? (ププッ
ねぇねぇ、STLの実装ってコンパイラによって激しく違うのけ?
>>287 仕様と実装を区別してないだろ?
Effective STLでも読んで見れ。
>>288 stringはSTLの1クラス。
>>289 STLのベンダごとに違う。
前にもどっかのスレにいたなぁ。 標準ライブリラリは標準委員会が実装方法を決めていて、どのソースも同じだと思ってた奴。
ライブリラリって何だ、俺。
>>292 ついでに
>標準委員会
標準化委員会な、確か。
各自Effective STLの第二章を読めってことでそろそろお開きにしてくれないか…
>>290 文字列クラスのパフォーマンスとSTLの仕様の話じゃ未だかみ合ってないぞ〜。
296 :
デフォルトの名無しさん :04/02/08 19:00
VC++ 6.0 で C++ の構文を弾くようにするのはどうすれば良いのでしょう? C の構文だけ通すようにしたいのでつ。
>>290 > 仕様と実装を区別してないだろ?
何で俺に言う ?
>>297 そんな簡単な事だったのか。
オプションには無いはずだ。_| ̄|○
ん?/Tcでもいけるはずだが。
302 :
デフォルトの名無しさん :04/02/08 21:52
>>250 子供のいいわけねえ。
>悪くないならなぜ使わないの ?
どこに「使わない」なんて書いてあるんだろう?
ひょっとして「仕様書の行間」を読み過ぎる人ですか?
>心配しなくとも見る事できるから、バージョンとファイル名と行数を書いてくれれば大丈夫だよ。
MFCの構造による速度のことを言っているのにファイル名と行数ねえ。
ひょっとしてここもCString限定なのか?
俺は
>本当に速度にシビアな状況なら、そもそもMFC自体使わないだろう。
こんな事態に遭遇したことはない、つーか今更MFCは外せないから
MFCのソースを引張ってきて書き換えてる。
MFCは便利ではあるがその分内部構造が複雑になっているから
速度面で不利になることも事実。
でもそれを気にしているのはメイン作業のCADだけだな。
その他の請負い作業ではまず気にしない=する必要がないな。
ぬるい303がいるスレはこちらですか?
つーか、まだやってるのか。
>>303 > どこに「使わない」なんて書いてあるんだろう?
自分でも引用してるんだけどな。
>>240 > 本当に速度にシビアな状況なら、そもそもMFC自体使わないだろう。
^^^^^^^^^^^
(まーた、「使わない」とは書いてない、「使わないだろう」と書いてあるとか言い出すのかな ? (ププッ))
> MFCの構造による速度のことを言っているのにファイル名と行数ねえ。
で、どこの構造がどうだと言うの ?
ソース見た事あるかなんて書く位だから、具体的に指摘してくれるんだよね。
> ひょっとしてここもCString限定なのか?
あらら、話が大きくなってきましたねぇ。
知ったか厨が、人を煙に巻く時によく使う手 (まあ、自爆するのがオチなんだが) ですけど、あんたはそんなこと無いよねぇ...。
CString 限定でなくていいから、MFC の構造と速度についてきっちり指摘してくれ。
>>263 本物のプログラマがどういう範疇に入るのか分からないが
プロのプログラマは要求仕様と時間効率で最善の方法を選ぶよ
仕様によってはVBだって使うし、アセンブラだって使う
とりあえずマの話はマ板でやれや
>>307 ネタにマジレスしてるとこ悪いが、「本物のプログラマ」でググルことをお勧めするよ。
重要なのは、文字列の性質をちゃんと理解して使えば どんなクラスを使っても大きくパフォーマンスが異なることは ないんですよ。 初心者が良くやる極端な例: vector<string> v; /* v に文字列を沢山詰め込む処理 */ string str; for(int i=0;i<v.size();i++) { str += v[i]; }
ググってみた へー、面白いなぁ"本物のプログラマー"なるほどネタなのね
ここが何スレかわかった上で書いているのか君達は
初心者のコードに見られる極端な例。 char *p = _strdup("hogehogefoo...")に対して、 for( int i=0;i < strlen(p); i++ ) { p[i]++;}
>>306 「遅い」=「悪い」から出てきた話なのに単純に「使う」「使わない」に
なっちゃってるよ。
「MFCの構造による速度」はそういう状況になれば理解出来るようになるから
焦るな。
スレ違いなのと面倒くさくなったのとププッとか書くやつの相手をするのが
いやなのででもうレスはしません。
このスレの皆さんへ
本当は
>>310 のようなことを言おうと思ったのだが、ちゃちゃを入れたせいで
おかしな方向へいってしまったことをお詫びします。
結局結論は
>>266 で、文字列を直接いじる場合でも
クラスで使う場合でもパフォーマンスを落とさない使い方を
するのがいいんですな。
あのさー、良くわかんないんだけど >誰が作っても<CString / std::string / std::wstringを使って> >CString / std::string / std::wstring の >パフォーマンス超えるものは作れませんよ。 ということなのか? これなら話のつじつまは合うんだけど・・・ 言ってること自体が意味不明なんだよな。
317 :
デフォルトの名無しさん :04/02/09 11:35
string のついでに質問なんだけど、Windowsって 仮想メモリがあるけど、stringで長い文字列を 作っていくと、自動的にHDDも使ってくれるんでしょうか? まあ、stringに限らずに vector でも list でも、いいんだが。
>>317 OSがスワップしてくれるでしょ。 激遅だと思うけど。
char cpysrc[] = "abcdefghijklmnopqrstuvwxyz"; char* pcreate = new[strlen(cpysrc) + 1]; strcpy(pcreate, cpysrc);
char* pcreate = new char[strlen(cpysrc) + 1];
>>320 ゲゲッ コンパイラさんに頼ってるから・・
static char str[] = "hoge";
wstring str(L"実行速度?シラネーヨ!( ´ー`)y-~~");
ビルドしたらリンク中とでて止まったまま・・・・
>>312 > ここが何スレかわかった上で書いているのか君達は
初心者に、「MFC の構造による速度」を教えるスレだろ。(藁
講師:
>>249 >>314 > 「遅い」=「悪い」から出てきた話なのに単純に「使う」「使わない」に
> なっちゃってるよ。
じゃあ、速度の話に戻すけど、今でも「CStringが速いのはCStringからの初期化と代入くらいじゃないの?」とか言うのか ?
> 「MFCの構造による速度」はそういう状況になれば理解出来るようになるから焦るな。
「MFCのソースを見たことがあるのだろうか」なんて大口叩いてたのに、具体的に聞くとこれですか ?
まあ、予想できたけどな。
> スレ違いなのと面倒くさくなったのとププッとか書くやつの相手をするのが
> いやなのででもうレスはしません。
ハイハイ、「面倒」と言うことにしておこうな。
> 本当は
>>310 のようなことを言おうと思ったのだが、ちゃちゃを入れたせいで
>>310 > どんなクラスを使っても大きくパフォーマンスが異なることはないんですよ。
はぁ ? まあ、もういいか。
>>325 ない爪を隠してもしょうがないんじゃない?(ププッ
>>325 もう一回だけ相手をする。
310の引用は
>初心者が良くやる極端な例:
この部分にしてくれ。
問題が分かってないのかな〜?
>>326 負惜しみカコ悪い。
>>327 > /* v に文字列を沢山詰め込む処理 */
コメントからしてハァ ? なんですけど。
もういいじゃん とりあえず初心者が質問しやすい流れを作ることもこのスレの回答者たちの役目だろ ここ100近くの間に初心者の質問がいくつあったよ? はっきり言って、初心者が質問しにくいレスを付け続けている 奴らは別のところにいってやってくれ
チャレンジャーだねぇ。
EffectiveSTLの文字列クラスの実装の項を
読んでみることをお奨めするよ。
>>327 そのコメントのどこらへんが「ハァ?」なの?
どうせ逃げるんだろうけど。
あと、何を誤解してるか知らんけど、
>>327 != 310 ね。
はぁ
--- 以下しばらく中身のない低俗な煽り合いをお楽しみ下さい ---
Win2000 SP4 環境下で、VC++6.0のプロフェッショナルエディションを使用しています。
見た感じ、
>>112 さんと同様と思われる症状が現れるのですが、
(VC6でも)サービスパックをあてれば直るもんなのでしょうか?
ナローバンドなうえに長時間接続できないので、
特に問題がないなら、所詮日曜プログラマなので、SPを入れなくてもいいかなとは思っていたんですが…。
もしかして林晴彦著新Visual C++6.0入門シニア編(ソフトバンク)の P558に出ていることじゃないか? ビルドの黙り込み対策 本屋で見てくれ。
・・・かもしれないですね。 林晴比古氏(変換めんどいよ!)のC言語入門で学んだ人間なんで。 彼の本なら安心して買えるかなあ。
……もしかして、根本的な解決策、無い……? ちょっとぐぐってみたら、 ハイパースレッディングの機能をBIOSでオフにしろとか書いてあったけど……
片方のコンボボックスのデータを変えてエディタボックスにデータに応じた値を表示した後 もう片方のコンボボックスのデータを変えてエディタボックスに表示されている値に そのデータに応じた値を加算させたいのですができません。助けて!
片方のコンボボックスのデータを変えてエディタボックスにデータに 応じた値を表示するところまでは出来るの?
>>341 どこまでできて何ができないのか具体的に
>>342 そこまではできます
例えばコンボボックス1でAというデータ(対応する値は10)を選択した際
10という値をエディタボックスに表示させることはできるんですが
その後コンボボックス2でBというデータ(対応する値は5)を選択した際
現在エディタボックスに表示されてる10に5を加算して15という値を表示させたいのに
何故か5と表示されてしまいます。
>>344 10を表示する時に、その値を覚えておいて、
15を表示させたい時にたせば?
15表示する時に、10のエディットボックスから拾ってきてもいいけど。
>>344 そのエディッタボックスってのは、コンボボックスの中の香具師?
それとも独立したエディッタボックス?
>>345 そのやり方がよくわかりません・・
>>346 独立したエディタボックスです
もうちょい試行錯誤してきます
348 :
デフォルトの名無しさん :04/02/10 15:43
ダイアログベースのアプリケーションでメインダイアログから Create()を使ってモードレスダイアログを作成したあと、 2つのダイアログを重ねたらモードレスダイアログの方が必ず上に 表示されます。 アクティブになっている方が上に表示されるようにするには どうすればよいのでしょうか? 分かる人がいたら教えていただけないでしょうか?
349 :
デフォルトの名無しさん :04/02/10 16:14
もし定説だったらごめんなさい。 VC++で、DualCPUを生かしたビルドってできませんか? DualCPUのPCでビルドしても、かたっぽのCPU使用率がMaxになるだけで、 二つをフル稼働させてないんですが・・・・。 どこかで設定できるのであれば、教えて欲しいです!
できない
MDIのアプリを作っているのですが、下のような感じで 4つの子ウィンドウ(フレーム、Doc-Viewの1対1)を表示させているのですが、 「 ̄ ̄ ̄|「 ̄ ̄ ̄| |_A_」|_B_」 「 ̄ ̄ ̄|「 ̄ ̄ ̄| |_C_」|_D_」 ここでドキュメントBを破棄したときにMditileを通すと 「 ̄ ̄ ̄ ̄ ̄ ̄ ̄| |__A____」 「 ̄ ̄ ̄ ̄ ̄ ̄ ̄| |__C____」 「 ̄ ̄ ̄ ̄ ̄ ̄ ̄| |__D____」 のようなイメージになってしまうのですが、これを 「 ̄ ̄ ̄| |_A_」 「 ̄ ̄ ̄|「 ̄ ̄ ̄| |_C_」|_D_」 のようにする(Bが表示されていた場所には何も表示しない)方法があれば、ご教授をお願いいたします。 長文失礼しました。
>>348 モードレスの親をデスクトップにしてCreateするとか
353 :
デフォルトの名無しさん :04/02/10 17:47
アルゴリズムで曜日の算出法おしえてください! Y.M.D △Y=2000−Y △X=△Y/4 △Z=△Y−△X 1990/1/1をこれに当てはめると75がでてそのあとどうするばよいかわかりません
355 :
デフォルトの名無しさん :04/02/10 18:35
最後に7で割るのであまりは少数のところはどうすればよい?
剰余を出すなら小数にならんだろ
357 :
デフォルトの名無しさん :04/02/10 18:47
公式に当てはめた段階で小数が出ますヨ?
出ませんヨ?
キャストしろ
宿題スレの予感
コンパイルはできたけどビルドができないよ〜 うわーん ゜。(pvq)。゜ なんかね、とまっちゃうんですよ。ビルド押すと・・・ そいで終了させようとしても・・・ビルドの中止ボタンを押してくださいとかいってるの・・ んでねビルドの中止おしても無反応なんですよ・・; なんか解決方法ないっすかね?^^; やってみたことは 再インストール サービスパック5を入れる(日本語 です。
362 :
デフォルトの名無しさん :04/02/10 21:56
CFormViewから派生したビュークラスを使用しているとき ダイヤログリソースでVisibleをFalseにしてないとエラーが出てしまいます。 私の感覚的には見えるようにするのだからTrueだと思うのですが、 どうしてFalseにしないとエラーが出るのでしょう?
VisualC++でビッグエンディアンのプロセッサのCソースを 直さずになんとか動かす方法はないですか。
>>331 > EffectiveSTLの文字列クラスの実装の項を読んでみることをお奨めするよ。
ハイハイ、そういう言い訳は聞き飽きた。
で、どうせ具体的に指摘できないんだろ ?
>
>>327 > そのコメントのどこらへんが「ハァ?」なの?
>> v に文字列を沢山詰め込む
どの行で、「v に詰め込んでいるのか」教えて欲しいものだ。
> どうせ逃げるんだろうけど。
なんて人を煽る暇があったら、ハァ ? と指摘されてるところを見直したらどうか。
> あと、何を誤解してるか知らんけど、
>>327 != 310 ね。
あんたが引用してるから、あんた宛に書いただけのことだけど。
>>361 さん
仲間仲間〜 ヽ( ̄▽ ̄)ノ
・・・いや、そーじゃなくて。
SP5入れても治んないのかー。落とすの面倒だし、入れなくてもいっか。
とりあえずOS再インストしてみるです、自分も。
だろうね。もう完全に周りが見えなくなってる。
やっぱりできないよー助けて!
VCやってる奴ってこんなんばっかかよ
>>363 ネットワーク・プログラミングのコード例見れば必ずやってあることだが
#ifdefで条件分岐してhtonsやhtonlをかけるかどうか使い分ける
>>374 htons, htonl 使ってて、#ifdef で条件分岐してる奴って頭おかしいと思うのは俺だけか ?
(つーか、質問者の意図 (=Cソースを直さずに) を無視してるし...。)
>>363 ソース見ないとなんとも...。
エンディアンが問題となるところで htons 相当の手当てがしてあるなら、その定義を書き換えればいいけど、生でキャストしまくられていたらソース書き換えられないとどうしようもない。
外に出さなきゃ問題ないけどな たいていはネットワークやファイルに出してるから無理か・・
377 :
デフォルトの名無しさん :04/02/11 15:29
エクスプローラで、/ なんかのファイル名を指定すると ファイル名として指定できない文字の一覧が表示されますけど、 あれの コロン : とアスタリスク * の間の2文字はなんでしょう? コンマとセミコロンかと思ったんですが、どうもこの文字は ファイル名として指定できるみたいで。 分かる方いませんか?
コロンとアスタの間に文字なんて無いぞ・・・ XPでNTFSだけど
379 :
デフォルトの名無しさん :04/02/11 15:39
コンマとセミコロンがあるぞ 2000でNTFSだけど
? " / \ < > * | : コンマとかセミコロンは(Vではない)FATで使えない文字だと思う。 これってどっかでdefineされてんのかな?
>>379 うちは 2000 + FAT32です。
2000だとあるんですかね。
\ / : , ; * ? " < > |
こんななってる。
>>380 VFATなんての、ありましたっけ?
聞いたことあるようなないような・・・。
ファイルパスをParseするクラスを作ってるんですが、
2000以上なら , ; は使えると考えていいんかなー?
参考になりますた。 どもです。
--------------------------- 名前の変更 --------------------------- ファイル名には次の文字は使えません。 \ / : , ; * ? " < > | --------------------------- OK --------------------------- どうでも良いことだけど、Win2000 以降では ctrl-C でダイアログボックスのテキストがコピペ出来る
>>381 >ファイルパスをParseするクラスを作ってるんですが、
せっかく車輪の再発明をしてるところなのに申し訳無いんだが
Windows Shell API つーので Parse 出来る分けだが。
http://nienie.com/~masapico/api_index.html ここの Path から始まる API 群。。
Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with Internet Explorer 4.0 or later).
Windows 95/98/Me: Requires Windows 98 (or Windows 95 with Internet Explorer 4.0 or later).
Header: Declared in Shlwapi.h.
Import Library: Shlwapi.lib.
>>384 お、どもども。
アスキーのWin32APIオフィシャルリファレンスに載ってなかったので
ないのかと思いました。Platform SDKの全訳が欲すぃ・・・・。
>>384 Win9xだと"*HOGE*"を照合できないし、
UNCの判定とか機能不足しすぎ。
\\HOST\A\B\Cだとマウントしてからディレクトリを移動せんと。
どなたかVC++で出たエラーなどの解決方法を教えてくれる。 スレッドがあったら教えていただきませんか?
336でございます。 林ハルヒコさんのVC本、立ち読みしてきました(買えよ自分) 載っていた解決策: VC5→ヘルプだか検索だかしる VC6→Ctrl+Cを押す … 駄目でした_| ̄|○
ずっとstandard ed.使っているけど そういう現象には一度も遭遇してないなあ。 バージョンによって違うのかな。 ちなみにNTで使っているけど。
391 :
デフォルトの名無しさん :04/02/12 11:32
void ShowMyText(HWND hWnd) { HDC hdc; PAINTSTRUCT paint; char *str = "こんにちは"; hdc = BeginPaint(hWnd, &paint); TextOut(hdc, 10, 10, (LPCSTR)str, strlen(str)); EndPaint(hWnd, &paint); return; } 上のは文字しか表示できないのですが printf("a + b = %d\n", a + b); みたいに数字を表示させるにはどうしたらいいのですか? >sprintfでも使ってなさい と他スレで返答いただいたのですがスレ違いだったのでこっちで質問します sprintfをしらべたのですが、数字を表示できそうにありません sprintfをどのように使えば数字を表示できるのですか?
まず Windowsの描画の仕組みが全然わかってない まずはコンソールでやってはいかがか sprintf なら、 char str[100]; sprintf(str,"こんにちは %d", 1); 以下同文
ってこれ、「猫でも・・・」での例なのか いいのかこんな例出して
>391 sprintf作った奴が聞いたら泣くだろうな。(笑 まず、printfとかsprintfをシャブリ尽くしていろいろ試そう。
395 :
デフォルトの名無しさん :04/02/12 12:05
>>392 ありがとうございました
できました
>>393 そうです
なんでわかったのですか?
>>394 printfはコンソールでしかつかえないんですか?
396 :
デフォルトの名無しさん :04/02/12 12:28
>宣言時に初期化するのでかまわなければ、 >int data[100] = {0}; のようにすると、全ての要素に{0}を設定できますよ。 と調べたら出てきたのですが、上のようなやり方で2次元配列の場合はどのように宣言したらいいのでしょうか? int data[5][5] = {1};として初期化してもダメでした
>>391 void ShowMyText(HWND hWnd)
{
HDC hdc;
PAINTSTRUCT paint;
int a = 10;
int b = 100;
CString str;
str.Format("a + b = %d\n", a + b);
hdc = BeginPaint(hWnd, &paint);
TextOut(hdc, 10, 10, (LPCSTR)str, str.GetLength());
EndPaint(hWnd, &paint);
return;
}
これでもできる。
>>396 int data[5][5]
ZeroMemory(data, sizeof(data[][]));
ゼロの場合はコレで初期化できるかな?
試してないんだけど。
配列のsizeof は名前だけでいいよ。 sizeof (data)
400 :
デフォルトの名無しさん :04/02/12 12:51
MFC使ってないんだと思われ Paint系は、引数をHDCにして、WM_PAINT でBeginPaint()して 得たHDCを渡すようにすると、自力で描画する場合にも 同じ関数が使えるぞ、、、ってとりあえず現状では無理か・・・
>394 少し戻って変数の型とかの部分をよく見てやり直しておいた方が良いよ 今のうちに。 char からintとか、その逆への変換は基本中の基本だから。 後、猫プロはとりあえず出来る方法を紹介していて、理屈は とばしてるところもあるので、別のサイトや本もよまないと 自力で書けるようにならないよ。
visual C++6.0で #include <stdio.h> int main() { int a=1,b=1; printf("AたすBは%dです。",a+b); return; } ってのをコンパイルしました。 そしてビルドを押すと「リンク中...」とでたまま操作不能になってしまいます。 これを解決するにはどうすればいいのでしょうか、 この症状が出た人は多数いるようですが、解決策が無いようなので やっぱり解決することは不可能なんですか? それとも ソースがいけない、使い方が悪い...とかの事ですかね
ん?デジャヴ?
>>403 VS起動しなおしてみて。悪いのは多分MS
>>403 それでハングするってのはオカシイね。
return で値を返してないからコンパイルエラーになるとは思うけど。
ソースの問題ではないと思われ。
>>401 MFCは使ってませんでした
>>402 見直してみます
アドバイスありがとうございました
LINKが返ってこなくなるのは何年も前に食らった まだ直ってないのか・・・ 終了しようにもビルド中で終われなくてビルドの中止は 無視されるんだよな。
409 :
デフォルトの名無しさん :04/02/12 19:21
VC++って良く知らないんですが、ANSICの関数は全て使えるんですか?
char str[100]; sprintf(str,"こんにちは %d", 1); を char str[100]; wsprintf(str,"こんにちは %d", 1); としても同じ結果になったのですが sprintfとwsprintfはなにが違うのですか?
>>411 Cの標準ライブラリとして実装されているか、
WindowsのAPIとして実装されているかの違いなのかな?
strcpy と lstrcpy
strcmp と lstrcmp なんてのもあります。
調べろ
ああ、初心者向けだった すまん
415 :
デフォルトの名無しさん :04/02/12 20:08
>>412 WindowsのAPIでプログラムするときはwsprintfを使った方がいいのでしょうか?
>>414 いえいえ
>>384 うーん。やっぱ自分で作ったやつより、
MSの用意した関数は使いやすいわ。
ありがたう!
しかしこういう関数を作るためのWindows側の細かい仕様
をまとめた冊子って出てないのかな。なんとなくは分かっ
ても関数を書くとなると、やっぱ厳密に知らないと書けない。
extern について詳しく解説してるサイト教えてください。 実行時エラーで仕事が進みません。
>>415 俺はなんとなく strcmp よりも lstrcmp 使っちゃうねぇ。
sprintf は使ってないからわからんです。
CString 使っちゃうので。
同じ動作をする関数がいくつもあるのを知ったときは
そういうのは混乱するからやめてくれ!と思った。
>>418 コンパイルとビルドはできるわけ?
だったら extern なんて関係あるんだろうか?
421 :
デフォルトの名無しさん :04/02/12 20:38
ソースを書け。 でないと、わからん。
422 :
デフォルトの名無しさん :04/02/12 20:44
423 :
デフォルトの名無しさん :04/02/12 21:00
ShowWindow(hWnd, nCmdShow); としても ShowWindow(hWnd, SW_SHOW ); としてもウインドが表示されるのはなぜですか ShowWindow(hWnd, nCmdShow);の第二引数にSW_SHOWを指定しなくてもウインドが表示 されるならSW_SHOWの存在意味がないようなきがするのですが
>>423 nCmdShow に SW_SHOW が入ってんでしょ。
SW_SHOWが実は数字だってことは分かってます?
425 :
デフォルトの名無しさん :04/02/12 21:20
>>424 >nCmdShow に SW_SHOW が入ってんでしょ。
nCmdShowにSW_SHOWが代入されてる行はありませんでした
これはどういうことなのでしょうか?
>SW_SHOWが実は数字だってことは分かってます?
知りませんでした、カーソル合わせると#define SW_SHOW 5って出てきました
>>425 nCmdShow は WinMain の引数になってない?
ここで代入されてんだよ。
ユーザーが引数を設定して関数を呼び出すように、
WinMainもどこからか呼び出されて動作を始める
わけさ。
427 :
デフォルトの名無しさん :04/02/12 21:38
>>426 WinMain の引数になってました
WinMainがどこからか呼び出されて引数としてnCmdShowを貰うときにには常にnCmdShowの中にSW_SHOW
がすでに代入されているんですか?
428 :
デフォルトの名無しさん :04/02/12 21:41
if (!RegisterClass(&myProg)) return FALSE; の中の!RegisterClass(&myProg)はどういう意味なのでしょうか?
>>427 小人さんはだいたいはSW_SHOWを入れるようだが
クライアントの希望によっては他の値も入れることがあるらしい。
nCmdShowは所詮変数。いつも同じ値とは限らない。
SW_HIDEのときもあるだろう。
>>415 体感では分からんかもしれんけど、昔実行速度計った結果によると
wsprintf > sprintf
lstrcpy < strcpy
lstrlen > strlen
だったんで strcpy以外はAPIの方使うようにしてる。ただwsprintfは浮動小数点
が使えないので、そんときだけsprintf。
431 :
デフォルトの名無しさん :04/02/12 22:33
>>430 VC++ 6.0 でやってみた。
wsprintf > sprintf
lstrcpy < strcpy
lstrlen < strlen
wsprintf 以外はCランタイムの方が速い。
wsprintf が速いのはバッファが1024byte固定だからか?
遅くても、Win API の方を使ってしまう漏れ。
エディットボックス(m_Day)にyyyy/mm/ddの形で入力するところで困ってます。 yyyyをmmを入力したら自動的に/を入れてくれるようにする為下記のようなものを 作ったのですが/が入ったあとカーソルが自動的にエディットボックスの一番最初 の文字の前に行って困ってます。 どのようにすればカーソルを移動しないようにできるでしょうか? switch(m_Day.GetLength()){ case 4: if(m_Day.GetAt(3) != '/'){ m_Day = m_Day + '/'; } break; case 7: if(m_Day.GetAt(6) != '/'){ m_Day = m_Day + '/'; } break; default: break; } m_No = m_No.Left(10);
>>434 m_editになってるけどCStringで変数設定してるようだが?
まず「値」でなく「コントロール」でCEditで変数を作る。
値だと中身しかいじれないから。
CEdit m_edit;
m_edit.SetWindowText("0123456");
m_edit.SetSel(7,-1);
m_edit.SetFocus();
436 :
デフォルトの名無しさん :04/02/13 06:09
a[-1][-1]=1 とかいうように配列にマイナスも使えるのはなんでですか?
>>436 使えなくするほどの積極的な理由がないからじゃないですか?
a[10]; で宣言して a[15] みたいな配列を超えるアクセスも
言語上は許されていますし。
438 :
デフォルトの名無しさん :04/02/13 06:58
MFCプロジェクトでスレッドからの通信用に ユーザー定義のウインドウメッセージを定義しようと 思うんですが、BEGIN_MESSAGE_MAP( ) で ON_WM_USER_DEFINED_MESSAGE( ) のように簡単にハンドリングすることはできるんでしょうか? また、メッセージマップはどの辺で定義すべきでしょう? 新しいファイルを使うのか、既存のファイルが使えるのか。 アドバイスいただけるとありがたいです。
439 :
デフォルトの名無しさん :04/02/13 07:19
>>437 >a[10]; で宣言して a[15] みたいな配列を超えるアクセスも言語上は許されていますし。
上の場合a[15]=1;とか数値を代入してしまうと、a[10];の宣言で取ったアドレス
以外のアドレスに1が書き込まれて、暴走してしまうとかもありうるのでしょうか?
int a[10]; // 配列確保 a[0] = 1; // 問題なし a[9] = 1; // 問題なし a[15] = 1; // アクセス違反 暴走の元 a[0] = 1; // 問題なし だが、上でアクセス違反をしているので 保証はしない。 この程度なら 暴走まではいかないが やっかいなバグの原因になる。(発見しにくい) 文法上問題ないのでコンパイルは通る。 実行もできる。 ただ、何が起こるか保証しない。
>441 ローカル変数なら暴走しない事の方が多いけど、 引数でそれをやると、暴走する事の方が多いと思う。
暴走というより、他の変数とかぶって いつのまにか値が変わったりするんでやっかいなバグが出るな
445 :
デフォルトの名無しさん :04/02/13 10:21
CPPファイルを機能単位に分割してるんですが common.hに記述するのはほとんど全部のCPPファイルで共有されている ののだけでいいのでしょうか? たとえば、5つのCPPファイルに分割されてる場合 その中の2つのCPPファイルにしか共有されてないもの であってもcommon.hに書いといたほうがいいのでしょうか?
>common.hに記述するのはほとんど とりあえず型宣言とかそーゆー類だと仮定しておく。 で、特に問題ないんじゃね? あくまでも、ソースの中に○○が出てきたらxxしてね、っていう注意書きみたいなもんだし 問題あるようなら、2つだけからしか参照しないヘッダを作ればよし。 ・・・というような回答例を C言語の入門書を読みおえたばかりの俺は思いついたんですが、いかがでしょうか。
参照してるかどうかより、意味的にcommon がふさわしければ入れればよい
448 :
デフォルトの名無しさん :04/02/13 11:28
>>446 宣言とか変数やインクルードなどの共有です
>2つだけからしか参照しないヘッダを作ればよし。
そういうこともできるんですね
参考になりました
>>447 共有できるのなら入れていいんですね
449 :
デフォルトの名無しさん :04/02/13 12:05
int a[5][5]; //----------------------------------------------------------------------------- // 関数名 : GameInit() // 機能概要: スタート処理初期化 //----------------------------------------------------------------------------- int i,h; for (i=0;i<5;i++) { for (h=0;h<5;h++) { a[i][h]=0; } } a[4][4]=1; //----------------------------------------------------------------------------- // 関数名 : StartFrame() // 機能概要: 画面更新処理 //----------------------------------------------------------------------------- if (a[4][4]==1) { g_FrameNo = START_INIT; } ではStartFrame()内でa[4][4]には1が入っていませんでした
450 :
デフォルトの名無しさん :04/02/13 12:09
でも int a[5][5]; //----------------------------------------------------------------------------- // 関数名 : GameInit() // 機能概要: スタート処理初期化 //----------------------------------------------------------------------------- int i,h; for (i=0;i<5;i++) { for (h=0;h<5;h++) { a[i][h]=0; } } //----------------------------------------------------------------------------- // 関数名 : StartFrame() // 機能概要: 画面更新処理 //----------------------------------------------------------------------------- a[4][4]=1; if (a[4][4]==1) { g_FrameNo = START_INIT; } とするとa[4][4]に1が入ってました 関数をまたぐ間にa[4][4]の内容が変わってしまったのでしょうか? これ以外のところではまったくa[][]をいじってないのですが… なんでこんなことになるのですか?
>>450 その記述した行がどこにあるのかわかる様に書いてくれ
関数の中なのか外なのかさっぱりわからん・・・
452 :
デフォルトの名無しさん :04/02/13 12:45
表示させたビットマップをテンキーで動かすプログラムを作りました しかしビットマップの動きが早すぎるのでこま送りぐらいのゆっくりした動きにしたいので ウェイトをかけたいのですがどうしたらよいのでしょうか?
>449 俺俺スレで解決したんじゃねーのかよ。 >448 ファイル間の変数の共有はやめとけ。
454 :
デフォルトの名無しさん :04/02/13 13:14
>>451 後なにを書けばよいのですか?
わかりにくくてすみません
>>453 a[4][4]=1;をGameInit()ゲーム初期化関数の方に書きたいのですが
そうするとちゃんと1が代入されていないみたいなのでまだ困ってます
>>451 >>453 グローバルにint a[5][5];を書いたあとにGameInit()
内にもint a[5][5];を書いてました
GameInit()内のint a[5][5];を消したらうまいこといきました
どうもお騒がせしました
ヽ(・ω・)/ ズコー \(.\ ノ
457 :
デフォルトの名無しさん :04/02/13 16:25
HWND_TOP とか HWND_BOTTOM とかSWP_SHOWWINDOW などの16進数の数値って、どうやって知ることが出来るでしょうか? 以前某所で別のスイッチの16進数を見たことあったんだけど、そこ つぶれちゃってて・・・ すみません、ご教授お願いします<(__)>
>>457 ヘッダ見れ。
ソース中でそれにカーソル置いてF12とかすれば一発でジャンプしてくれるよ。
458様、459様、ありがとうございました。 解決しました。 (459様の手順を使わせていただきました)
>>435 氏
レスありがとう御座います。
おかげで解決できました。
SetSel()の使い方がまだよくわかりませんが勉強します。
ありがとう御座いました。
>>427 最初のShowWindow()呼び出し時のみ引数の値は無視され、デフォルト値が使われる。
>>462 タブコントロールの子ウインドウで明示的に
はじめから ShowWindow(SW_HIDE) にしてるけど、
ちゃんと隠れてるよ。
>>427 多分、VBのShell関数などでwindowstyleを指定できる。
プロセス呼び出しの際に親プロセスがnCmdShowを指定できるんじゃなかったっけ? 親に該当するプロセスがない場合はSW_SHOWになるんだと思う。 違うかなぁ・・
親(呼び出し元)がいないって、、、自然発生するプロセスがあるのか
エクスプローラから呼び出す場合ってことだろうけど、 ここで nCmdShow を指定することってできないんだっけ?
>>463-464 MSDN読みませう。
あとMFCの場合、裏で初回のShowWindowが呼ばれていたりする。
472 :
デフォルトの名無しさん :04/02/13 21:15
キーボードフックをしておいて MSNメッセとかでチャット中に あるキーを押したら AAを書いておいたファイルからAAを読み込んで メッセの現在のカーソル位置にAAを挿入する ということをしたいのですが 他のプログラムのカーソル位置にテキストを貼り付ける にはどうすればいいのでしょうか coutとか標準出力に出力しても何も起こりませんでした
プロセスの起動方法が違うじゃねーかよ
475 :
デフォルトの名無しさん :04/02/14 00:29
ビットマップ上の任意の点の色を調べる関数ってあるのでしょうか?
GetPixel
>>475 無い
ビットマップファイルだけなら作ったほうが早そう
??
Win32Consoleプログラムを製作しているものです。 出力をクリップボードにしたいんですが、どうやったらいいんでしょうか?
CopyToClipboard(CString str) { HGLOBAL hGlobal; LPTSTR lpStr; hGlobal = GlobalAlloc(GHND, str.GetLength() + 1); if(hGlobal == NULL) return; lpStr = (LPTSTR)GlobalLock(hGlobal); lstrcpy(lpStr, str); GlobalUnlock(hGlobal); if(!OpenClipboard()){ GlobalFree(hGlobal); return; } EmptyClipboard(); SetClipboardData(CF_TEXT, hGlobal); CloseClipboard(); } こんな感じで適当に改造 BOOL型でTRUEかFALSEで返るようにするとか
Freeしちゃあかんでしょ・・・
あ、インデントつまってただけか。スマソ
>>479 >>480 のに、追加で
#include <windows.h>
VC++はこれだけでいいと思うけど、リンクエラーが出るなら
user32.libのリンクも追加
485 :
デフォルトの名無しさん :04/02/14 04:03
486 :
デフォルトの名無しさん :04/02/14 04:33
Wizardでデフォルト設定のまま作ったSDIプロジェクトで CMainFrame::PreCreateWindowが起動時に二度呼ばれてみるみたいなのですが 何のためにどこから呼ばれてるのでしょうか? 感覚的にウィンドウ毎に一度しか呼び出されないと思ってたので意外で・・・。
487 :
デフォルトの名無しさん :04/02/14 06:45
COLORREF GetPixel( int x, int y ) const throw( ); は、ピクセルの RGB 値 (赤、緑、青の成分値) を返すそうですが かえされたRGB値を画面に表示するにはどうしたらいいのですか? RGB値の受け渡す方法がよくわからないです
#include <wingdi.h> BYTE red,blue,green; COLORREF col; HDC hdc; ... col = GetPixel(hdc,x,y); // WINAPI32 red = GetRValue(col); green = GetGValue(col); blue = GetBValue(col); col = RGB(red ,green, blue ); ...
489 :
デフォルトの名無しさん :04/02/14 07:50
... HDC PaintDC; BYTE red,blue,green; COLORREF col; col=GetPixel(PaintDC,0,0);// WINAPI32 red = GetRValue(col); green = GetGValue(col); blue = GetBValue(col); char str[100]; sprintf(str,"%d", red); ... とするとchar str[100];のところで構文エラー : ';' が '型' の前にありません というエラーがでます ... HDC PaintDC; BYTE red,blue,green; COLORREF col; //col=GetPixel(PaintDC,0,0);// WINAPI32 //red = GetRValue(col); //green = GetGValue(col); //blue = GetBValue(col); char str[100]; sprintf(str,"%d", red); とするとエラーが出なくなります なぜでしょうか? ...
拡張子を.cppにしろ
491 :
デフォルトの名無しさん :04/02/14 10:47
ccb
ここある意味いい問題集だな
>>480 ありがとうございます
非常に参考になりました
495 :
デフォルトの名無しさん :04/02/14 14:01
>>490 すいません.cppにしてませんでした
.cppに変更したら
Winmain.obj : error LNK2019: 未解決の外部シンボル _WindowProc@16 が関数 _WinMain@16 で参照されました。
.\Debug/chap38.exe : fatal error LNK1120: 外部参照 1 が未解決です。
と出てきました
ヘッダを読み込んでない。 かっこの対応がとれていない。 関数が悪い。 のどれか。
497 :
デフォルトの名無しさん :04/02/14 15:10
>>496 ありがとうございました、ちゃんとできるようになりました
あとGetPixel(PaintDC,0,0);を
PaintDC=BeginPaint(hwnd,&ps);
GetPixel(PaintDC,0,0);
BitBlt(PaintDC,0,0,200,200,MemoryDC,Ac*200,0,SRCCOPY);
このようにすると色の値が取れてないようで
PaintDC=BeginPaint(hwnd,&ps);
BitBlt(PaintDC,0,0,200,200,MemoryDC,Ac*200,0,SRCCOPY);
GetPixel(PaintDC,0,0);
このように並べ替えるとちゃんと色をとるようになったんですがなぜでしょうか?
498 :
デフォルトの名無しさん :04/02/14 15:34
MFCでプログラミングしてます。 憂鬱なんかだとクラスを作って、そのクラス間の 連携をしながらプログラミングをしていくみたいな ことが書いてあったんで、できるだけそれを 意識してやってるんですが、なかなかそういう 理想通りにはいかないなぁという印象。 特に気になっているのが、関数のアドレスを引数に 取る関数で、ファイルコンペアとか、AfxBeginThread なんかがそうですが、関数のアドレスを渡すとなると クラス内でstaticで関数を宣言するか、グローバル関数 にするしかなくなってしまいますよね。 なんとかうまくクラスとして使うコツなんてないんですかね。 クラスのstaticメンバ関数だと名前空間で宣言したのと 大差がなくなって、通常の非staticメンバ関数へのアクセスが 容易じゃなくて使いづらい。 なんとかすっきりと解決する方法ないのかな。
>>498 私はthreadの場合はこうしている。
#ありえないコードだけどわかるよね。
class CAnyDlg : public CDialog
{
CAnyDlg() {AfxBeginThread(someThread, this);}
static UINT someThread(LPVOID pParam);
int someMember;
};
UINT CAnyDlg::someThread(LPVOID pParam)
{
CAnyDlg * pThis = (CAnyDlg *) pParam;
return pThis->someMember;
}
>>499 なるほど。ありがとうございます。
staticメンバ関数にthisを渡すのは良い方法かもですね。
参考になりました。
VC7ではstaticでないメンバ関数を渡せるみたいなことをどっかで見たことがあるが...
>>500 >>499 みたいに別スレッドにMFCオブジェクトの thisを渡す方法はイリーガル。という
か、動作自体しないことがあったり、不可解な動作をしたりなので、全く良い方法では
ない。CWnd関係のポインタなんか、特にそうじゃないかと。
詳細はMSDNの「マルチスレッド : プログラミングのヒント」参照
>>501 >499だけど、それは承知している。
あくまでもオブジェクトからその他のクラスに紐付けるために使っているから安心してくれ。
503 :
デフォルトの名無しさん :04/02/14 22:13
CD-ROMに存在するテキストファイルを fopenします。 CDを取り出します。 この状態で fgetsしても文字列が取得できるんですけど なぜなんでしょう?
>>503 入力バッファに読み込まれてるからだろ。
fgets() するたびにデバイスから読んでたら遅くなるから、適当な単位で (物理ブロックサイズ) で読み出して必要部分だけをユーザープログラムに渡すのが普通。
>>504 それって一回でも入力処理を行わないといけないんじゃないの?
>>504 ありがとうございます。
ただ、
>>505 さんのいわれるとおり、一度も読み出していない
ものまで読めるのが不思議なんです。
fopenの時点でバッファリングされるのかな?
autorun.infみたいにマウント時に自動的に読んでいたりして。
fopenはファイルをstream結びつけて読み書きできるようにする関数。 fseekしたり、freadや、fgetsで、streamのバッファを読み書きしてる。 fopenした時点でバッファリングされてます。 openだと、ファイルハンドルで読み書きする。 こっちはlseekして、readで読み書きする。 openしただけではバッファリングされません。 DOSだとこんな感じだったけど。処理系依存かも。
>>508 ありがとう。なるほどーっす・・・
バッファリングって、概念としてはなんとなくわかるけど
実体がよくわかりません。詳しく解説してる書籍などありますか?
Win32コンソールプログラムで ドラッグアンドドロップでファイルを開く機能を実装するにはどうしたらよいでしょうか?
512 :
デフォルトの名無しさん :04/02/15 02:44
ビルドしようとすると、ウィンドウプロシージャ内のデフォルト処理、 default: return DefWindowProc(HWND, UINT, WPARAM, LPARAM); の部分で、 error C2275: 'HWND' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。 というエラーメッセージが出ます。これがどういうエラーなのかが分かりません。 色々いじってみましたが、一向にエラーは消えません。健闘がつかなくなりました。 分かる方いらっしゃいましたら、ご教授お願いします。 環境は、VC++6.0です。
君は2の平方根を計算したい時に a = sqrt(double); と書くのか
>513 それは書きませんが…。どういうことなのでしょうか。 変数名がおかしいということですか?
どうしてこのスレの人たちはイジワルな答え方ばかりするの?(つД;)えーん
516 :
デフォルトの名無しさん :04/02/15 03:31
CWndの派生クラスをnewしてもそれはスレッドを生成したことにはならないんですよね? なんかウインドというとスレッドがおまけについてくるみたいに思ってました。
517 :
デフォルトの名無しさん :04/02/15 03:34
>>512 HWNDなどは型です。
型を引数にして関数呼び出しはできないよ。
CreateProcess()からrshコマンドを呼び出しています。 一応動作するのですが、処理時間が長いと 3分程でreadエラーと標準出力に表示され rshコマンドの接続が切れます。 なぜかrshコマンドに-nオプションをつけると無問題です。 これってCreateProcess()の呼び出し方が悪いんですかね?
519 :
デフォルトの名無しさん :04/02/15 06:00
ビットマップファイルから直接、任意の座標のRGB値を読み込むにはどうすればいいのですか?
・・・自前でファイル読み込み?
ヘッダ読めば任意の座標のRGB値がどこにあるかわかる パレット使った256色や、上下ひっくりかえってないマイナスの高さのやつに注意
522 :
デフォルトの名無しさん :04/02/15 10:35
すみません、なんか昨日から謎の現象が起こるようになったので 質問させてください。環境はVS.NET 2003です。 プロジェクトに.cppファイルを追加してコンパイルしようとすると hoge.cpp(1) : warning LNK4017: #include 文はターゲット プラットフォームでサポートされていません。無視しました。 hoge.cpp(3) : warning LNK4017: int 文はターゲット プラットフォームでサポートされていません。無視しました。 hoge.cpp(4) : warning LNK4017: { 文はターゲット プラ(ry と、警告が大量に(っていうか行数分)発生するのでつ。 警告だけで実行には問題ないっぽいのですが、大量すぎて気持ち悪すぎるので。 コンソールだろうが、Win32だろうが、MFCだろうが関係なく発生します。 何故かプロジェクト作成時に自動生成されたファイル構成のままの時は リンカもおとなしくしてくれてるんですが。。。謎。 どなたか原因or治療法をよろしくです。 ちなみに関係ないかもしれないですが、 昨日DirectXのSDKを入れた前後くらいから起こりだしたです。
523 :
デフォルトの名無しさん :04/02/15 12:02
>>520 はい、自前でしたいんです
>>521 http://www.kuwalab.net/technics/bitmap/ >BITMAPFILE HEADER
>BITMAPFILE HEADERの内容
>オフセット バイト数 構造体フィールド名 説明
>0000 2 BfType ファイルのタイプ、ビットマップを示すBM(0x424d)が入ります。
>0002 4 BfSize ファイルのバイト数。ファイルのサイズの情報が入ります。
>0006 2 BfReserved1 予約域。値は、0x00が入ります。
>0008 2 BfReserved2 予約域。値は、0x00が入ります。
>000A 4 BfOffBits ファイルの先頭から、画像情報までのオフセット。普通は0x36が入っています。
http://www.kk.iij4u.or.jp/~kondo/bmp/ >32 bit (1677万色) Bitmap
>このフォーマットにはカラーパレットがありません。
>1画素あたり 32bit (4byte) で,Blue(8bit), Green(8bit), Red(8bit), Reserved(8bit)
>の順番で色の値が記録されています。Reserved には '0' が入ります。
ビットマップファイルの000Aで画像情報の開始アドレスを取得して
そのアドレスから4byteごとにピクセル情報を見ていけばいいのでしょうか?
初心者なのでまだファイルの読み出し方法がわからないのでもう少し調べてみます
アドバイスありがとうございました
リンカ ツールの警告 LNK4017 keyword 文はサポートされていません。無視されます。 モジュール定義ステートメントは、このバージョンの リンカ ツール ではサポートされていません。.DEF ファイル内のこのステートメントは 無視されました。
天野っす。 VCってリアルタイム処理したら、 どのくらいの周波数まで保障されますか?
OS と 実行するマシンによる。
>526 天野っす。 OS:98で、スペックは2.0GHz それか OS:XPで、スペックは2.0GHz です。
質問なんですが 分割コンパイルをするにはどうしたらいいんでしょうか? コンパイラはvisual C++6.0です。
ソースファイルを分ける -c つけてコンパイルする
ワークスペースのファイルの上で 右クリックメニューを出して コンパイル
>>527 CE を除く Windows では、その手の「保証」はない。
また、あんたや俺の生活を「保障」してくれるわけも無い。
ましてや、「補償」なんて考えることすらできない。
>>524 LNK4017の説明はMSDNで読んだんですが、プロジェクトに.defは無いんですよ。
ていうか、.cppで警告されてるんでなお意味が分からず。
つか、以前に正常にビルドした他のプロジェクトを試しにリビルドしてみたり、
他人のソースコードをビルドした時にも発生するんで、謎が深まるばかりで。
>529-530 出来ました。ありがとうございます。
FILE* fp; fopen("mapdata.bmp","rb"); char a ; if (fp==NULL) { return -1; } fseek(fp,0,0); fread(&a,4,1,fp); fclose(fp); とすると sample.exeの0x004017feでハンドルされていない例外が発生しました:0xC0000005: 場所0x77cf5ca0に書き込み中にアクセス違反が発生しました。。 とエラーがでましたどうしてでしょうか?
FILE* fp = fopen("mapdata.bmp","rb"); 最初の2行だけ読んで即レスしてみるテスト。
536 :
デフォルトの名無しさん :04/02/16 00:16
>>535 変更してみましたが実行中に
sample.exeの0x00401506でハンドルされていない例外が発生しました:0xC0000005:
場所0x0000000cに書き込み中にアクセス違反が発生しました。。
と出てfclose.cの
/* Init near stream pointer */
stream = str;
if (stream->_flag & _IOSTRG) {
stream->_flag = 0;
return(EOF);
}
にカーソルが表示されます
537 :
デフォルトの名無しさん :04/02/16 00:19
fread(&a,4,1,fp); aは一バイトだろ
539 :
デフォルトの名無しさん :04/02/16 00:20
>>535 あと、char a ;をint a;に変えたらできました
ありがとうございました
540 :
デフォルトの名無しさん :04/02/16 00:21
541 :
デフォルトの名無しさん :04/02/16 00:23
Perlじゃねーんだから、きちんとSEEK_SETマクロを使えよな。つーか無意味。
542 :
デフォルトの名無しさん :04/02/16 00:24
win2kのあるシステムファイルが ほかのどのdll等を使用しているのか 調べるにはどうしたらいいですか。 昔vc++6を買ったもののすぐに飽きて 押し入れに入れっぱなしになってますが これで調べられますか。
543 :
デフォルトの名無しさん :04/02/16 00:25
並列処理プログラムをVisualC++でやりたいのですがどうすればできるのでしょうか? 参考書などあればお願いします。
>>542 Dependency walker を使うですよ。
ダイナミックロードしてるDLLは出ませんですが。
547 :
デフォルトの名無しさん :04/02/16 02:53
FILE* fp; fp=fopen("mapdata.bmp","rb"); char str[100]; int a ; if (fp==NULL) { return -1; } fseek(fp,54+(40*29)*3,0); fread(&a,1,1,fp); fclose(fp); sprintf(str,"%d", a); TextOut(PaintDC, 300, 300, (LPCSTR)str, strlen(str)); と FILE* fp; fp=fopen("mapdata.bmp","rb"); int a ; char str[100]; if (fp==NULL) { return -1; } fseek(fp,54+(40*29)*3,0); fread(&a,1,1,fp); fclose(fp); sprintf(str,"%d", a); TextOut(PaintDC, 300, 300, (LPCSTR)str, strlen(str)); ではaの値が違うのはなぜでしょうか?
>>547 a はint だな?
int だから4バイトの領域があるのに、1バイトしか読み込んでない。
残りの3バイトはゴミが入ってる。
場所を変えたらゴミの内容も変わる
>>548 547の後者の方には正しい値が入っているのですが
前者は全く違う値が入っています
1バイト分のデータしか必要ないので1バイト分しか読み込んでないのですが
どうすればint aの位置を変えても常に正しい値が得られるのでしょうか?
>>549 事前にゴミを消す。int a = 0; で初期化する
というのが答えだが、そもそも1バイト読むなら unsigned char にすべきかな
目的と違うからわかりにくいし、cpuのエンディアンに依存したやりかたはよくない
seek も、0じゃなくて SEEK_SET と入れような
552 :
デフォルトの名無しさん :04/02/16 09:36
>>546 ささささささんきゅうでっす!!!!!!!!
さっそくやってみました。気になるのは win2k sp4 の internat.exe なのですが ふたつエラーが出ます。アイコン見ると APPHELP.DLL が Missing MPR.DLL が warning です。 warning の詳しい内容はわかりません。 これって普通のことですか?
検索してみると APPHELP.DLL は存在しませんですた。で mpr.dll size=55056byte CRC16=592C CRC32=DA09F811 MD5=28d727048fd45b14f32fc2f3434bac24 て出たんですけどこれはこれでOKでしょうか?
556 :
デフォルトの名無しさん :04/02/16 11:26
C言語をどのくらい理解したらC++に移行したほうがいいのですか? 基礎編を終わらした程度では厳しいでしょうか?
関数が書けたらもういいんじゃないか
ううう。すみませんがどなたか win2k sp4 な方 Dependency walker で internat.exe をチェックして 結果を教えてくれませんか。具体的には APPHELP.DLL : missing MPR.DLL: warning というエラーが出るかどうか、です。
>>556 malloc/freeを使った動的なリストと、再帰関数くらいは
書けるようになってからがいいと思われ。
MFCで副スレッドからメインスレッドに仕事の進行状況を メッセージで送っているんですが、WM_TIMERみたいに メッセージキューに1つだけメッセージが置かれるように したいんですが、そういうことって簡単にできるでしょうか? 同じメッセージで進行状況を伝えようと思うのですが、 メッセージすべてに反応して欲しいわけじゃないので 同じメッセージがメッセージキューに複数溜まるのを 防止したいのです。何かいい方法ないですか?
561 :
デフォルトの名無しさん :04/02/16 15:54
HDC hdc; LPTSTR lptStr = TEXT("表示テスト"); hdc = GetDC(hWnd); TextOut(hdc , 10 , 10 , lptStr , lstrlen(lptStr)); ReleaseDC(hWnd , hdc); とすると 'hWnd' : 定義されていない識別子です。 'hWnd': 識別子は、引数依存の照合を使用しても見つかりません。 というエラーが出ます なぜでしょうか?
562 :
デフォルトの名無しさん :04/02/16 15:56
563 :
デフォルトの名無しさん :04/02/16 15:58
>>562 どうすれば見えるようになるのでしょうか?
564 :
デフォルトの名無しさん :04/02/16 16:01
>>563 どっかでウインドウ作ってるんなら、hWndがあるはずだろ。
それを何とかして、
>>561 のコードのところから見れるようにしないと。
#include <windows.h>
HWND hWnd; ↑これはどこで宣言してるん?
567 :
デフォルトの名無しさん :04/02/16 16:14
"表示テスト"と表示したいウィンドウのハンドルだよ
569 :
デフォルトの名無しさん :04/02/16 16:20
>>562 >>564 >>565 >>566 winmain.cppのみで宣言してました
@関数の引数にHWND hWndを指定したらできました
あと
A561が書いてある.cppにextern HWND hWnd; を書いてもできました
なぜ@の場合でもできるんですか?
アドバイスありがとうございました
>>560 PeekMessageで特定のメッセージを覗いて見て
無かったら放り込めばいけるかも
572 :
デフォルトの名無しさん :04/02/16 16:38
基礎は大切だよ
574 :
デフォルトの名無しさん :04/02/16 17:31
vc6.0 mfcでd&dによるファイルパスの取得をしたいのですが。 教えてください。
575 :
デフォルトの名無しさん :04/02/16 17:34
BEGIN_MESSAGE_MAP(CFoo, CDialogなど) ()の中は何を指定すればよいのですか?
>>560 そーゆーのはメインスレッドが定期的にサブスレッドの
状況を見に行けばいいんじゃねぇか?
>>570 なるほど。PeekMessageで特定のメッセージの
フィルタリングできるのですね。
参考になりました。
>>577 現在そちらの方針で行っている処理もありまして、
色んなやり方でやってみようと思ったんですが、
たしかにそちらの方が簡単かも知れない。
ただ、SetTimerを使わない場合は、PeekMessageも
使えそうです。
579 :
デフォルトの名無しさん :04/02/16 21:25
文字列の比較にはstrcmp関数を使うと思うんですが、 日本語の文字列を比較したいときはどうすればいいのでしょうか。 全く同じかどうかを比較するならstrcmpでいけると思うんですが、 例えば、3文字目から"あいうえお"と並んでいる場合などを調べるときの方法が分かりません。 初歩的なのかもしれませんが、教えてください。よろしくお願いします。 環境はVC++6.0です。
>>579 必要部分をユニコードにしては伺か?
wstring か CString のユニコード版を使うと
簡単かと思われ。
>>579 APIに CompareString() があります。
これはひらがな/カタカナの区別なしに整列させたりできます。
>例えば、3文字目から"あいうえお"と並んでいる場合などを調べるときの方法が分かりません。
この例えはよく分かりませんが。
583 :
デフォルトの名無しさん :04/02/17 03:34
if (KeyTbl[VK_LEFT] & 0x80) { tile_x--; x = TILE_WIDTH*(tile_x-1); } if (KeyTbl[VK_RIGHT] & 0x80) { tile_x++; x = TILE_WIDTH*(tile_x-1); } 右と左の矢印キーを同時に押してると上のイフ文の両方を実行するのですか? どうもそれらしい動きをするので困っています
>>583 期待通りに両方実行されると思いますが?
585 :
デフォルトの名無しさん :04/02/17 04:06
>>584 そうだったんですか…
疑問がやっと解決しました
どうもありがとうございました
586 :
デフォルトの名無しさん :04/02/17 04:14
int a=0; scanf("%d",&a); を、キーボードからの入力があるまで止めるためにかいたのですが なぜか入力待ちの状態がなくそのままプログラムが進行してしまいます どうしてでしょうか?
>>586 scnaf()なんかを使うから。
はい、次の方。
>>586 scanf はよくわからんが
getchar() でも止まったから、一時停止だけなら
そちらを使ってみては?
>>587 なぜscanfをつかったらだめなんですか?
>>588 getchar() でもだめでした
入力があるまでプログラムが停止するんですよね?
sprintfで入力状況確認してもなにも入ってないしなんででしょうか?
590 :
デフォルトの名無しさん :04/02/17 08:55
スクロールバーでつまみを移動させると 再描画が2回行われてしまいます。 一回再描画したら数秒間は再描画しないように フラグを立ててもだめです。 再描画するとき、つまみの位置を移動させないときは 再描画は1度きりです。 どうすれば再描画を1度きりにできるのでしょうか。 また、100MBのデータを読み込むとき、メモリを100MB 使用してしまうのですが、どうすれば、メモリを少なくして データを利用することができるのでしょうか。データを少しづつ 読み込むという方法があると思いますが、それだと、 すごく時間がかかってしまいそうで・・・
>>574 >>575 foo.hでそのまま宣言したがクラス内で宣言していないと
エラーが生じ、クラス内で宣言すると
オーバーロードされたメンバ関数が '<Unknown>' にありません
といったエラーがでるのですが。
どうか教えてください。
>>589 未取得のキー入力(たぶんリターンだけ)があったんだろう
scanfで、%dだと数字以外は読んでくれないしキーバッファもそのまま
>>590 どういうメッセージが来てどういう反応してるか調べてみて
大きいデータならファイルマッピングがお勧め。用途にもよるが
>>590 >>591 のエラーはニアミスでした。
しかし、クラス内で宣言していても
'CAboutDlg' クラス内で宣言されていません
とでるのですが。
>>598 scanfの前にfflushで標準入力バッファクリアしとけ
>>594 なんか根本的にVC++(MFC)の使い方を間違ってる気がするんだが・・・
やりたい事と、何をやったかを詳しく書いて見ろ
>>596 〜略
class CVcreigaiDlg : public CDialog
{
〜略
afx_msg void OnButton7();
afx_msg void OnDoubleclickedButton7();
afx_msg void OnDropFiles(HDROP hDropInfo);
〜略
};
今作成しているソフトにソースを組み込んでみたのですが、
宣言している内、他の関数は使えるがOnDropだけ
宣言されていないとエラーが生じます。
とりあえず、cppの部分はそれだけエラーがでました。
ほかは何も引っかかってはいません。
やりたいことはd&dによるファイルパスの取得です。
よろしくお願いします。
598 :
デフォルトの名無しさん :04/02/17 10:24
>>589 getchar();
俺のコンソールプログラムはこれで止まってるが、おかしいな?
ちゃんと実行されてないんじゃないの?
ブレークポイント設定してデバッグしてみたら?
>
>>590 > どういうメッセージが来てどういう反応してるか調べてみて
> 大きいデータならファイルマッピングがお勧め。用途にもよるが
ありがとうございます。ぜひファイルマッピングについて
勉強をしてみます。
あと、スクロールバーですが、すごくツマミの範囲が大きい(0〜1000000)のとき、
ツマミをマウスで移動させていくと、ある一定の位置で急に0に戻ってしまいます。
デバッグをしてもわかりません。スクロールバーの範囲を変えても特に
変化はありません。一体どうすればいいのでしょうか。
>>599 Winの仕様。
俺は範囲が大きくなったらスクロールの単位も大きくするようにして回避してる。
>>597 引数間違っていました。
解決です。
お手数掛けました。
>>599 たしか、16bitの頃の数字ひきずっててMFCだと16bitの
数値しか通知してこないいんだと思った。
メッセージハンドラの中でGetScrollInfo() 呼び出せば正しい数値が取れるはず
603 :
デフォルトの名無しさん :04/02/17 11:44
CFileのGetLength() ってDWORD返すけど、これって 最大でも2GB程度しか表せないみたいなんだけど、 これを超えるサイズのファイルの場合はどうなるんでしょう? 今って4GB程度のファイルはあるんじゃないですっけ?
DWORD で4GBでは。 って、VC++7のヘルプ見て見たらCFile::GetLength() はULONGLONG を返してた・・・
605 :
デフォルトの名無しさん :04/02/17 12:20
>>604 signed だと2GBになりません?
計算違いかも知れないけど。
VC++7だと拡張されてるみたいですね。
うちはVC++6なので。7に乗り換え必要なのかな。
DWORD は 4バイトですよね。
ULONGLONG は 8バイトでいいんかな?
typedef unsigned long DWORD;では APIは最初から対応してますけどね。NTFSがあったから当然だけど Seekをカレントからにして扱う数値が32bit超えないようにすれば 現行のものでも使えますし。
DWORDは unsigned でしたか。 失礼しますた。 Seek を使って、GetLength をオーバーライドできそうだけど うちはFAT32だからうまく試せるかな。
608 :
デフォルトの名無しさん :04/02/17 17:57
他人の書いたソースの修正を、VC++でやってます。 VC++触るのはこれが初めて。 ツールバーを1個増やすため、ツールバーを形成しているBMPを探し、 編集してコンパイルしたら、24bit環境のツールバーが真っ黒になりました。 なんでだろうと思ったら、 オリジナルのBMPが40KBなのに、編集して数を増やしたのに33KB。 Windowsペイントで開いて上書き保存しただけでは同サイズ40KBなのに、 キャンパスを広げて保存すると30KBに。 同じ非圧縮24bit BMPに種類があるんでしょうか・・・。
>>608 非圧縮BMPには基本的には種類は無いが比率的に32bitBMPなんてことは、、
VC++のバージョンは何?
610 :
デフォルトの名無しさん :04/02/17 18:49
>>609 あ、32bitか。
手持ちのグラフィックツールが対応してないから、
そのプロパティで24bitと出てただけだけ。
素直に、エクスプローラのファイルプロパティで見たら32bitでした。
32bit BMP保存できる道具、探さなきゃ・・・
ありがとうございました。
611 :
デフォルトの名無しさん :04/02/17 18:50
612 :
デフォルトの名無しさん :04/02/17 19:09
VC++6.0のリソースエディタで16色以上のBMPやアイコンを 編集することはできるんですか?
613 :
デフォルトの名無しさん :04/02/17 19:14
べつに、なんでもVCのものを使う必要も無いだろうに。
6は無理だな。7はできる
256色なら6でもできる。
616 :
デフォルトの名無しさん :04/02/17 19:47
VC7 ってのは VC++.NET 2003 のことなんですか? VS.NET 2003 academic を買おうと思ってるんですが、 商用利用の制限はあるんでしょうか? 通常のProfessional が10万でacademic が2万くらい なんですが、価格差がめちゃ大きいのでなんか 機能制限があると思うんですが、どういった違いがあるんでしょう?
お前、アカデミックの意味が全然わかってないな。 どこの学生だ? 頼むからプログラマにはならないでくれよな。
>>595 fflushで標準入力バッファクリアしてもだめでした
>>598 コンソールではなくてアプリケーションプログラム上に書いてます
ブレイクポイントを設定しても代入されてなくて
入力待ちにはならず素通りしてるようです
%dヤメロ
>>619 char a;
scanf("%c",&a);
にしてもだめでした
入力待ちにすらならずにそのままプログラムが進行してしまいます
コンソールプログラムのときはちゃんとできるんですけど
ウィンドウズプログラムのときは使えないのかな…
>>621 励ましの言葉ありがとうございます
もう少し考えてみます
623 :
デフォルトの名無しさん :04/02/17 21:35
>>618 ウインドウズプログラムのときは無理じゃないの?
右上のボタンで終了するのに、なんで
scanf で一時停止する必要があるの?
>>620 Winかよ!
スタートアップがWinMain で標準入力があるかよ
>>623 directXのフルスクリーンモードでやってるのでブレイクポイントとか設定してもうまくいかないし
ctrl+alt+deleteで切り替えるの面倒なんで
プログラムの怪しい挙動するところで一時停止させながら変化を見たいんです
ウィンドウアプリでは無理だったんですか
画面に文字表示するときもコンソールとはちがってデバイスコンテキストが必要になったみたいに
入力も複雑になってるんでしょうか?
>>624 そうですWinです
Winではできないんですか…
ほかの方法探してみます
なんかネタとも釣りともつかないレスで進行中のスレは ここですか? AllocConsole(); シレ、とか言ったら紙だろうか。
リモートデバッグするのが一番いいんじゃなかろうか。
例外処理 (初回) は test.exe にあります: 0xC00000FD: Stack Overflow。 というエラーがでたのですが考えられる要因としては どのようなことがあるでしょうか・・・? ボタンを押したらなるのですがブレークポイントをボタンのところに設置しても とまってくれないのです・・・。
スタックオーバーフローって書いてあるじゃん 無限再帰か巨大なスタック変数を取ったか
ありがとうございます。 ブレークポイント以前には何もないのですが、 ブレークポイント以降に60000個を配列に入れる動作があります。 そこが原因の場合、ブレークポイントでとまらずにStack Overflowするのですか?
ソース見てないしなんともいえないけど 60000個の配列をスタックに取ってるの? 型分からないからなんともいえないけど それでも6万ってのは多いな
>>632 ありがとうございます。
int型の配列でとってます。
というか、スタック溢れさせたら動かないから。 静的な配列はスタックを消費されるので、あんまりでっかいのは動的配列かなんかにした方が良い。 一時凌ぎ的な考えなら、プロジェクトの設定でスタックサイズ(「スタックアロケーション」)決められるから そこを適当に大きな数字入れとく。デフォルトが1MB
>>633 関数の入口でスタック上の領域は確保されるから、
その配列にアクセスしなくてもその後に確保される変数や
関数呼び出しなんかでオーバーフローするよ。
いい機会だから動的確保の仕方覚えた方がいいんじゃね?
あんましよくないけど、対処療法的な解決方法としては 関数から追い出してファイルスコープのグローバル変数にでもすることだ。
ひとまず動的確保について調べてみようと思います。
その後、
>>636 についてやってみます。
ありがとうございました。またよろしくお願いします。
638 :
デフォルトの名無しさん :04/02/18 13:25
ファイルから一行読み込んで、 その行が正しいフォーマットかどうかのチェックで、 WinXP Pro(日)では意図した動きをするのに、 Win2000Server(英)で同じモジュールを実行させた時、 チェックに引っかからないはずの行がチェックに引っかかってしまい、 チェックに引っかかるはずの行がチェックを抜けてしまいます。 どうしてこんなことになるんでしょうか?
2000には存在しないAPIを使っている。
>>639 ( ´ー`).。oO(それだとランタイムエラーにならないか?)
narannyo mushi sarerudake
新しいほうに無いならエントリだけ置けるけど 古いほうに無いのはエラーになる可能性高いっしょ
>>638 デバッグしてからこい。
アタリをつけるとすると、ランタイムの挙動の違いとなると環境によって変わることがあるな。
ロケールとか。少なくとも、デフォルトは違ってそうだ。英語版w2kserverなんて入れるんのもめんどいんで調べないけど。
645 :
デフォルトの名無しさん :04/02/19 09:40
Path Function なんかで使う、MAX_PATHが 260で定義されているんですが、これって 短すぎないですか? たしか、パスって 1024バイトまで許容されていたと思うのですが。 そのまま使って大丈夫なのかな? VC++6.0 + Win2K です。
647 :
デフォルトの名無しさん :04/02/19 09:52
パスよりもファイル名そのものの制限がきつそう
649 :
デフォルトの名無しさん :04/02/19 10:07
>>646 ファイルシステムっつーのは、FATとかNTFSとか?
Windows環境に限って言えばフルパスで
1024じゃなかったっけ? 少なくとも256というのは
ちっと短すぎじゃない? 大丈夫なのかな?
650 :
デフォルトの名無しさん :04/02/19 10:09
>>649 確かWin95だと256じゃなかったか?98もそうだった気がするが・・・
652 :
デフォルトの名無しさん :04/02/19 10:37
256ってそんなに短いか?
フロッピーディスクだとどうよ?
654 :
デフォルトの名無しさん :04/02/19 11:32
>>651 ども。そうみたいですね。
エクスプローラで試してみました。
ルートに254文字のファイルを作成することができました。
ウインドウスタイルを駆使して、タイトルバーの右側に表示 されるボタンを「最小化ボタンのみ」にしたいのですが、 どなたか教えてください。 (最大化ボタンと終了ボタンは無効化ではなく表示自体を消したい) よろしくお願いします。
656 :
デフォルトの名無しさん :04/02/19 17:13
研究室の仕事で、測定装置が吐き出したテキストを読み込んで、座標変換を してファイルに出力するプログラムを書こうと思っています。 仕様は、1行目に「X Y Z data」とかいうタイトル行みたいなのがあって、 2行目から数字データが並んでます。 問題なのは、データとデータの間が半角スペースで埋まっていることと、 (テキストエディタで見たとき各列が揃うようにスペースが入ってる、 測定装置屋が見栄えよくするためにやったと思われ) データファイルのサイズがバカでかいということです。 (データ行数が>300k行、ファイルサイズ>10MB) ド初心者なので勉強しながらやってますが、とりあえずwhileとgetlineで 読み込みのテストしようとしたところ、大方の予想通りdjになりました。 こーゆー巨大なデータを扱おうと思ったときはどうすればいいのでしょうか?
657 :
デフォルトの名無しさん :04/02/19 17:20
>>656 どういうエラーが出るの?
getline は STLかな?
658 :
デフォルトの名無しさん :04/02/19 17:22
>>656 エラーも何も(応答なし)→タスクマネージャーのお世話に・・・
気が短いのか
660 :
デフォルトの名無しさん :04/02/19 17:27
データベースにファイルのパスを格納するときには、フィールド長は260文字でいいのかな。 教えてエロい人。
661 :
デフォルトの名無しさん :04/02/19 17:29
俺は CFile 使ってるけど、数百メガのファイルを 読み込んでも別にエラーは起きてないけれど。 デバッグで1つ1つ動作を追って、どうして 暴走するのか確認してみては? 現状ではほんとにgetlineでエラーになっているのかどうかも 分からないし。
662 :
デフォルトの名無しさん :04/02/19 17:35
>>661 ネットで転がってたテキスト(おそらくどこかの大学の講義用資料と思われ)
みて作ってたので、CFile知らなかったです。
そのテキスト見てやってたんですが、ifstreamとか使ってるのが問題なのかな…?
VC初心者ならMFC使った方が簡単で無難じゃないかと思う
>>655 WM_NCPAINT のハンドラを作ったらどうか
665 :
デフォルトの名無しさん :04/02/19 17:57
>>662 とりあえずどこで永久ループしてるのか
デバッグしてみるのが吉。
実行するときに時々タイトルバーに[停止]って出るのはなに? これって何か駄目なことが起こってる?
>>655 つーか、たしかsysmenuの項目を抜くとボタンも消えると思った
>>667 pSysMenu->DeleteMenu(SC_MAXIMIZE,MF_BYCOMMAND);
だと無効化になるが消えない
>>655 無理だろ。
クローズボックス単体の指定がウインドウスタイルにない。
独立して指定できるのは最大化と最小化だけ。
システムメニューを消せば全部消えるし。
>>645 それってPath関連のAPIで使える長さの制限ってことだろう
UNCを使えば32k文字まで可能になる。
671 :
デフォルトの名無しさん :04/02/20 00:19
あの、ウインドウのハンドルを取得するのってどうするんでしょうか? ウインドウは1つしかなくて、 while (1) { //メインループ if (PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) { if (!GetMessage (&msg,NULL,0,0)) break; TranslateMessage(&msg); DispatchMessage(&msg); }else{ Loop(); } } で、Loop()から呼び出す関数の中で、 LRESULT CALLBACK WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); ↑このhWndと同じウインドウハンドルの値が欲しいです。 一応調べてみたんですが、GetParentとかGetWindowとか、いまいちよく分かりません・・・。
CreateWindowで作った時にHWNDを返してくれてるじゃん。
>>672 えーと、最初はそれをグローバル変数に入れてたんですが、
なんかグローバル変数がたくさんすぎて、管理ができなくなってきたので
減らそうと思って・・・素直にグローバルにした方がいいですかね・・・
あっ、今気づきました。Loop関数にハンドルを渡せばいいんですね。 ウインドウ作成を関数化してたから気付かなかった・・・ お騒がせしまつたスマソ。
675 :
デフォルトの名無しさん :04/02/20 01:37
質問でございます。 A →→→→→→→ ↓ ←←←←←←←← ↓ →→→→→→→→ Aをこの様に動かすにはどうすればいいでしょうか? なお、Aの座標は(0、0)とし、右端を(7,7)します。 端までくるとY軸に1つ下がります。 ようは、インベーダーの動きです。 自分なりに考えてプログラムを組んでみたのですが 合ってると思うのにちゃんとY軸に下がってくれません。 どうぞ、もし、よろしければお教え願います。
while(1) { int X , Y; if (X <=7) { X += 1; } if (X == 7) { Y -= 1; } }
あ、書き忘れましたが、Aの座標は(X,Y)という変数に格納します。 う〜ん。難しい。
678 :
デフォルトの名無しさん :04/02/20 01:58
__declspec(align(16))というものがあるのですがVC++6.0でコンパイルすると拡張なんたらが無効ですとか 怒られます。SPを当ててないからでしょうか???
>>676 実に興味深い。
・Yから1引くのか?
・Xが1→7まで1足していったら、次は7→1まで1引いていかなあかんて
if (X == ((1 - Y % 2) * 7)) Y++; else X += 1 - (Y % 2) * 2;
y%2 ? x==0 ? y++ : x-- : x==7 ? y++ : x++;
if(y%2==0) ++x; else --x; if(x==0 || x==7) ++y;
ナナメに動くのはありなの?
皆様ありがとうございます。 かなり参考になります! 感謝!ほんと感謝!
実際は、 float teki_x = -16.0; //敵キャラのX座標初期位置 float teki_y = 10.0; //敵キャラのY座標初期位置 while(1) { kiai = (int)teki_y%2; if(teki_x <=18.0 && kiai == 0 ) //X座標が右隅まで かつ kiaiが0ならば以下の処理 { teki_x += 0.1; if(teki_x == 18.0) //右隅まできたらY軸に1.0つ下がる teki_y -= 1.0; } if(teki_x <=18.0 && kiai == 1 ) //X座標が左隅まで かつ kiaiが1ならば以下の処理 { teki_x -= 0.1; if(teki_x == -16.0) //左隅まできたらY軸に1.0下がる teki_y -= 1.0; } if(teki_y == 0.0) break; } 色々な方法を試しましたが、なぜかX軸には動いてもY軸には動かない。。 ピクリともしません。このプログラムだめなんですかね・・ 完璧だと思うのに。。
あ、変数 kiai はint型で本文では宣言してあります。
y下がってる? 突っ込みどころ満載だが、とりあえず、 > kiai = (int)teki_y%2; yを float ではなく、int にしたらどうか
>>678 7からじゃないかな?
アラインメントの指定なので #pragma で代用するか取っちゃっていいのでは
>>688 あ、これはフロート型じゃないとダメポなんです。
ドットネットでコンパイルしてるのですが
エラーは起きないです。表示もされて動きもします。
ただ、Y軸にすんともくんとも動かないのです。
teki_y++;
とかやると動くのですが、中身のif文がおかしいのでしょうか。。
今日の18時までに提出だと言うのに。。。 かれこれ、この動きで2日寝ずに悩んでる。 プログラマーとしての才能が無いのは元より 理解力著しく欠けてるんだろうなぁ 周りの奴らは、この動きは30分で出来たのに。 私だけ、もうかれこれPCの前で30時間以上考え込んでる。。 あははぁ。もうダメポ・・・orz
if(teki_x >= 18.0) //右隅まできたらY軸に1.0つ下がる こうしてみたら?よくわかんないけど。
皆様、スレ汚しごめんなさい。・゚・(ノД`)・゚・
こんな低レベルな質問でスレの進行を妨げるのは良くないですね。。
もうプログラマになるのは諦めます。。
ありがとございました。(VΛV)カンシャ
って文を書いて、退学届けの準備をしてたら・・・
>>692 さん!動いた!下に動いたょ! \煤i゜∀゜)/ヤッタョ
うわーいうわーい!!
おめでたう。今、ちょこと調べてみたら
if((int)teki_x == 18.0)
でもいいのかな?
評価するときには型を揃えた方がよろしかも。
>>688 タンの言わんとしてるのもそれだね。
だからfloatは使うなとあれほど言ったのに……
よーし!あと13時間。がんばるぞー! 本当にありがとございます。 floatはすっごく嫌な型だって分かった! == を >= この一文字の差が30時間って重いね。。 ぁ、このスレの方は命の恩人です。。 ほんと、うれしいです・゚・(ノД`)・゚・ アド乗せて置いたので、インベーダー完成したら送りますよ〜\(*´∀`)/ 欲しい人はメッセ登録よろ〜♪
他スレより誘導されてきました。マルチポストご容赦ください。 複数のモードレスダイアログボックスにWM_PAINTなどのメッセージを送ろうと 考えています。今、親となるCWndにポインタ配列をメンバ関数として持たせ、 ここに登録したCDialogへのポインタに一つずつメッセージを送っていますが、 いまいち美しい方法とはいえないと思います。 SendMessageToDescendantsを使えばすべての子孫ウインドウに対してメッセージを 送ることができるようなことが書いてあったのでやってみましたが、いまいち うまくいきません。何かよい方法はないでしょうか?
ふつーに前者で良いようなきがするが…。
699 :
デフォルトの名無しさん :04/02/20 07:29
いままで6.0を使っていて .netの方にも手を出してみたんですが クラスウィザードってなくなったんですか? OnDestroyとか編集したい時どすればいいんですか
700 :
デフォルトの名無しさん :04/02/20 08:23
>>697 SendMessageToDescendantsでもできそうな気はするんだけど
WM_PAINTを送るなら pSubWnd->InvalidateRect(NULL) を
やらないと駄目なので、結局ポインタが必要になるのでは?
701 :
デフォルトの名無しさん :04/02/20 09:57
.netに変えてからCScrollBarのHScrollイベントができなくなりました。 なぜでしょうか?
ユーザーに開くファイルを選ばせてそのファイルに対して処理する。 という風にするにはどうしたらいいんですか?
703 :
デフォルトの名無しさん :04/02/20 10:27
どうも.NETと略されるのには違和感があるな。
704 :
デフォルトの名無しさん :04/02/20 10:31
m_Birth(edit)にyyyy/mm/ddの形で日付を入力すると誕生日を計算してm_Age(edit)に 出力したのですがCTimeSpenで年での出力がわからなかったので下記の用な方法でAge を計算しました。 この方法だと356で割っているだけなので閏年が無視されてやはり問題があると思うのですが 閏年を計算してくれる良い手はないでしょうか? if(m_Birth.GetLength() == 10){ time_t myTime; time(&myTime); CTime tm_Now(myTime); CTime tm_Birth; CTimeSpan ans; int y, m, d; y = atoi(m_Birth.Left(4)); //年を習得 m = atoi(m_Birth.Mid(5, 2)); //月を習得 d = atoi(m_Birth.Right(2)); //日を習得 tm_Birth = CTime(y, m, d, 0, 0, 0); ans = tm_Now - tm_Birth; m_Age = ans.Format("%D"); m_Age.Format("%d", ((atoi(m_Age)) / 365)); }
>>699 ここまで変わると覚えるの大変だよな
やりたい事が操作より先にわかってしまうだけに..
2002 -> 2003 もえらいかわっとるし
メッセージハンドラはクラスビューでプロパティ出してメッセージボタン
ひさしぶりに操作でヘルプ読むようになったよ。
>>705 普通に計算するのはダメ?
int u=(y%4==0 && y%100!=0 || y%400==0);
みなさんはWindowsアプリを作る際にwindowsx.hのマクロって使っていますか? いまWINAPIの基礎を勉強しているんですがマクロを使わずにやったほうがいいのか マクロを使ったほうがいいのか悩んでいます。 使わないほうが勉強になるとは思うんですが、マクロのほうが感覚的に覚えやすいのは確かです。 マクロに頼ると他の環境(VC以外)で困る、ということはあるんでしょうか?
709 :
デフォルトの名無しさん :04/02/20 15:12
windowsx.h って何? なんかMFCで見たことのあるような関数が並んでたが。
なつかしいな、windowsx.h まだあったのかよこれ
>>709 ,710
ってことは使わないほうがよさそうですね、、、。
>>711 俺はAPIじゃなくて、MFCだから参考にならんと思うよ。
windows.h なら使ったことあるんだが、どう違うんだろ?
713 :
デフォルトの名無しさん :04/02/20 15:37
>>711 マクロ集だしあんまり気にすることもない
いざとなれば自分で定義できるし。
しかしもう生でAPI使ってるほうが少数派なのかもしれんなあ
windows.hはWINAPIの関数を記述したもの windowsx.hはWINAPIで使うマクロを記述したもの だと思ってたんですが。 結局、使う使わないは個人の好き嫌いみたいですね。 とりあえず使わずに記述してやってることをしっかり理解することにしてみます。 ありがとうございました。
AdvancedWindowsくらいしか使ってる書籍みたことないな
閏年を考慮したものはVC++には無くやはり計算で出すしかないのでしょうか?
考えろ! 考えるんだ! 他の奴に出来てお前に出来ないはずはない!
>676 遅レスだがfloat(浮動小数点)は、 値によって誤差が発生するので == は基本的に使ったら駄目。
>676 #include "stdio.h" void main() { float n = 0.0; int i; for( i = 0; i < 10; i++ ) n += 0.1; if( n == 1.0 ) printf ( "sum:1.0\n" ); else printf ( "not 1.0\nsum:%f\n", n ); } こんなかんじかな? がんばれ。
#include <stdio.h> int main (void) { printf ("(′・ω・)<ショボーン\n"); return 0; } コマンドまたはファイル名がただしくないとでるんでつがどうしたら?
>>721 もまいが実行ファイルを作ったディレクトリに
移動してから実行シレ。
>698 >700殿 早速のお答え、ありがとうございます。そうですか、やはりポインタ配列は 持っていないといけないのですね。現在のまま進めていこうとおもいます。 どうもありがとうございました。
724 :
デフォルトの名無しさん :04/02/20 22:14
Winアプリからコンソールアプリを起動して、 その出力をWinアプリで取り込むには どうしたらいいのでしょう? VC++はコンパイル結果を IDEの方で取り込んでますよね?
STARTUPINFOをみれば分かるだろう
>>724 やったことないからしらんけど、
::ReadFile( ::GetStdHandle( STD_INPUT_HANDLE ),
(const char *)buf, strlen( buf ), &dwWritten, NULL );
とかでいけたりするんかも?
知らんけど。知らんけど。
727 :
デフォルトの名無しさん :04/02/20 22:29
ファイルの削除(ゴミ箱に入れる)をしたいのですが、::remove(filename); ですともちろんゴミ箱に入るはずなどなくいきなり消えてしまい困ってます。 ゴミ箱に入れる方法を教えてくださいませ。
SHFileOperation
>>715 > とりあえず使わずに記述してやってることをしっかり理解することにしてみます。
これは違うだろ。
どちらも同じAPIで、形態が関数かマクロかの違いに過ぎない。
ってゆーか普段関数のつもりで使ってるAPIのほとんどはマクロだろ。
今までマクロだったものが次のバージョンでは関数として提供されることもある。
逆は互換性の面から言ってまず無いけどさ。
関数を使えば「やってることをしっかり理解」だとか思ってたら大間違い。
むしろ何のためにマクロを定義するのかを考えれば使えるところではマクロを使う方が望ましい。
# しかし Long-Horn でごっそり入れ替わることがわかってる WinAPI をいまさら勉強するのってむなしいな・・・。
>724 CreatePipe() DuplicateHandle() ちなみに猫のはDuplicateHandle()の使い方が間違ってるから。
732 :
デフォルトの名無しさん :04/02/20 23:11
現在ネトゲを作ってるのですが、常に鯖を起動することは出来ないので HP上の奥底にテキストデータを用意して、そこにホストはIPを保存、 クライアントはIPを読み込むということをしたいのですが、 HP上のテキストを読み書きするにはどうすればいいのでしょうか?
>>732 そこらに転がってるクラスを使うか自作するか
734 :
デフォルトの名無しさん :04/02/21 03:14
よくアプリケーションでネット回線を使って最新バージョンの情報を取得するものがよくありますが、それはどうやるのですか?
ネットに繋いで、最新バージョンがあるか調べて 通知するなり自動パッチを当てるなりしてるだけですが?
736 :
デフォルトの名無しさん :04/02/21 04:09
>>735 どのようなAPIを使用して最新バージョンがあるか調べるのでしょうか?
Winsock APIを使ってHTTPなりFTP、もしくは独自プロトコルなりを使って サーバーに問い合わせてるだけ
738 :
デフォルトの名無しさん :04/02/21 04:37
739 :
デフォルトの名無しさん :04/02/21 05:17
次から次へとバグが出てくるので正直疲れました、さようなら…
>>739 サヨウナラ…。
でも目の前にあるバグだけは直してから逝け。
そうすれば見える世界も変わるかもしれない。
742 :
デフォルトの名無しさん :04/02/21 10:15
.NET2003だと void unco() { for(int i=0;i<4;i++) cout << "hoge"; for(int i=0;i<10;i++) cout << "hage"; } このコードのコンパイルできるようになりましたか?
iなんてどこでも使うんだから int i; void unco() { for(i=0;i<4;i++) cout << "hoge"; for(i=0;i<10;i++) cout << "hage"; } にすればいいよ。俺って天才!
>>743 サンクス。
そろそろVC6から移る時期かなー。
>>744 forループ内の関数で i使ってたら誤動作起こすべ。
>>744 void foo(vector<int> & a, vector<double>& b)
{
for (vector<int>::iterator it = a.begin(); it != a.end(); ++it) {
cout << * it;
}
for (vector<double>::iterator it = b.begin(); it != b.end(); ++it) {
cout << * it;
}
}
>>742 C++ だと、そんな事が出来るのか。。。
i のスコープが、ウァァァァァァン
>>747 今までのVSはint iの多重宣言だ、と怒られた
749 :
デフォルトの名無しさん :04/02/21 12:24
VC++のリソースエディタを使ってるんですが、ダイアログを作るときに、 コントロールを配置するためにツールバーが表示されなくなりました。 さんざん設定をいじってみたのですが、一向に表示されません。 解決する方法をご存じの方は教えてください。お願いします。 環境はVC++6です。
>>749 ツール > カスタマイズ > ツールバー
じゃなかったかな。
違うかも知れんけど。
>>749 コントロールのやつなら、
やはり
>>750 のツールバータブで
「コントロール」をチェックすると表示されますた。
752 :
デフォルトの名無しさん :04/02/21 12:34
>>750 表示されました。本当にありがとうございました。
>>745 デフォルトでは多重宣言になるよ。
しかし、この拡張機能だけをOFFにすることができる。
ほかにも、特定の警告をOFFに出来たりする。
便利。
つか、可能ならさっさと乗り換えた方がいいと思うが。
>>747 Cでも最新ならできるんじゃないのか?
>>753 >Cでも最新ならできるんじゃないのか?
ブロックの先頭以外の変数定義って駄目じゃ無かった?
>>754 C99で参照前なら先頭でなくても良くなった。
今手元に規格書無くて正確なソースが示せないが。
ま、Cスレネタだな。
VCなら.cでも以前から通るだろ?
>>753 多重宣言ってコンパイルエラーってこと?
stroustrupも認めている書き方なのに
デフォルトで使えないとはねぇ。
乗り換えたいけど金が厳しいのも事実。
VS,NET Pro 10万円は高いよー。
>>755 ( ・∀・)つ〃∩ ヘェ〜ヘェ〜
>VCなら.cでも以前から通るだろ?
通らない。
>>756 そう。
VC6だとMS拡張をOFFすれば、規格通りになったんだっけ?
まー、自社の旧Verとの互換性の方が大事だからデフォルトで拡張が有効なのは当然といえば当然。
ループを抜けた後でカウンタを参照するのに便利だからってことらしいんだけど、
ブロック先頭でしか宣言できなかったCからの流れだとそれが自然に出来てたから、その流れなのかも。
>>757 ( ・∀・)つ〃∩ ヘェ〜ヘェ〜
.cでも//コメントとか使えるのにな。
>>758 > .cでも//コメントとか使えるのにな。
// 形式のコメントは使えても、ソースの意味が変わらない (例外あるか ?) からいいけど、for(int i 〜) はプログラムの意味が変わってしまうことがあるからな。
static int i;
static void foo()
{
for(int i = 0; i < 10; i++){ 〜 }
if(i == 0){ 〜 }
}
常にコンパイルエラーになるなら、被害は少ないんだが...。
VC++でDDXだっけ?ダイアログの値を持ってくるやつ。 UpdateData(true); UpdateData(false); のやつで、グローバル変数のint配列に入れてSerialize(CArchive& ar)で読みたいのですが ダイアログのボタン押して配列にセットまではできたのですが、Serialize(CArchive& ar)から みると値が入っていないんですよ。 僕の考えではMFCのオブジェクト(○○Appクラスの唯一のオブジェクト)ができた時点の値しか みえてない。つまり、グローバル変数をプログラム実行中に変えたとしても Serialize(CArchive& ar)の中では変わってない。と考えてます。どうでしょう。 ちなみのダイアログベースのプログラムに仮想関数の実装でSerialize(CArchive& ar) を実装してます。
>>666 おながい。
これが出た後、1回終了して、
もう1度実行しようとすると、エラーが出て出来ないんですよ。
なぜ?
ちなみにVisual C++6.0で、ブレークポイントなんぞ入れてないし、 スケルトンプログラムを実行するだけで、ほんとーうに時々だけど出るのでエス。
>>761 VCじゃなくて、自作アプリケーションのタイトルバーに
[停止]って出るの? スケルトンでも?
>>763 あ、VCの方です。
いつもは「プロジェクト名 Microsoft Visual C++ [実行]」って
出てるところです。それの[実行]が[停止]になるとです。
スケルトンすらおかしいのかしらん。
デバッガから起動しておいて止まると何が問題なのか?
>>764 ビルド > 実行
で実行してる?
「デバッグの開始」で実行してないよね?
え?最近はじめたばかりなんでよー分からんのですが、 F7押したあとF5押してまつ。これだめ?
たまによくわからんけど混合モードとかで停止する事はあるね。 まあ気にしないで、またF5押せば先進むしw
>>767 F7 -> ビルド
F5 -> デバックの開始
ですね。
通常は「実行」で「停止」はなんらかの原因で
デバッグ中のアプリケーションの実行が停止
した状態です。
どういう原因で停止したか、までは分かりませんが。
デバッグ無しの実行の場合は
ビルド > 実行
もしくは ctrl + F5 です。
>>767 普段はデバッグ実行でいいんじゃないかと。
止まったらコールスタック表示してどの関数で止まったか確認すれば?
バグが発生してプログラムが思うように進まなくなると 彼女とHして現実逃避してます 全然進みません どうしたらいいのでしょうか?
現実逃避に使われる彼女が可哀想なので別れてください
あー、なんでなんだろう、もう1回スケルトン書き直してみようかなぁ。 それでも出るようだったら、気にしないようにします。 みなさんテンキュ!
エディットボックスの中で正しく改行をする方法を教えて下さい。 ダイアログの中にエディットボックスを作り、次のようにして初期の文字列を 設定していますが、改行コードが文字化けして上手く改行してくれません。 CEdit m_ctrlEdit; m_ctrlEdit.SetWindowText( "\nTest\nTest\nTest"); リソースエディタでエディットボックスのプロパティもいじり、 「スタイル」タブにおいて、「改行を許可」と「複数行」にもチェックを入れて あります。 誰かわかる方はいませんでしょうか?
\r\nで。
777 :
デフォルトの名無しさん :04/02/22 13:46
VC.NET2003のMSDNの日本語化の具合はどんなですか? VC6は、英語ドキュメントが多すぎて 辟易してるんですが。
>>777 日本語化されている部分とされていない部分があります。
>>777 進んでるところも有るが、全体としてはあんまり変わらない気がするな。
C/C++言語規約部分が英語のままなのはちょっとショック。
フィルタを日本語ドキュメントで検索してたら出てこなくて慌てた。
>>780 全文訳業者に発注したら?
金が出せるなら引き受けてくれるだろ
782 :
デフォルトの名無しさん :04/02/22 17:06
メニューに新しい項目を作ってそのハンドラを作ったのですが何故かハンドラが呼ばれなかったので 調べて見るとResource.hで自分が宣言したIDに割り当てられている数字が小さいのが原因でした。 × #define ID_TEST_PROGRESS 0 ○ #define ID_TEST_PROGRESS 131 ・ID(コマンド?)に割り当てられる数値の範囲が決まってると推測したのですが そのへんのいいドキュメントはありませんか? ・メニューを作るときにID名を決める、Resource.hを編集するという2stepを踏んでるのですが 正しくはどうやってメニューエディタでIDを割り当てればいいのでしょう? VC.NETを使っています。 よろしくお願いします。
>>782 VCではResource.hを自分の手で編集するというようなことはほとんどしないよ。
それを自動でやってもらうためのVCなんだし。
リソースのプロパティやなんかでIDを設定すれば適当な値が設定されるはずだが。
>>781 1万までは出すけど、それ以上は出せない。
ハァ? そんなんじゃVC++.NET Stdすらも買えないじゃねーかよ
>>783 わたしもそう思ってたし、そうできてた気がするんですが
なんで0が設定されるんだろう・・・_| ̄|○
>>782 ウインドウメッセージなら WM_USER + ???? で指定するんだけど、
メニューコマンドも制限あったかな?
>>785 翻訳に1万ってことだって。
文脈で分かりそうなものだが・・・。
>>788 一万程度でできるならさ
MSがやってVCに標準で付けると思わない?
文脈以前の常識の話
>>786 リソースID設定するときに、=0つけちゃったんじゃないの?
IDの話ついでに VC7には「シンボルブラウザ」というやつがないのかな? 見当たらないんだが
>>789 そういうもんかな。
俺はまたMSが嫌がらせでやってるのかといぶかしんでるが。(w
一人1万でもユーザー1万人くらいはいるだろ?
そうすると1億程度の収入にはなるはずだが。
MSDNの日本語化パッチを シェアウェアにしていいですか?
例えば C:\WINDOWS\デスクトップ\application.exe とパスを入力するとapplication.exeが起動するようにするには どうしたら良いでしょうか?
796 :
デフォルトの名無しさん :04/02/22 21:32
VC++でダイアログにコンボボックスを配置してプログラムを組みました。 コンボボックスのアイテムはSendMessageを使って追加するようにしました。 いざ実行してみたのですが、コンボボックスの右の▼のところをクリックしても 下にリストは出てきません。 どういう風にすれば、リストを表示できるのか教えてください。 環境はVisual C++6.0です。お願いします。
>>795 クリエイトプロセスAPIかウインエグゼックAPI
>>796 ちゃんとリストに追加されているかデバッグして確認しなさい
>>798 追加はちゃんとされてます。
上下ボタンを押すことでアイテムを選べますので。
800 :
デフォルトの名無しさん :04/02/22 21:49
>>796 ドロップダウンリストかな?
リソースエディタを使ってるなら、エディタで
コンボボックスの右側の▼を押すと、ドロップ
ダウンしたときのサイズが表示されるので、
このサイズを拡張すればいいはず。
>>800 あのインターフェースよくないよ。
と言うか、ディフォルトで適当なサイズが表示されるようになっていれば、こういう質問も減ると思うのだが。
>>800 できました。
コントロール自体のサイズを大きくしなければならなかったんですね…。
VBから移行したのでそんな概念全くありませんでした。
ありがとうございました。
803 :
デフォルトの名無しさん :04/02/22 21:57
>>801 それは同意。
初め、俺もかなり悩んだ。
ダイアログエディタ上でコンボボックスの高さは変えられないんですか? フォントに依存?
>>804 普通に変えられるだろ?
フォントの差異によってサイズに影響が出るのはどのコントロールもおなじ
パスにc:\\windows\デスクトップ\test.txtを入力すると C:\Windows\デスクトップ\Vc++\Filerun\main.cpp(31) : warning C4129: 'テ' : エスケープ シーケンスとして正しく認識されませんでした。 と出るんですがこれはどういう意味でしょうか?
\が1つ足りん
>>806 Cの基礎
「エスケープ文字」について調べてみよう
>>807 出来ました。ありがとうございます
>>797 すいません。お礼を言うのを忘れてました。
ありがとうございます。
CreateProcess(NULL,"notepad.exe c:\\windows\\デスクトップ\\test.txt",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi); こう記述するとc:\\windows\\デスクトップ\\上のtest.txtがnotepad.exeで起動するわけですが 普通の実行ファイルだった場合(例えばsleipnir.exe等)はどうすればよいですか?
>>810 ん? そこまで分かってってなんでワカランの?
CreateProcess(NULL,"sleipnir.exe",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
フルパスで指定汁
>>810 起動するだけならこちらの方が分かりやすいだろう
CString AppStr = _T("C:\\Program Files\\Internet Explorer\\iexplore.exe"); //パス
CString OptionStr = _T(""); //起動オプション文字列
ShellExecute(m_hWnd, _T("open"), AppStr, OptionStr, NULL, SW_SHOW);
ShellExecuteは実行ファイルパス以外なら関連づけを元に設定されている
実行ファイルでそのファイルを開く。URL(
http:// )ならブラウザとか。
便乗質問すいません。 _T って無いとまずいんですか
_Tはウニコード以外だとプリプロセッサにあぼーんされる。 Shift_JISだとイラン
>>813 すいません。MFCはあまり使い方等が分からないもので…。
>>812 フルパスってことは
CreateProcess(NULL,"c:\\windows/デスクトップ/sleipnir.exe",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)
と指定しろってことですか?実行しても無反応だったのですが・・・
釣り?
>>816 CreateProcessの戻り値くらい見ろよー。
"c:\\windows\\デスクトップ\\sleipnir.exe"
>>818 はぁ〜出来ました。お騒がせしました。
すいません最後に…ショートカットはどうすれば良いでしょうか?
"c:\\windows\\デスクトップ\\sleipnir.lnk"では無理ですた
>>819 ShellExecute だと動くんでねーのか?
やったことは無いけど。
>>814 _Tマクロは文字コードの互換性をもたせるために付けておくもの
コンパイルされたときに適切なコードの方にしてくれる
もし将来ユニコードでコンパイルし直す必要が出たとしても
コードの書き直しをする必要がなくなる
Tの付く文字列も同じ
TCHAR < CHAR
LPTSTR < LPSTR
だからCreateProcessなんてややこしいもの使わずにShellExecute使えよ 必要ないんだろ?
>>820 、822、823
アドバイスありがとうございました。
本当にお世話になりました。
822→821ですた
>>795 のコードだと CreateProcess がメモリーリークしていそうな予感。
>>822 _Tマクロを律儀に使ってるヤシって居るのか?
うにこーど 使うことないしなー どんなときに使うのよ
プロのPGで_Tマクロを使わない奴は、明らかに低レベルPGだろ。
んなぁこたぁない。
そもそも_Tを使う場面のほうが限られすぎてるな
>>828 そういうキミこそ使うべき。そう思っていて適当にやっていると、ある時既存のコードを
ユニコードでコンパイルし直す必要が出て困ることになる。プロジェクト自体は使わない
としても、部分コードを使い回すこともあるだろうし、全体にきれいなコードを書くクセ
をつけておいた方がベターだと思うよ。
別にそれがあったからって問題になるわけじゃなし、文字列に_T付けるだけなんだから
クセにして統一しておく。
>ある時既存のコードをユニコードでコンパイルし直す必要が出て困ることになる そんなこと絶対にない。 むしろVCやWindowsの中途半端なunicode対応による弊害の方がずっと大きくなる。 unicode対応が必要なら専用の処理をきっちり書き上げるべき。 〜W関数を使うかどうか程度の差しかないんだから。
「絶対にない」 と言い切ってるところがすごいな… 将来が見えるのか… > 〜W関数を使うかどうか程度の差しかないんだから UNICODE, _UNICODE 定義すれば、 勝手に 〜A 〜W を変えてくれるんだけどなぁ… ライブラリなんかは、将来どうなるかわからんのだから 特に _T( ) で囲っておいたほうが良いだろうな。
そもそも_T()しておいてコンパイルターゲット変えただけのアプリに意味があるとは思えないけど 実際どうなんだろう
最近は95/98系非サポートでもいいのが増えてきたから UNICODEビルドを多用してるな。
838 :
デフォルトの名無しさん :04/02/23 10:14
Unicode <-> Shift-JIS の変換APIってあるんだっけ? 内部でUnicodeで処理しても、出力はShift-JISにしたい ってことはわりとあると思うんだが。
あるよ
あるっつったのはAPIの方ね WideCharToMultiByte() と MultiByteToWideChar()
842 :
デフォルトの名無しさん :04/02/23 12:36
main関数とclassの宣言・定義を別のファイルに分けて書きたいととき、 ヘッダファイルの中身&各ファイルのプリプロセッサ制御文はどうすればいいのでしょう? 誰か教えて
844 :
デフォルトの名無しさん :04/02/23 13:57
vbとvcの違いを教えてくれ
847 :
デフォルトの名無しさん :04/02/23 15:04
現在ニューヨーク在住で、 IT関連で職を探しています。 面接の時、マイクロソフトの 純粋なプログラミングでアプリケーション 作ったことありますか? と、聞かれ… はい、MFCを使ってと答えたら怒られました。 どういうことですか?
848 :
デフォルトの名無しさん :04/02/23 15:09
int データを char に変換して出力したいのですが、どう書いたらいいでしょうか?
「API直書きでWindowsアプリを書いたことがあるか」 という意味だったと思われ。
int i; (char)i;
>>847 その質問はした香具師もよく分かってなさそうだな
やめて正解では?
>>847 ,849
pure=混ざりもの無し=ライブラリ無し=WIN32API only ってことですかな。
ふーむ。
MFCも純粋なMS製ライブラリだけどな。 「MSの純粋なプログラミング」なんて初めて聞く表現だ。
>>847 つっこんで欲しかったんじゃないの?
・・・んなこたーない
855 :
デフォルトの名無しさん :04/02/23 16:48
顧客からの要求で不明瞭な表現があった場合、確認できるかどうか を問う面接だった可能性も無いことも無いけど そうなるともうこのスレというか板の範疇では無いね。
857 :
デフォルトの名無しさん :04/02/23 17:19
VC++ .NET 2003について教えてください。 例えば、FormのWndProcをオーバーライドする場合、Form1.hとかに 直接void WndProc… とか書かないといけないのでしょうか? デザイナとかから簡単にはできないのでしょうか? あと、VC++6でいうところのClassWizardみたいなのはないのでしょうか? メッセージのやりとりとかすごく不便…
858 :
デフォルトの名無しさん :04/02/23 17:35
カーソルの状態変化をリアルタイムに取得→描画するソースを 作ったのですが同じカーソル画像(Arrow)しか描画できませんでした VC++.NETのSDKです hCurNow = GetCursor(); bRet = GetIconInfo(hCurNow, &iconInfo); //略 ここで座標をちょこちょこいじった if (iconinfo.hbmMask) DeleteObject(iconinfo.hbmMask); if (iconinfo.hbmColor) DeleteObject(iconinfo.hbmColor); DrawIcon(hdcMem, x, y, hCurNow); 上記ロジックをぐるぐる回して描画してるのですが、 「I」な表示とか「+」な表示が出てこないのです どなたかヒントを授けてくださいませんかm(_ _)m
>>836-837 意味があるって、だったらUNICODEビルドだけでよくない?
まったく同じで使用APIが変わるだけのアプリにどんな意味が?
Unicode対応については各自AdvancedWindowsでも読んで納得しておけ。 絶対にUnicodeが必要ない奴は使わなくてもいいんだからそう熱くなるな。
861 :
デフォルトの名無しさん :04/02/23 21:03
Debug実行すると 'C:\WINNT\system32\NTDLL.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません という感じの情報がたくさん出てTRACEの出力が見にくいです。 デバッグ情報を見やすくするよい解決方法はないでしょうか?
かなり環境依存の話になってしまいますが、解る方がいたら教えて下さい。 VC5.0においてDLLをデバッグするとき、プロジェクトの設定において 「追加するDLL」に特に指定しなくともシンボル情報を読み込むDLLと読み込まない DLLがあります。シンボルがなければブレークポイントが設定できないので、ヘルプ の記述通りにすべてのDLLを明示してシンボルを読み込むようにしてやると、今度は ブレークポイントが無視されてしまいます。これではまともにデバッグできません。 しかも、解らないのは、デスクトップとノート、二つの機体にVCをインストールして 開発を行っていますが、デスクトップの方は特に明示せずともすべてのDLLのシンボル 情報を読み込み、デバッグ作業に問題はありません。ですが、同じプログラムを 中間ファイルを含めてノートにコピーしてデバッグを行おうとしても、最初に必ず 一度「全てのファイルを開くことはできません」との警告が発生し、他の作業は 問題なく行えるのですが、シンボルは読み込んでくれないのです。リビルドを 何度か繰り返してみてもダメでした。 わかりにくい説明で申し訳ないのですが、どなたか助けてください。
>>861 シンボルファイルをインストールする
詳細はヘルプから「システム デバッグ シンボルのインストール」を参照
>>862 同じディレクトリにpdbファイル置いてもだめなの?
>>857 その辺のほとんどの部分はプロパティウィンドウに
移った模様。プロパティを隅々まで見れ
>>863 インストールしてみましたb
'C:\WINNT\system32\NTDLL.DLL' を読み込みました。シンボルが読み込まれました。
に、変わりました。
これが邪魔でTRACE等のデバッグ情報が見にくいです。
こいつをフィルタして表示しないようにしたいです。
もう少しキーワードプリーズ。
これもかよ・・右クリックでいちいち消しては
869 :
デフォルトの名無しさん :04/02/24 15:24
>>865 ありがとです
そうおもってプロパティウィンドウとクラスビューもチェックしたんだけど
オーバーライドとメッセージのところに何も表示されないのはなんでなんだろう…
ただの1行も表示されたことない
何か表示される/されないの条件があるんでしょうか?
プロパティウィンドウの上にボタンがあって、 プロパティ・オーバーライド・イベント が切り替えられなかったっけか?
ゴメン。 アホだ。 それはもう表示できてたのね・・・。 それでも見れないのか・・・。 ちゃんとクラスを(あるいはフォームエディタでフォームを)選択してから表示してる。
872 :
デフォルトの名無しさん :04/02/24 15:56
>>870 ,871
ありがとです。
書き忘れてたのですがFrameworkを使ってます。
プロパティやイベントはちゃんと追加・変更できます。
クラスビューやオブジェクトブラウザでForm1とかを選択すると
プロパティのところにオーバーライドやメッセージのボタンがでます。
これを押して表示される画面が常に真っ白なのです。
もしかしてFrameworkではオーバーライドとかは手動で追加・削除が
基本でしょうか?(MFCではちゃんと表示されました)
プロファイル、ってデバッグとリリースのどちらで行うべきでしょうか? インクリメンタルリンク時に、プロファイルが出来ないのは何故でしょうか?
ボタンにビットマップとテキスト両方表示させたいのですが、うまくいきません。 アドバイスお願いします。
>>874 テキストをビットマップでのせたらダメなんか?
>>874 メモリDCにビットマップを展開してその上からDrawTextとかで文字書いて
それをボタン上に表示させる。
今度から
>>1 に 「うまくいきません」は放置っていうの付け加えませんか?
878 :
いずみんせんせぇ :04/02/25 01:58
こんばんはぁ。VC.NETで常駐プログラムを作ったのですが シャットダウン時にアプリケーションを終了するプログレスバーのウィンドウが 表示されてしまいます。シャットダウン時にウィンドウを表示させない方法教えて下さい〜 OSは2000です。
WM_QUERYENDSESSIONとかそんなの
もしかしてWindow作ってないとか? 見えないウィンドウでメッセージ受けられるようにして WM_QUERYENDSESSION や、WM_ENDSESSION 、WM_QUITなどに 反応すればいいと思う
881 :
いずみんせんせぇ :04/02/25 02:17
880 そぉなんですぅ。 ウィンドウ非表示なんです。
882 :
いずみんせんせぇ :04/02/25 02:19
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: OnCreate(hWnd, (LPCREATESTRUCT)lParam); break; case WM_TIMER: OnTimer(hWnd, wParam); break; case WM_DESTROY: OnDestroy(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
うまくいきません
カメラからイメージをキャプチャして表示するプログラムを作りたいのですが、 まったくわかりません。 よいサンプルはないでしょうか?
>>886 CCamera camera->Caputer( "富士山" );
CFile file << camera;
>>887 気持ちはわかるが
Caputerってなんだよ
せっかくネタ入れるならスペルくらいチェックしろよ
>>886 DirectX9 SDKのDirectShowのサンプルが一番楽。
>>889 サンプル見ました。
一番簡単そうなのが、PlayCapっいうのなんですが、
コンパイルが通りません。
strmbasd.libが開けないと言われます。
strmbasd.libが開けない問題は解決できたのですが、 エラーが増えました。 外部シンボル何たらは未解決です、といわれます。 どうしたらいいでしょう?
892 :
デフォルトの名無しさん :04/02/25 18:37
他のウィンドウを操作したいので、FindWindow("クラス名", NULL);でハンドルを取得しました。 しかし、目的のプログラムが起動してないときは戻り値がNULLとなると思うんですが、 そこがうまくいきません。 HWND hHandle hHandle = NULL; hHandle = FindWindow("#32770", NULL); if(hHandle == NULL) DestroyWindow(hWnd); //hWndはプログラム自身です。 else SetWindowText(hHandle, "jacked!"); break; こういう風に書いたのですが、どこがおかしいのでしょうか。 知恵を貸してください。 環境はVC6です。お願いします。
Caputerはほんとうにあるんだ!
>>892 #32770がいくつあると思ってんだ
Spy++で観察することをお勧めします
>>894 なるほど…。常駐ソフトのタイトルがjacked!になってました…。
このようなプログラムのハンドルを取得したいときはどうすればいいのでしょうか。
ウィンドウタイトルは不定なのでFindWindow以外に何か使えばいいのでしょうか?
>>895 ちょっと複雑になるが、普通のWindowを不可視状態で作り
それとやり取りするというのを昔やったことがある。
>>895 具体的に対象は何であるか(不定でない要素が何か)を書くと良いかも
あとは、、不可視のコントロール貼り付けて #32770の子ウィンドウを順番にEnumWindowsして 貼り付けたコントロールのタイトルを探すとか
899 :
デフォルトの名無しさん :04/02/25 20:48
はじめまして. CreateWindowで作成したエディットコントロールの文字カーソル(「|」こんな)の位置を取得したいのですが, どうすればよいのでしょうか? 教えてください.
GetCaretPos()かな、使ったこと無いけど
ありがとうございます.うまくいきました. POINT構造体で結果が返ってきますが,X,Y座標はそれぞれフォントの幅と高さで割ることで 列と行が取得できました.
>>901 スクロールやプロポーショナルフォントのときはどうする気だ。
MFCなら DWORD CEdit::GetSel() を使うんだが・・・
EM_GETSEL SendMessage( (HWND) hWnd, // handle to destination window EM_GETSEL, // message to send (WPARAM) wParam, // starting position (LPDWORD) (LPARAM) lParam // ending position (LPDWORD) ); MFCじゃないときはコレ使うのかな?
905 :
デフォルトの名無しさん :04/02/25 23:31
いままで VC++6.0使ってて、 ついに VS.NET 2003 を買ったんだけど、 今回のMSDNって英語ドキュメントでまとめられている 部分ないのかな? なんか英語と日本語が混在してて 情報も重複しているみたいで分かりづらいんだけど。
いままでもそうだったと思うが
907 :
デフォルトの名無しさん :04/02/25 23:59
>>906 VC++6.0のときは
プラットフォームSDK
と
Platform SDK
で完全に分かれていたと思うんだけど。
新しいのは例えば
MSDNライブラリ > グラフィックおよびマルチメディア
> グラフィックおよびマルチメディア
MSDNライブラリ > グラフィックおよびマルチメディア
> Graphics and Multimedia (英語)
と深い階層で別れている。しかも「VC++ドキュメント」で
フィルタをかけると、英語の方が消えてしまう。
日本語の方は全部翻訳されていないのだから、
英語ドキュメントも含めてくれないと困るのだが。
>>907 "DevLang" = "C" OR "DevLang" = "C++" OR "Product" = "VC" OR "DocSet" = "PSDK" OR "DocSet" = "NETFramework" OR ("DocSet" = "kbmsdn" AND "ProductVers" = "kbVC700") AND ("Locale"="kbJapanese" OR "Locale" = "kbEnglish")
Visual C++フィルタを変更して、英語も含めたら
英語ドキュメントも表示されるようになりますた。
909 :
デフォルトの名無しさん :04/02/26 06:37
エディットボックスにテキスト入力してそれを txtで保存したいんですけど、参考になるサイトありませんか? おねがいします。 あと、ダイアログベースで作っています
アプリケーションウィザードでSDIまたはMDIを選択。 ビューの種類にCEditViewを選択。 OKをクリック。 完成。 ダイアログベース?知らん。
80bit/64bitの演算精度の切り替えってできますか? あと丸めモードの切り替えはできるのでしょうか? VC熟練者の方おねがいします.
>>909 GetWindowText
fprintf
913 :
デフォルトの名無しさん :04/02/26 08:36
>>909 GetDlgItemText
でテキストを取得した後
fputsでも使って書き出しとけ
>>911 CPU,コンパイラ次第じゃないの?
あと、それを汲み取ってくれるOS
なんでシラネ
915 :
デフォルトの名無しさん :04/02/26 11:46
>>858 です
このマウスポインタの、カーソル変動について
どなたかヒントだけでも下さいませんか(ノT.Tノ
DrawIcon(hdcMem, x, y, hCurNow); なんでこんなことしてんの? しかも、カーソルのイメージ削除してるし
>>911 >80bit/64bitの演算精度の切り替え
Microsoft ランタイム ライブラリは数値演算コプロセッサ (またはエミュレータ) の
デフォルトの内部精度を 64 ビットに設定します。プログラムを LIB/FP10.OBJ と
リンクすることでこのデフォルトをオーバーライドし、チップ (またはエミュレータ) の
精度を 80 ビットに戻すことができます。FP10.OBJ は、リンカのコマンドラインで
LIBC.LIB、LIBCMT.LIB、および MSVCRT.LIB より前に指定する必要があります。
>丸めモードの切り替え
_control87 / _controlfp
char文字列をstringへ変換したくて string str = pChar; のようにしたところ、charが16文字以上の場合、 失敗してしまうようで困っています。 (VS.net 2002を使っています。) どのように変換すればよいのでしょうか?
920 :
デフォルトの名無しさん :04/02/26 14:43
すみません、ちょっと教えて下さい。 VC++で簡易データベースソフト、入力した各項目データを ファイルにセーブしたり出来る、追加修正削除も可能なソフトを 作ろうと思っています。 何処か参考になる様なページ、サンプルソースは有りませんでしょうか?
>>919 その方法でも16文字以上は無理なんです・・。
こんなことを聞いてよいものか、ちょっと申し訳ないようなことなんですが、 ダイアログのリソース作る時に使う、 ボタンとかエディットボックスなどの基本的なコントロールが入った ウィンドウが、なにやら知らないうちに消えてしまいました。 どこを見ても表示/非表示設定などが無いっぽいのですが、 どうしたら表示できるかご存知の方がおられましたら教えてください。 visualc++ 6.0を使っています。。よろしくお願いします。
923 :
デフォルトの名無しさん :04/02/26 15:22
>>921 ほんとかよ?
ちゃんとヌルターミネートしてる?
>>922 ダイアログ編集画面を表示した状態で
ツールバーのあたりを右クリックして
[コントロール]にチェックを入れる。
すいません、何も無い所で右クリしたら出てきました。
>>924 入れ違いだったみたいですいません。
ありがとうございました。解決できました。
>>923 してます。
string st;
char c[17];
for(int i = 0; i <16; i++)
{
c[i] = 'a';
}
c[16] = 0;
st = c;
↑このようなコードでstに値が入らないんです。
include文とかも含めてテストプログラム全体をアップしてみろ ちなみにstの中身はどうやって確認した?
printf( "%s\n", st ); ってやってないか? printf( "%s\n", st.c_str() ); だぞ
#include <stdio.h> #include <iostream> using namespace std; int main() { string st; int num = 16; char c[17]; for(int i = 0; i<num; i++) { c[i] = 'a'; } c[num] = 0; st = c; return 0 ; } です。 確認は、returnの直前にブレークポイントを入れて 自動変数を見ています。
printf( "%s\n", st.c_str() ); で出力してみれ
つーかcが17に固定なのにnumを変更する意味があるのか。
char c[17];の次の行に、 char d[1000];を入れたら動きまつか?
>>932 あれ、確かにできてますね・・。
デバッガでは、単に文字量の違いから表示が変わっていただけみたいです。
バグを探していて、その原因がstringの代入ミスだと思っていた
のですが、おかげさまでそうではないことが分かりました。
ありがとうございました。
釣りだったんじゃないだろうな・・w
まあ、初心者は結構あのウォッチ画面にはまるんじゃないだろうか。 どうしても出力したくなきゃ、メモリの方で文字列バッファの先頭アドレスぶちんこんで直接見た方が良いんだよ。
MFCでアイコンをプッシュボタンに表示したいのですが、アイコンが縮小?されて表示されてしまいます。 (アイコンファイルをプレビューで見たサイズより小さく表示される) 拡大して表示する方法はあるのでしょうか?
>>938 ビットマップにすると良い
それで初期化でこんな感じにする
m_Bitmap.LoadBitmap(IDB_BITMAP1);
((CButton*)GetDlgItem(IDC_BUTTON1))->SetBitmap(HBITMAP(m_Bitmap));
940 :
デフォルトの名無しさん :04/02/27 03:20
最近VS.NETを入手していじってみたんだけど、フォームのコンポーネントの 外観がかっこわるい。Win3.1から変わってないような感じ。 最近のWinXPとか、MacOSXみたいなカコイーコンポーネント無いですか? できれば無料で。
WinXP は、かっこえぇのかッ……!?
942 :
デフォルトの名無しさん :04/02/27 03:58
VS.NETがコントロールの外観を決めていると勘違いしているアフォを発見!
おくれてすいません。 ありがとうございます、今からやってみます
割れとか言う答えをしそう
我、OS選ばず
♂を選ばず。 = 「やらないか?」 _| ̄|○ ォェ…
VC++5スタジオ使ってますが、ヘッダーファイルに変数とか配列をいっぱい 宣言するとコンパイルエラーにはならないが、起動しても瞬間に終了してしまいますが これは、正規版を買えということでしょうか?
949 :
デフォルトの名無しさん :04/02/27 23:54
VC++5スタジオ???????
( ゚Д゚)ハァ?
>>948 どういうバージョンにしろそういう制限はないよ
正規版じゃないとウィルスしか作れません
朝暇だから、携帯からC++勉強できるとこってない?
>>955 そんなサイトがあるのかどうかは知らないが、
....本でも読んでりゃ良いじゃねーか
本で勉強するという感覚のないのが最近ちょっと多いね
電車だから、今日みたいな休日は空いてるから本でもいいんだけど、 平日は満員で本なんか読めないんだよ。
>>958 そんな満員の状態だと携帯も見れんと思うが?
好きなサイト、コピペして 携帯にメールでも送っとけ
なんとなく
>>958 の人物像を想定できる俺はスーパーハカー
>>962 高い。
やっぱPCからメールで送るのが一番良さそうだな。
>>962 >C++の本はでかいだろ。
お前には俺の言わんとすることが理解出来んようだな。
屑だな。
>>955 印刷しとけ
紙1枚ぐらいなら邪魔にならないし紛失しても問題ないだろ
Visual C++って、どこがvisualなんですか?
Windowが
なんかすげー頭悪そう
958は莫迦。 そういう性格じゃプログラムなんか止めとけ。 工房か?
>>971 >966は密着状態で携帯電話を使用するなと言いたいわけだ。
そんなことも判らないお前はプログラマにはなれても上流工程には一生近づけないよ。
さて、頭の悪い人はほっといてそろそろ新スレですね
おれのは !? でかいぜよ?
978 :
デフォルトの名無しさん :04/02/29 01:18
case WM_PAINT: { HDC hDC; PAINTSTRUCT ps; LPCSTR str = "test"; hDC = BeginPaint(hWnd, &ps); SetTextColor(hDC, RGB( 0, 0, 255)); SetBkMode(hDC, TRANSPARENT); TextOut(hDC, 100,100, str, lstrlen(str)); EndPaint(hWnd, &ps); } return 0L; ↑はウィンドウプロシジャ内のメッセージのケース文なんですが、 この「中カッコ」を外すとコンパイルできないのはなぜですか? 「strの初期化がcaseラベルによって行われませんでした」 というエラーがでて、次のcase文のところで引っかかってるみたいです。。。
>>978 caseラベルの中で変数の宣言はできまへん。
switchをC++で使うときのマンドクサイところ。
本当は出来ないけど中カッコでcase内全部囲っとけばできるってことなんですかね。 謎な仕様ですね。。。 助かりました。ありがとうございます。
>>980 { } で囲むと、変数の生存範囲が
{ } の中に限られるので、大丈夫なんでしょう。
こういうスタイルが適切かどうかは分からない。
普段はMFC使ってるから。
VC.Net だとこんなコードも通ってしまう分けなんだが。。。 switch (int a = 1) { case 1: int b = 2; }
なるほどそういうことですか。 そういうもんだと覚えとくことにします。 ありがとうございました。
C++ の言語仕様だと変数の書ける所だと殆どの所で変数定義も出来るらしい。 そんな事を厨にやられた日にゃ。(ry
>>983 次のようなコードだと n = 2 のときに
宣言無しで a が使われちゃうから
問題なんでしょう。
switch ( n )
{
case 1:
int a = 0;
cout << a;
case 2:
a++;
cout << a;
}
>>985 error C2360: 'a' の初期化が 'case' ラベルによって行われませんでした。
>978 ちゃんとエラーメッセージを読め。読みとれ。理解しようとしろ。 >「strの初期化がcaseラベルによって行われませんでした」 別のcaseラベルを通ったときでも、そこより下の位置なら、 strを参照することができてしまうが、初期化部分を通らないから初期化できない。 >982 その初期化式の下に一つでもcaseを作れば、直ちにエラーになる。 って、もう書かれたか。 ええぃ埋めついでに書き込んでやる。
switch (foo) { int bar; case 0: { int bar = foo; } break; default: bar = foo; break; } /* 実はcで問題ないコード。 */
>変数の書ける所だと殆どの所で変数定義も出来るらしい。 これってC++じゃなくても最新のISO Cでは出来るようになったとか 噂を聞いたんですが、本当ですか?
int i( int j( A ? B : C ), j += 10 );
993 :
デフォルトの名無しさん :04/02/29 17:57
記念カキコ v(^-^=)
埋め立て
>988 switch()の外でbar使いたいんですけど...
>990 Yes.
997
998
999
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。