| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1629 人关注过本帖
标题:搞不清楚消息处理函数
只看楼主 加入收藏
观海听潮
Rank: 1
等 级:新手上路
帖 子:14
专家分:5
注 册:2016-8-28
结帖率:50%
收藏
 问题点数:0 回复次数:1 
搞不清楚消息处理函数
刚开始学习windows编程 从网上找的视频 他使用的vc6.0,我的编译器是 vs2012
我在编写时找不到 网上使用的消息处理函数 WndProc WindowProc ,WinSunProc我的编译器上都没有,只找到了 DefWindowProc,运行时不出现窗口,求大神指教

1>源.cpp(71): warning C4273: “DefWindowProcW”: dll 链接不一致
1>          C:\Program Files (x86)\Windows Kits\8.0\Include\um\winuser.h(3993) : 参见“DefWindowProcW”的前一个定义
1>  Win32Project2.vcxproj -> D:\vc\Win32Project2\Debug\Win32Project2.exe

#define _CRT_SECURE_NO_WARNINGS
#define HYCOMMONWINAPI_EXPORTS
#include<iostream>
#include<Windows.h>
#include<stdio.h>
using namespace std;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrewInstance,
                   LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASS wndclass;
    //WNDPROC
    static LPCTSTR szAppName = L"weixin";    //定义窗口类名
    wndclass.hbrBackground //这是一个画刷的句柄
        = (HBRUSH)GetStockObject(DKGRAY_BRUSH);//深灰色的画刷,注意:要加上前面的强制类型转换以适应该句柄
    /*---DKGRAY_BRUSH--深灰色---*/

    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);//装载一个光标 :标准光标 一个箭头形状的光标
                                      //IDC 意思是:identify cursor(定义光标) arrow--箭头
    wndclass.hIcon = LoadIcon(NULL, IDI_ERROR);//定义图标
    wndclass.hInstance = hInstance;
    wndclass.lpfnWndProc = DefWindowProc;//****************
    wndclass.lpszClassName = szAppName;//注意:类型转换
    wndclass.lpszMenuName =NULL;//窗口菜单的名字 因为没有 菜单 所以不需要名字 置为 NULL

    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    RegisterClass(&wndclass);//向操作系统 注册这个 窗口类 之后才能使用该窗口类
   
    HWND hwnd;//定义一个窗口句柄

    hwnd = CreateWindow(szAppName, L"北京培训中心",//要将 char* 类型的数据变为 LPCTSTR 类型的数据
        WS_OVERLAPPEDWINDOW, //产生一个层叠的窗口 有标题栏和边框
        CW_USEDEFAULT,  //使用 缺省的值  
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        C2_WHITESPACE,
        NULL,    //换为 0 也可以
        NULL,
        hInstance, //应用程序实例的句柄
        NULL);
   
    ShowWindow(hwnd, //传入窗口句柄
        SW_SHOWNORMAL    //显示状态:正常显示
        );//显示该窗口
    UpdateWindow(hwnd);        //窗口的刷新

    //消息循环
    MSG msg;  //定义一个窗口消息结构体的变量
    //使用 GetMessage函数从消息队列中取出消息
    while (GetMessage(&msg,NULL, 0, 0))
    {
        TranslateMessage(&msg); //翻译消息
        DispatchMessage(&msg);    //将消息传入到 操作系统中
    }
    //return static_cast<int>(msg.wParam);
    return 0;
}


//消息处理函数,窗口过程函数
LRESULT CALLBACK DefWindowProc(
    HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
    )
{
    HDC hdc;
    PAINTSTRUCT ps;
    switch(uMsg)
    {
    case WM_PAINT://窗口尺寸变化时 窗口重绘
        hdc = BeginPaint(hwnd, &ps);
        TextOut(hdc, 0, 0, L"北京培训", strlen("北京培训"));
        EndPaint(hwnd, &ps);
        break;
    case WM_CHAR:    //在键盘上按下了某个按键
        char szChar[20];
        sprintf(szChar, "char is %d", wParam);//wParam 存放了所按键的 ASCII码,将之存放到字符数组中
        
        //让当前窗口弹出消息框
        MessageBox(hwnd,        //传入当前窗口的句柄
            (LPCTCH)szChar,        //传入消息文本
            (LPCTCH)"weixin",    //消息框的标题
            MB_OK);                //消息框类型 包含了一个ok按钮(就是一个 0 的宏定义)
        break;
    case WM_LBUTTONDOWN:
        MessageBox(hwnd, L"mouse click", L"winxin", MB_OK);
        HDC hDC;//定义一个 DC的句柄(他是一个系统内部维护的数据结构)
        hDC = GetDC(hwnd);//获得该窗口的 DC的句柄
        TextOut(hDC, 0, 50, L"你太帅了!!!", strlen("你太帅了!!!"));
        ReleaseDC(hwnd, hDC);//释放内存
        break;
    case WM_CLOSE://关闭窗口消息
        if(IDYES == MessageBox(hwnd, L"你是否退出程序?", L"winxin", MB_YESNO))
        {
            DestroyWindow(hwnd);//销毁窗口
        }
        break;
    case WM_DESTROY://销毁窗口消息
        PostQuitMessage(0);//退出消息框
        break;
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
}
2017-04-08 11:22
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
时间都浪费在删除注释上了

程序代码:
#define _CRT_SECURE_NO_WARNINGS
#define HYCOMMONWINAPI_EXPORTS
#include <windows.h>
#include <iostream>
#include <stdio.h>
using namespace std;

LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrewInstance, LPSTR lpCmdLine, int nCmdShow )
{
    LPCTSTR szAppName = _T("weixin");

    WNDCLASS wndclass;
    wndclass.hbrBackground = (HBRUSH)GetStockObject(DKGRAY_BRUSH);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hIcon = LoadIcon(NULL, IDI_ERROR);
    wndclass.hInstance = hInstance;
    wndclass.lpfnWndProc = &WindowProc;
    wndclass.lpszClassName = szAppName;
    wndclass.lpszMenuName = NULL;
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    RegisterClass(&wndclass);

    HWND hwnd = CreateWindow( szAppName, _T("北京培训中心")
        , WS_OVERLAPPEDWINDOW
        , CW_USEDEFAULT
        , CW_USEDEFAULT
        , CW_USEDEFAULT
        , C2_WHITESPACE
        , NULL
        , NULL
        , hInstance
        , NULL );

    ShowWindow( hwnd, SW_SHOWNORMAL );
    UpdateWindow( hwnd );

    MSG msg;
    while( GetMessage(&msg,NULL,0,0) )
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    switch(uMsg)
    {
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
            TextOut( hdc, 0, 0, _T("北京培训"), _tcslen(_T("北京培训")) );
            EndPaint(hwnd, &ps);
        }
        break;
    case WM_CHAR:
        {
            TCHAR szChar[20];
            _stprintf( szChar, _T("char is %d"), wParam );
            MessageBox( hwnd, szChar, _T("weixin"), MB_OK );
        }
        break;
    case WM_LBUTTONDOWN:
        {
            MessageBox( hwnd, _T("mouse click"), _T("winxin"), MB_OK );
            HDC hDC = GetDC(hwnd);
            TextOut( hDC, 0, 50, _T("你太帅了!!!"), _tcslen(_T("你太帅了!!!")) );
            ReleaseDC(hwnd, hDC);
        }
        break;
    case WM_CLOSE:
        if(IDYES == MessageBox(hwnd, _T("你是否退出程序?"), _T("winxin"), MB_YESNO))
        {
            DestroyWindow(hwnd);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
}

2017-04-10 08:36
快速回复:搞不清楚消息处理函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019020 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved