我有一个调整大小的对话框.它还有一个自定义背景,我为响应WM_ERASEBKGND调用而绘制(当前是对FillSolidRect的简单调用).
调整对话框大小后,会出现巨大的闪烁现象.为了尝试减少闪烁,我枚举所有子窗口并将它们添加到剪切区域.这似乎有点帮助 - 现在闪烁在所有儿童控件中都很明显,因为它们重新粉饰.
如何在调整大小时使对话框无闪烁?我怀疑双缓冲必须发挥作用,但我不知道如何使用带有子控件的对话框(没有让所有子控件所有者绘制或类似的东西).
我应该注意到我使用的是C++(不是.NET)和MFC,尽管欢迎基于Win32的纯解决方案:)
注意:有一件事我尝试了但哪些不起作用(不确定原因)是:
CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.FillSolidRect(rect, backgroundColor);
pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);
Run Code Online (Sandbox Code Playgroud) 我需要一个弹出对话框,当我从不同的线程收到一条消息时,但是对话框应该不依赖于Activity,即它应该在屏幕焦点所在的位置显示对话框.
可以吗?因为每个Activity都会处理对话框,所以我想到了使用服务,但是又添加了一个线程,我想避免这种情况.
还有其他选择吗?
我的应用程序可能需要一段时间才能连接到数据库.这个连接使用单个库函数调用,即我不能在其中放入进度更新并进行回调或类似的操作.
我的想法是在连接到数据库之前在单独的线程中创建一个带有进度条的对话框.此对话框将不断更改进度状态,CProgressCtrl::StepIt()
以便用户看到正在发生的事情.
在设置完对话框并执行其操作之后,我想从主线程调用数据库连接函数.连接功能完成后,我想停止进度条线程.
让我画一幅画:
CMyApp:: ProgressThread
InitInstance() .
| .
| .
+-Create Dialog-+
| |
| Animate
Connect Progress
to Bar
DB |
| |
+-Destroy Dlg---+
| .
| .
Run Code Online (Sandbox Code Playgroud)
那可能吗?如果有,怎么样?
也许整个事情也可以使用计时器.可能会简单得多,但我也无法做到这一点.
CProgressCtrl::SetMarquee()
哪些可能正是我需要的但我无法使用它因为应用程序没有Unicode支持.更新2
我得到它的方式AlexEzh和Javier De Pedro建议:将DB stuf放入自己的线程.
最初我担心如何处理错误,但它实际上与之前的情况非常相似.
true
.CMyDialog::Animate()
哪些调用CProgressCtrl::StepIt()
然后调用Sleep()
.false
在完成时将running-flag设置为.缺点:将鼠标移到窗口上不起作用.它是看不见的.因此,不能使用取消按钮或其他交互式对话元素.但是,我可以忍受这一点.
既然您喜欢这个图表,现在的样子如下:
CMyApp:: WorkerThread
InitInstance() .
| .
| .
Create Dialog .
| .
+-Start Thread--+ …
Run Code Online (Sandbox Code Playgroud) 如何在不创建各种对话框窗口的自定义实现的情况下将样式应用于所有对话框?
我想覆盖Theme.Dialog
我的最终目标是为应用程序中的每个弹出窗口更改标题栏的颜色.
我Microsoft.Win32.OpenFileDialog
在我的WPF应用程序中使用选择文件:
var dlg = new Microsoft.Win32.OpenFileDialog
{
Title = "Select configuration",
DefaultExt = ".xml",
Filter = "XML-file (.xml)|*.xml",
CheckFileExists = true
};
if (dlg.ShowDialog() == true)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
根据MSDN截图,Windows 7对话框必须具有现代风格,但我得到了旧的:
像这个问题一样添加清单不起作用.如何显示MSDN中的对话框?
编辑:
首先,我对"原生"解决方案感兴趣,而不是使用第三方组件.
我想使用一个activity as dialog
,我把活动的主题作为对话,我成功了.但我有这个问题是当我点击活动之外它自动关闭和以前的活动开始..
我尝试了一个透明的父布局,它看起来不像一个对话框..
我想使用此活动在我的应用程序中创建新帐户,因为它只有3个字段,所以在平板电脑中它看起来大空间未使用...所以我想使用活动作为对话框.....
那么提前...... !!! 例子将不胜感激.. !!!!!
我想使用AppCompat库,但是没有Dialog主题,并且没有我可以扩展或使用的DialogWhenLarge主题.
有没有办法可以扩展基本主题并使其成为DialogWhenLarge,可能使用文件夹和自定义样式项.
谢谢
我使用官方指南创建了一个全屏对话框
问题是,我的工具栏与状态栏重叠,我无法弄清楚如何解决这个问题.
DialogFragment
public class CreateAccountDialogFragment extends BaseDialogFragment {
@Inject
CreateAccountViewModel viewModel;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//InjectDependencies....
View rootView = createDataBinding(inflater, container);
createToolbar(rootView);
return rootView;
}
private View createDataBinding(LayoutInflater inflater, ViewGroup container) {
CreateAccountDialogFragmentBinding binding =
DataBindingUtil.inflate(inflater, R.layout.create_account_dialog_fragment, container, false);
binding.setViewModel(viewModel);
return binding.getRoot();
}
private void createToolbar(View rootView) {
Toolbar toolbar = (Toolbar) rootView.findViewById(R.id.toolbar);
// Set an OnMenuItemClickListener to handle menu item clicks
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) { …
Run Code Online (Sandbox Code Playgroud) 我有一个窗口,我有时打开使用Show()
,有时使用ShowDialog()
.在第二种情况下,返回的对话结果对我来说很重要.但是,如果我设置DialogResult
后调用Show()
我得到一个InvalidOperationException
.有没有办法找出用于打开窗口和设置或不DialogResult
相应的方法?或者还有另一种方式吗?
当然我知道我可以捕获并忽略异常,但我不喜欢这个解决方案.
我正在尝试使用jQuery对话框作为ajax的加载屏幕.到目前为止,我的工作非常好,但我希望加载屏幕不能关闭.然而,似乎UI对话框没有"可关闭"作为选项?
你怎么让它不可关闭?我尝试将closeText设置为空白但是没有做任何事情.小'X'仍显示在右上角.
难道你不认为closable应该是对话框小部件的选项吗?
谢谢