mfc-ml

2001年12月

31

[mfc 37192] Re:Windows2000のレジストリの制御

こんにちは、大石です。

On Thu, 27 Dec 2001 23:28:09 +0900
Hiroaki Watanabe <d...@asahi-net.or.jp> wrote:

> INIファイルを使えばユーザー権限に関係なく実行できると思いますが?

これ、知りませんでした。
(ERROR_ACCESS_DENIED で弾かれると思ってました)
で、興味があったので、ちょっと試してみたところ、
Windows 2000 Professional において
Administrators なユーザが作った ini file を
Users や Guests なユーザが書き換えられることを確認しました。

# Windows 2000 Server でも同様なのだろうか?


以下、確認に用いたコード。
---
#include <stdio.h>
#include <Windows.h>

main()
{
char szAppName[] = "app";
char szKeyName[] = "key";
char szString[0x100];
char szFileName[_MAX_PATH];

memset(szString, 0, sizeof(szString));
memset(szFileName, 0, sizeof(szFileName));

GetModuleFileName(NULL, szFileName, sizeof(szFileName));
szFileName[strlen(szFileName) - 3] = 'i';
szFileName[strlen(szFileName) - 2] = 'n';
szFileName[strlen(szFileName) - 1] = 'i';

GetPrivateProfileString(szAppName, szKeyName, "0", szString, sizeof(szString), szFileName);
printf("%s\n", szString);

{
int i = atoi(szString);
sprintf(szString, "%d", ++i);
}

if (!WritePrivateProfileString(szAppName, szKeyName, szString, szFileName))
printf("error: %d\n", GetLastError());

return 0;
}
---


Best regards,
- ---
o...@cam.hi-ho.ne.jp
http://www.cam.hi-ho.ne.jp/oishi/
30

[mfc 37191] Re: MDI で複数の子ウインドウを「開く」について

こんにちは、こなです。

> OnNewDocument()が1回だけ初期時に呼ばれ後は、OnOpenDocument() が
> 「開く」を押す度に呼ばれているようです実際、その都度すでに開いている
このあたりの動きが見えてくるといい感じです。

> 子ウインドウにテキストデーターを表示した後、新規の子ウインドウを作成し
> ています。(これが不要) return 0; を返すと既存のウインドウのみの
これが問題です。
  MDIのドキュメントを「開く」の動作は、標準では新規の子ウィンドウを作成
して、新規の子ウィンドウにテキストデータを表示です。

  CMyEditorDoc::InitFile()内でアクティブビューを取得しているようです
が、前回話したとおりこれでは駄目です。
  OnOpenDocument()ではファイルを読み込んだ結果をCMyEditorDocのメンバ
変数に保存するだけとします。実際の描画対象はRichEditCtrlだけ?のようで
すので WM_PAINTメッセージに対応する描画処理は RichEditCtrlが行ってく
れるので CRichEditCtrl::StreamIn()だけを CMyEditorView::OnUpdate()
内で行うようにしましょう。

  とにかく、アクティブビューに対してだけ描画とかは何の意味もないので、
よ~く考えてみてください。

  それでは、私のほうは正月休みに入ります。
  「良いお年を」

-- 
こな <k...@yahoo.co.jp>
29

[mfc 37190] CListCtrl で選択が変更されたことを知るには?

いつもお世話になっています。
CListCtrlでアイテムの選択状態が変更されたときにある処理を行いたい
のですが選択状態が変更されたことを知る方法が分かりません。
クラスウィザードで見つけたLVN_ODSTATECHANGEDはそれっぽいのですが、
試してみたところ、選択を変更してもメッセージがきませんでした。

やりたいことは、アイテムが選択されているときには「削除」ボタンを有効
にして、選択されていないときは無効にするといったようなことです。
何かいい方法がありましたらご教授ください。_(__)_

__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!
http://bb.yahoo.co.jp/
28

[mfc 37189] Re: [mfc 37187] Re: [mfc 37186] Re: [mfc 37184] Re: DLL 外部シンボル "__imp__DllFunc@8" は未解決です

Bunです。

Yamadaさん、きょうさん レスありがとうございます。

> クラスのDLL化は以下のように修飾するとできるはずです。
> class AFX_EXT_CLASS CHoge

MSDNを読んでいて、こちらの記事を見つけました。
こちらで、できそうです。

ありがとうございました。
28

[mfc 37188] Re: DLL 外部シンボル "__imp__DllFunc@8"は未解決です

きょうです。

At 01/12/28 13:05 金, Bun wrote:
> Bunです。

>  それはそうなんですけど・・・
> これからクラスのDLL化をしようと思っています。
> (まだやったことがありません)
....snip...
> > C++の修飾でエクスポートするときは、
> > __declspec(dllexport)でエクスポートして
> > __declspec(dllimport)でインポートします。
> > なので、.defファイルが不要になります。
> > 詳細はMSDNで調べると良いと思います。
>  これについては理解しています。

クラスも同じですけど?
クラスの定義に加えるだけです。

class __declspec(dllexport) class_name {
}:

このクラスを使用する側では、インポートする
必要があるので、__declspec(dllimport)
にしなければならないので、通常、
AFX_EXT_CLASSと記述するのですが、
DLLからDLLをインポートするときに競合する
場合があるので、__declspec(dllexport)と、
__declspec(dllimport)を再定義して使います。

hoge.dll という名前のDLLであれば、
#ifdef    _AFX_DLL
#define    HOGE_EXT_CLASS __declspec(dllexport)
#else
#define    HOGE_EXT_CLASS __declspec(dllimport)
#endif
などとして、HOGE_EXT_CLASSをクラスの定義に
使用します。

# EXE側(使う側)とエクスポート側で同じヘッダを
# 使用しない場合は、この限りではありません。
# クラスだけではなく、通常の関数も同じようにします。
記事検索
Amazon.co.jp
  • ライブドアブログ