■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

★初心者にVisual C++を教えるスレ★ Part9
751 名前:デフォルトの名無しさん :04/01/14 11:45
プログラムが書いてあって、ここを埋めてくださいとかいうテスト
全然分からない。

752 名前:デフォルトの名無しさん :04/01/14 12:05
>>750
nkf32.dllとかどうよ?
http://www1.ttcn.ne.jp/~kaneto/dll/nkf32dll.html

753 名前:デフォルトの名無しさん :04/01/14 15:42

CD Manipulator みたいにメインウインドウの外側に並置
されるウインドウが作りたくて、とりあえず、
CWnd派生クラスを作り、CView派生クラスのOnCreateで

CWndInfo m_wndINFO;
CString strWndClassName = AfxRegisterWndClass(NULL);
m_wndINFO.CreateEx(WS_EX_LEFT, strWndClassName, "インフォメーションウインドウ",
WS_VISIBLE,
CRect(0,0,0,0), NULL, IDW_EDIT_INFOWINDOW);

このようにして作成しようとしたんですが、CreateExが
失敗を示す 0 を返すんです。何が悪いんでしょう?

CD Manipulator をspy++でみると、並置ウインドウはやっぱり
子ウインドウではない形で存在してるんで、親ウインドウは
NULLにしなくちゃいけないと思うのですが。

754 名前:デフォルトの名無しさん :04/01/14 16:44
>>753
CStringを渡しているところが怪しい気がする。
そこはLPCTSTRじゃないの?

755 名前:デフォルトの名無しさん :04/01/14 17:00
>>754
CStringはLPCTSTRとそのまま置き換えられる
const修飾子付き→読み出し用

756 名前:デフォルトの名無しさん :04/01/14 17:13
>>753
子ウィンドウでもないのにIDもないだろ。
>>754
CStringはoperator LPCTSTRを持っているので心配要らない

757 名前:デフォルトの名無しさん :04/01/14 19:36
WM_LBUTTONDOWN、WM_LBUTTONUP以外で
マウスのボタンが押されているかどうか取得する関数はないでしょうか?

758 名前:デフォルトの名無しさん :04/01/14 19:59
>>756
どもども。できますた。
IDはNULLじゃないといけないのですね。
最初、NULLにしてもspy++で「無効なウインドウ」になるので
試行錯誤してみましたが、CWnd派生クラスのインスタンスは
ヘッダの方で public または protected で作らないといけないようです。
OnCreateの中で生成してはいけないようです。

// test4view.h の protected
CWndInfo m_wndINFO;

// test4view.cpp の OnCreate
CString strWndClassName = AfxRegisterWndClass(NULL);
m_wndINFO.CreateEx(NULL,
strWndClassName, "インフォメーションウインドウ",
WS_OVERLAPPEDWINDOW,
CRect(0,0,0,0), NULL, NULL);
m_wndINFO.ShowWindow(SW_SHOW);
m_wndINFO.UpdateWindow();

とりあえず、これで表示できました。




759 名前:デフォルトの名無しさん :04/01/14 20:01
>>757
どうして他の関数が必要なの?
たしか、メッセージループを介さないで取得できる方法があったような・・・。

760 名前:デフォルトの名無しさん :04/01/14 20:07

CWnd のWindowProc( )ですけど、これ、どうやって実装してる
のかなぁ。見ると protected で virtual でやってるけど、
これでOSから呼び出すことができるんだろうか。

自分でウインドウをクラス化したときは
public の static でWindowProcを作ったんだけど。
これだと関数のアドレスが一意に定まるんですが
static を付けないと関数のアドレスは不定ですよね。

761 名前:デフォルトの名無しさん :04/01/14 20:58
GetAsyncKeyState(VK_LBUTTON)
GetAsyncKeyState(VK_RBUTTON)
GetAsyncKeyState(VK_MBUTTON)

762 名前:デフォルトの名無しさん :04/01/14 21:30
>>760
漏れも興味があって調べてみたが、この辺かな
ttp://www.kab-studio.biz/Programing/Codian/MxA/06.html
の「MFCの場合」

763 名前:デフォルトの名無しさん :04/01/14 23:32
>>762
どうもです。

やはり独自のウインドウプロシージャを用意していたのですね。
しかし、それがDefWindowProcをフックしたものとは想像外でした。
DefWindowProcをフックして AfxWndProc( ) に置き換えていると。

WINCORE.CPPのソースを見ると、AfxWndProc( ) は
static CWnd* CWnd::FromHandlePermanent(HWND);
を使って、MSGに含まれる hwnd から、hwnd を所持する
CWndへのポインタを取得しています。その後、この
CWnd*をAfxCallWndProc( )に渡していて、そこから
lResult = pWnd->WindowProc(nMsg, wParam, lParam);
で、CWndのWindowProcを呼び出しています。

ここで疑問が2つ。
(1) FromHandlePermanet( ) は CWnd* を返すので、
 pWnd->WindowProc ではCWnd派生クラスの WindowProc は
 呼ばれないのではないか?
(2) hwnd にCWnd派生クラスのインスタンスが結びつけられて
 いない場合、 FromHandlePermanet( ) はNULLを返します。
 しかしAfxWndProc( ) はNULLの場合を規定していない。
 (ASSERT(pWnd != NULL); としています。)
 これだとCWndを使ったウインドウと、使わないウインドウが
 混在した場合、エラーが起こるのではないか?
 実際にはMFCプロジェクトでAPIを使ってボタンウインドウを作成
 して試してみましたがエラーは起こりませんでした。

まだ何か秘密があるんでしょうか?


764 名前:デフォルトの名無しさん :04/01/14 23:32
>>763続き
C++って派生クラスのポインタを基底クラスで渡されたときに、
そこから元の派生クラスのポインタを(明示せずに)復元する機能
ってありましたっけ? この辺の理解はまだちょっと怪しいので
アドバイスいただけるとありがたいです。



765 名前:デフォルトの名無しさん :04/01/14 23:36
「私はC++の仮想関数について知りません」
とでも云いたいのかね?

766 名前:デフォルトの名無しさん :04/01/15 00:03
>>765
ああ、そうか。仮想関数を使えばいいのか。
失礼しますた。

767 名前:デフォルトの名無しさん :04/01/15 00:29
>>764-766
ワロタ

768 名前:デフォルトの名無しさん :04/01/15 02:44
質問させてください。
MDI環境で、新規作成メニューを選ぶとダイアログが表示されるように
したいのですが、どこを、どういじればいいでしょうか?


769 名前:大便 :04/01/15 05:59
>>768

警察に通報しました。


770 名前:デフォルトの名無しさん :04/01/15 06:21
スクロールバーの表示範囲を
状況によって可変にしたくて
状況に応じてSetScrollRangeを使っても
表示範囲が思い通りにいきません。

ツマミの位置も途中から進まないようになってしまいます。

どうすればいいのでしょうか。

771 名前:デフォルトの名無しさん :04/01/15 10:14
16bit限界超えてるとかいう話ではないのか?

772 名前:デフォルトの名無しさん :04/01/15 19:13
VC6+MFC+MDIで勉強をしている者です。
532さんの質問とちょっと似ているのですが、質問させてください。
ツールバーにCChildFrameで配置したコンボボックスに、
CFormViewから文字列を追加したく以下のとおり記述したのですが、
pComboBoxにNULLが入ってしまい、文字列を追加することができません。

int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
      :
      :
   m_childwndProcessSelectBox.Create(
     CBS_DROPDOWNLIST | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL,
     rect, &m_childwndToolBar, IDC_PROCESS_SELECTBOX);
      :
      :
}

int CXXXView::OnInitialUpdate()
{
      :
      :
   CComboBox *pComboBox = (CComboBox *)GetDlgItem(IDC_PROCESS_SELECTBOX);
   pComboBox->AddString( _T( "文字列" ) );
      :
      :
}

どのようにしたら文字列を追加することが出来るのでしょうか…?


773 名前:デフォルトの名無しさん :04/01/15 19:52
コンボボックスの質問でよくあるのが、「ボタン押してもドロップダウンリストが表示されない」
っていうのがあって、その場合の解決策はダイアログエディタでコンボボックスの
ボタン押して表示されるドロップダウンリストの大きさを設定するか、コンボボックスの
大きさ設定で縦の長さを設定すれば、ダウンリストが表示されるようになる。

原因がそれ以外なら>>772の内容だけではよくわからない。

774 名前:772 :04/01/15 20:31
>>772
ちょっと文章がおかしかったんで修正します。
×:ツールバーにCChildFrameで配置したコンボボックスに、
○:ツールバー上置かれたコンボボックスに文字列を追加するため、

>>773さん
返答ありがとうございます。
773さんの仰ることは出来ています。
具体的に言うと、CChildFlame内ではAddStringは出来るのですが、
CXXXView内でAddStringをしようとすると、pComboBoxがNULLで出来ないということなんです。

とりあえずソースをもうちょっと追加しておきます。↓


775 名前:772 :04/01/15 20:32
// CChildFrame.h
#define COMBOBOX_INDEX 0
#define COMBOBOX_WIDTH 150

// CChildFrame.cpp
int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
      :
      :
   m_childwndToolBarMoldFlow.SetButtonInfo(COMBOBOX_INDEX, IDC_PROCESS_SELECTBOX, TBBS_SEPARATOR, COMBOBOX_WIDTH);
   m_childwndToolBarMoldFlow.GetItemRect(COMBOBOX_INDEX, &rect);
   rect.top = 0;
   rect.bottom = rect.top + 120;

   if( !m_childwndProcessSelectBox.Create(
        CBS_DROPDOWNLIST | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL,
        rect, &m_childwndToolBarMoldFlow, IDC_PROCESS_SELECTBOX) )
   {
      TRACE0("Failed to create ComboBox\n");
      return FALSE;
   }
      :
      :
}

// resource.h
#define IDC_PROCESS_SELECTBOX 32816

// resource.rc
STRINGTABLE DISCARDABLE
   IDC_PROCESS_SELECTBOX "処理選択\n処理選択"
END

776 名前:デフォルトの名無しさん :04/01/15 21:18
困っています。
教えてください。。。

(すべてon draw関数の中に記述する。)
viewクラスのon draw関数の中で

CBrush brushBlue(RGB(0,0,255));
CBrush* oldBrush=pDC->SelectObject(&brushBlue);
CRgn myRgn; //リージョンの確保
myRgn.CreateRectRgn(6,6,12,12); //領域
pDC->SelectObject(&myRgn); //myRgnの示す領域を有効にする
pDC->SelectObject(&brushYellow); //ブラシの選択
pDC->PaintRgn(&myRgn); //現在のブラシで領域を塗る
pDC->SelectObject(oldBrush);

とmyRgnの領域を塗ることはできるんですが、この後、なんの処理(以下のような)もおこなえません。
Brushを使い終えたときに終わりを意味する宣言がいるんですか?

(以下のような処理)
// bufにkの値を入れdisplayに出力
char buf[80];
sprintf(buf,"ati=%d",k);
pDC->TextOut(20,20,buf);

コンパイルするとエラーなしで、実行できるんですが表示をおこなってくれない。

777 名前:デフォルトの名無しさん :04/01/15 21:46
>>776
myRgn.CreateRectRgn(6,6,12,12); //領域
pDC->SelectObject(&myRgn); //myRgnの示す領域を有効にする

これで描画領域を限定してるんじゃないの?

myRgn.CreateRectRgn(6,6,412,412);
pDC->SelectObject(&myRgn);

こうしたら、文字も表示されたよ。

778 名前:デフォルトの名無しさん :04/01/15 21:53
ありがとうございます。こちらもできました。
ホントに助かりました。ありがとうございました


779 名前:デフォルトの名無しさん :04/01/16 02:33
デスクトップ画面をキャプチャしてビットマップファイルに保存したいんですが、
ttp://switchblade.ddo.jp/cgi-bin/item/img/204.jpg
こんなふうに、できあがったbmpファイルの内容は、なぜか下にずれてしまいます。
以下のソースで、何か間違っている所があるのでしょうか。

HDC memDC, dtDC;
dtDC = ::GetDC(NULL);
int dtWidth, dtHeight;
dtWidth = ::GetDeviceCaps(dtDC, HORZRES);
dtHeight = ::GetDeviceCaps(dtDC, VERTRES);
BITMAPINFO bmi;
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = dtWidth;
bmi.bmiHeader.biHeight = dtHeight;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = 0;
bmi.bmiHeader.biXPelsPerMeter = 0;
bmi.bmiHeader.biYPelsPerMeter = 0;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biClrImportant = 0;
LPBYTE pBits;
HBITMAP hBmp, hOldbmp;
hBmp = ::CreateDIBSection(dtDC, &bmi, DIB_RGB_COLORS, (void **)&pBits, NULL, 0);
memDC = ::CreateCompatibleDC(dtDC);
hOldbmp = (HBITMAP)::SelectObject(memDC, hBmp);
::BitBlt(memDC, 0, 0, dtWidth, dtHeight, dtDC, 0, 0, SRCCOPY);
::GdiFlush();

780 名前:デフォルトの名無しさん :04/01/16 02:33
続きです。

BITMAPFILEHEADER bmfh;
bmfh.bfType = 0x4d42; // "BM"
bmfh.bfSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+(dtWidth*3*dtHeight);
bmfh.bfReserved1 = 0;
bmfh.bfReserved2 = 0;
bmfh.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
CFile file("d:\\bmp.bmp", CFile::modeCreate|CFile::modeWrite);
file.Write(&bmfh, sizeof(BITMAPFILEHEADER));
file.Write(&bmi.bmiHeader, sizeof(BITMAPINFOHEADER));
file.Write(pBits, dtWidth*3*dtHeight);
file.Close();

781 名前:デフォルトの名無しさん :04/01/16 04:18
>>779
こんなぶち切れた感じになるの?

782 名前:デフォルトの名無しさん :04/01/16 13:37
>>772, 775
よく調べてないけど、タイミング的にツールバーがまだなのかな。
CToolBarの派生クラスを作ってOnUpdateCmdUIで処理してみたら?

783 名前:デフォルトの名無しさん :04/01/16 13:46
とりあえず、この計算式は間違い: dtWidth*3*dtHeight

784 名前:デフォルトの名無しさん :04/01/16 16:00
Visual C++ .NET Standard 2003って商用利用できますか?
Visual Studio .NET Professional 2003の方にしないととライセンス違反になるのでしょうか?

785 名前:772, 774, 775 :04/01/16 16:21
>>782さん
返答ありがとうございます。

782さんのご意見を参考にして、
CXXXViewでコンボボックスのCBN_SELCHANGEのUpdate関数を作り、引数の「CCmdUI* pCmdUI」を
CComboBox *pComboBox = (CComboBox *)pCmdUI->m_pOther;
というようにしたら上手くCComboBoxのアドレスを取得することが出来ました。

ご助言いただきありがとうございました。

786 名前:デフォルトの名無しさん :04/01/16 17:11
>>784
たぶん問題ないと思うけれど。
アカデミックなら、制限あるかも知れないけどさ。
いちおー 確認するのが吉。

787 名前:デフォルトの名無しさん :04/01/16 18:39
>>786
そういうのって怒られたりするの?

788 名前:779 :04/01/16 21:55
>>781
はい、キャプチャした瞬間のマウスの高さ分だけ下にずれてしまいます。

>>783
本当は4bytes境界のことを考えなければいけないんですよね。
とりあえず1024*768でテストしてたので、端折ってしまいました。

789 名前:デフォルトの名無しさん :04/01/16 22:04
779のソースを、int main(){ ... } で括って、
CFileをstdioにしてコンソールアプリとしてコンパイル&実行してみたが、
出力ファイルに特に異常な点は無かったよ。
GetDC(NULL)のDCに変な属性でも付いてるんじゃないのか。

790 名前:デフォルトの名無しさん :04/01/16 22:17
VCとかC++でネットワーク系のプログラムを組みたいんだが
なにかおすすめの本とかありませんかね?

791 名前:デフォルトの名無しさん :04/01/16 22:26
>>790
http://www.amazon.co.jp/exec/obidos/ASIN/4894714787/qid=1074259467/sr=1-2/ref=sr_1_10_2/250-8392142-5596254
どうよ。
洋書でも評判ええYO!

792 名前:779 :04/01/16 22:30
とりあえずGetDC(NULL) → CreateDC("DISPLAY",NULL,NULL,NULL)
としても結果は変わりませんでした。

で、マウス位置に比例してずれていたので、ShowCursor()でカーソルを
消去してからGetDC(NULL)すると成功しました。
また、コントロールパネルで「マウスの影を有効」のオプションを切ると、
ShowCursor()するまでもなく成功しました。理由はわかりません。

# 影が有効でもちゃんとキャプチャしてくれるソフトはGetDC()等使ってないんでしょうか..

793 名前:790 :04/01/16 22:40
>>791
俺みたいな初心者でも買いなんでしょうか・・・
みたかんじ少し敷居が高い感じが・・・

794 名前:791 :04/01/16 22:51
すまん。
俺も買ったが時間がなくて読んでない(TT

WinSockなら
http://www.amazon.co.jp/exec/obidos/ASIN/4797306882/ref=pd_sims_dp__1/250-8392142-5596254
が以前イイ!っていってた。(これも俺は買ったが読んでないわけだがw

795 名前:デフォルトの名無しさん :04/01/16 23:40
namespaceについて

VC6で、

#include <vector>
using std::vector;

int main()
{
vector<int> vec;
vector<int>::iterator it;
return 0;
}

と書くと、

error C2653:
'vector<int,class std::allocator<int> >' :
識別子がクラス名でも名前空間名でもありません。

と言われる。なんで?

std::vector<int>::iterator it;

と書けばとおるけど・・・

g++ではstdをつけなくてもコンパイルできたよ

796 名前:デフォルトの名無しさん :04/01/16 23:59
>>795
VC6がヘボだから。
using statementはVC7でもダメで7.1でようやく使える。

797 名前:デフォルトの名無しさん :04/01/17 00:29
いや・・・

798 名前:ヘタレ :04/01/17 02:03
今、リスト処理でvalueがkeyと等しい場合にtrue、
等しいものが無かったらfalseを返す関数existを作ったんですが
return false;のところでAccess Violationが出てしまいます。
これは何が悪いんでしょうか。
VC++の問題かどうかだけでも教えてください。
宜しくお願いします。

struct list {
int value;
struct list *next;
} l;
bool exist(struct list *l, int key) {
if (l->next == NULL) {
return false;
} else if (l->value == key) {
return true;
} else {
return ((exist(l->next, key)));
}
}

799 名前:デフォルトの名無しさん :04/01/17 02:11
Cスレへどうぞ

800 名前:ヘタレ :04/01/17 02:33
有難う御座います。

801 名前:デフォルトの名無しさん :04/01/17 11:26
ひとつのインスタンスからCreateWindowで複数個ウインドウを付くることは出来ないのでしょうか?

802 名前:デフォルトの名無しさん :04/01/17 13:04
質問させてください。
VC++6.0 で 、基本クラスをCFormView に設定したSDIプログラムを
作成しています。この上に、3つのラジオボタンを貼り付け、
C***View のOnInitUpdate()の中で、GetDlgItem()を使って
それぞれのコントロールを取得しました。
(暫定的に、グローバル変数にしています。)
そして、クラスウィザードから、ラジオボタンがクリックされた
時のハンドル関数を追加し、この中で、
(そのコントロール)->SetCheck(0)
などのようにメンバ関数を呼び出そうとすると、エラーになって
落ちてしまいます。ハンドル関数の中で、再び、GetDlgItem()を
使ってコントロールを取得し直すと、正常に動きます。
これは、毎回、コントロールを取得する必要があるという
ことなのでしょうか。

803 名前:デフォルトの名無しさん :04/01/17 13:51
>>802
> 暫定的に
というのがどうやっているのかうまく理解できませんが、
いちいち
CButton* button = (CButton*)GetDlgItem(IDC_BUTTON1);
と記述するのが面倒くさいのならば
素直にコントロールのメンバ変数を作った方が早くなると思います。

804 名前:デフォルトの名無しさん :04/01/17 14:03
>>795です。

>>796ありがと
こういう感じの、VCと標準C++との差異がまとまってるサイトとかって
ありますか。


805 名前:デフォルトの名無しさん :04/01/17 14:13
>>803
ご指摘ありがとうございます。
クラスウィザードからメンバ変数を追加するという
手段についてなのですが、自分の開発しているアプリでは、
ラジオボタンなどのコンポーネントが非常に多いため、
コントロールを配列で取得して、ロジックを単純化
しようとしています。ですので、できれば、ソース上で
配列を宣言し、初期化の時点で全てのコントロールを取得して
しまいたい、と思っているのです。

※ ダイアログベースで開発していたときは、ダイアログクラスの
  メンバ変数に、コントロール用の変数を配列で宣言して、
  OnInitDialog() で取得すれば、あとはずっと使えたのですが…

806 名前:デフォルトの名無しさん :04/01/17 14:39
>>805
GetDlgItem で取得したポインタは一時オブジェクト(そのうち削除されてしまう)
だから、グローバル変数とかメンバ変数に記憶して使い回すのは、不可。

>※ ダイアログベースで開発していたときは・・・
たまたま、うまくいってただけですな。

DDX変数を手書きすれば配列使えるから、それでやるのが一番要求に合うと思う。

IDだけ指定すれば操作できる
 CheckDlgButton() / IsDlgButtonChecked()
 CheckRadioButton() / GetCheckedRadioButton()
なんてものある。事足りるんなら、これでやるのも手。

807 名前:デフォルトの名無しさん :04/01/17 15:33
>>801
CreateWindowってAPIの話?


808 名前:デフォルトの名無しさん :04/01/17 15:39
OnInitUpdate() ってどのクラスのメンバ関数?
MSDNで調べても分からなかったんで。

809 名前:デフォルトの名無しさん :04/01/17 15:41
CWnd::GetDlgItem

返されるポインタは、一時的なポインタです。後でこのポインタを使って
値を格納することはできません。

と解説がありますね。


810 名前:デフォルトの名無しさん :04/01/17 15:42
>>808
View

811 名前:デフォルトの名無しさん :04/01/17 15:52
>>810
thx! 見つけますた。

812 名前:デフォルトの名無しさん :04/01/17 15:53
つか
OnInitialUpdate ですな。


813 名前:デフォルトの名無しさん :04/01/17 19:53

 ちょっと前の「山を下るボール」に触発されて
ビットマップを移動させるサンプルを書いてみた。
ビットマップを貼り付けた子ウインドウを移動させる
形にしたけれど、やっぱこれがやり易い方法かな。

 「山を下るボール」の背景の山はどういう風に
処理してたんですかね? BMPで背景を提供すると
めちゃくちゃサイズが大きくなりそうだが。

814 名前:デフォルトの名無しさん :04/01/17 19:59
>>813
ところでビットマップはVCのエディタで書いてるんですけど、
透明な色を指定することはできますか?
背景色を透過させるようなことはできないのかな?



815 名前:デフォルトの名無しさん :04/01/17 22:54
>> 806
>> 809
どうも、ありがとうございます。教えて頂いた方法で
実装してみようと思います。

>> 808
>> 812
すいません。OnInitialUpdate の間違いでした…

816 名前:デフォルトの名無しさん :04/01/17 23:57
DOSコンソールでのソフトをつくっています。
いま、
ある関数GpIni()が、ヘッダファイルgpib.hにて宣言されています。
その関数はgpib.dllにはいっています。

いま、そのdllを参照する設定ができていないため、
リンカをたちあげると
TestGPIB1.obj : error LNK2001: 外部シンボル "_GpIni@0" は未解決です
Debug/TestGPIB1.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

がでてしまいます。どのようにして、dll内の関数を参照させたらよろしいのでしょうか。

817 名前:デフォルトの名無しさん :04/01/18 00:01
     ?
?


818 名前:816 :04/01/18 00:10
環境および、ソースもあげます。

環境:Windows 2000pro+VC6.0
ソース

**TestGPIB1.cpp
#include <windows.h>
#include <stdio.h>
#include ".\Gpibac.h"

void main()
{
DWORD Ret;

Ret = GpIni();

printf("%ld",Ret);
}

**gpib.h
#ifdef __cplusplus
extern "C" {
#endif

DWORD WINAPI GpIni(void);
#ifdef __cplusplus
}
#endif



819 名前:デフォルトの名無しさん :04/01/18 00:15
gpib.libをリンクする。

820 名前:816 :04/01/18 00:28
はい、確かにgpib.libというものが存在します。
そのリンクのさせ方がわからないのです。
VCのGUI画面でビルドをおこなってます。

821 名前:デフォルトの名無しさん :04/01/18 00:36
#include ".\Gpibac.h"
#pragma comment(lib, "gpib.lib")
と書いておけ

822 名前:デフォルトの名無しさん :04/01/18 00:40
>>820
プロジェクト > 設定 > リンクタブ
> オブジェクト/ライブラリモジュール

ここのところに gpib.lib を書いたら良いんじゃないですかね?

823 名前:816 :04/01/18 00:41
うまくいきました。
ありがとうございました。!!

824 名前:デフォルトの名無しさん :04/01/18 02:16
>>814
無い。自分で1色透過したい部分の色を決めて、
その色の時は背景の方を表示する処理を自分で作る。

825 名前:デフォルトの名無しさん :04/01/18 02:27
>>824
なるほど。じゃあ、BitBltで単純なコピーはできなくなるわけですか。
それは面倒ですね。

826 名前:デフォルトの名無しさん :04/01/18 02:29
>>825
マスク使えば出来る
といっても二回貼り付けなきゃならんのだが…

827 名前:デフォルトの名無しさん :04/01/18 03:32
素数判断するプログラムなんですけど「4」を入力すると
素数と判定されてしまいうまくいきません
アドバイスよろしく
#include<stdio.h>
main()
{
int n;//入力する数
int j=0;//割れることができた整数の数
int i;
printf("整数を入力してください\n");
scanf("%d",&n);

for(i=1;i<n;i++)
{
if(n%i==0)
j=j+1;
if(j==3)//割ることができる整数が3つあるので素数でない
break;//for文の外に出る
}

if(j==3)
printf("素数でない\n");
else
printf("素数である\n");
}


828 名前:デフォルトの名無しさん :04/01/18 03:56
× for(i=1;i<n;i++)
○ for(i=1;i<=n;i++)

829 名前:デフォルトの名無しさん :04/01/18 04:08
>#include ".\Gpibac.h"
マジ?

>>827
素数の判定方法として1からn-1までループを回すなら、素数はjが2になってしまう。
それはさておき、
・意味不明な一文字変数はやめよう。
・本当に1からn-1までカウントしなければならないか検討しよう。
・そもそも割れる数をカウントすること自体に意味があるかどうか検討しよう。
まぁ、一般的な回答は宿題スレの過去ログに腐るほどあると思うが。

830 名前:827 :04/01/18 04:11
>>828
同じ数で割ってなかったんですね;;
無事できました

831 名前:デフォルトの名無しさん :04/01/18 09:35
>>818
> 環境および、ソースもあげます。
> 環境:Windows 2000pro+VC6.0

奇特な人だな。
ソースはいらんから、環境だけ送ってくれ。

>>827, >>830
> 割ることができる整数が3つあるので素数でない

はぁ ?

> 無事できました

ならいいか、まあ俺には関係のないことだし。

832 名前:デフォルトの名無しさん :04/01/18 12:01
>>830
そのソースなら3つ以上だろうよ。
なんにしても相当に非効率だな。しかし

j=j+1

を見ると基礎からやり直せと(ry

833 名前:デフォルトの名無しさん :04/01/18 12:56
テンプレートクラスを書いたソースファイルをプロジェクトに加えると
リンクエラーが発生してリンクできません。
(同じソースファイルに入れるとリンクできます)

VC++6.0です。


834 名前:デフォルトの名無しさん :04/01/18 13:00
そうですか。

835 名前:デフォルトの名無しさん :04/01/18 13:07
>>832
> そのソースなら3つ以上だろうよ。
            ^^^^^
はぁ ? >>827 のどこに「以上」なんて書いてあるんだ ?

> を見ると基礎からやり直せと(ry

ずいぶんと些細な基礎だな。
>>827 は他にやることの方が多いと思うぞ。

836 名前:デフォルトの名無しさん :04/01/18 13:39
すいません 質問させていただきたいのですが
環境は WINDOWS2000PRO 
    VC++6.0 を使用してプログラムをくんでいます。
ダイアログに関する質問なのですが、リソースエディッタでピクチャーを選択して
 ダイアログに設置してプロジェクトにも参加させました。
 そして ダイアログのプロセス部分のソースに 以下のプログラムを記入してコンパイルしたのですが
 
          HBITMAP hBitmap;
BITMAP bm;
HDCdc,memdc;
HWNDDighwnd;

//hWnd ダイアログのハンドルのはいった変数
Dighwnd=GetDlgItem(hWnd,IDC_STATICBMP//ピクチャーのID);

hBitmap=(HBITMAP)LoadImage(hInst,"test_001.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
GetObject(hBitmap,sizeof( BITMAP ), &bm);
dc = GetDC(Dighwnd);
memdc = CreateCompatibleDC(dc);
SelectObject(memdc,hBitmap);
BitBlt(dc,0,0,64,64,memdc,0,0,SRCCOPY);
DeleteDC(memdc);
ReleaseDC(Dighwnd,dc);


DeleteObject(hBitmap);//ダイアログ終了時に記入

ピクチャー部分に BMPの表示ができないのです。
Googleなどで 検索したんですが 納得できる答えが見つからない状態でして
どうか どなたかご教授 お願いします 

837 名前:デフォルトの名無しさん :04/01/18 14:20

MFCでCTreeViewを使おうと思ったんですが、
アイテムの左側の画像って自分で用意しないと
いけないんでしょうか?

せめて + と - くらいデフォルトがあっても
良さそうなものだと思うのですが。
あとツリーを表現する点線と。


838 名前:デフォルトの名無しさん :04/01/18 14:23
VC++.netでダイアログにイベントハンドラの追加ってどうやるでしょうか。
VC++6.0ではダイアログ右クリックのClassウィザードでできた奴なんですが。
.netではボタンとかの部品に対してなら同じ操作ができますけど。
OnCommandとかを追加したいんですけど・・・

839 名前:デフォルトの名無しさん :04/01/18 14:24
>>837
スタイルで設定できる

840 名前:デフォルトの名無しさん :04/01/18 14:49
スタイル抜群のお姉さんを設定できる

841 名前:デフォルトの名無しさん :04/01/18 14:51
>>839-840
どもども。+ と - は表示させることができました。
ツリーの線は表示できないですかね?


842 名前:デフォルトの名無しさん :04/01/18 14:55
>>841
線もできますた!
ありがとうございますた。

843 名前:デフォルトの名無しさん :04/01/18 14:58
C++初心者なんですがクラスについて勉強していて
疑問に思ったことがあるので質問します
シューティングゲームなどで
プレイヤーがある操作(ボタンを押す、等)をするとき
自機から弾クラスが発射される毎に
弾クラスがtama00,tama01,tama02・・・
と毎回違う名前で連番付けされながら生成されるようにしたいんですが
そのようなことってできますか?


844 名前:デフォルトの名無しさん :04/01/18 15:13
>>843
配列を使う

845 名前:デフォルトの名無しさん :04/01/18 15:14
>>843

CTama* pTama[100];

pTama[0] = new CTama;
pTama[0]->TamaMove( );
pTama[1] = new CTama;
pTama[1]->TamaMove( );

こういう感じにしたらどうですか?

Tamaの数を自由にしたければ
vector<CTama> v_Tama;
なんてのももいいかな?

846 名前:デフォルトの名無しさん :04/01/18 15:20
ランダムに弾が消えたり作られたりするんじゃないか、
と考えvectorより、listがいいのでは、と言ってみる。

847 名前:デフォルトの名無しさん :04/01/18 15:27
俺だけは天才だ

848 名前:デフォルトの名無しさん :04/01/18 17:19
ファイルの中身が
数値(改行)
数値(改行)
|   ←カーソルがこの位置にある状態
かどうかを調べたいのですがどうやってやればいいのでしょうか?
ReadFile()でファイルの内容を変数にフコピーし、その変数の内容をif文でチェックします。

849 名前:デフォルトの名無しさん :04/01/18 17:23
>>848
テキストファイルにはカーソルの位置などは
記録されてないのでは?

850 名前: :04/01/18 17:27
void Test(int n = 2, int m = 2 ){
return;
}

引数が2つあって、1、2番目ともデフォルト値がきまっているとします
このとき、
2番目だけ値を設定したい場合

Test(○ ,1); ○の1番目はどうしたらいいですか?

851 名前:848 :04/01/18 17:29
話しによれば・・
数値 ←CR+LFコード
数値 ←CR+LFコード
    ←EOFコード
らしいです・・・Windowsプログラミングだからスレ違いだったらスマソ

852 名前:デフォルトの名無しさん :04/01/18 17:31
>>850
マルチ氏ね

853 名前:デフォルトの名無しさん :04/01/18 19:09
>>851
んと、「カーソルがそこまで動くファイル」という意味だったらそれでただしいよ
でも、「カーソルの位置」を知るという意味ではただしくないよ
(テキストファイルにはカーソルの位置がどこにあったかは記録されない)

EOFコードってのはファイルの終わりって意味ね
(実際はコードが入っているわけじゃないんだけどね)

一応、勘違いしてると後で困ると思うので言わせてもらいました

854 名前:デフォルトの名無しさん :04/01/18 19:31
>>848
Cの標準ライブラリでEOFを調べる関数があったと思ったが、
それのことかな。

MSDNってCのライブラリ載ってないよね。
ちょっとしたことで、わざわざSTL使いたくないときには
Cのライブラリは簡潔でいいんだが。


855 名前:848 :04/01/18 20:09
数値 ←CR+LFコード
数値 ←CR+LFコード
    ←EOFコード
これをどうゆう場面で使いたいのかと言いますと、読み込んだファイルの中身が上の上体だった場合だけ
上の数値を画面に出力すると言うことをしたいのデス。
ファイルの中身が
10
10
10
だったり、
文字
スペース
だったり、
   改行
10
10

だったり、と上のと違う場合は出力したいくないんです・・・

856 名前:デフォルトの名無しさん :04/01/18 20:10
2つの文字列を入力し、数値化したものを比較、勝敗を表示する。但し文字列と数値データは構造体で扱う。又、文字列、→数値変換はmoji_ten()関数を処理する。準備するもの@構造体定義より
{文字列列用・・・char型(20バイト以上)
{点数用......int型A数値変換はmoji_ten関数を使用する。名前を入力させ攻撃用文字列と防御用文字列と体力など攻撃力と防御力設定する。
画面のイメージ↓
/////////////////////////////
/player1の名前を入力して下さい→
/player2の名前を入力して下さい→
/player1の武器を選んでください→
/player2の武器を選んでください→
/player1の防具を選んで下さい→
/player2の防具を選んでください→
/ 戦闘開始
/ player1体力500player2体力500
/  1ターン目player1に100のダメージplayer2に200のダメージ
/  2ターン目player1400のダメージplayer2に300のダメージ
/     引き分けです。
///////////////////////////////////////////
こんな感じで表示させたいです。player1かplayer2のダメージはランダムであと引き分けありで
表示させたです。
最初のこんなしかわりません。w
#include
struct BATTLER
{
char name[20]
int ten
};
void moji_ten(struct BATTLER *);

void main(void)
{
次からよくわりません教えてください。文字列バトラーの応用です。お願いします。


857 名前:デフォルトの名無しさん :04/01/18 21:40
>>854
> MSDNってCのライブラリ載ってないよね。

英語が読めないと言うことか ?

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_feof.asp

>>855
perl とかでやった方が楽だと思うけど...。

>>856
マルチうざい。
http://pc2.2ch.net/test/read.cgi/tech/1073566342/486

858 名前:デフォルトの名無しさん :04/01/18 21:50
質問させていただきます。返答よろしくおねがいします。
viewクラスのon draw関数に主にプログラムを記述しています。
そこでプログラムを書いていて、計算を行わせて値(K)が正しく値を
とっているかを確認するのに
char buf;
sprintf((buf,"%d",k);
pDC->TextOut(6,6,buf);
としています。
しかし、自分でメンバ関数をつくり、メンバ関数内で同じ確認を行いたいときに
上の確認のように書くとできません。
どこがいけないのでしょうか?おしえていだだきたいとおもいます。
また、これでできないなら、他の確認方法ご存知の方お願いします。

859 名前:デフォルトの名無しさん :04/01/18 21:58
858ですが、
コンパイル後のエラーは以下のようになります
D:\cgengo\torichan\torichanView.cpp(419) : error C2664: 'sprintf' : 1 番目の引数を 'char' から 'char *' に変換できません。
(新しい機能 ; ヘルプを参照)
D:\cgengo\torichan\torichanView.cpp(420) : error C2065: 'pDC' : 定義されていない識別子です。


860 名前:デフォルトの名無しさん :04/01/18 22:16
×:char buf;
○:char buf[32];

861 名前:848 :04/01/18 22:23
(自分:>>851 >>855
>>857
自分の認識だとperlって名前のプログラム言語だと思うんですけど…。
Winプログラムで作らないといけ無いんですよね…。
ここで使えそうな関数は知らないので地道にif文で調べて行きたいのですが、
そのif文で調べる方法がよく分からないんですよね。
CRコードは10進数で10 LFコードは10進数で13らしいのですが、、、
変数の中は、
数値(何桁か不明)CR+LFコード数値(何桁か不明)CR+LFコード EOFコード
ってなってると思うんだけど・・・
説明がヘテレでスマソorz

862 名前:デフォルトの名無しさん :04/01/18 22:32
>>858
OnDraw()メソッドの引数で、デフォルトでpDCがコメントアウトされてるのは.netからだっけ?

863 名前:デフォルトの名無しさん :04/01/18 22:39
858ですが、
質問の内容が変わりまして、
error C2065: 'pDC' : 定義されていない識別子です。 というエラーがでたので
自分で作ったメンバ関数内で

char buf;
sprintf((buf,"%d",k);
pDC->TextOut(6,6,buf);

が行えないのは、なぜですか?にさせていただきます。
おねがいします。
あと、これでできないなら、他の確認方法ご存知の方お願いします。
も再度おねがいします。

864 名前:デフォルトの名無しさん :04/01/18 23:01
最近ビルド開始すると、MSDEV.EXEのエラーが出て、
プロジェクトが落ちてしまう事があるのですが、
どういう原因が考えられますか?

ちなみに、VC++6.0、AthlonXP1800+、mem512MB、ハードディスク空き1GB。

865 名前:デフォルトの名無しさん :04/01/18 23:03
chkdsk してみた?

866 名前:デフォルトの名無しさん :04/01/18 23:07
>>863

んだから、
VC++6.0でウィザードで作成したものではコードがOnDraw(CDC *pDC)になるけど、
VC++.NETではこの部分がOnDraw(/*CDC *pDC*/)と書かれてないかい?
コメントアウトされているので、pDCというポインタそのものが定義されてないんだよ。
本に書かれてるコードとは違ってるわけ。
初心者本を見てつくってるんでしょ?その分じゃ。

文字列のポインタもわからない段階からMFCに手をつけるのは無謀。
いっそC#からはじめるか、「猫でもわかるプログラミング」というサイトをみて、
MFCではなくwin32SDKの使い方から覚えたほうがいいよ。


867 名前:デフォルトの名無しさん :04/01/18 23:08
>>857
VC++のMSDNでも日本語版を見つけました。
ランタイムルーチンというところに収録されてんですね。
ちとわかりにくい。

868 名前:デフォルトの名無しさん :04/01/18 23:13
VC++6.0で質問です。

BMPを表示しようと思うのですが、
WM_PAINT毎に、BMPを読み込んでBitBltするのは効率悪いと思い
WM_CREATE時にBMPを読み込んで一旦バッファ(?)に格納し、
WM_PAINT毎にバッファから画面に貼り付けようと思うのですが、
表示されません(ウインドウは表示されるがBMPが表示されない)。

どこかにサンプル、もしくわ参考になるHPはありませんでしょうか?
WinXP+VC++6.0で、MFCは使っていません。

869 名前:デフォルトの名無しさん :04/01/18 23:30
>>863
pDCは OnDraw の引数として与えられるものだからね。

void CExtTreeView::MyDisp()
{
CDC* pDC = GetDC();

CString str("萌え萌え〜〜〜〜");
pDC->TextOut(10,10, str);

ReleaseDC(pDC);
}

この関数をOnDrawから呼び出しても表示できるよ。
自分でpDCを作成して使ってます。
まあ、悪い例だけどね。

870 名前:デフォルトの名無しさん :04/01/18 23:38
>>869
CTreeViewの派生クラスになってるけど、
CTreeViewじゃだめです。
CViewの派生クラスじゃないと。

871 名前:デフォルトの名無しさん :04/01/19 00:29
>866
C#は止めとけ。転職しようと思って探したけどC#は一つも無かった。
CかC++かJAVAが殆ど。

872 名前:デフォルトの名無しさん :04/01/19 03:14

CTreeView でフォルダのスモールアイコンのように
ビットマップやアイコンをアイテムの左側に表示させることが
できますよね。これに CImageList のインスタンスを
使うわけですが、このイメージリストを複数のViewで
共有しようと思って、CWinAppクラスにインスタンスを
public で保持して、Viewクラスからは

CImageList* pImgLst;
pImgLst = &( dynamic_cast<CSplitWndApp*>(AfxGetApp())->m_ImgLst );
GetTreeCtrl().SetImageList(pImgLst, TVSIL_NORMAL);

このコードでアクセスしようと思ったんです。

しかし、これではアイコンがツリービューに表示されませんでした。
エラーもでません。CImageListのインスタンスをViewクラスで
保持して同じコードを書くと、正常にアイコンが表示されます。

これはどの辺が問題なのでしょうか?
C++言語としては間違ったことはやってないように思うのですが。



873 名前:デフォルトの名無しさん :04/01/19 03:51
>>864
おそらく「仕様」です。
特に Win2k 使ってるとしたら。

うちでも、挙動不審だったなぁ。
ビルドしようとすると数秒間固まってみたり…
そのまま落ちてみたり……


仕方ないので、「すべて保存」を定期的にするか、
VC7.1 を使いましょう。

874 名前:デフォルトの名無しさん :04/01/19 03:59
>>872
(AfxGetApp())が問題の部分。というか無意味な部分。
かっこの位置が間違ってるんじゃないかと。
&( (dynamic_cast<CSplitWndApp*>AfxGetApp())->m_ImgLst );
じゃないのかと。

875 名前:デフォルトの名無しさん :04/01/19 04:56
// 唯一の CMyApp オブジェクト
CMyApp theApp;

CMyApp* GetMyApp()
{
 return &theApp;
}
いちいちキャストすんの面倒だから、こうしてるんだけど、問題あるのかなぁ?

876 名前:デフォルトの名無しさん :04/01/19 08:25
MFCで作ってるんだけど、ListViewコントロールを使って
特定のディレクトリ内のファイルを列挙したいんだけど、
どうやればいいの?

877 名前:デフォルトの名無しさん :04/01/19 08:46
>>873

確かにw2kです。仕様ですか・・・。

ちなみに、以前はエラーが無かったのですが、
プロジェクトがちょっと大きくなってきたら
落ちるようになってしまったような気が・・・。

878 名前:デフォルトの名無しさん :04/01/19 09:04
>>877
そのスペックなら巨大関数でもなければ通ると思うけどねぇ。
関数分割は面倒だろうけど、ソース分割してフルビルドを避けるようにしてもダメだろか。

879 名前:デフォルトの名無しさん :04/01/19 10:16
>>868
よくわからんが 変数のスコープ抜けてない?
あと WM_PAINT と WM_PAINT 以外で取得した HDC デバイスコンキテストは別扱い

880 名前:デフォルトの名無しさん :04/01/19 10:19
>>874
pImgLst = &( (dynamic_cast<CSplitWndApp*>AfxGetApp())->m_ImgLst );

これだとコンパイラ通らないでつよ。
シンタックスエラーでした。

881 名前:デフォルトの名無しさん :04/01/19 10:24

extern CSplitWndApp theApp;

CImageList* pImgLst;
pImgLst = &( theApp.m_ImgLst );
GetTreeCtrl().SetImageList(pImgLst, TVSIL_NORMAL);

こういう方法もアリですかね。
コンパイラは通りましたが実行結果は
やはりイメージが表示されない。

うまく逝った人がいれば教えてください。

882 名前::04/01/19 11:41
デバッグ中のアプリケーションを終了したら、
--------------
Detected memory leaks!
Dumping objects ->
{308} normal block at 0x00F22638, 0 bytes long.
 Data: <>
Object dump complete.
--------------
とかって表示されたよ。

0バイトのメモリリーク?何じゃそりゃぁ!
...いつこのような問題がおきるのか知ってる人がいたら教えてくださりませ。

883 名前:デフォルトの名無しさん :04/01/19 12:43
>>882 new int[0] ってやると、そうなったよ

884 名前:デフォルトの名無しさん :04/01/19 13:39
CListViewの表示で行き詰まってしまいますた。
CExtListViewのOnInitialUpdateで次のように記述した
のですが、まったく表示されません。

/////////////////////////////////////////////////////
// ListCtrlのスタイルの設定
DWORD dwStyle;
dwStyle = GetWindowLong(GetSafeHwnd(), GWL_STYLE);
dwStyle |= LVS_EDITLABELS | LVS_LIST;
SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle);

DWORD dwExStyle;
dwExStyle = GetListCtrl().GetExtendedStyle();
dwExStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
GetListCtrl().SetExtendedStyle(dwExStyle);

///////////////////////////////////////////////////////
// ListCtrlコラムの設定
CString str;
for(int nCol=0; nCol<4 ; nCol++) {
str.Format("コラム No.%d", nCol);
GetListCtrl().InsertColumn(nCol, str, LVCFMT_LEFT, 100);
}


885 名前:デフォルトの名無しさん :04/01/19 13:41
>>884
この段階で表示されるわけではないのでしょうか?
コラムはまったく表示されませんでした。

ちなみに次のようにアイテムの追加も行いましたが
デバッカでみるとInsertItemではエラーコードの-1が
返ってきました。

///////////////////////////////////////////////////////
// ListCtrlアイテムの追加
LVITEM item;
item.mask = LVIF_TEXT | LVCF_SUBITEM;

for(int nItem =0 ; nItem<10 ; nItem++) {
for(nCol=0 ; nCol<4 ; nCol++) {
str.Format("アイテム : %d - %d", nItem, nCol);
item.pszText = str.GetBuffer(50);
item.iSubItem = nCol;
if (nCol == 0) GetListCtrl().InsertItem(&item);
else GetListCtrl().SetItem(&item);
}
}



886 名前:デフォルトの名無しさん :04/01/19 14:54
>>884
キター!進展アリ!

スタイルが問題だったようです。
スタイルの設定の部分を LVS_LISTではなく、

GetListCtrl().ModifyStyle(NULL, LVS_REPORT);

にしたら、とりあえずヘッダが表示されますた。
とりあえずご報告まで。

887 名前:882 :04/01/19 15:17
>>883
あるがと

888 名前:デフォルトの名無しさん :04/01/19 16:09
>>886
キター!当初の目的を達成!
疲れた・・・。
ソースは長くなるんで、要請があったら
貼り付けます。

右側はSetItemTextで設定するんですな。


889 名前:デフォルトの名無しさん :04/01/19 16:10
全部知ってたけどめんどくさいし基本だからすぐわかるだろうと思って放置してた。

890 名前:デフォルトの名無しさん :04/01/19 16:22
>>877
1.そのプロジェクトのフォルダにある .ncb と .opt を消す。
2.SPを当て直す。

891 名前:デフォルトの名無しさん :04/01/19 22:14
>>864
うちもMSDEV.EXEのエラーが出て、
原因はワークスペースファイルの破損だったよ。
新しいワークスペースを作って、そっちに
移しますた。

892 名前:デフォルトの名無しさん :04/01/19 22:18
例えばですよ。

VBで作ったアプリケーション(ウィンドウ)に
ウィンドウメッセージをVC++で作ったアプリケーションから送信したいんですけど
VC++のサンプルソース誰かお願いします。

コンソールアプリでお願いします。


893 名前:デフォルトの名無しさん :04/01/19 22:19

MFCプロジェクトとクラスウイザードで書いています。
Doc/View で、Viewを3分割して新しいViewを割り当てています。

メニューコマンドのハンドラをViewクラスの方でハンドリングしたい
のですが、クラスウイザードでハンドルしてもまったく反応が
なくなってしまいました。

BEGIN_MESSAGE_MAP(CExtListView, CListView)
//{{AFX_MSG_MAP(CExtListView)
ON_COMMAND(IDM_LVS_ICON, OnLVSIcon)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

メッセージマップには確かに追加されているのに、
どうしてこのようなことが起こるのでしょうか?
同じ経験をされた方、おられませんか?


894 名前:デフォルトの名無しさん :04/01/19 22:20
>>892
EnumWindow()

895 名前:デフォルトの名無しさん :04/01/19 22:23
>>894さん

動くソースお願いします。
サンプル見たほうが脳みその吸収率高いので
わがままですいません

896 名前:デフォルトの名無しさん :04/01/19 22:30
>>895
MSDN嫁。

897 名前:デフォルトの名無しさん :04/01/19 22:38
お兄ちゃん厳し杉でぷ


898 名前:デフォルトの名無しさん :04/01/19 22:41
>>895
自分で調べる気無いヤシに何教えてもムダだろう

899 名前:デフォルトの名無しさん :04/01/19 23:02
サンプル見たら、それが自分の力というか技になるだろ。
アホかおまえ。
いちいち本で無駄な情報の中から必要な情報をあさることに
意味を見出そうとするオールドタイプの人間がなぜ
プログラマに多いのか、という話にまで発展するぞ、ボケ
彼らは自分が他人よりパソコンの知識がすぐれている
ということにしかアイデンティティーを見出せない人種だからだよ
じゃなきゃ、聞かれたことは素直に教える罠

実際、そういう人間ばっかりだ<プログラマ業界


900 名前:デフォルトの名無しさん :04/01/19 23:05
質問させてください。
AppWizard から CFormView を基本クラスにした
SDI のスケルトンを用意してプログラムを書いています。

ダイアログ内に配置した「ピクチャー」コントロールに
画像ファイルをドラッグ&ドロップしたら、そこに
画像を表示する、というプログラムを書きたいのですが、
ピクチャーの拡張スタイルに「ドラッグドロップを許可」
と指定しても、実行するとドラッグ&ドロップできません。

ピクチャー本体は枠だけで、内側は対象範囲にならない
のかと思い、PreTranslateMessageを追加して、マウス位置
を取得し、そのピクチャーの領域内であるかを判断して
処理を行えばいいかとも思ったのですが、そもそも、
ピクチャーの領域内でドラッグ&ドロップ自体ができない
ので、解決になっていませんでした。

どなたか、このような動作を実装するための方法を
知っている方がいらしたら、ご教授お願いします。

901 名前:_ :04/01/19 23:20
>サンプル見たら、それが自分の力というか技になるだろ。

お前にゃ無理

902 名前:デフォルトの名無しさん :04/01/19 23:28
>>893
新規にプロジェクトを立ち上げて、コードをコピーして
やり直してみましたが、やはりViewクラスは
メニューコマンドをハンドルしませんでした。

分割前なら、Viewでも普通にメニューアイテムの
On/Offができたと思うんですが、分割したのが
問題なのかな?

でもMSDNのVIEWEXサンプルでは分割のViewに
メニューのハンドラを設置できたんだけど・・・。


903 名前:デフォルトの名無しさん :04/01/19 23:41
>>893
スプリッタウィンドウの場合、全部のViewにコマンドをルーティングしないといけない。

904 名前:デフォルトの名無しさん :04/01/20 00:17
>>903
ありがとうございます。

現在色々と実験中ですが、左上(0行0列)の
Viewクラスのハンドリング関数だけが
実際にハンドリングされることが分かりました。

とりあえず報告だけ。

905 名前:デフォルトの名無しさん :04/01/20 00:28
>>899
教えて君としてはいい筋だ。その調子でがんばりたまえ。

906 名前:デフォルトの名無しさん :04/01/20 00:28
頻繁にメモリ間コピー等の操作を行うプログラムをC++で書いているのですが、
例えばコピーの際、用意するバッファに配列を使うとなると管理が大変なので
std::vectorを使っています。使うと言っても、イテレータ等は使わず、
    std::vector<BYTE> vec(BUFFSIZE);
    CopyMemory(&vec[0], src, BUFFSIZE);
のようにです。ですが、どこかのサイトで
    vectorのバッファを直接いじるのはよくない
みたいなことが書いてあった気がして、気になってしまいまして、つまり、
こんな使い方って、薦められたものではないんでしょうか。


907 名前:デフォルトの名無しさん :04/01/20 00:33
>>904
そう。デフォルトだとその一つのViewにしかコマンドメッセージは送られない。
だからそのViewでメッセージを処理しないなら、他のViewにそのメッセージを転送しないといけない。
スプリッタウィンドウの作り方を検索すれば転送(メッセージルーティング)の方法も書いてあると思う。

908 名前:デフォルトの名無しさん :04/01/20 00:51
>>906
std::vectorは問題なかったはず。std::string などではまずいが。
どうしても気になるなら普通の配列つかってそれをコピーすれば良かろう。

909 名前:デフォルトの名無しさん :04/01/20 01:06
>>908
なるほど、良かったです。自分が気になっていたのは、間違った使い方をして
いたんじゃないかということだったので、でもよく考えたら、operator[] や at()が
実装されているってことは、バッファの各要素にアクセスする事を想定して作ら
れているってことでしょうから(この認識であっているんでしょうか…)、直接それを
操作したとしても何ら問題ないということですね。
となると>>906のサイトの件は自分の勘違いかもしれません。

910 名前:デフォルトの名無しさん :04/01/20 05:06

VC++6.0のことで質問です。

プロパティページ中で、二つのエディットボックスで値を設定できるようにして、
m_edit_1(最大値)>=m_edit_2(最小値) となるようにしたいのです。

下のようにしたら、間違ったときに警告メッセージボックスがでてくれるのですが、
OKで戻ったときに、編集していたエディットボックスから選択が移動してるので、
OKボタンを押して終了することができてしまいます。
条件を満たすまで変更を求めるにはどうしたらよろしいのでしょうか。


void CPropertyPage_04::OnKillfocusEdit1(){
UpdateData(TRUE);
if(m_edit_1<m_edit_2){
AfxMessageBox("最大値>最小値に設定してください");
return;
}
maxval=m_edit_1;
}


911 名前:デフォルトの名無しさん :04/01/20 11:12
>>909
>operator[] や at()が
それらはシーケンシャルなオブジェクトへのアクセスを実現するためのものであって、
シーケンシャルなメモリを直接指す物ではないんじゃないかな?
まあ、そこまで考える必要はないと思うけど

912 名前:デフォルトの名無しさん :04/01/20 11:59
Win32APIになるんですが
WM_KEYDOWNのlParamの30ビットを調べて1なら処理しないっていう記述はどうかけばいいでしょうか?

913 名前:デフォルトの名無しさん :04/01/20 12:13
>>912
マルチ氏ね

914 名前:デフォルトの名無しさん :04/01/20 14:33
そんだけ切羽つまってんの_| ̄| ○

915 名前:デフォルトの名無しさん :04/01/20 15:14

DWORD bitmask = 0x20000000;

if(lParam&bitmask) {
//処理しない
} else {
// 処理する
}

こんなんでどうだろう?


916 名前:デフォルトの名無しさん :04/01/20 18:08
>>910
OnOK()でその処理すればいいと思うけど。
それか、DDV使って、こんな風に書くと良い。

void CPropertyPage_04::DoDataExchange(CDataExchange* pDX)
{
  CPropertyPage::DoDataExchange(pDX);
  //{{AFX_DATA_MAP(COptionEngine)
  ・・・
  //}}AFX_DATA_MAP

  //最大値を入力するエディットボックスを指定
  pDX->PrepareEditCtrl(IDC_EDIT1);

  //最大値がm_edit2〜1000の間かチェックさせる。不正なら上で設定したコントロールにフォーカスが移る
  DDV_MinMaxInt(pDX, m_edit_1, m_edit2, 1000);
}

917 名前:デフォルトの名無しさん :04/01/20 18:11

>//{{AFX_DATA_MAP(COptionEngine)
の部分、書き換えるの忘れてた(;´Д`)

//{{AFX_DATA_MAP(CPropertyPage_04)
でよろ

918 名前:デフォルトの名無しさん :04/01/20 21:07
VC++6.0で

using namespace std;

の後にclassを記述すると、特にoperator演算子絡みで
文法に間違いが無くても、変な(エラーの出方に法則性が無いので・・・)
コンパイルエラーが出てしまうのは、回避方法は無いでしょうか?

他人様のHPですが、
ttp://www.kurumi.sakura.ne.jp/~kumicyou/cplusplus/0605.html
てな感じです。

なお、可能なら「using〜」の位置はずらさないようにして対処したいです。

919 名前:デフォルトの名無しさん :04/01/20 21:26
>>918
そこのソースをコピペしてビルドしてみたが、別におかしな事はないけど。
VisualC++6.0 SP5。

920 名前:デフォルトの名無しさん :04/01/20 21:33
質問です。

ファイルから座標を読み出して配列に入れたいのです。
ファイルの中身は
0
0.1
0.2
・・・
のようなかたちで一行づつchar[]で読んでいたのですが、
double型にキャストできず、困っています。
上の座標をdouble型の配列に入れるのが目的です。
どなたかご指南ください。お願いします。

921 名前:デフォルトの名無しさん :04/01/20 21:39
>>920
CStringからdoubleだと楽勝

922 名前:918 :04/01/20 21:40
>>919
うまくコンパイル通る時もあるし通らない時もあるんですよ。
だからタチが悪くて・・・。

今まで自分で作ってちゃんとビルド出来ていた色んなプロジェクトの、
適当なcppファイルの末尾に同様のコードをはめ込んで、そのファイルだけを
コンパイルすると、通ったりエラーだったりバラバラでした。

私の方で試してみてわかっているのは、今のところ「using〜」を
はずせば、確実に通るってだけなんですけども・・・

923 名前:920 :04/01/20 21:57
>>921
レスありがとうございます。
それはファイルオープンの時にCString型にいれるのですか?
できたら方法を教えてくださいませんか??

924 名前:デフォルトの名無しさん :04/01/20 22:33
char[]に読み込んで、atofを一発かませば良いんでないの?

925 名前:920 :04/01/20 23:23
>>924
レスありがとうございます。
char buff[256];
double test;
if((fp = fopen(p, "r")) == NULL){
exit(0);
}
while (fgets(buff, 256, fp) != NULL) {
test[i]=atof(buff);
i++;
}
fclose(fp);
のような感じで現在やっておりますが、testの配列の方には
数値がはいってないのでエラーは出ませんが・・・。
もう少しいろいろやってみます。

926 名前:910 :04/01/20 23:29
>>916
どうも、ありがとうございました。 DDV_MinMaxFloat
を使って判定チェックできるようになりました。
でも、今してるのは、
実数で最大値>最小値というふうに、=をつけずにしたいのですが、
これが簡単なので妥協することにしました。


927 名前:デフォルトの名無しさん :04/01/20 23:33
>>925
test[i]=atof(buff);
と格納してるのに、
double test;
と宣言されてるようだが。

928 名前:910 :04/01/20 23:34
関連したことでちょっとわからないことがあるのですが・・・
EDITボックスの数値の変更をすぐに使うので、
UpdateData(TRUE);は OnOk だけでなくて OnKillFocusEdit でも
呼んで数値のチェックをしていますが、これだと、
キャンセルボタンを押したときも Focusが移ったと
判断されデータのチェックをしてしまいます。
今は、以下のようにOnCancel中で i_cancel=1;
として、そのときは OnKillFocusEdit を素通りするようにしてます。
これだと、ESCキーや、 ×ボタンで閉じたときは
データチェックしないでプロパティシートを閉じてくれますが、
キャンセルボタンを押したときだけは、
先にOnKillFocusEditを呼ばれて不正なデータの再入力を求められます。
Focusが移った先がCancelボタンかどうかチェックできれば万事解決
な気もするのですが、こういうときはどうやるものなのですか。

void CPropertyPage_04::OnCancel(){
i_cancel=1;
CPropertyPage::OnCancel();
}

void CPropertyPage_04::OnKillfocusEdit2(){
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
if(!i_cancel){
if(UpdateData(TRUE)){ //正常終了した場合 (!=0)
data=m_edit_2;
}else{ //異常があった場合 (==0)
m_edit_2=data;
UpdateData(FALSE);
}
}}

929 名前:920 :04/01/20 23:40
>>927
申し訳ありません、写し間違えです…。
double test[200];
として行っています。

930 名前:デフォルトの名無しさん :04/01/21 00:01
>>910>>928
ディットコントロールならOnKillFocusよりもEM_CHANGE使って入力のたびにデータの診断と更新する方が確実
エディットコントロールの入力時にチェックすればキャンセルの問題もなくなる


931 名前:デフォルトの名無しさん :04/01/21 00:12
>>925
はい
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "math.h"

main()
{
FILE *fp;
int i = 0;

char buff[256];
double test[200];

if((fp = fopen("testfile", "r")) == NULL){
exit(1);
}
while (fgets(buff, 256, fp) != NULL) {
test[i]=atof(buff);
i++;
}
return 0;
}



932 名前:デフォルトの名無しさん :04/01/21 00:17
>>925
つっこみどころ多すぎるけど
後は自力でがんがれ

933 名前:920 :04/01/21 00:29
>>931
レスありがとうございます。
無事できました。僕自身の勘違いもありました。
助かりました、ありがとうございました。

934 名前:デフォルトの名無しさん :04/01/21 00:49
>>933
勘違いした点を簡潔に書き出してくれないから出来たらで良いから
教える立場にいるので参考にしたい。

935 名前:デフォルトの名無しさん :04/01/21 01:07
>>928
void CPropertyPage_04::OnKillfocusEdit2(){
 CWnd* pFocus = GetFocus();
 if(pFocus && pFocus->GetDlgCtrlID() == IDCANCEL || !IsWindowVisible() )
  return;
 
 ・・・
}
こんな風に書くと i_cancel いらないかもね。

936 名前:910 :04/01/21 01:23
>>930
EN_CHANGE だと、-10 を入力しようとして - だけを
最初に入れただけで「数値を入れてください」て言われるので、
うっとうしいと思ったので、EN_CHANGEのとこは
SetModified(TRUE); 
だけ入れることにしてるんです・・・・。変ですか?


937 名前:910 :04/01/21 01:30
>>935
ありがとうございます。キャンセルボタンでも
OnKillFocus をスルーして
キャンセルできるようになりました!!(ToT)



938 名前:デフォルトの名無しさん :04/01/21 02:19
MFCで、ビューの中に子ウィンドウ(境界線がないのでユーザーからは存在がわからない)
を作って、その中である大きさの四角形の、枠だけを描画したいのですが、
うまくいかないので教えてください。

子ウィンドウにWM_PAINTメッセージをマップして、

void CMyObject::OnPaint()
{
 CPaintDC dc(this);

 dc.SelectStockObject(NULL_BRUSH); //透明のブラシ

 CPen pen(PS_SOLID,4,RGB(0,0,0)); //黒色で太さ4のペン
 dc.SelectObject(&pen);

 Rect cRect;
 this->GetClientRect(cRect); //子ウィンドウのクライアント領域
 dc.Rectangle(cRect.left + 10, cRect.top + 10, cRect.right - 10, cRect.bottom - 10);
}

こんな感じにしてみたのですが、確かに四角形の枠は表示されるものの、
いくら太さを変更してみても、太さ1でしか描画されません。
RGB値をいくら変更しても黒でしか表示されませんでした。
このことから、SelectObject(&pen)が無視されていると思われるのですが・・・。

ちなみに、SelectObjectの直後に、dc.SelectStockObject(WHITE_PEN)を挿入すると、
きちんと色が変化します。う〜ん、なぜなんでしょうか。

939 名前:920 :04/01/21 06:45
>>934
勘違いした点というのは、教えていただいた結果925のソースを書いたのですが
931と比べて特に変わったところがないのでもう一度良く配列に入っている数値を
デバック中に観察したら、見てるところが違ったのです・・・。(ホントすみません

940 名前:デフォルトの名無しさん :04/01/21 13:53
>>938
わかんないけど

 CPen pen(PS_SOLID,4,RGB(0,0,0)); //黒色で太さ4のペン
 CPen *ppenOld ;
 ppenOld = dc.SelectObject(&pen);

 Rect cRect;
 this->GetClientRect(cRect); //子ウィンドウのクライアント領域
 dc.Rectangle(cRect.left + 10, cRect.top + 10, cRect.right - 10, cRect.bottom - 10);

 dc.SelectObject(ppenOld);

たんに説明のために省略しただけならスマソ


941 名前:デフォルトの名無しさん :04/01/21 14:47
>>938
実際に全体をみてコンパイルしてみないと
わからないなぁ。ウインドウの属性が問題だったりする
場合もあるし・・・。

942 名前:デフォルトの名無しさん :04/01/21 15:43
>>938
ちなみに、ダイアログのOnPaintで試しにやってみたらできたよ
実行環境とかは?

943 名前:デフォルトの名無しさん :04/01/21 19:36
マイクからの音声入力はどうやればいいのでしょう?
VC++のどの解説本にも書いてないので、
全く手がかりが無くて困っています。

944 名前:デフォルトの名無しさん :04/01/21 19:53
.net2003でプログラムしてるんですが
デバッガで実行すると必ず
C:\Program Files\Yahoo!J\Messenger\idle.dll' を読み込みました。シンボルが読み込まれていません。
という身に覚えのないメッセージがでます。
なんか気持ちわるいんですが
なにか問題があるんでしょうか?

945 名前:デフォルトの名無しさん :04/01/21 20:18
そこで右フック

946 名前:デフォルトの名無しさん :04/01/21 21:00
>>940
>>941

どうやら非常に単純なミスのようでした(泣)
実際のプログラムでは、

CPen pen(PS_SOLID,4,RGB(0,0,0)); //黒色で太さ4のペン
dc.SelectObject(&pen);

の部分がifブロックに入ってて、
条件分岐で黒か白のペンのどちらかを登録するようにしていたのですが、
ブロック内で宣言したCPenのオブジェクトがifブロックを抜けると、
破棄されることをすっかり忘れてしまったようです。

(if文まで含めると投稿文が長くなるので、適当に要約して書いたつもりでしたが、
 肝心の問題部分まで改変してしまっていて、申し訳ありませんでした)

>>940

その作業も必要ですね。ご指摘ありがとうございます。

947 名前:デフォルトの名無しさん :04/01/21 21:23
DLLを使うため、APIを使いたいのですが、
そのあたりの例かなにかを参考にしたいのですが
どこかいいサイトを紹介していただけないでしょうか・・・?

948 名前:デフォルトの名無しさん :04/01/21 22:25
どなたかツールチップのフォントを変える方法を知ってる方いらっしゃいませんか?
変えることは不可能なんでしょうか?

949 名前:デフォルトの名無しさん :04/01/21 22:40
>>947
Win32APIなら「猫でもわかるプログラミング」あたりにいけば。

なんかこう、古いけど。

950 名前:デフォルトの名無しさん :04/01/21 23:00
windows付属の電卓のようなものを練習でチャレンジしてるんですけど。

入力されたすうじを裏でおぼえさせておいて、表示は演算子が入った次の時は
クリアされて新しく入力とか、、
結構思ったより色々やらなきゃいけないですね。

みなさんやるとしたらどんな感じの流れで作りますか?

951 名前:デフォルトの名無しさん :04/01/21 23:40
>>949
ありがとうございます。いってみます^^

952 名前:デフォルトの名無しさん :04/01/22 02:11
逆ポーランド電卓

953 名前:デフォルトの名無しさん :04/01/22 03:10
どこに聞いていいか分からなかったのでここに質問させてください。

Visual Studio 6.0 Processor Pack に入っている
サンプルプログラム
(C:\Program Files\Microsoft Visual Studio\VC98\Samples\Amd\Isdk
に入っている SIMD で演算する一連のライブラリ)
を利用したいのですが、
このプログラムのライセンスはどうなっているのでしょうか。

クローズドな開発に利用していいのか、
逆にオープンソースにこのソースも含めて配布していいのか、
これを利用したソフトを販売していいのか(そんな予定はありませんが)、
等です。

954 名前:デフォルトの名無しさん :04/01/22 13:26
質問です。
Win2ksp4、VS.net2002でダイアログベースのMFCアプリケーションを作成するときに
ボタンを配置して、ダブルクリックで関数を追加すると
最初は追加されるのですが、2個目以降はMFCクラスウィザードへようこそ
という窓が出て追加できません。イベントハンドラを追加しようとしても
InternetExplorerスクリプトエラーという窓が出てしまいます。
エディットコントロールでは変数が追加できません。
一度VSを終了してから起動して、開くと今度は正常に動きます。

どうすればよいのか教えてください。お願いします。


955 名前:デフォルトの名無しさん :04/01/22 20:35
質問なのですが、シリアル通信をしていて、comポートの
「CTS」のon/offって、どうやって見ればいいのでしょうか?

よろしくお願いします。

956 名前:デフォルトの名無しさん :04/01/22 20:58
1000も近いすけど、質問します。Visual C++ 6.0
Windows 2000 で 
インターネットプロトコルのプロパティに表示される項目
(自分のIPアドレス、DNS)を変更するプログラムはどうやればよいのでしょう。
実行ファイルをダブルクリックしてすぐIPの切り替えを行いたいのですが。。。

コマンドプロンプトで行う方法はわかったのですが、VCではどうやればよいのか…

957 名前:デフォルトの名無しさん :04/01/22 21:16
なら、そのコマンドとパイプでもつないだらええやん。

958 名前:デフォルトの名無しさん :04/01/22 21:53
>>955
http://pc2.2ch.net/test/read.cgi/tech/1068869894/

959 名前:デフォルトの名無しさん :04/01/22 21:54
パイプでつなぐ?何すかそれ?キーワードでも教えてください。

960 名前:デフォルトの名無しさん :04/01/22 22:11
>959
ヒント
dir | sort
| がパイプ

961 名前:デフォルトの名無しさん :04/01/22 22:25
そのパイプは知ってるっす。私が実現したいのはVCから行うってことをやりたいんです。


962 名前:デフォルトの名無しさん :04/01/22 22:27
ん?VC上からコマンドプロンプト上のコマンドを起動できるってこと?


963 名前:デフォルトの名無しさん :04/01/22 22:30
>>962
system()

964 名前:デフォルトの名無しさん :04/01/22 22:38
_popen

965 名前:デフォルトの名無しさん :04/01/22 23:15
system()でできた。(^^ 
ありがとう。

966 名前:デフォルトの名無しさん :04/01/22 23:59
約10秒おきに新しい一行が追加されていく
CSVファイルがあります。

このCSVファイルをできるだけ高速に、
新規追加された行で、しかも望みの列だけとりだしたいのです。

どういうやりかたがはやいでしょうか。
C言語でSQLつかえるともきいたんですけど、やっぱ遅いですかね。




967 名前:デフォルトの名無しさん :04/01/23 00:19
>966
固定長ならファイルの最後からファイルポインタを移動して
ランダムアクセスして早く読めるけどそうでなければ難しそう。


968 名前:デフォルトの名無しさん :04/01/23 00:42
>>966
インデックスファイルを同時に作っていくのが普通じゃない?
キー文字列と本体ファイルのファイルポインタをペアで記録していく。

そのインデックスのキー文字列をすばやく検索するためのデータ構造が、
リンクリストだのハッシュだのという例題として情報処理関連の試験に出てくると。


969 名前:デフォルトの名無しさん :04/01/23 14:31
Win2000+VC6.0でWin32 Console Applicationを作るとき,メモリを静的に
確保できる限界はどれくらいなんでしょうか?
画像を配列に保存するため,unsigned char hoge[約45万]を3個作ったら,
ビルドは出来た(警告も無し)ものの実行できませんでした.
3つ目の要素の数を10万くらいにしたらプログラムの実行は出来ました.
この配列は3つとも同時に最初から最後まで使うのですが,解決策はありませんか?

970 名前:デフォルトの名無しさん :04/01/23 15:06
Visual C++ .NET 2003 で、ファイルをインポートしてリソースを作成することができません。
「プロジェクト」→「リソースの追加」→「インポート」→「ファイル選択」→「カスタムリソースの種類」
→「種類を入力」→「OK」
で、ツリービューにリソースが追加されません。(でも変更を示す * は付きます)
ツリービューを右クリックでも、新規作成でファイル名を直接入力でも、だめでした。

解決策はありますか?

971 名前:デフォルトの名無しさん :04/01/23 15:29
ソースに
#ifdef WINDOWS
...
#endif
#ifdef LINUX
...
#endif
のような プリプロセッサが沢山あるのですが、
ソースが読み難いので #ifdef LINUX の部分だけを表示させることは
可能なのでしょうか? (Microsoft Visual C++ 6.0 を 使用しています)

宜しくお願い致します。


972 名前:デフォルトの名無しさん :04/01/23 15:50
LINUX定義して/Eとか/Pとか。

973 名前:デフォルトの名無しさん :04/01/23 16:43
ファイルをクリックしたら、またテキストソフトで開けなくしたい。
つまりファイルロックのソフトを作りたいのですが、ロックの仕方が分かりません。
環境はWINDOWS2000SEVER,VISUALC++6.0です。
よろしくおねがいします。

974 名前:971 :04/01/23 16:53
>>972
すみません、全く説明がわかりません。
まず、その定義はどのようにできるのか?
次に /E, /P って何ですか? コマンドですか?
Visual C++ に関しては全くのド素人なので、
宜しくお願いいたします。



975 名前:デフォルトの名無しさん :04/01/23 17:06
>>969
それはスタックサイズが足りないからだよ。(MSDNでコンパイラオプションの/F参照)
スタックサイズ増やしてもいいけど、動的確保した方がいいんでないの?

>>973
::CreateFile ( ... , ... , 0 , ・・・)

976 名前:973 :04/01/23 17:14
>>975
もっと詳しくお願いできますか?


977 名前:デフォルトの名無しさん :04/01/23 18:48
>975
unifdef使え。
>976
CreateFileのdwShareMode引数で何も指定しなかったら、
他のアプリでは開けないだろ。

978 名前:デフォルトの名無しさん :04/01/23 18:49
unifdef使え、は>974が対象でした。
ここでお詫びして訂正します。

979 名前:デフォルトの名無しさん :04/01/23 21:16
VC6で
ダイアログベースのアプリを作っている時
ClassViewからダイアログクラスが消えてしまうんですけど
対策とかあるんですか?

980 名前:979 :04/01/23 21:33
っと思ったら、ダイアログのヘッダーファイルいじってたら復活した。
どうなってるんだ?


981 名前:973 :04/01/23 23:08
>977
初心者なのでよく使い方が分からないもので・・・。

982 名前:デフォルトの名無しさん :04/01/23 23:18
>>981
言い訳書く暇あったら、MSDN 百回見直せ。

983 名前:973 :04/01/23 23:23
>982
MSDN百回見直してもわからないものはわからない。

984 名前:いったいどこを見直してるのやら...。 :04/01/24 00:19
>>983
だったら向いてないと言うことだ。
素直にあきらめろ。

985 名前:デフォルトの名無しさん :04/01/24 11:11
vcかcでiniファイルの書き換えしたいんですけど?

986 名前:デフォルトの名無しさん :04/01/24 11:25
>>985
やれば?

987 名前:デフォルトの名無しさん :04/01/24 11:43
>>979-980
俺はそういうとき一度プロジェクトを閉じて、プロジェクト内の
*.ncb を消して開きなおしてるけど、他に直し方あるんかな。

988 名前:デフォルトの名無しさん :04/01/24 11:46
文字列リソースの数に上限ってあるんでしょうか?


989 名前:デフォルトの名無しさん :04/01/24 13:34
>>975
私も似たような感じで静的メモリとして
16MB確保してたんですが、
パソコンによって動いたり動かなかったりしました。

パソコンやOSによってスタックサイズが変わったりするのでしょうか?
また、同じ容量でも動的に確保したら上手く動くんでしょうか?

990 名前:デフォルトの名無しさん :04/01/24 13:40
>>989
変わるし確保可能な容量を構内限り動く。


991 名前:デフォルトの名無しさん :04/01/24 13:46
そこまで大きいメモリを連続して取るなら、
アッセンブラを多少勉強したほうがいい、
なぜ個体によって動いたり動かなかったり、
完全に動かすにはどうやるのかわかるよ。
どのレジスタにどの情報を入れるかはっきりと指定できるからな。
ただし、何メガもアッセンブラでやることは無いと思うが。
そもそも16Mや配列1マン取らないといけない設計自体に
疑問を感じる。

VCはただでさえ無駄にメモリ領域を消費している。
ヘッダや元からついてくるソースに入っていって使ってない機能を
削除するとか、いろいろ方法も考えられる。

VCはふつうのソフトの開発やデバッグややりやすいが、いったんデバイス(メモリ)
で引っかかったら、永久に原因が究明できないのが大欠点。
機械制御、開発等には使われていないのが現状。



992 名前:デフォルトの名無しさん :04/01/24 13:53
>>991
話がずれますが、大容量の画像等を扱う時は、
メモリを確保せずにどうやって扱うのでしょうか?

2048x2048xRGBA=16MB必要になってしまい、
これを丸ごとメモリに確保しています。
やはりこれは設計ミスでしょうか・・・・。

993 名前:デフォルトの名無しさん :04/01/24 13:54
ふーん、よくそこまででっち上げたね。

994 名前:デフォルトの名無しさん :04/01/24 14:16
>>992
メモリが16MB以上確保できる環境なら確保してもいいだろうが、
スタックには取るなよ。

処理の内容によっては一部分ずつ処理することでメモリを節約することも出来るし、
その方が速いかも知らんよ。


995 名前:デフォルトの名無しさん :04/01/24 15:01
>機械制御、開発等には使われていないのが現状。

普通に使ってますが。

996 名前:デフォルトの名無しさん :04/01/24 15:20
>>994
実行環境が今時の PC なら、16MB ぐらいどうってことないだろ。

下手に気取って、

> 処理の内容によっては一部分ずつ処理することでメモリを節約することも出来るし、

なんて事やる奴はヴァカ。

997 名前:デフォルトの名無しさん :04/01/24 15:42
>>980 ヘッダに1文字でも変更加えると復活する

998 名前:デフォルトの名無しさん :04/01/24 16:43
>>995
ファームとかの開発って意味ね。
>>バカとは言い切れん、そうやらないといけない状況だって
いくらでもあるよ。


999 名前:デフォルトの名無しさん :04/01/24 16:59
>>998
そういう状況なら、そうやるしかないんだろ。
少なくとも、「その方が速いかも知らんよ。」なんて発言する奴は、やっぱりヴァカだよ。

1000 名前:デフォルトの名無しさん :04/01/24 17:12
初めての1000get


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.