windows 32 控制台自定义消息

原创 2015年07月10日 10:58:23
#include<windows.h>
#include<stdio.h>
LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);//过程函数声明
HWND bhwnd;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{//设计、注册、显示窗口。。。
    WNDCLASS wndc;
    wndc.cbClsExtra=0;
    wndc.cbWndExtra=0;
    wndc.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
    wndc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wndc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wndc.hInstance=hInstance;
    wndc.lpfnWndProc=WindowProc;
    wndc.lpszClassName="MyWin";
    wndc.lpszMenuName=NULL;
    wndc.style=CS_HREDRAW|CS_VREDRAW;

    RegisterClass(&wndc);

    HWND hwnd;
    hwnd=CreateWindow("MyWin","自定义窗口",WS_OVERLAPPEDWINDOW,300,300,400,300,NULL,NULL,hInstance,NULL);
    ShowWindow(hwnd,SW_SHOWNORMAL);
    UpdateWindow(hwnd);
bhwnd=CreateWindow("Button","MyButton",WS_CHILDWINDOW,100,100,100,100,hwnd,NULL,hInstance,NULL);
ShowWindow(bhwnd,SW_SHOWNORMAL);
    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_COMMAND:
if(DWORD(lParam)==(int)bhwnd)
{
MessageBox(hwnd,"Hello!","",NULL);
}
break;
          case WM_CLOSE:
        DestroyWindow(hwnd);
        break;
          case WM_DESTROY:
        PostQuitMessage(0);
        break;
          default:
                 return DefWindowProc(hwnd,uMsg,wParam,lParam);    
    }
    return 0;

}

添加按钮button

#include <windows.h>
 
// Declare WndProcedure
LRESULT CALLBACK WndProcedure(HWND hWnd, UINT uMsg,
               WPARAM wParam, LPARAM lParam);
 
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
               LPSTR lpCmdLine, int nCmdShow)
{
    HWND       button;
    MSG        Msg;
    HWND       hWnd;
    HRESULT       hRet;
    WNDCLASSEX WndClsEx;
 
    // Populate the WNDCLASSEX structure
    WndClsEx.cbSize        = sizeof(WNDCLASSEX);
    WndClsEx.style         = CS_HREDRAW | CS_VREDRAW;
    WndClsEx.lpfnWndProc   = WndProcedure;
    WndClsEx.cbClsExtra    = 0;
    WndClsEx.cbWndExtra    = 0;
    WndClsEx.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    WndClsEx.hCursor       = LoadCursor(NULL, IDC_ARROW);
    WndClsEx.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    WndClsEx.lpszMenuName  = NULL;
    WndClsEx.lpszClassName = "GlowdotWin32TutorialPartI";
    WndClsEx.hInstance     = hInstance;
    WndClsEx.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
 
    // Register the class
    RegisterClassEx(&WndClsEx);
 
    // Create the window object
    hWnd = CreateWindow("GlowdotWin32TutorialPartI",
              "Glowdot Win32 Tutorial - Part I",
              WS_OVERLAPPEDWINDOW,
              CW_USEDEFAULT,
              CW_USEDEFAULT,
              CW_USEDEFAULT,
              CW_USEDEFAULT,
              NULL,
              NULL,
              hInstance,
              NULL);
 
    button = CreateWindow( 
    "BUTTON",                                    // predefined class
    "OK",                                        // button text
    WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,    // styles 
                                                 // Size and position values are given 
                                                 // explicitly, because the CW_USEDEFAULT 
                                                 // constant gives zero values for buttons. 
    100,                                          // starting x position
    100,                                          // starting y position 
    200,                                         // button width 
    200,                                         // button height 
    hWnd,                                        // parent window 
    NULL,                                        // No menu 
    hInstance,                                   // Our apps HINSTANCE 
    NULL                                         // pointer not needed 
);
 
    if ( !button)
       return 0;
    // Verify window creation
    if( !hWnd ) // If the window was not created,
        return 0; // stop the application
 
    // Show the window
    ShowWindow(hWnd, SW_SHOWNORMAL);
    ShowWindow(button, SW_SHOWNORMAL);
    UpdateWindow(hWnd);
    UpdateWindow(button);
    // our message pump
    while( (hRet = GetMessage( &Msg, NULL, 0, 0 )) != 0)
    { 
        if (hRet == -1)
        {
        // handle the error and possibly exit
        }
        else
        {
            TranslateMessage(&Msg); 
            DispatchMessage(&Msg); 
        }
    }
}
 
//////////////////
// WndProcedure //
//////////////////
 
LRESULT CALLBACK WndProcedure(HWND hWnd, UINT Msg,
               WPARAM wParam, LPARAM lParam)
{
    switch(Msg)
    {
    case WM_DESTROY:
        // user wants to exit
        PostQuitMessage(WM_QUIT);
        break;
    default:
        // Hand off unprocessed messages to DefWindowProc
        return DefWindowProc(hWnd, Msg, wParam, lParam);
    }
 
    return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

win32 控制台 消息详解

Win32消息 一、消息概念 消息就是在事件驱动模式下,事件发布函数和具体功能执行函数(或者代码段)之间的调用协议,调用协议的执行表现为窗口事件发布函数跟具体功能执行函数(或者代码段)之间的选...

为控制台窗口建立消息队列

介绍Windows的窗口、消息、子类化和超类化 (2011-05-08 15:32:07) 转载▼ 标签: 杂谈 分类: windows程序设计 ...

自定义PopWindow,实现简单的回调函数,自己实现简单的CallBack

首先定义一个接口类:  interface CallBack {      void onItemClick(int pos); } 下面的是Bean类; public clas...

C++回调函数(callback)的使用

想在Linux平台用C++实现一个回调函数的功能,于是在网上搜索了一下,找到一篇文章,虽然不是Linux平台的,不过看懂了原理,实现起来没什么难度。 什么是回调函数(callback) ...

C++回调函数(callback)的使用

什么是回调函数(callback)      模块A有一个函数foo,它向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什...

32-35. Struts2_类型转换错误消息的显示和定制&自定义类型转换器&类型转换器与复杂属性&集合协同使用

类型转换错误消息的显示和定制: ConversionActionpackage com.hgh.struts2.conversion;import com.hgh.struts2.pojo.Cust...

[ATL/WTL]_[初级]_[Win32窗口自定义消息处理过程]

场景 有时候我们需要单独对某个窗口消息进行拦截,比如CEdit响应回车, 这时候就需要拦截窗口处理过程了. 当然MFC的界面可以重载: BOOL CXXXDlg::PreTranslateMessag...

Windows使用自定义消息实现进程之间通信

Windows使用自定义消息实现进程之间通信         Windows程序与其它类型程序的区别就是使用消息,例如键盘或鼠标消息等,在dos系统下的程序没有定义消息。在windows操作系统中,...
  • vipygd
  • vipygd
  • 2011年09月16日 13:52
  • 4562

Windows自定义消息

Windows应用程序利用格式化的Windows消息来与其他Windows应用程序及Windows系统进行通信,这些消息被发往应用程序的窗口函数进行处理。由于Windows应用程序是消息或事件驱动的,...
  • zsf8701
  • zsf8701
  • 2012年07月17日 16:22
  • 904

c#中如何截取Windows消息来触发自定义事件

在c#windows开发中,我们常常会遇到拦截windows消息,来触发某个特定任务的问题。 由于目前使用c#的开发人员非常多,而且大多数c#程序员都不是从Windwos c++转过来的对win...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windows 32 控制台自定义消息
举报原因:
原因补充:

(最多只允许输入30个字)