我正在托管一个webbrowser控件,它通常会加载外部文档,然后使用HTML DOM进行一些修改.
我们还使用伪协议嵌入自定义应用程序链接,例如捕获和处理的"关闭此" BeforeNavigate2.
当链接tarket拼写错误(例如,"spp:CloseWindow")时,BeforeNavigate将不会触发自定义处理.浏览器控件不显示导航错误,但保留在READYSTATE_INTERACTIVE中并且不会触发NavigateComplete或DocumentComplete.
我的问题:大多数操作(例如检索或更新内容)都会延迟并等待就绪状态到达READYSTATE_COMPLETE.点击这样的无效链接后,浏览器不再更新 - 我想避免的状态.我怎样才能做到这一点?
"READYSTATE_COMPLETE或READYSTATE_INTERACTIVE and last downloadComplete was broken")(事后看来,使用xxxx:前缀并不是一个好主意,但现在改变它有点问题.)
我写了一个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.
关于我可能遗失的任何想法?
是否有任何文档由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) 我经常在应用程序中使用HTML输出,到目前为止我已经使用了一些简单的例程来构建HTML字符串.我现在想尝试一些不同的东西:
我想将数据序列化为XML,并提供一些XSLT模板来生成webbrowser控件的HTML.我让它静态工作(通过编写XSL慢慢挖掘),但我需要动态更改XSL文档的一些属性:过滤器,路径等,以跟随当前的UI选择.
数据足够小,以至于更改时的XML序列化不应成为问题.我想使用"静态"外部XSL文件(以便用户可以在一定程度上自定义输出),但需要调整.
我的问题:
这个想法在技术上是否合理?
我可以使用XML和XSL文档动态提供Web浏览器控件吗?我可以动态修改XSL中的选定路径元素和属性(即不生成新文件)吗?如何在Web浏览器控件中执行此操作?(一些让我入门的指针会很好..)
[编辑]感谢大家,它的工作:D [/ edit]
为了跟踪用户活动,我使用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.
在以下场景中:
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持有(并由其释放)的数据.
可能的重复:
正式地说,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++ 标准的要求,但代码被正确解析。
有没有实际需要类型名来解决歧义的例子?或者还有更多吗?
我正在寻找一个好的模式来实现以下内容:
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)
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 +赋值等细节.
在Worst案例中,Quicksort递归深度需要O(n)的堆栈空间.为什么在最坏的情况下它不会导致大型集合的堆栈溢出?(逆序)
对于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方法中"保持"此属性?
我有一个ATL应用程序,其中包含一个包含TAB控件的对话框.该应用程序使用通用控件清单.
在具有视觉样式的XP下,选项卡控件背景与对话框和控件(主要是复选框)的颜色不同,因此看起来非常难看.
我该如何解决这个问题?
上学的孩子在一周内的相应日子穿着一件制服.
(例如男孩=白色半裤,白色衬衫,特定颜色的领带,腰带......)(例如女孩=蓝色格子连衣裙,深蓝色围裙,黑色鞋子,深蓝色袜子和腰带).他们将在不同的日子穿着不同的变化.
在男孩/女孩的用户界面中显示此类信息的好方法是什么.你能指点我到任何非常清楚地描述这些信息的网站吗?
我有一个从文件导入的多个字符串.字符串的格式如下:
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等
我以为我可以使用正则表达式,但我一直在用它打墙.
谢谢你的帮助!