void CAnalyzeDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) { CResizingDialog::OnActivate(nState, pWndOther, bMinimized); if (nState == WA_INACTIVE) m_pTree->SetWindowPos(&wndNoTopMost,0,0,0,0, SWP_NOMOVE | SWP_NOSIZE |SWP_NOACTIVATE ); else m_pTree->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE |SWP_NOACTIVATE ); }代码解释
时间: 2023-07-14 10:12:01 浏览: 40
这段代码是 MFC 框架下对话框类 CAnalyzeDlg 的 OnActivate 函数的实现。OnActivate 函数会在对话框被激活或非激活状态改变时被调用。
该函数调用了基类 CResizingDialog 的 OnActivate 函数,然后根据 nState 参数的值来判断对话框当前是激活还是非激活状态。如果是非激活状态(即 nState == WA_INACTIVE),则将对话框中的一个树形控件 m_pTree 设置为非置顶窗口,否则将其设置为置顶窗口,以便在对话框被激活时树形控件能够显示在最上层。其中的 SetWindowPos 函数用于设置窗口的大小、位置和显示状态。
相关问题
class CAnalyzeDlg : public CResizingDialog { // Construction public: CString GetStepInfo(int iStep, const vector <int> & Status, const vector <char> & Symbol, CString sInput, Pair Action, int Goto); CAnalyzeDlg(CWnd* pParent = NULL); // standard constructor ~CAnalyzeDlg(); void SetGrammar(const Grammar & g); // Dialog Data //{{AFX_DATA(CAnalyzeDlg) enum { IDD = IDD_DIALOG2 }; CEdit m_edit1; CExplorer1 m_web; CString m_input; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAnalyzeDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: Grammar m_g; CTreeDlg * m_pTree; string m_strTempFilename; // Generated message map functions //{{AFX_MSG(CAnalyzeDlg) virtual void OnOK(); virtual void OnCancel(); afx_msg void OnButton1(); virtual BOOL OnInitDialog(); afx_msg void OnButton2(); afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: void MakeTree(); stack <int> TreeStack; };代码详细介绍
这是一个 MFC 对话框类 CAnalyzeDlg,继承自 CResizingDialog。其中包含了以下成员函数:
- GetStepInfo:根据当前分析步骤的状态、符号、输入、动作以及 Goto 表信息,构造一个分析步骤的信息字符串。
- SetGrammar:设置语法规则。
- OnOK、OnCancel:处理对话框的 OK 和 Cancel 按钮消息。
- OnInitDialog:初始化对话框。
- OnButton1、OnButton2:处理对话框中的两个按钮消息。
- OnActivate:处理对话框激活消息。
此外,该类还包含了以下成员变量:
- m_g:语法规则。
- m_pTree:指向语法分析树对话框的指针。
- m_strTempFilename:临时文件名。
- TreeStack:用于构造语法分析树的栈。
MFC窗口去边框、置顶、全屏、激活
对于MFC程序,可以通过以下方法来实现窗口去边框、置顶、全屏、激活:
1. 去边框:在窗口的PreCreateWindow函数中设置样式为无边框样式(WS_POPUP)。
2. 置顶:使用SetWindowPos函数设置窗口的位置和Z序,将其置于最顶层。
3. 全屏:使用SetWindowPos函数将窗口的位置和大小设置为屏幕的大小。
4. 激活:使用SetForegroundWindow函数将窗口激活。
具体的实现方法可以参考以下代码:
```c++
// 去边框
BOOL CMyWnd::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style &= ~WS_BORDER; // 去掉边框样式
cs.dwExStyle |= WS_EX_TOPMOST; // 置顶
return CWnd::PreCreateWindow(cs);
}
// 全屏
void CMyWnd::OnFullScreen()
{
SetWindowPos(&wndTop, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), SWP_SHOWWINDOW);
}
// 激活
void CMyWnd::OnActivate()
{
SetForegroundWindow();
}
```
需要注意的是,窗口的去边框、置顶、全屏、激活等操作可能会影响用户体验,需要根据实际需求进行使用。