小编c00*_*0fd的帖子

尝试使用IViewObject :: Draw()将Web浏览器控件渲染到HDC中会失败,但IE11会成功

我有一个MFC对话框窗口,我在其中添加了一个WebBrowser控件(封装了Internet Explorer引擎).

下面的代码的目标是到说的内容渲染web browser control成一个device context,我以后可以用于打印:

//MFC code, error checks are omitted for brevity

//'m_browser' = is a web browser control of type `CExplorer1`
IDispatch* pHtmlDoc = m_browser.get_Document();

CComPtr<IHTMLDocument2> pHtmlDocument2;
pHtmlDoc->QueryInterface(IID_IHTMLDocument2, (void**)&pHtmlDocument2));

//Get IViewObject2 for the entire document that we will use to render into a DC
CComPtr<IViewObject2> pViewObject;
pHtmlDocument2->QueryInterface(IID_IViewObject2, (void **)&pViewObject));

CComPtr<IHTMLElement> pBody;
pHtmlDocument2->get_body(&pBody));

CComPtr<IHTMLElement2> pBody2;
pBody->QueryInterface(IID_IHTMLElement2, (void **)&pBody2));


//Get default printer DC
CPrintDialog pd(TRUE, PD_ALLPAGES | PD_USEDEVMODECOPIES | PD_NOPAGENUMS | …
Run Code Online (Sandbox Code Playgroud)

c++ com internet-explorer mfc internet-explorer-8

4
推荐指数
1
解决办法
806
查看次数

编译器选择不使用 REP MOVSB 指令进行字节数组移动

我正在检查使用最新版本的 VS 2017 C++ 编译器完成的项目的发布版本。我很好奇为什么编译器选择构建以下代码片段:

//ncbSzBuffDataUsed of type INT32

UINT8* pDst = (UINT8*)(pMXB + 1);
UINT8* pSrc = (UINT8*)pDPE;
for(size_t i = 0; i < (size_t)ncbSzBuffDataUsed; i++)
{
    pDst[i] = pSrc[i];
}
Run Code Online (Sandbox Code Playgroud)

像这样:

在此输入图像描述

        UINT8* pDst = (UINT8*)(pMXB + 1);
        UINT8* pSrc = (UINT8*)pDPE;
        for(size_t i = 0; i < (size_t)ncbSzBuffDataUsed; i++)
00007FF66441251E 4C 63 C2             movsxd      r8,edx  
00007FF664412521 4C 2B D1             sub         r10,rcx  
00007FF664412524 0F 1F 40 00          nop         dword ptr [rax]  
00007FF664412528 0F 1F 84 00 00 00 00 …
Run Code Online (Sandbox Code Playgroud)

c++ x86 assembly compiler-optimization visual-c++

4
推荐指数
1
解决办法
893
查看次数

具有 OFN_ALLOWMULTISELECT 的 CFileDialog 快捷方式结果不正确

有人可以让我知道我在这里做错了什么吗?

MFC 项目,我用来CFileDialog让用户选择多个文件,如下所示:

CFileDialog fd(TRUE, NULL, NULL,
    OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_EXPLORER | OFN_ALLOWMULTISELECT, 
    NULL, this);

if(fd.DoModal() == IDOK)
{
    //Multi-selection
    CString strPaths;
    POSITION fileNamesPosition = fd.GetStartPosition();

    while(fileNamesPosition != NULL)
    {
        if(!strPaths.IsEmpty())
            strPaths += L"\n";

        strPaths += fd.GetNextPathName(fileNamesPosition);
    }  

    AfxMessageBox(strPaths);
}
Run Code Online (Sandbox Code Playgroud)

所以如果说的话,有两个快捷方式文件:

shortcut_1.lnk文件指的是:"D:\Folder\Project_B\Release\Name of Project B.exe"

shortcut_2.lnk这指的是"D:\Folder\Project_A\Release\Name of Project A.exe"

如果我从上面代码生成的“文件打开”对话框中选择它们,我的结果strPaths将变为以下内容,这是不正确的:

D:\Folder\Project_A\Release\Name of Project A.exe
D:\Folder\Project_A\Release\Name of Project B.exe
Run Code Online (Sandbox Code Playgroud)

第二条路是错误的!

c++ winapi mfc cfiledialog

4
推荐指数
1
解决办法
1146
查看次数

如何在 macOS 中对 NSOpenPanel 使用 allowedContentTypes?

我正在尝试显示使用 SwiftUI 编写的 macOS GUI 应用程序中的文件选择器窗口。所以我称之为:

let panel = NSOpenPanel()

//panel.allowedFileTypes = ["myext"]    //I get a warning here that it's deprecated

//Trying to use the following instead:
let fileType = UTType(tag: "myext", tagClass: .filenameExtension, conformingTo: nil)
if(fileType != nil)
{
    panel.allowedContentTypes = [fileType!]
}
else
{
    assert(false)
}

panel.allowsMultipleSelection = false
panel.canChooseDirectories = false
panel.canChooseFiles = true

let resp = panel.runModal()
Run Code Online (Sandbox Code Playgroud)

面板已显示,但我无法选择任何文件,包括带有我的.myext扩展名的文件。

但如果我取消注释panel.allowedFileTypes行,一切都会按我的预期进行。

那么我做错了什么allowedContentTypes

附言。或者,至少如何在 Swift 中消除该已弃用的警告?(allowedFileTypes效果很好,弃用它有什么意义!)

macos nsopenpanel swift swiftui

4
推荐指数
1
解决办法
890
查看次数

从IE 9拖放到我的应用程序中

这是一个奇怪的问题,让我试着解释一下.我在c ++/MFC中编写了一个(基于对话框的)应用程序,支持拖放功能.

我在Windows 7上使用默认主题进行以下测试.我的应用程序正在屏幕上运行.它不是顶部窗口(按其z顺序)或换句话说它被其上面的其他窗口遮挡.

如果我开始从Chrome或Firefox网络浏览器中拖动链接或只是文本选择,首先进入任务栏上我的应用程序图标,图标会闪烁,我的应用程序会弹出屏幕(通过接收顶部的z顺序),所以我然后可以拖放到我的应用程序中.一切正常.

如果我从IE 9(版本9.0.8112,更新版本9.0.12)执行相同的操作,当我将所选文本或链接首先拖动到我的应用程序的任务栏图标,以使我的应用程序成为顶部窗口(按z顺序),应用程序图标继续闪烁,但它从未在屏幕上显示,就像Chrome或FF一样,因此我不得不放弃我的拖放.

知道为什么它会像IE一样发生,如果有办法解决它?

编辑:以下是我的评论的代码示例:

HRESULT __stdcall DragEnter(IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect)
{
    //IDropTarget::DragEnter
    m_fAllowDrop = QueryDataObject(pDataObject);

    if(m_fAllowDrop)
    {
        //SUCCESS
        // get the dropeffect based on keyboard state
    }
    else
    {
        //FAILURE
        *pdwEffect = DROPEFFECT_NONE;
    }

    return S_OK;
}

BOOL QueryDataObject(IDataObject* pDataObject, int* pnOutDataType)
{
    static FORMATETC fmtetc_file = {CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
    static FORMATETC fmtetc_txt = {CF_UNICODETEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};

    BOOL bRes = FALSE;
    HRESULT hr;

    //See if our …
Run Code Online (Sandbox Code Playgroud)

c++ user-interface winapi internet-explorer drag-and-drop

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

如何在使用VS2010的开发服务器上测试将ASP.NET Web应用程序作为64位进程运行?

我的任务很简单:我需要在开发机器上的64位环境中测试我的ASP.NET Web应用程序.(此时我甚至没有询问是否通过调试器运行它.我只需要在64位进程中运行它.)

所以我在Visual Studio 2010中创建了一个库存C#Web应用程序并调整其​​属性:

在此输入图像描述

然后我做了Ctrl + F5(或运行没有调试)和IE加载并挂起如下:

在此输入图像描述

我在这做错了什么?

PS.在Windows 7旗舰版(64位)上运行它.

asp.net iis 64-bit visual-studio-2010

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

检测Internet Explorer的任何和所有版本

通过在HTML中使用此技术,曾经有一种很好的方式来判断Web浏览器是否为IE:

<!--[if IE]>
Non-IE browsers ignore this
<![endif]-->
Run Code Online (Sandbox Code Playgroud)

要么

<!--[if !IE]-->
IE ignores this
<!--[endif]-->
Run Code Online (Sandbox Code Playgroud)

但这在IE 10 中不再起作用.

不知道该用什么代替从其他网络浏览器(使用HTML或JavaScript)告诉IE?

PS.我需要能够从非IE网络浏览器告诉任何版本的IE.

html javascript internet-explorer conditional-comments internet-explorer-10

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

尝试从C#服务查询IIS时出现异常

我从使用C#编写的Windows服务调用以下代码:

try
{
    ServerManager m = new ServerManager();
    if(m != null)
    {
            SiteCollection sites = m.Sites;          //I get exception here
    }
}
catch (Exception ex)
{
}
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

{"文件名:redirection.config\r \n错误:无法读取配置文件\ r \n\r \n":null}

那是什么意思?是否有任何方法可以m在它被抛出之前在ServerManager或我的变量中预测它?

.net c# iis service iis-7

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

#if DEBUG在我的VS 2010中似乎不起作用

我在C#代码中一直在做以下事情:

#if DEBUG
//Debugger only code
#endif
Run Code Online (Sandbox Code Playgroud)

但出于某种原因,当我在我的C#控制台应用程序(在VS 2010中构建为Windows服务)中执行相同操作时,它似乎不起作用,并且对于Release和Debug配置,它看起来似乎DEBUG没有定义.

我是否需要为该预处理器常量设置一些工作?

.net c# debugging visual-studio-2010

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

如何在C#中将new运算符与模板一起使用

我试图弄清楚如何在C#中使用模板。我这样写:

public static List<TValue> deepCopyList<TValue>(List<TValue> src)
{
    List<TValue> arr = new List<TValue>();

    for (int i = 0; i < src.Count; i++)
    {
        arr.Add(new TValue(src[i]));   //Error on this line
    }

    return arr;
}
Run Code Online (Sandbox Code Playgroud)

但是我得到一个错误:

错误CS0304:无法创建变量类型'TValue'的实例,因为它没有new()约束

.net c# templates list

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