我正在开发一个应用程序,它恰好是我正在开发的安装程序的引导程序.该应用程序进行一些MSI调用,以获取将我的应用程序主窗口向导组合在一起所需的信息,这会导致在收集信息时打开进度窗口,然后在完成后立即离开.然后设置并启动向导.我的问题是,向导(从CPropertySheet派生)不希望在没有我添加一些调用的情况下来到前面并成为活动应用程序.
我已经解决了在OnInitDialog()方法中使用以下代码将它带到前面的问题:
SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // force window to top
SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // lose the topmost status that the previous line gave us
Run Code Online (Sandbox Code Playgroud)
我的问题是,我仍然没有弄清楚如何使窗口自动激活(即,使自己成为具有焦点的窗口).SetFocus()在此上下文中不起作用.我需要一些东西来强制窗口到Z顺序的顶部并激活它,最好是尽可能少的调用.
我的猜测是MSI调用开始时打开的进度窗口导致主窗口搞砸了,但我无法阻止该窗口出现.此外,隐藏它是没有意义的,因为它让用户知道在主窗口到达之前发生了什么.
我只是在MFC(VS2008)中创建一个基于对话框的项目,并将OnKeyDown事件添加到对话框中.当我运行项目并按下键盘上的按键时,没有任何反应.但是,如果我从对话框中删除所有控件并重新运行它的工作.即使我对对话框有控件,我该怎么做才能获得关键事件?
这是一段代码:
void CgDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
AfxMessageBox(L"Key down!");
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
Run Code Online (Sandbox Code Playgroud) 当我运行我的Windows应用程序(MFC)时,我得到两个警告.
First-chance exception at 0x01046a44 in XXX.exe: 0xC0000005: Access violation reading location 0x00000048.
First-chance exception at 0x75fdb9bc (KernelBase.dll) in XXX.exe: 0x000006BA: The RPC server is unavailable.
我可以知道他们的意思吗?谢谢
我使用以下重载方法在基于Visual C++ MFC对话框的应用程序中将列表框中的文本颜色更改为红色.当我在DEBUG模式下构建程序时,它完美地运行.但是当我使用RELEASE模式时,文本颜色不会改变.为什么这样,我怎么能克服这个问题?
谢谢!!
HBRUSH MyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if(nCtlColor == CTLCOLOR_LISTBOX)
{
if(bChangeTextColor)
{
pDC->SetTextColor(RGB(255, 0, 0));
return m_hRedBrush;
}
}
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
Run Code Online (Sandbox Code Playgroud) 我写了这段代码在对话框中绘制一个简单的矩形,我还在我的消息映射中添加了ON_WM_PAINT().但它没有显示任何对话给我!如果有人能在代码中告诉我的错误,我真的很感激:
void Ctest4Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = 2;
int y = 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
//I want to draw a rectangle
dc.Rectangle(10,10,50,50);
}
else
{
CDialogEx::OnPaint();
}
}
Run Code Online (Sandbox Code Playgroud) mfc ×5
visual-c++ ×4
c++ ×2
debug-mode ×1
keydown ×1
media-player ×1
release-mode ×1
windows ×1
windows-7 ×1