在对话框或主窗口中布置子窗口(常用控件)的最佳做法是什么?我的意思是有一个绑定机制,可以将控件的相对位置固定到父窗口的边框,就像在WPF中一样.在窗口调整大小期间,子控件将与主窗口一起调整大小.目前我有这个:
从红线中可以看出,当我调整列表视图控件的父窗口时,它看起来并不漂亮.我想将ListView的右侧绑定到DialogBox的右边框以及类似的其他控件.
我知道我可以使用GetWindowRect,GetClientRect和MoveWindow函数.但这是正确的方法吗?
目前我正在使用没有MFC的纯Win32 Api.
我需要有关泛型和委托方差的更多信息.以下代码段无法编译:
错误CS1961无效方差:类型参数'TIn'必须在'Test.F(Func)'上协变有效.'TIn'是逆变的.
public interface Test<in TIn, out TOut>
{
TOut F (Func<TIn, TOut> transform);
}
Run Code Online (Sandbox Code Playgroud)
.net Func定义如下:
public delegate TResult Func<in T, out TResult> (T arg);
Run Code Online (Sandbox Code Playgroud)
为什么编译器抱怨TIn逆变和TOut- 协变而Func期望完全相同的方差?
编辑
对我来说主要的限制是我希望我的Test界面将TOut作为协变,以便使用它:
public Test<SomeClass, ISomeInterface> GetSomething ()
{
return new TestClass<SomeClass, AnotherClass> ();
}
Run Code Online (Sandbox Code Playgroud)
鉴于此public class AnotherClass : ISomeInterface.
刚刚安装了Ubuntu 10.10.以前我有Ubuntu 10.04.我在Ubuntu和Windows之间有一个共享分区,它是NTFS.我将我的开发文件(Eclipse C++项目文件)存储在该分区中.
所以这就是问题:10.04一切都还可以,但现在我无法运行任何驻留在NTFS分区中的程序.Eclipse说:
Error starting process.
Exec_tty error:Cannot run program "/media/../Eclipse/Hello/Debug/Hello": Unknown reason
Run Code Online (Sandbox Code Playgroud)
当我尝试在终端中执行它时,它说:
bash: ./Hello: Permission denied
Run Code Online (Sandbox Code Playgroud)
我知道这是权限问题,因为NTFS文件系统不支持Unix权限,但它如何在10.04上就可以了.此版本是否为NTFS文件系统添加了任何限制?
有没有人遇到类似的问题,知道如何解决这个问题?
谢谢.
C#中GetEntryAssembly的底层实现是什么?为什么在从非托管应用程序加载 dll 时它会返回 null?
MSDN 文档说:
当从非托管应用程序加载托管程序集时,GetEntryAssembly 方法可以返回 null。例如,如果非托管应用程序创建了一个用 C# 编写的 COM 组件的实例,则从 C# 组件调用 GetEntryAssembly 方法将返回 null,因为进程的入口点是非托管代码而不是托管程序集。
我有以下设置:
本机可执行文件 (C++) -> 混合模式程序集 (C++/cli) -> 托管程序集 (C#)
托管程序集是可选的,在混合模式程序集中,可以调用 GetEntryAssembly 并获取 null。
在调试时,我们在 C#源代码中跟踪到了这个调用:
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
private static extern void GetEntryAssembly(ObjectHandleOnStack retAssembly);
Run Code Online (Sandbox Code Playgroud)
我们可以看到入口程序集应该是本机可执行文件。但是它没有被检索。我想知道这是什么原因?原生到托管过渡不应该处理这个问题吗?
编辑
GetEntryAssembly由 .NET 内部使用。当它返回时,我们只是在体验副作用null。可在托管程序集中使用一行重现:
System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForDomain ();
Run Code Online (Sandbox Code Playgroud)
这将引发以下异常:System.IO.IsolatedStorage.IsolatedStorageException: Unable to determine the identity of domain.此异常的根本原因似乎是入口程序集为空。
如果得到它的句柄,怎么会得到一个控件的id?
我想在ListView控件的标题上设置工具提示.据我所知,我需要一个控件的id,我想添加这个工具提示.如MSDN中所述.
如何在Windows中获得某些控件的图标?更具体地说,我想从ListView标题中获取排序箭头图标.我尝试使用以下方法获取它:
HRESULT GetSortArrowBmp(HWND hwnd, HEADERSORTARROWSTATES arrowState, HBITMAP** arrow)
{
HTHEME theme = OpenThemeData(hwnd,L"HEADER"); // hwnd is header itself
HRESULT res = E_FAIL;
if (theme){
res = GetThemeBitmap(theme, HP_HEADERSORTARROW, arrowState, TMT_DIBDATA, GBF_COPY, *arrow);
CloseThemeData(theme);
}
return res;
}
Run Code Online (Sandbox Code Playgroud)
但它并没有回归我所期待的微小三角形.有什么建议?
visual-c++ ×3
winapi ×3
c# ×2
.net ×1
c++-cli ×1
eclipse-cdt ×1
generics ×1
linux ×1
ubuntu-10.10 ×1
variance ×1