Visual Studio 2010とMFC Doc/Viewアプリケーションを使用するSDIアプリケーションを完全に非表示にしておきたいときや、トレイアイコンから何らかのメッセージを受信してメインフレーム、ビューなどを表示したい。 m_pMainWnd->ShowWindow(SW_NORMAL);
をにに変更しますが、アプリケーションを実行するとメインフレームがちょうどちらつき、この問題を回避し、いつでも私が望むようにメインフレームの表示能力を保つために、どうすればいいのかがわかります。あなたはVC2005を持っているか、それ以前の場合Doc/Viewアプリケーションを非表示にする
答えて
は、通常、次のように行います:m_nCmdShowが発生しないよう、フリッカーのためProcessShallCommand
前に、SW_HIDEに設定する必要があることを
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
m_nCmdShow = SW_HIDE;
// Dispatch commands specified on the command line. Will return FALSE if
// app was launched with /RegServer, /Register, /Unregserver or /Unregister.
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// The one and only window has been initialized, so show and update it
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
注意を。
しかし、VC2010にバグがあるようです。私はこれをやってから興味をそそられ、新鮮なVC2010プロジェクトを試みましたが、それは機能しませんでした。私は、次のMFC関数で問題が深いことに気づいた。この関数の実行時
BOOL CFrameWnd::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle,
CWnd* pParentWnd, CCreateContext* pContext)
{
// only do this once
ASSERT_VALID_IDR(nIDResource);
ASSERT(m_nIDHelp == 0 || m_nIDHelp == nIDResource);
m_nIDHelp = nIDResource; // ID for help context (+HID_BASE_RESOURCE)
CString strFullString;
if (strFullString.LoadString(nIDResource))
AfxExtractSubString(m_strTitle, strFullString, 0); // first sub-string
VERIFY(AfxDeferRegisterClass(AFX_WNDFRAMEORVIEW_REG));
// attempt to create the window
LPCTSTR lpszClass = GetIconWndClass(dwDefaultStyle, nIDResource);
CString strTitle = m_strTitle;
if (!Create(lpszClass, strTitle, dwDefaultStyle, rectDefault,
pParentWnd, ATL_MAKEINTRESOURCE(nIDResource), 0L, pContext))
{
return FALSE; // will self destruct on failure normally
}
// save the default menu handle
ASSERT(m_hWnd != NULL);
m_hMenuDefault = m_dwMenuBarState == AFX_MBS_VISIBLE ? ::GetMenu(m_hWnd) : m_hMenu;
// load accelerator resource
LoadAccelTable(ATL_MAKEINTRESOURCE(nIDResource));
if (pContext == NULL) // send initial update
SendMessageToDescendants(WM_INITIALUPDATE, 0, 0, TRUE, TRUE);
return TRUE;
}
m_nCmdShowはまだSW_HIDEされているが、if (!Create(lpszClass...
ラインが実行されたときには、SW_SHOWNORMALに変わります。なぜVC2010プロジェクトでしか起こらないのか、私にはバグのように聞こえます。
サンプルプロジェクトはSDIでした。
これはダイアログベースのアプリケーションに由来しますが、Doc/Viewアプリケーションにも変換できるはずです。 OnWindowPosChangingイベントを処理する必要があります。キー行は、ifステートメント内のキー行です。これにより、私のアプリケーションは完全に隠れて見えるようになります。ここ
void CIPViewerDlg::OnWindowPosChanging(WINDOWPOS FAR* lpWindowPosition)
{
if(!m_bVisible)
{
lpWindowPosition->flags &= ~SWP_SHOWWINDOW;
}
CDialog::OnWindowPosChanging(lpWindowPosition);
}
は、SDI/MDIアプリケーションのためのソリューションである:(VC2010と)新しいMFCは、システムレジストリに格納された設定でm_nCmdShow値を上書き。この動作を変更するには、アプリケーションクラスのLoadWindowPlacement仮想関数をオーバーライドするだけです。
BOOL CAdVisuoApp::LoadWindowPlacement(CRect& rectNormalPosition, int& nFflags, int& nShowCmd)
{
BOOL b = CWinAppEx::LoadWindowPlacement(rectNormalPosition, nFflags, nShowCmd);
nShowCmd = SW_HIDE;
return b;
}
あなたが正しくのCMainFrame ::のPreCreateWindow(CREATESTRUCT & CS)でWS_VISIBLEビットをオフにしていることを確認します。我々は単にそれをオフにするのではなく、ビットを否定していた
cs.style &= ~WS_VISIBLE;
、この関数は一度しか呼ばれていたので、我々は、VS 6.0に離れてそれで得た:このような何かが動作するはずです。これは、Visual Studioの新しいバージョンでは2回呼び出されています。したがって、2回目の呼び出しでは、すぐにそれを元に戻していました。 :-O
- 1. Windows Mobile - アプリケーションを非表示
- 2. アプリケーションを非表示にして、タスクスイッチャーでアプリケーションを非表示にする方法はありますか?
- 3. 条件を表示/非表示のフィールドを表示/非表示にする
- 4. クラスを表示/非表示にする
- 5. JavaScriptを表示/非表示にする
- 6. Javafxタブペインのタブを非表示/非表示にするには
- 7. WPFアプリケーションのすべてのボタンを非表示にする
- 8. launchdを実行してアプリケーションを非表示にする
- 9. ウィンドウを非表示にしてアプリケーションを起動する
- 10. ココア:1つのアプリケーションを非表示
- 11. Facebookのアプリケーション開発を非表示
- 12. ブートストラップデータテーブルの列を非表示/非表示にする方法は?
- 13. C#でプロセスを非表示/非表示にする方法は?
- 14. Eclipseのメニューバーを非表示にする(自動非表示)
- 15. メインウィンドウのクロムエクステンションを非表示/非表示にする方法
- 16. Excelで列を非表示/非表示にする
- 17. divをクリックして非表示にすると非表示
- 18. 非表示のシートを非表示にする
- 19. チェックボックスを非表示または非表示にするJavaScript
- 20. InlineKeyboardMarkupを非表示で非表示にする
- 21. プログラムでウィンドウ上のアプリケーションを非表示にする
- 22. カスタムHTMLアプリケーション内の特定の列を非表示にする
- 23. anglejsベースのアプリケーションでツールチップを非表示にする方法は?
- 24. Java/Mac/Linux Dockアプリケーションを非表示にする
- 25. Androidアプリケーションのfacebook app_idを非表示にする
- 26. アプリケーションでキーを非表示にする方法は?
- 27. 完全なアプリケーションのスクロールバーを非表示にする
- 28. VSTOアプリケーションでExcelの行を表示/非表示C#
- 29. WPF - タスクマネージャで非表示になっているがアクティブなアプリケーションを表示
- 30. Jquery表示/非表示にする前に要素を右にシフト表示/非表示
私はVisual studio 2010 sp1を使用しています。私のプロジェクトはSDIで、動作しません。私は質問にVS 2010を追加します。私の問題解決に役立つものがあれば、それを共有してください。 – AMCoded