mfc-ml

1999年12月

31

[mfc 21465] CStringArrayを行列のようにはできませんか?

こんにちは。
VC6.0++で文字列を扱うプログラムを学習しています。
あるフォルダ内の複数のファイルを読み込んで、
各ファイルごとにファイル中で使用されている単語集合を保存したいと思っていま
す。

ひとつのファイルを読み込んだときは、CStringArrayを使って単語集合を配列として
保存できるのですが、CStringArrayの二次元化とでもいうのでしょうか、
[ファイル1]  [テニス][サッカー][野球][バスケ]
[ファイル2]  [スポーツ][テニス][球技][陸上] 
[ファイル3]  [野球][監督][ピッチャー][バッター]
のように行列のように、保存することはできないのでしょうか。

フォルダ内のファイル検索はCFileFindのクラスメンバを使って出来ているのですが
その次の段階へ進めません。

年末でお忙しいこととは思いますが、アドバイスをお願いします。
よろしくお願いします。

では、失礼します。
31

[mfc 21464] ダイアログ ボックスにステータス バーを付けたい

いつもお世話になっております。
はると申します。

現在MDIベースのアプリケーションを作成しております。
あるツールバーのボタンを押下した際に、ステータス バー
付のダイアログを表示したいと考えているのですがうまくい
きません。(CAPSが表示しない。)
尚、メインフレームにもステータスバーを表示しておりますが
そのステータスバーとは別にしたい。
ヘルプを参照して、下記のコードまで実装したのですが、そ
の先がどうやってよいのか分かりません。
ヘルプを見ても理解できなくて困っております。
どなたか、教えてください。

class CDlgStatusBar : public CStatusBar
{
    :
protected:
    afx_msg LRESULT OnIdleUpdateCmdUI(WPARAM wParam, LPARAM);


LRESULT CDlgStatusBar ::OnIdleUpdateCmdUI(WPARAM wParam, LPARAM)
{
    if (IsWindowVisible())
    {
        CFrameWnd *pParent = (CFrameWnd *)GetParent();
        if (pParent)
            OnUpdateCmdUI(pParent, (BOOL)wParam);
    }
    return 0L;
}

class CMyDlg : public CDialog
{
    :
public:
     CDlgStatusBar m_wndStatusBar;
    :


static UINT BASED_CODE indicators[] =
{
    ID_SEPARATOR,
    ID_INDICATOR_CAPS,
};

BOOL CMyDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    if (!m_wndStatusBar.Create(this,
        WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, ID_MYBAR) ||
    !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators) /
sizeof(UINT)))
    {
        TRACE0("Failed to create status bar\n");
        return -1;
    }

    // ステータス バーの領域の大きさを計算します
    CRect rectStart;
    CRect rectNow;
    GetClientRect(rectStart);
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST,
        AFX_IDW_CONTROLBAR_LAST, ID_SEPARATOR, reposQuery, rectNow);

    // 全てのコントロールを領域を考慮して再配置します
    CPoint pointOffset(rectNow.left - rectStart.left, rectNow.top -
rectStart.top);
    CRect  rectChild;
    CWnd* pChild = GetWindow(GW_CHILD);
    while (pChild)
    {
        pChild->GetWindowRect(rectChild);
        ScreenToClient(rectChild);
        rectChild.OffsetRect(pointOffset);
        pChild->MoveWindow(rectChild, FALSE);
        pChild = pChild->GetNextWindow();
    }

    // ステータス バーのサイズに合わせて大きさを拡大します
    CRect rectWindow;
    GetWindowRect(rectWindow);
    rectWindow.right += rectStart.Width() - rectNow.Width();
    rectWindow.bottom += rectStart.Height() - rectNow.Height();
    MoveWindow(rectWindow, FALSE);

    // ステータス バーを配置します
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST,
                    AFX_IDW_CONTROLBAR_LAST, ID_SEPARATOR);

    return TRUE;
}
30

[mfc 21463] オートメーションでのバイナリの受け渡し

いつもお世話になっています。平田@マイクロフトです

 VC++(6.0)とMFCを使ってオートメーションサーバーとクライアントを
作っています。

 サーバー、クライアント間で数Kバイト単位のバイナリーデータのやり取り(双方
向)したいのですが、MFCのウイザードで指定できるパラメータリストの中にchar*
が無くて悩んでいます。

long*やshort*はあるのですが、これを適当にchar*にキャストして使っても良い
ものなのでしょうか?あるいはこういった場合、「一般的にはこうやってデータを受
け渡しする」という物があるのでしょうか?


===========================================
  平田祥司 Shouji Hirata(GLP)
    E-mail : s...@microft.co.jp
★株式会社マイクロフト新住所★
〒227-0066   横浜市青葉区あかね台2-11-29
        Tel:045-989-2570 Fax:045-989-2571
===========================================
30

[mfc 21462] Re: 配列変数について質問です

太田です。

> どうもVC++初心者です。すいません。
> 配列変数について質問なのですが

> char buff[x];
> int   data[y];

> と宣言したい場合、x, yの値はどれ位まで大きくしてよいのでしょうか?
> 例えば1から10000までだとか。
> 初心者的な質問で申し訳ありませんが、よろしくお願いいたします。
配列の開始は0からです。C言語の決まりです。
最大は恐らく処理系依存だと思います。

ローカル変数の場合はスタックの大きさに因りますし
グローバル変数の場合はヒープの大きさに因ります。
ただし、グローバル変数は、内部的にはコンパイラが
いろいろと細工しているかも知れません。

スタックとかヒープとかの言葉を使わないで、となりますと
エラーが出ない範囲まで取れるという、極めていい加減な表現に
なります(それは回答か?)。

ただ、最大がいくつかということよりも、大きな配列の場合は
アロケートするという考えの方がいいと思います。
29

[mfc 21461] Re: 文字の判別(漢字、カタカナ、ひらがな)

Shinyaです。
Imabeppuさん、何回もありがとうございました。
MAKEWORDなんですね。上手く判別することができました。

でもこれをヘルプで調べると説明がすべて英語ですよね。
ヘルプの中で英語で説明されているものを
日本語で解説している本、ホームページはないのでしょうか。
もし良い参考書をご存知でしたら紹介してくれると助かるのですが。


では、いろいろとお世話になりました。
失礼します。
記事検索
Amazon.co.jp
  • ライブドアブログ