win32-WIN32编程断点无法命中WM_TIMER消息

问题描述

WIN32编程断点无法命中WM_TIMER消息

在WIN32编程中,设置了定时器,我在WM_Timer消息中打上断点,却无法命中断点,是怎么回事?
大家看看我的代码有没有问题?

 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    RECT    rect;
    int TIMER1 = 1;
    SYSTEMTIME st;
    static TCHAR str[50];
    switch (message)
    {
    case WM_CREATE:SetTimer(hwnd, TIMER1, 100, NULL);
        return 0;
    case WM_PAINT:
        hdc = GetDC(hwnd);
        TextOut(hdc, 0, 0, str, 50);
        ReleaseDC(hwnd, hdc);
        return 0;
    case WM_TIMER:
        GetLocalTime(&st);
        GetTimeFormat(LOCALE_SYSTEM_DEFAULT, TIME_FORCE24HOURFORMAT, &st, "hh':'mm':'ss", str, 50);
        return 0;
    case WM_DESTROY:
        KillTimer(hwnd, TIMER1);
        PostQuitMessage(0);
        return 0;

    }

    return DefWindowProc(hwnd, message, wParam, lParam);
}

解决方案

 /*--------------------------------------
   BEEPER1.C -- Timer Demo Program ver1
--------------------------------------*/

#include <windows.h>
#include <stdlib.h>

#define ID_TIMER    1

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] = TEXT("Beeper1");
    HWND         hwnd;
    MSG          msg;
    WNDCLASS     wndclass;

    wndclass.style         = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc   = WndProc;
    wndclass.cbClsExtra    = 0;
    wndclass.cbWndExtra    = 0;
    wndclass.hInstance     = hInstance;
    wndclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)GetStockObject (WHITE_BRUSH);
    wndclass.lpszMenuName  = NULL;
    wndclass.lpszClassName = szAppName;

    if (!RegisterClass (&wndclass))
    {
    MessageBox(NULL, TEXT("This program requires Windows NT!"), szAppName, MB_ICONERROR);
    return 0 ;
    }

    hwnd = CreateWindow(szAppName, TEXT ("Beeper1 Timer Demo"),
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT, CW_USEDEFAULT,
                        CW_USEDEFAULT, CW_USEDEFAULT,
                        NULL, NULL, hInstance, NULL);

    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);

    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HBRUSH          hBrush;
    HDC             hdc;
    PAINTSTRUCT     ps;
    RECT            rc;

    switch (message)
    {
    case WM_CREATE:
        SetTimer(hwnd, ID_TIMER, 1000, NULL);
        return 0 ;

    case WM_TIMER:
        MessageBeep(-1);
        InvalidateRect(hwnd, NULL, FALSE);
        return 0;

    case WM_PAINT:
        hdc = BeginPaint (hwnd, &ps) ;

        GetClientRect(hwnd, &rc);
        hBrush = CreateSolidBrush(RGB(rand()%255, rand()%255, rand()%255));
        FillRect(hdc, &rc, hBrush);

        EndPaint (hwnd, &ps) ;
        return 0 ;

    case WM_DESTROY:
        KillTimer(hwnd, ID_TIMER);
        PostQuitMessage (0) ;
        return 0 ;
    }
    return DefWindowProc (hwnd, message, wParam, lParam) ;
}

解决方案二:

你的OnTimer函数呢,setTimer,但三个参数,给空的话,应该要调用OnTimer函数,不会调用你自定义函数

解决方案三:

SetTimer(hwnd, ID_TIMER, 1000, NULL);
书上说,最后一个参数如果为空的话,是表示把WM_TIMER消息发送到消息队列里啊,应该是这样写的

解决方案四:

是不是同一个进程,如果不是断点肯定进不去

时间: 2024-09-17 08:30:27

win32-WIN32编程断点无法命中WM_TIMER消息的相关文章

线程-关于Win32核心编程中DLL注入后无反应的解决办法

问题描述 关于Win32核心编程中DLL注入后无反应的解决办法 #include #include HINSTANCE hProcess; PWSTR pszLibFileRemote; HINSTANCE hThread; void StartInject(int ProcessID, char * DllName); void OverInject(char * DllName); void EnableDebugPrivilege(HANDLE processHandle); int ma

socket-Socket编程初级问题,关于消息发送

问题描述 Socket编程初级问题,关于消息发送 本人刚接触java以及socket编程,入门级水平.现已知客户端跟服务端java代码如下: //服务端import java.net.*; // for Socket ServerSocket and InetAddressimport java.io.*; // for IOException and Input/OutputStream public class TCP_Server { private static final int BU

WM_TIMER消息在线程被阻塞时的系统处理

我的脑海中忽然对这样一个问题有一些模糊,也就是当一个安装了定时器的线程被阻塞期间,定时器消息如何被送往消息队列?在线程从阻塞状态恢复以后,消息队列的状态是怎么样的?是否里面聚集多个WM_TIMER消息?还是阻塞期间没有收到WM_TIMER消息,还是在阻塞期间多个应该送达的WM_TIMER被合并成了一个?(类似WM_PAINT消息那样). 所以我做了一个小实验来验证这个问题,结果我发现结论是最后一种情况,即可能系统在被唤起应该像某个线程的消息队列投递WM_TIMER消息时,它如果发现消息队列中已经

Win32串口编程

在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半双工的,只能由作为主节点的工控PC机依次轮询网络上的各智能控制单元子节点.每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答. 在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件,这种方法程序简单,但欠灵活.其二是调用Window

如何用Win32 SDK编程创建Tri-pane HTML Help窗口

HTML Help使用户能在一个帮助窗口中使用工具棒.查看目录和帮助主题.目前,有两种方法创建Tri-pane类型的HTML Help窗口: 使用HTML Help Workshop创建窗口 使用HTML Help API编程创建窗口 本文将介绍如何使用这两种方法创建Tri-pane HTML Help窗口. 使用预定义窗口 在HTML Help Workshop环境中很容易创建和修改工程的窗口定义,有关窗口定义的其它信息,请参考微软知识库文章:Q189084 HOWTO: Create a T

如何用 Win32 SDK 编程创建Tri-pane HTML Help 窗口

  HTML Help 使用户能在一个帮助窗口中使用工具棒.查看目录和帮助主题.目前,有两种方法创建 Tri-pane 类型的 HTML Help 窗口: 使用 HTML Help Workshop 创建窗口 使用 HTML Help API 编程创建窗口 本文将介绍如何使用这两种方法创建Tri-pane HTML Help 窗口. 使用预定义窗口 在 HTML Help Workshop环境中很容易创建和修改工程的窗口定义,有关窗口定义的其它信息,请参考微软知识库文章:Q189084 HOWT

另类参数对话框编程(回调函数,消息捕捉)

     在很多情况下,我们为了获取对话框设置的一些参数,通常都是通过类对象中成员来获取,或者直接获取退出时最后点击的BUTTON的ID号来做一些简单的操作.这样方法虽然稳定,但是有时候未免太带繁琐,近日在看一些书的时候突然看到另外一种好方法,暂且命名为"另类参数对话框编程",以后想到更好的名字再换吧@           在合格方法中,我们再也无需为一个单独的窗体创建一个专属的Class,获取参数直接用GetDlgXXX函数来获取,具体的代码如下:   主体函数代码   // Alg

c语言-“熟悉win32环境下编程”其中的win32环境下编程是不是就是c/c++那个编程环境啊?

问题描述 "熟悉win32环境下编程"其中的win32环境下编程是不是就是c/c++那个编程环境啊? 如题?"熟悉win32环境下编程"其中的win32环境下编程是不是就是c/c++那个编程环境啊?多谢 解决方案 字面意思很明白了,win32环境编程,首先是windows 其次是32位机,为什么要和c++关联起来呢? 解决方案二: C/C++可以写 Win32 的程序,也可以写 Linux 的程序.这里的 Win32,主要是指 Win32 API,如 windows

win32创建控件的一些问题

在我们使用CreateWindow();像一般控件建Windows扩展控件的时候我们会发现控件没有创建成功 这是因为我们没有对Windows扩展控件库进行初始化,这要我们使用InitCommonControlsEx();函数来对 Windows扩展控件库进行初始化,代码如下: INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX);InitCtrls.dwICC = ICC_PAGESCROL