2025年1月
 1234
567891011
12131415161718
19202122232425
262728293031  

カテゴリー

アーカイブ

ブログ統計情報

  • 103,590 アクセス


MFC ダイアログに描画

MFC ダイアログ exe で GDI などでの描画を行うときは,通常「Picture Control」を使用する.
メンバ変数として CStatic を割り当てて,その変数(ウィンドウ)に対して描画する.
CWnd::GetDlgItem::GetDlgItem でも良い.


単体テスト用など,それほど重要でないプロジェクトでダイアログに直接描画したい時がある.
ZipMF.exe
リサイズ可能なダイアログの場合,Picture Control のリサイズなども意外と面倒なため


VC 2022 で,MFC の「ダイアログ ベース」として作成.
CDlgDrwDlg
ダイアログの基本クラスは「CDialog」とした.


CDlgDrwDlg::OnPaint() の else 部分を次の様に変更.

	{
	//	CDialog::OnPaint();
		{
			CPaintDC dc(this);
			CRect	rect;
			GetClientRect(&rect);
			rect.DeflateRect(10, 10);
			dc.Rectangle(rect);
		}
	}

CDlgDrwDlg::OnPaint
ダイアログの「プロパティ」-「透明化」は「True」の方が良さそう.
DlgDrw.exe
https://itl.mish.work/i_Tools/Doc/blog/vc/DlgDrw.zip

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VS 2022 の更新で「問題が…」

VS の更新があったので更新すると…
「申し訳ございません。問題が発生しました」.
VS 2022 の更新で「問題が発生しました」
どうも VC ランタイムのパッケージがインストールされなかったみたい.
VC Redist MSVC
デバッグや通常の実行も問題はなさそう.


前回とは違い「修復」で対応しようと思ったが…
VS の修復
どこまでがリセットされるかわからないので「変更」で対応.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

サムネイル表示が止まる?

以前作成したエクスプローラサムネイル表示
iShellExt  2024/10/08
前からの現象だが,不定期に表示が止まってしまうことがあった.
ほとんどが個人的に作成したシェルエクステンションの影響だが,今回は違ったように思う.
全ての explorer.exe を終了させても改善されない.


再起動すれば良いのはわかっているが,順に exe を終了させることに…
dllhost.exe を終了させると,止まっていた表示が動き出した.
ハッキリしたことがわかってないので,とりあえずメモ.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

TryHackMe を使って…

先日「7日間でハッキングをはじめる本」を購入して,その内容をやった.
7日間でハッキングをはじめる本 TryHackMeを使って身体で覚える攻撃手法と脆弱性
7日間とはいかず,2週間程度かかってしまった.


20年位前に作成した Web のシステムでは,これらの知識がなかったため幾つか問題があった.
何年か前に修正済みで,そのほとんどが「クロスサイトスクリプティング」だったと思う.


OSコマンドインジェクション」などは知っていたが,ポートスキャンやパスワードの具体的な部分がわかった.
デフォルトポートの危険性や,パスワードで「数桁の数字」などは意味がないことがよくわかる.


外には公開していないので問題なかったとは思うが
LAN 内の幾つかの機器をポートスキャンしてみると,意図していないものが開いたままのものがあった.
10年位前に追加したもので,設定を間違えたのか,デフォルトで開いていたのか…


2024/10/02
この様な記事を書いたからというわけではないと思うが,昨日から次の様なアクセスが来ている.

//mish.work/?a='>"></script><svg/onload=confirm(1)>&b='>"></script><svg/onload=confirm(2)>&c=...

特に問題ないと思うが,ログが汚くなってしまう.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

0x80030002

次の様なエラーになると連絡が…


ファイルのコピー
予期しないエラーのため、ファイルをコピーできません。…
エラー 0x80030002: ***** が見つかりませんでした。
エラー  0x80030002


よくある “file not found” とはエラーコードが異なる.
ERROR_FILE_NOT_FOUND 0x00000002
また,更新日時やサイズが表示されているので「ファイルがない」わけではなさそう.
表示されているファイル名は ZIP 圧縮したファイルの一部?
タイトルバーがアプリケーション名などになっていないので,API 呼出しの中などで表示されているか?


0x80030002 は STG_E_FILENOTFOUND
幾つか心当たりがある操作などを試してみたが,現象は確認できなかった.


その後現象が発生しなくなったとのことで詳細はわからず.とりあえずメモ.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

DDX_CBIndex , DDX_CBString

デバッグ用のツールを作成していて,コンボボックスを使いたくなった.
使いたかったのは「ドロップダウン リスト」で,ドロップダウン部分を常に表示した「標準」の状態.
本当はリストボックスを使えば良かったか?


VC6 の「MFC ClassWizard」で変数を追加しようとすると変数のタイプが「CString」.欲しいのは「int」.
コンボボックスのタイプを「ドロップダウン リスト」に変更すると「int」が表示され,DDX_CBIndex が追加できた.

void CSwMLGDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSwMLGDlg)
	DDX_CBIndex(pDX, IDC_LANG_UI, m_LangUI);
	DDX_CBIndex(pDX, IDC_LANG_PR, m_LangPR);
	//}}AFX_DATA_MAP
}

変数追加後,コンボボックスのタイプを「標準」に変更.


ビルドして動作を確認すると,特に問題なさそう.
「標準」コンボボックスで DDX_CBIndex


デバッガで追いかけてコードを見ても特に怪しい所はなさそう?
VC2015  DDX_CBIndex


動作を試してはないが,VC 2015 などの変数の追加では,手動で型を指定できそう?
VC 2022 コントロール変数の追加

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

TM103M4 入手

休日など PC を起動するまでもない作業の目的で Android タブレット TM103M4V1 を入手.
TM103M4V1-B
他にも NAS に保存した動画が見られれば良いと思っていたが,これは限定的なものとなってしまった.
moto g13 と同様で,BS 放送を DR モードで録画したものがうまく見られない.地デジ放送のものであれば OK .
moto g8 power lite ではうまく見られるので,端末と REC-ON App との相性の問題か?


今回は,スマートフォンなどの情報は引き継がないで設定した.
Google アカウントによるのか,Chrome にはいろいろな情報が引き継がれる.
アプリの作り方によるものと思うが,スマートフォンでは少し面倒と思う部分が幾つか解消されている(PC に近い?).


WebGL 関係の動作として,Three.js はうまく動作しているが SceneJS の方はうまく表示されない.


「ダークモード」で使い始めたが,明るい色が背景前提のアプリがまだまだ多い気がする.
また,このブログもそうだが,ブラウザで見る時明るすぎるため目が疲れる?


スマートフォンのロック解除では「指紋認証」を長く使っているので,ロック解除が意外と面倒に感じる.
表示が消えた状態で,電源ボタンを押して表示させようとして,反応が悪い時や表示できないことがあった.
10 秒以上押しての「強制的な再起動」で対応した.
表示できないことは何度かあり.また,時間を置くと同じ操作で表示されることもあり.
私の使い方であれば,バッテリは 3 日位持ちそう.


同時に注文したキーボード付きのケースが到着.

タブレットを装着して,キーボードもうまくケースに収まるかと思ったが,そうではなかった.
持ち運びを考えると,キーボードがケースに固定できないので使い勝手は良くない.


キーボードに関して,英語と中国語で書かれたものが入っている.
内容は,Bluetooth 接続のキーボードを使ったことがあれば誰もが知っている程度のもの.
Android ,Windows ,iOS の表記があるので接続先を変えられそうだがよくわからない.
キーボード単体としては次のものが近いと思われる.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VirusTotal 誤検知 trojan

以前よりは良くなった気もするが…

Avast   	Win32:Evo-gen [Trj]
AVG     	Win32:Evo-gen [Trj]
GData   	Win32.Trojan.Agent.8G1FEV
Ikarus    	Trojan-Spy.Evo
MaxSecure	Trojan.Malware.121218.susgen
Skyhigh (SWG)	GenericRXWN-PP!3F53C2B1E9DD
Trellix (ENS)	Artemis!E2A95C89EB37

VirusTotal   i3Dx
以前 VC 2017 などでビルドしたものは誤検知も少なかったと思うが,最近はそうでもない?
今年の初め位から誤検出が増えた気がする.
個人的なツールはほとんど問題ないが,一度誤検知されるとその後いろいろと面倒.
以前 McAfee に報告したが,その時は半年近くかかった.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

コンソール AP でバージョン情報

::GetFileVersionInfo を使った FVersion.hxx が,他のコードに依存していたので整理.
次の様なコードで,コンソール AP のバージョン情報を表示できる.

#include	"FVer_dmp.hxx"

int _tmain(int argc, TCHAR* argv[])
{
	_tsetlocale(LC_ALL,_T("")) ;
	::reg_argv(argc,argv) ;
	::dmp_self_version() ;
	::pause() ;
	return 0 ;
	}

FVer_dmp.hxx に分離

https://itl.mish.work/i_Tools/Doc/blog/vc/T_FVer.zip

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VC6 から VC2022 への移行

VC 6 から 2022 へのアップグレードがなくなったので,手動での移行方法を試してみた.
VC6 から 2005 , 2008
VC6 から 2010 – 2019


「新しいプロジェクトの作成」で「空のプロジェクト」を選択して「次へ」
「新しいプロジェクトの作成」で「空のプロジェクト」を選択して「次へ」
適当なプロジェクト名を付けて「作成」.
プロジェクト名を入力して「作成」
必要に応じて,VC 6 プロジェクトのファイルをコピー.
VC 6 プロジェクトのファイルをコピー


「ソリューション エクスプローラー」のプロジェクトを「右クリック」-「追加」-「既存の項目」.
cpp,h,rc を追加
cpp,h,rc を選択して「追加」.


必要に応じて「出力ディレクトリ」などの指定.
「出力ディレクトリ」などの指定
「共有 DLL で MFC を使う」に.
「共有 DLL で MFC を使う」を選択
「_CONSOLE」を「_WINDOWS」に.
「_CONSOLE」を「_WINDOWS」に
「Windows(/SUBSYSTEM:WINDOWS)」に.
「Windows(/SUBSYSTEM:WINDOWS)」を選択


ヘッダーファイルを追加していないと「クラス ウィザード」がうまく機能しない.


以下は,正しく設定されていない場合のエラー.

C:\...\afx.h(24,1): error C1189: #error:  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

「スタティック ライブラリで MFC を使用する」または「共有 DLL で MFC を使う」に.


libcmtd.lib(exe_main.obj) : error LNK2019: 未解決の外部シンボル _main が関数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) で参照されました

「Windows (/SUBSYSTEM:WINDOWS)」に.


クラス ウィザードで CAboutDlg のみ.
クラス ウィザード  CAboutDlg
ソリューションに *.h を追加する.


* 他の動作はまだ確認中です.

Is this 投稿 useful? Useful Useless 1 of 1 people say this 投稿 is useful.

「バージョン情報」ダイアログ

バージョンリソースを読み込み「バージョン情報」ダイアログの表示で使用するコード.
バージョンリソースを読み込み「バージョン情報」ダイアログに設定
IDD_ABOUTBOX の IDC_STATIC を IDC_FV_DESCRIPTION_VERSION と IDC_FV_LEGAL_COPYRIGHT に変更.
???Dlg.cpp で次をインクルード.
  #include  "FVerDlg.hxx"
  #include  "i_trace.hxx"
次の様に OnInitDialog に ::SetAboutFileVer を追加.
  BOOL CAboutDlg::OnInitDialog()
  {
     CDialog::OnInitDialog();
     ::SetAboutFileVer(this->GetSafeHwnd()) ;
     return TRUE;
     }

https://itl.mish.work/i_Tools/Doc/blog/vc/AboutB.zip

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

¥¥(コンピュータ名) を開く

\\(ComputerName) を開きたいと思い,次の様なコードを書いた.

{
	tstring	self_name = _T("\\\\") + ::GetComputerName() + _T("\\") ;
	S_Exec	se ;
	se.SetFile(self_name.c_str()) ;
	se.Execute() ;
	}

これはこれでうまく動作するが,それを perplexity に問い合わせると
::ShellExecute エクスプローラ 自分自身をネットワーク名で開く

#include <windows.h>
#include <shellapi.h>

int main()
{
    TCHAR computerName[MAX_COMPUTERNAME_LENGTH + 1];
    DWORD size = sizeof(computerName) / sizeof(computerName[0]);
    
    // コンピューター名を取得
    if (GetComputerName(computerName, &size))
    {
        // ネットワークパスを構築
        TCHAR networkPath[MAX_PATH];
        wsprintf(networkPath, TEXT("\\\\%s"), computerName);
        
        // ShellExecuteを使用してエクスプローラーを起動
        ShellExecute(NULL, TEXT("open"), TEXT("explorer.exe"), networkPath, NULL, SW_SHOWNORMAL);
    }

    return 0;
}

そのままで動作するコードが表示されている.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

コンソール AP のアイコン

以前,コンソール AP にアイコンなどのリソースを追加する方法はいろいろとやった.
それを今回,動作時にアイコンを変更できないかと…
最初 Copilot で問合わせたがうまい情報は引っ掛からなかった.
それで今度は最近利用し始めた perplexity で…
「Windows cpp で コンソール AP のアイコンを指定する方法と動的に変更する方法」と入力.
perplexity  SetConsoleIcon
kernel32 にある SetConsoleIcon が使えるらしい.
それで次の様なコードを書いてみたが…

BOOL WINAPI SetConsoleIcon(HICON hIcon)
{
    typedef BOOL (WINAPI *SetConsoleIconFn)(HICON);
    static SetConsoleIconFn setConsoleIcon = NULL;

    if (setConsoleIcon == NULL)
    {
        HMODULE hKernel32 = GetModuleHandleA("kernel32.dll");
        if (hKernel32 == NULL) return FALSE;

        setConsoleIcon = (SetConsoleIconFn)GetProcAddress(hKernel32, "SetConsoleIcon");
        if (setConsoleIcon == NULL) return FALSE;
        }
    return setConsoleIcon(hIcon);
    }

bool    test    (c_tstring& str)
{
    std::terr << str << std::endl ;
    ::pause(10) ;
    HICON   hIcn2 = ::LoadIcon(::GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON2)) ;
    HICON   hIcn3 = ::LoadIcon(::GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON3)) ;
    {
        HWND    hWnd  = ::GetConsoleWindow() ;
        ::SendMessage(hWnd,WM_SETICON,TRUE, (LPARAM)hIcn2) ;
        ::SendMessage(hWnd,WM_SETICON,FALSE,(LPARAM)hIcn2) ;
        }
    ::pause(20) ;
    {
        SetConsoleIcon(hIcn3) ;
        }
    ::pause(30) ;
    return  true ;
    }

Win7 や 8.1 ではうまく変更できたが,Win10 や 11 では変更できなかった.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

FBX SDK 2020.3.7

FBX SDKダウンロードページを見ると 2020.3.7 があった.
インストールしてみると,今までと lib 以下が異なる.
2020.3.4 までは VS のバージョンでわかれていたのに,今回は lib\x64\debug\ などになっている.
FBX SDK 2020.3.7
ビルドしてのテストなどはまた今度落ち着いた時に …


設定などは次の所に書いています.
https://jml.mish.work/index.php/cpp/fbx-sdk-setting.html


FBX Review は exe が置いてあった.
Autodesk FBX Review – Windows 64 Bit

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

QNAP AI Core 3.4.1

先日から QNAP NAS のパッケージのアップデートがある.
幾つかは問題なく更新できるのに AI Core 3.4.0 のみが更新に失敗する.
今までは特に問題なく更新できていた(関連するものは自動で更新されていた)のに…


イベントログを見ると,次の様になっている.

エラー  2024-06-29 18:35:45  Iwao 192.168.1.xx Qmanager    Qmanager/2...  App Center App Installation  [App Center] Failed to install QuMagieCore. You must first install container-station.
エラー  2024-07-09 15:58:59  Iwao 192.168.1.xx Web Desktop Mozilla/5.0    App Center App Installation  [App Center] Failed to install QuMagieCore. You must first install container-station.

どうも Container Station を先に更新しないといけないみたい.
Container Station を更新してから AI Core の更新でうまくいった.
QNAP AI Core 3.4.1 に更新できない?

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

warning C4786

VC 6 でビルドしているとよく出力される C4786

--------------------Configuration: T_prm_c - Win32 Debug--------------------
Compiling...
T_prm_c.cpp
c:\program files (x86)\microsoft visual studio\vc98\include\utility(21) : warning C4786: 'std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > con
st *>::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const *>' : identifier was truncated to '255' characters in the debug information
Linking...
T_prm_c.exe - 0 error(s), 1 warning(s)

warning C4786
最初の頃は場所が限定てきていたので #pragma warning (… : 4786 ) で切り替えていた.
がそのうち,プロジェクトによっては StdAfx.h で対応する様になった.


古くからのプロジェクトで,直接はこれらの対応を行っていない(共通のヘッダでの対応)プロジェクトが幾つもある.
コンパイル単位ではほとんど C4786 は出力されないが,一部のソースで出力され,また限定できたのでそのメモ.

--------------------Configuration: BlockIn - Win32 Debug--------------------
Compiling...
SMastSel.cpp
c:\program files (x86)\microsoft visual studio\vc98\mfc\include\afxtempl.h(63) : warning C4786: 'std::vector<std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char
>,std::allocator<char> > > >,std::allocator<std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > >' : identifier was truncated to '
255' characters in the debug information
SMastSel.obj - 0 error(s), 1 warning(s)

ソースに #pragma warning (disable : 4786 ) を追加して,更にそのヘッダがインクルードしているものをソースに追加.
warning C4786  AfxTempl.h
これで AfxTempl.h をインクルードしているヘッダファイルが限定できた.


iostream を使用している場合も,その前に disable : C4786 が必要みたいだが,その場合は簡単には見つけられない?
warning C4786  iostream


他には fstream ,string .

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

robocopy エラー 87

IO DATA SSPA-USC500K が手に入ったので,テストを兼ねてソースなどをバックアップ.
アイ・オー・データ ポータブルSSD SSPA-USC500K
自前の「ディレクトリ以下のコピー」ツールでコピーしていると…

100%      新しいファイル                    1300        Vxx_P_A_.hxx
2024/06/23 15:44:41 エラー 87 (0x00000057) ファイル属性を変更しています \\DS220\Public\Document\Develop\_.SRC\__Iwao\P_A_gnsa.hxx
パラメーターが間違っています。
5 秒間待機しています... 再試行しています...

robocopy エラー 87 (0x00000057) ファイル属性を変更しています    
パラメーターが間違っています。
全てのファイルがこの様になるわけではない.
原因は,恐らくコピー先が exFAT のため?
ちゃんと調べたわけではないが,更新日時が古い(最近編集していない)ファイルでエラーになる模様.
これらのファイルは,昔 NT サーバなどで管理していたものを NAS に移して運用している.
その後,その NAS 上のものを編集する様になり,更新したものはエラーにはなっていない?
コピーはできているのと,同じコマンドの再実行ではエラーにはならないのでこのままとする.


エラーになったファイルは「作成日時」と「アクセス日時」がコピーしたタイミングに更新されてしまっている.


2024/07/10
改めて調べてみると,コピー元のアクセス日時が正しくない
robocopy  コピー元の作成日時が正しくない

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

::ShellExecute

「インデックスのオプション」を開くために ::ShellExecute などから開けないかと…
検索するとコマンドプロンプトなどで「control.exe /name Microsoft.IndexingOptions」とすれば良いことがわかった.


この動作の cpp のコード.

CString	Error_FormatMessage(const DWORD error)
{
	CString	message ;
	LPVOID	lpMessageBuffer = NULL ;
	if (::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
			NULL,error,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
			(LPTSTR)&lpMessageBuffer,0,NULL)) {
		message = LPTSTR(lpMessageBuffer) ;
		::LocalFree(lpMessageBuffer) ;
		}
	return	message ;
	}
void CShellEDlg::OnExecute() 
{
	UpdateData(TRUE) ;
	HINSTANCE hInst = ::ShellExecute(this->GetSafeHwnd(),m_StrOper,m_StrFile,m_StrPara,NULL,SW_SHOW) ;
	if (UINT64(hInst) > 32)	{	return ;	}
	DWORD	error = ::GetLastError() ;
	CString	str ;
	{
		str.Format(_T("%d\r\n%d"),DWORD(hInst),error) ;
		str += _T("    ") + ::Error_FormatMessage(error) ;
		str += _T("\r\n") + m_StrOper ;
		str += _T("\r\n") + m_StrFile ;
		str += _T("\r\n") + m_StrPara ;
		}
	AfxMessageBox(str) ;
	}

CShellEDlg::OnExecute()
ShellE  メンバ変数
ShellE.exe
https://itl.mish.work/i_Tools/Doc/blog/vc/ShellE.zip

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

SetWindowPos で最前面に

以前から CWnd::SetWindowPos などを使用してウィンドウを最前面にしているツールがいくつかある.
ほとんどの場合これでうまくいっているが,先日テストしていて最前面に移動しない現象を確認.


2 つの exe があり,A.exe から B.exe を起動している.
B.exe はダイアログベースで,そのウィンドウを A.exe のウィンドウより前面に表示するもの.


Spy++ で見ると最前面に移動できた時は WS_EX_TOPMOST がある.
WS_EX_TOPMOST
が,うまくいかない場合には WS_EX_TOPMOST がない状態.


いろいろと操作してみたが,なかなか現象が絞れなかった.
結局は B.exe を起動する時,他のウィンドウにフォーカスが移っている?と,最前面にならないみたい.
B.exe の起動をエクスプローラなどから行い,ウィンドウが表示される前にブラウザなどに切替えると最前面にならない.


今回対象のものは,最前面に移動しなくても問題ないと思われるのでこのままとする.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

CXxxxDlg::OnCreate が 2 回

「ある操作を行ったとき exe が 2 つ起動する」と報告があった.
言い訳になるが,通常この動作は年に 2 回程度しか通らないもの.また,他の操作により通らないこともある.
その条件になる様に環境を設定して試すと,確かに…


その部分のコードは,何年も変更はしていない.
いろいろと動作を確認していると,VC 10 以前では問題ないが,11 以降で 2 つ起動することがわかった.


その動作の部分のみを抜き出して動作を試した.

int CT_DlG_1Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;
	// TODO:  ここに特定な作成コードを追加してください。
	{
		HWND	HWnd = NULL ;
		{
			CWnd*	mainWnd = AfxGetMainWnd() ;
			if (mainWnd != NULL) {
				HWnd = mainWnd->GetSafeHwnd() ;
				}
			}
		HINSTANCE  hInst = ::ShellExecute(HWnd,NULL,_T("NotePad.exe"),NULL,NULL,SW_SHOWNORMAL) ;
		return	-1 ;
		}
	return 0;
	}

CXxxxDlg::OnCreate が 2 回呼ばれる?
MFC の動作が変わったのか,CXxxxDlg::OnCreate が 2 回呼ばれるようになったみたい.
https://itl.mish.work/i_Tools/Doc/blog/vc/TDlg0614.zip


2 回目に呼ばれた時は,何もしないで return -1 とする様に変更予定.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.