草庐IT

c# - WndProc 覆盖奇怪的消息,不合适

我正在查看发布的代码here,特别是重写方法WndProc中的SyntaxRichTextBox.cs。这只是代码中的错字吗?0x00f是什么Windows消息?他们的意思是0x0f用于WM_PAINT吗?捕获该消息的代码的作者是什么?代码:protectedoverridevoidWndProc(refSystem.Windows.Forms.Messagem){if(m.Msg==0x00f){if(m_bPaint)base.WndProc(refm);elsem.Result=IntPtr.Zero;}elsebase.WndProc(refm);}

windows - 检测窗口在 wndproc 之外关闭?

我目前正在开发一个win32GUI应用程序,它在窗口线程中完成大部分工作。这个线程有时会被阻塞,因为它运行的脚本引擎可以被外部脚本调试器(另一个进程)挂起。大多数时候这不是问题,因为这是预期的行为。但是,如果用户试图关闭窗口,应用程序显然会变得无响应,您会看到“此应用程序没有响应...”对话框。我的计划是定期从“暂停代码”回调到应用程序并让它为WM_CLOSE执行PeekMessage,如果是这样,则终止调试器。不幸的是,据我所知,WM_CLOSE直接发送到wndproc。除了重新设计应用程序之外,还有其他方法可以检测到用户想要关闭窗口吗?例如,是否有一些其他消息可以使用PeekMes

c - Wndproc 和 hook 是否在主线程中?

抱歉我的愚蠢问题,但是主线程中的wndproc和Hook(调用时)?如果是,是否意味着我不能将它们用于构建键盘输入缓冲区? 最佳答案 您的窗口过程(以及任何子类窗口过程、Hook等)在调用CreateWindow的线程中运行(要求同一线程稍后处理消息队列,窗口过程实际运行当您的主消息分发循环调用DispatchMessage时)。不确定“为键盘输入构建缓冲区”是什么意思。 关于c-Wndproc和hook是否在主线程中?,我们在StackOverflow上找到一个类似的问题:

c++ - Wndproc 处理事件代码少

我想知道是否有一种方法可以缩短这段代码,是否有办法制作一个#define来缩短我在消息开关中执行if语句的方式。我检查我是否已经设置了一个函数,如果有我就调用它这只是我的wndproc的一部分,它要大得多LRESULTBase::WindowProc(HWNDhwnd,UINTuMsg,WPARAMwParam,LPARAMlParam){switch(uMsg){caseWM_CREATE:{if(this->onCreate!=NULL){if(onCreate(hwnd,(LPCREATESTRUCT)lParam))return1;}}break;caseWM_DESTROY:

c# - 在窗口内绘图不会重绘和涂抹

我试图在窗口周围绘制一个矩形(在窗口内部,而不是在窗口外部),但绘图有污迹,在某些情况下不会重绘。我将HWNDWndProc子类化(代码当然在HWND进程中运行):classSubClasser:NativeWindow{...protectedoverridevoidWndProc(refMessagem){switch(m.Msg){case0x85://WM_CPAINTcase0xf://WM_PAINT{base.WndProc(refm);Rectangler=GetWndRect(this.Handle);g.DrawRectangle(p,r);Trace.WriteL

c - Windows 8.1 : only works if dummy printf is called 上的 WndProc 异常行为

UPDATE:@JonathanPottersolvedmyproblemonacomment(seebelow).ApparentlyIshouldhavecalledDefWindowProconWndProc.IfIcallitinsteadofthedummyprintf,everythingworks.ButI'llkeepthequestionopenbecauseI'mstillcurioustoknowwhytheprintfitselfalsomadeitworkinthefirstplace.我正在编写一个程序,当笔记本盖子打开/关闭时它会执行一些操作。有一个不可见

c# - 如何在 C# 中将类实例传递给 WndProc

我如何将主窗体中的对象实例传递给WndProc方法例如:我有一个ComboBox对象-objCombo。在系统绘制下拉列表框之前,我必须捕获某个窗口消息。执行此操作的一种方法是,我可以拥有一个派生自ComboBox的自定义组合框publicclassCustomComboBox:ComboBox{//...someinitializationcodegoeshereprotectedoverridevoidWndProc(refMessagem){if(m.Msg==WM_CTLCOLORLISTBOX){//capturethemessageanddosomework.//herei

c++ - WndProc调用机制(WinAPI)

我正在尝试了解Windows应用程序的工作原理。有一个WndProc函数,其中发生消息处理。LRESULTCALLBACKWndProc(HWNDhwnd,UINTmsg,WPARAMwParam,LPARAMlParam){switch(msg){caseWM_KEYDOWN:if(wParam==VK_ESCAPE){if(MessageBox(0,L"Areyousure?",L"Exit?",MB_YESNO|MB_ICONQUESTION)==IDYES)//ReleasethewindowsallocatedmemoryDestroyWindow(hwnd);}return

c++ - C/C++ - Windows - 如何跟踪 HWND 上下文数据

在Windows中,假设您打开了同一窗口类的多个窗口(HWND)。您如何跟踪窗口过程中的上下文数据,例如,当用户尝试在窗口2中键入内容时,窗口1不会被修改?CreateWindow()直到WndProc()被多次调用后才返回,因此您不能简单地将生成的HWND设置为上下文数据并在WndProc()中进行查找;您确实需要在WndProc()中设置它。除了窗口创建消息外,WndProc()不直接将上下文信息传递给它,但不幸的是,窗口创建消息并不是传递给WndProc()的第一条消息。不,我发现诸如WM_SIZE、WM_NCSIZE之类的东西在我看到WM_CREATE之前就已通过。将HWND存

c++ - 没有 wndproc 的窗口

我很好奇是否可以在不使用WndProc的情况下创建窗口。所以我想注册窗口类,并将lpfnWndProc字段设置为NULL;并以我自己的方式使用消息(由TranslateMessage(&msg)给出)。这样做有什么缺点吗?先谢谢,对不起我的语法错误。编辑#1:好的,我有一个窗口,但我在某个地方错了。MSGmsg;while(PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE)){if(msg.message==WM_QUIT)returnfalse;else{TranslateMessage(&msg);switch(msg.message){caseW