小编pet*_*hen的帖子

WebBrowser控件:检测导航失败

我正在托管一个webbrowser控件,它通常会加载外部文档,然后使用HTML DOM进行一些修改.

我们还使用伪协议嵌入自定义应用程序链接,例如捕获和处理的"关闭此" BeforeNavigate2.

当链接tarket拼写错误(例如,"spp:CloseWindow")时,BeforeNavigate将不会触发自定义处理.浏览器控件不显示导航错误,但保留在READYSTATE_INTERACTIVE中并且不会触发NavigateCompleteDocumentComplete.


我的问题:大多数操作(例如检索或更新内容)都会延迟并等待就绪状态到达READYSTATE_COMPLETE.点击这样的无效链接后,浏览器不再更新 - 我想避免的状态.我怎样才能做到这一点?

  • 我可以在"DownloadComplete"中检测到导航失败了吗?(所以我可以放松测试"READYSTATE_COMPLETEREADYSTATE_INTERACTIVE and last downloadComplete was broken")
  • 我可以将浏览器控件"重置"为READYSTATE_COMPLETE(可能不是)
  • 我可以检测浏览器实际支持的伪协议吗?

(事后看来,使用xxxx:前缀并不是一个好主意,但现在改变它有点问题.)

c++ webbrowser-control

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

从Windows服务关闭显示

我写了一个Windows服务,当某些条件发生时,它应该关闭显示器.我使用的代码是:

private const int MONITOR_OFF = 2;
SendMessage(GetDesktopWindow().ToInt32(), 
   WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
Run Code Online (Sandbox Code Playgroud)

此相同的代码适用于Windows应用程序,但从Windows服务执行时,没有任何反应.也没有例外,Marshal.GetLastWin32Error()也返回0.

关于我可能遗失的任何想法?

c# windows service winapi

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

DefWindowProc处理哪些消息?

是否有任何文档由DefWindowProc处理哪些消息,以及如何处理?

我最近偶然发现WM_SETFONT/WM_GETFONT没有被处理,我不确定我的代码是否有错,或者是否是预期的行为,所以我尝试了下面的WinMain:


   WNDCLASSEX wcx =
   {
      sizeof(WNDCLASSEX),
      CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, 
      DefWindowProc,
      0, 0,  // class/wnd extra bytes
      hInstance, 
      0,  
      LoadCursor(0, IDC_ARROW),
      0, 
      0,
      _T("some class"),
      0
   };

   ATOM a = RegisterClassEx(&wcx);
   _ASSERTE(a != 0);

   HWND wnd = CreateWindowEx(0, wcx.lpszClassName, NULL, 
                   WS_POPUP, 0,0,0,0, GetDesktopWindow(), 0, hInstance, 0);
   _ASSERTE(wnd != 0);

   HFONT font = (HFONT) GetStockObject(ANSI_VAR_FONT);
   _ASSERTE(font != 0);

   SendMessage(wnd, WM_SETFONT, (WPARAM) font, 0);
   HFONT font2 = (HFONT) SendMessage(wnd, WM_GETFONT, 0, 0);

   _ASSERTE(font2 == font);  // **FAILS**, font2 is 0
Run Code Online (Sandbox Code Playgroud)

windows winapi wndproc

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

"动态"XSLT提供webbrowser控件?

我经常在应用程序中使用HTML输出,到目前为止我已经使用了一些简单的例程来构建HTML字符串.我现在想尝试一些不同的东西:

我想将数据序列化为XML,并提供一些XSLT模板来生成webbrowser控件的HTML.我让它静态工作(通过编写XSL慢慢挖掘),但我需要动态更改XSL文档的一些属性:过滤器,路径等,以跟随当前的UI选择.

数据足够小,以至于更改时的XML序列化不应成为问题.我想使用"静态"外部XSL文件(以便用户可以在一定程度上自定义输出),但需要调整.

我的问题:

这个想法在技术上是否合理?
我可以使用XML和XSL文档动态提供Web浏览器控件吗?我可以动态修改XSL中的选定路径元素和属性(即不生成新文件)吗?如何在Web浏览器控件中执行此操作?(一些让我入门的指针会很好..)

[编辑]感谢大家,它的工作:D [/ edit]

c# xml xslt webbrowser-control

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

WndProc挂钩不从菜单接收WM_COMMAND

为了跟踪用户活动,我使用Windows Hook作为主应用程序线程,并监视(以及其他)WM_COMMAND消息.

我按照预期从对话框按钮,工具栏按钮,加速器和弹出菜单中收到它们,但我没有从主菜单中收到它们.

奇怪的是,Spy ++确实显示了接收它们的主窗口.可能有什么不对?

安装挂钩:

currentHook = SetWindowsHookEx(WH_CALLWNDPROC, 
                               HookProc, 0, GetCurrentThreadId());
Run Code Online (Sandbox Code Playgroud)

HookProc,简约:

LRESULT CALLBACK HookProc(int nCode, WPARAM wp, LPARAM lp)
{
   CWPSTRUCT cwp = *(CWPSTRUCT *)lp;
   if (cwp.message == WM_COMMAND)
   {
      ATLTRACE("[hook!] WM_COMMAND id=%d\n", LOWORD(cwp.wParam));
   }
   return CallNextHookEx(currentHook, nCode, wp, lp);
}
Run Code Online (Sandbox Code Playgroud)

(实际代码更复杂,需要检查重入等,但我已经为此测试重新编写了代码)

有任何想法吗?

[编辑]我测试的主窗口是一个MFC应用程序,但是仪器代码不使用任何MFC.

c++ winapi

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

临时对象,函数参数和隐式转换

在以下场景中:

struct Foo
{
   // ...
   operator Bar() {... }  // implicit cast to Bar
}

Foo GetFoo() { ... }
void CallMeBar(Bar x) { ... }

// ...
CallMeBar( GetFoo() );
Run Code Online (Sandbox Code Playgroud)

[编辑]修复了演员,d'oh [/ edit]

GetFoo返回Type Foo的临时对象.在CallMe返回之前,此对象是否存在?标准说什么?

我知道如果CallMe接受Foo,临时对象在CallMe返回之前不会被销毁.然而,我不确定隐式演员是否会改变这种情况,只有临时演员Bar能够继续存在.


一个典型的例子是Foo = CString,Bar = char*,即Bar引用由Foo持有(并由其释放)的数据.

c++

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

C ++中“typename”的目的是什么

可能的重复:
正式地说,typename 是什么?

当我使用

template <typename TMap>
typename TMap::referent_type * func(TMap & map, typename TMap::key_type key) 
{ ... }
Run Code Online (Sandbox Code Playgroud)

第二行的两个“typename”的目的是什么?

它似乎触发了编译时警告(VS2008:C4346),但它只是“您声称这是一种类型”吗?

即在TMap::referent_type模板被实例化时进行实际检查是否实际类型,但似乎仍然有 C++ 标准的要求,但代码被正确解析。

有没有实际需要类型名来解决歧义的例子?或者还有更多吗?

c++ templates typename

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

c ++:成员,引用父

我正在寻找一个好的模式来实现以下内容:

class Outer;


class Inner
{
     Outer * m_outer;

   public:
     InitOuter(Outer * o) { m_outer = o; }
}

class Outer
{
    Inner  m_inner;

  public:
    Outer()
    {
      m_inner.InitOuter(outer);
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 应始终使用对外部的引用来创建内部
  • m_outer永远不会为NULL
  • m_outer在生命周期内不会改变 Inner

不幸的是,据我所知,m_outer不能既不是引用也不是不可变指针,因为以下初始化无效:

Inner::Inner(Outer & o) : m_outer(o) {}
Outer::Outer() : m_inner(*this) {}
Run Code Online (Sandbox Code Playgroud)

因为在初始化时m_inner,Outer没有完全构造,因此this是无效的(并且也可能在初始化期间改变).

我找到的唯一选择是制作Inner非公开的构造函数,以及它Outer的朋友Inner.这有点好,但"朋友"关系似乎是任意强大的(因为通常内部类应该封装功能).

你是如何实现的?


动机:在我对C++的理解中,"外部"还没有完全构建,因此访问this可能会合法地触发未定义的行为(任何人都可以确认这一点 - 或者甚至更好,事实并非如此?).


不,我不需要在这里控制反转.真的,谢谢你,但没有.
我省略了隐藏副本CTor +赋值等细节.

c++ constructor member

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

Quicksort递归深度O(n)的堆栈空间不会导致堆栈溢出?

在Worst案例中,Quicksort递归深度需要O(n)的堆栈空间.为什么在最坏的情况下它不会导致大型集合的堆栈溢出?(逆序)

sorting algorithm performance quicksort data-structures

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

Winforms Designer:修改(并保留)子对象中的属性

对于WinForms控件,我想将某些设置移动到子对象中.其中一个是包含所有UI字符串的自定义类,另一个是OpenFileDialog:

class MyControl: Control
{
  // ...
  private OpenFileDialog m_dlgOpen = new OpenFileDialog();
  public OpenFileDialog DialogOpen
  {
     get { return m_dlgOpen; }
  }
}
Run Code Online (Sandbox Code Playgroud)

这会将子对象添加到设计器,并允许编辑其属性(例如标题,默认扩展名,过滤器).但是,更改是添加到InitalizeComponent方法中的,因此它们会丢失.

是否可以在InitializeComponent方法中"保持"此属性?

c# designer custom-controls winforms

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

TAB控制ATL App,XP风格的背景

我有一个ATL应用程序,其中包含一个包含TAB控件的对话框.该应用程序使用通用控件清单.

在具有视觉样式的XP下,选项卡控件背景与对话框和控件(主要是复选框)的颜色不同,因此看起来非常难看.

截图

我该如何解决这个问题?

c++ winapi atl xp-theme

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

如何在用户界面中显示布料特定信息

上学的孩子在一周内的相应日子穿着一件制服.

(例如男孩=白色半裤,白色衬衫,特定颜色的领带,腰带......)(例如女孩=蓝色格子连衣裙,深蓝色围裙,黑色鞋子,深蓝色袜子和腰带).他们将在不同的日子穿着不同的变化.

在男孩/女孩的用户界面中显示此类信息的好方法是什么.你能指点我到任何非常清楚地描述这些信息的网站吗?

user-interface

0
推荐指数
1
解决办法
205
查看次数

在visual basic中拆分字符串

我有一个从文件导入的多个字符串.字符串的格式如下:

Smith, Tom 1/2/62 45484

[Last Name], [First Name] [Date] [Number]
Run Code Online (Sandbox Code Playgroud)

我需要一种方法将这些分成四个变量.

Dim first_name as string = first name

我以为我可以使用正则表达式,但我一直在用它打墙.

谢谢你的帮助!

regex vb.net string vba

0
推荐指数
1
解决办法
167
查看次数