小编Rob*_*tas的帖子

如何将子窗口绑定到相对位置的父窗口?

在对话框或主窗口中布置子窗口(常用控件)的最佳做法是什么?我的意思是有一个绑定机制,可以将控件的相对位置固定到父窗口的边框,就像在WPF中一样.在窗口调整大小期间,子控件将与主窗口一起调整大小.目前我有这个: 列表视图对话框

从红线中可以看出,当我调整列表视图控件的父窗口时,它看起来并不漂亮.我想将ListView的右侧绑定到DialogBox的右边框以及类似的其他控件.

我知道我可以使用GetWindowRect,GetClientRect和MoveWindow函数.但这是正确的方法吗?

目前我正在使用没有MFC的纯Win32 Api.

winapi visual-c++

11
推荐指数
2
解决办法
1万
查看次数

泛型中的协方差与Func的协方差

我需要有关泛型和委托方差的更多信息.以下代码段无法编译:

错误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.

c# generics variance

9
推荐指数
2
解决办法
1003
查看次数

如何在Ubuntu 10.10中的NTFS上运行C++二进制文件?

刚刚安装了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文件系统添加了任何限制?

有没有人遇到类似的问题,知道如何解决这个问题?

谢谢.

linux file-permissions eclipse-cdt ubuntu-10.10

6
推荐指数
1
解决办法
5408
查看次数

为什么 GetEntryAssembly 返回 null?

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.此异常的根本原因似乎是入口程序集为空。

.net c# c++-cli

4
推荐指数
2
解决办法
6491
查看次数

如何从其句柄获取控件ID?

如果得到它的句柄,怎么会得到一个控件的id?

我想在ListView控件的标题上设置工具提示.据我所知,我需要一个控件的id,我想添加这个工具提示.如MSDN中所述.

winapi visual-c++

3
推荐指数
1
解决办法
2万
查看次数

如何获得与Windows主题相关联的图标?

如何在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)

但它并没有回归我所期待的微小三角形.有什么建议?

winapi visual-c++

3
推荐指数
1
解决办法
549
查看次数