小编Qwe*_*tie的帖子

如何创建一个从基类派生的ATL COM类?

"ATL简单对象"向导未提供指定从现有coclass及其接口派生新类的方法.在Visual Studio 2008中,如何创建一个从现有的ATL COM类派生的新类(即Base实现IBase,我想创建一个Derived派生自Base该实现的新类IDerived,其中IDerived派生自IBase.)

更新:听起来很简单,但向导生成的ATL类最多有六个基类,一个COM映射和一个连接点映射.应该在派生类中重复哪些基类和映射?如果映射在派生类中重复,它们是否应包含基类映射的内容或仅包含其他项?基类的顺序是否重要?怎么样FinalConstruct()FinalRelease()?应该DECLARE_PROTECT_FINAL_CONSTRUCTDECLARE_REGISTRY_RESOURCEID在派生类中被重复?

这是一个示例基类,除了所有样板文件外都是空的.现在派生类应该是什么样的?

class ATL_NO_VTABLE CBase :
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CBase, &CLSID_Base>,
    public ISupportErrorInfo,
    public IConnectionPointContainerImpl<CBase>,
    public CProxy_IBaseEvents<CBase>,
    public IDispatchImpl<IBase, &IID_IBase, &LIBID_ExampleLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
    CBase()
    {
    }

DECLARE_REGISTRY_RESOURCEID(IDR_Base)


BEGIN_COM_MAP(CBase)
    COM_INTERFACE_ENTRY(IBase)
    COM_INTERFACE_ENTRY(IDispatch)
    COM_INTERFACE_ENTRY(ISupportErrorInfo)
    COM_INTERFACE_ENTRY(IConnectionPointContainer)
END_COM_MAP()

BEGIN_CONNECTION_POINT_MAP(CBase)
    CONNECTION_POINT_ENTRY(__uuidof(_IBaseEvents))
END_CONNECTION_POINT_MAP()
// ISupportsErrorInfo
    STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);


    DECLARE_PROTECT_FINAL_CONSTRUCT()

    HRESULT FinalConstruct()
    {
        return S_OK;
    }

    void …
Run Code Online (Sandbox Code Playgroud)

c++ com atl classwizard visual-studio

9
推荐指数
1
解决办法
5684
查看次数

WPF:如何制作一个"pushlike"复选框?

我想制作一个看起来完全像按钮的CheckBox.我最初的微弱尝试根本不起作用.

<CheckBox x:Name="test">
    Testing!
    <CheckBox.Template>
        <ControlTemplate>
            <Button>
                <ContentPresenter/>
            </Button>
        </ControlTemplate>
    </CheckBox.Template>
</CheckBox>
Run Code Online (Sandbox Code Playgroud)

ContentPresenter不起作用(按钮为空),单击该按钮时,IsChecked属性不会切换.此外,当IsChecked为真时,我不知道如何使按钮看起来被推.

wpf checkbox button controltemplate

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

反思:如何获取by-ref类型的基础类型

我很惊讶地发现"ref"和"out"参数没有用特殊属性标记,尽管存在ParameterInfo.IsOut,ParameterInfo.IsIn(据我所知,它们都是假的),ParameterAttributes.在和ParameterAttributes.Out中.相反,"ref"参数实际上由一种特殊类型的"Type"对象表示,"out"参数只是具有附加属性的ref参数(我还不知道哪种属性).

无论如何,要创建一个by-ref参数,你可以调用Type.MakeByRefType(),但我的问题是,如果你已经有一个by-ref类型,你如何回到原始类型?

提示:它不是UnderlyingSystemType:

Type t = typeof(int);
Console.WriteLine(t.MakeByRefType().UnderlyingSystemType==t); // FALSE
Run Code Online (Sandbox Code Playgroud)

.net reflection byref

9
推荐指数
1
解决办法
726
查看次数

使用标记扩展进行绑定时出错:解析标记扩展时遇到未知属性

原则上,我开发了一种将RadioButtons绑定到几乎任何东西的简洁方法:

/// <summary>Converts an value to 'true' if it matches the 'To' property.</summary>
/// <example>
/// <RadioButton IsChecked="{Binding VersionString, Converter={local:TrueWhenEqual To='1.0'}}"/>
/// </example>
public class TrueWhenEqual : MarkupExtension, IValueConverter
{
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }

    public object To { get; set; }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return object.Equals(value, To);
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if ((bool)value) return To;
        throw new NotSupportedException();
    } …
Run Code Online (Sandbox Code Playgroud)

data-binding wpf xaml radio-button

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

我的资源隐藏在哪里?

我有一个程序,在"Icons"文件夹中包含许多图标(包含在Build Action = Resource的项目中).

在XAML中,我可以使用诸如<Image Source="../Icons/name.png"/>(".."之类的代码访问这些图标,因为XAML位于不同的子文件夹中); 但是我想在同一个项目中的某些WinForms代码中使用相同的图像.不幸,

GetType().Assembly.GetManifestResourceStream("Icons/name.png");
Run Code Online (Sandbox Code Playgroud)

回归null

GetType().Assembly.GetManifestResourceNames()
Run Code Online (Sandbox Code Playgroud)

只列出了一堆*.resources文件(每个文件一个.resx,一个名为*.g.resources).那么我该如何获得图像流呢?

.net resources

8
推荐指数
1
解决办法
1515
查看次数

WPF:绑定到ListBoxItem.IsSelected不适用于屏幕外项目

在我的程序中,我有一组视图模型对象来表示ListBox中的项目(允许多选).viewmodel有一个IsSelected属性,我想绑定到ListBox,以便在viewmodel而不是列表框本身中管理选择状态.

但是,显然ListBox不会保留大多数屏幕外项目的绑定,因此通常IsSelected属性未正确同步.这是一些演示此问题的代码.第一个XAML:

<StackPanel>
    <StackPanel Orientation="Horizontal">
        <TextBlock>Number of selected items: </TextBlock>
        <TextBlock Text="{Binding NumItemsSelected}"/>
    </StackPanel>
    <ListBox ItemsSource="{Binding Items}" Height="200" SelectionMode="Extended">
        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}">
                <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>
    <Button Name="TestSelectAll" Click="TestSelectAll_Click">Select all</Button>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

C#Select All处理程序:

private void TestSelectAll_Click(object sender, RoutedEventArgs e)
{
    foreach (var item in _dataContext.Items)
        item.IsSelected = true;
}
Run Code Online (Sandbox Code Playgroud)

C#viewmodel:

public class TestItem : NPCHelper
{
    TestDataContext _c;
    string _text;
    public TestItem(TestDataContext c, string text) { _c = c; _text = text; }

    public override string …
Run Code Online (Sandbox Code Playgroud)

.net wpf binding listbox mvvm

8
推荐指数
1
解决办法
3862
查看次数

这种重载分辨率如何有意义?

我刚刚因为一个奇怪的原因而进行了单元测试失败IDictionary<object, object>.

IDictionary<K,V>有两种Remove方法.一个拿a K,另一个拿a KeyValuePair<K,V>.考虑这两个词典:

IDictionary<string, object> d1 = new Dictionary<string, object>();
IDictionary<object, object> d2 = new Dictionary<object, object>();
d1.Add("1", 2);
d2.Add("1", 2);
Console.WriteLine(d1.Remove(new KeyValuePair<string, object>("1", 2)));
Console.WriteLine(d2.Remove(new KeyValuePair<object, object>("1", 2)));
Run Code Online (Sandbox Code Playgroud)

True那么输出就是False.既然KeyValuePair<object,object>是预期的确切类型d2.Remove(KeyValuePair<object,object>),为什么编译器调用d2.Remove(object)呢?

(验尸报告:

在提示我的问题的场景中,我没有IDictionary<object,object>直接使用,而是通过通用参数:

public class DictionaryTests<DictT> where DictT :
    IDictionary<object,object>, new()
Run Code Online (Sandbox Code Playgroud)

因为问题是IDictionary优先于ICollection我,我决定通过包含ICollection在约束列表中来"解决问题" :

public class DictionaryTests<DictT> where DictT :
    ICollection<KeyValuePair<object, object>>, IDictionary<object,object>, new()
Run Code Online (Sandbox Code Playgroud)

但这并没有改变编译器的思想......我想知道为什么不这样做.)

c# overloading

8
推荐指数
1
解决办法
122
查看次数

掌上电脑/ Windows Mobile:如何检测智能最小化

如何检测我的Compact Framework应用程序何时智能最小化(智能最小化是当用户单击Pocket PC右上角的"X"按钮时发生的情况)?

Deactivate事件不是正确的方式,因为它发生在最小化以外的情况下,例如在主窗体顶部显示消息框或其他窗体时.窗体的WindowState没有用,因为.NET CF上没有"Minimized"WindowState.

我听说通过设置MinimizeBox = false,我的应用程序将被关闭而不是最小化.但我实际上不希望我的应用程序关闭,我只是想知道它何时被最小化.

.net pocketpc compact-framework minimize windows-mobile

7
推荐指数
1
解决办法
3937
查看次数

如何在任何异常上暂停Eclipse?

我找到了"添加Java异常断点"菜单项,但它似乎只适用于我选择的确切异常类型.因此,如果我要求它突破Exception,它不会在a的情况下中断NumberFormatException.如何让所有异常中断?

我的活动没有明显的原因退出没有LogCat输出,所以很高兴找到正在发生的任何异常,无论是捕获还是未捕获,无论是在我的代码中还是仅在Android中.

eclipse debugging android exception

7
推荐指数
1
解决办法
703
查看次数

如何避免重复对/在multimap中找到一对?

我有一些(工作)代码使用multimap<string,string>.我想改变它以禁止同一个键上的重复值(显然,同一个键上的不同值很好,否则我不会使用多个映射).

令人惊讶的是类型不似乎有一个内置的方式,以避免重复,也没有找到一个键值对(只找到一把钥匙).但我认为有人必须有一个现成的解决方法.任何人?

c++ multimap

7
推荐指数
1
解决办法
4763
查看次数