win32案例程序

典型案例程序
// Win32消息.cpp : 定义应用程序的入口点。


#include "stdafx.h"
#include "WinMenu.h"
#include "stdio.h"



HINSTANCE g_hInstance = 0;//接收应用程序实例句柄
HANDLE g_hOutput = 0;
#define MAX_LOADSTRING 100


void OnPaint(HWND hWnd)
{
    char *pszText = "WM_PAINT\n";
    WriteConsole(g_hOutput, pszText, strlen(pszText), NULL, NULL);


}
//创建主窗口
HWND CreateMain(LPCSTR lpClassName, LPCSTR lpWndName)
{
    HWND hWnd = CreateWindowEx(0, lpClassName, lpWndName,
        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
        NULL, NULL, g_hInstance, "hello data"
        );
    return hWnd;
}

//显示窗口
void Display(HWND hWnd)
{
    ShowWindow(hWnd, SW_SHOW);
    UpdateWindow(hWnd);
}

//消息循环
void Message()
{
    MSG nMsg = { 0 };
    while (GetMessage(&nMsg, NULL, 0, 0))
    {
        TranslateMessage(&nMsg);
        DispatchMessage(&nMsg);

    }
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {

    case WM_PAINT:
        OnPaint(hWnd);
        break;
    case WM_DESTROY:
        //PostQuitMessage(0);
        SendMessage(hWnd, WM_QUIT, 0, 0);
        break;
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);//该函数是默认处理函数,如果没有上面自己定义的消息,其他消息就会被该函数默认处理
}

void Register(LPSTR lpClassName, WNDPROC wndproc)
{
    WNDCLASSEX wce = { 0 };
    wce.cbSize = sizeof(wce);
    wce.cbClsExtra = 0;
    wce.cbWndExtra = 0;
    wce.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wce.hCursor = NULL;
    wce.hIcon = NULL;
    wce.hIconSm = NULL;
    wce.hInstance = g_hInstance;
    wce.lpfnWndProc = wndproc;//窗口处理函数
    wce.lpszClassName = lpClassName;
    wce.lpszMenuName = NULL;
    wce.style = CS_HREDRAW | CS_VREDRAW;
    RegisterClassEx(&wce);
}


int WINAPI WinMain(HINSTANCE hIns, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    AllocConsole();//增加一个附带的DOS窗口
    g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    g_hInstance = hIns;
    Register(_T("Main"), WndProc);
    HWND hWnd = CreateMain(_T("Main"), _T("window"));
    Display(hWnd);
    Message();
    return 0;
}

典型案例程序二
#include "stdafx.h"
#include "WinHello.h"

//处理窗口绘制消息(WM_PAINT)
void OnPaint(HWND hWnd)
{
    PAINTSTRUCT ps;//获取设备上下文句柄
    HDC hDC = BeginPaint(hWnd, &ps);
    RECT rcClient;//获取窗口客户区矩形
    GetClientRect(hWnd, &rcClient);
    
    //在窗口客户区内显示文本
    DrawText(hDC, _T("hello world"), -1, &rcClient, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    EndPaint(hWnd, &ps);//释放设备上下文

}

//主窗口过程函数
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

    //对不同的消息做不同的处理
    switch (uMsg)
    {
    case WM_PAINT://窗口绘制消息
        OnPaint(hWnd);
        return 0;
    case WM_DESTROY://窗口销毁消息
        PostQuitMessage(0);//发送WM_QUIT消息
        return 0;
    }

    //对不感兴趣的消息交给缺省窗口过程函数处理
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

//注册窗口类
ATOM InitApplication(HINSTANCE hInstance)
{
    WNDCLASS wc = { 0 };
    wc.style = CS_HREDRAW | CS_VREDRAW; //窗口类风格
    wc.lpfnWndProc = MainWndProc;//窗口过程函数指针
    wc.cbClsExtra = 0;//窗口类附加数据字节数
    wc.cbWndExtra = 0;//窗口附加数据字节数
    wc.hInstance = hInstance;//应用程序实例句柄
    wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);//窗口图标句柄
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);//窗口光标句柄
    wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW);//窗口背景句柄
    wc.lpszMenuName = NULL;//窗口菜单资源名
    wc.lpszClassName = _T("MAIN");//窗口类型
    return RegisterClass(&wc);//将wc结构存入内核

}

//创建、显示、并刷新窗口
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    //创建窗口
    HWND hWnd=CreateWindow(
        _T("MAIN"),//窗口类名
        _T("WinHello"),//窗口标题
        WS_OVERLAPPEDWINDOW,//窗口风格
        CW_USEDEFAULT,//窗口左上角水平坐标
        CW_USEDEFAULT,//窗口左上角垂直坐标
        CW_USEDEFAULT,//窗口宽度
        CW_USEDEFAULT,//窗口高度
        NULL,//父窗口句柄
        NULL,//菜单句柄
        hInstance,//应用,程序实例句柄
        NULL//额外数据
        );
    if (!hWnd)
    {
        return FALSE;
    }

    //显示窗口
    ShowWindow(hWnd, nCmdShow);

    //刷新窗口
    UpdateWindow(hWnd);
    return TRUE;

}

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPWSTR    lpCmdLine,
    _In_ int       nCmdShow)
{
    //注册窗口类
    if (!InitApplication(hInstance))
    {
        return 0;
    }
    //创建、显示并刷新窗口
    if (!InitInstance(hInstance, nCmdShow))
    {
        return 0;
    }
    //消息泵(消息循环)
    MSG msg = { 0 };
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);//翻译消息(处理大小写锁、shift键 是否打开)
        DispatchMessage(&msg);//派发消息
    }
    return 0;



    return 0;
}
创建编辑窗口,向DOS窗口输出内容
// WinHello.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "Win32Project1.h"
#include "stdio.h"

HINSTANCE g_hInstance = 0;//接收应用程序实例句柄
HANDLE g_hOutput = 0;//接收标准输出句柄
HWND g_hEdit = 0;


void OnCreate(HWND hWnd, LPARAM lParam)
{
    CREATESTRUCT *pcs = (CREATESTRUCT*)lParam;
    char * pszText = (char*)pcs->lpCreateParams;
    //MessageBox(hWnd,pszText,"Infor",MB_OK);
     g_hEdit=CreateWindowEx(WS_EX_CLIENTEDGE, _T("EDIT"), _T("HELLO"),
        WS_CHILD | WS_VISIBLE | WS_BORDER,
        0, 0, 200, 200, hWnd, NULL,
        g_hInstance,
        NULL
        );

}

void OnSize(HWND hWnd, LPARAM lParam)
{
    int nWidth = LOWORD(lParam);
    int nHeight = HIWORD(lParam);
    char szText[256] = { 0 };
    sprintf(szText, "宽:%d,高:%d\n", nWidth, nHeight);
    WriteConsole(g_hOutput, szText, strlen(szText), NULL, NULL);
    MoveWindow(g_hEdit, 0, 0, nWidth, nHeight, TRUE);
}

//处理窗口绘制消息(WM_PAINT)
void OnPaint(HWND hWnd)
{
    PAINTSTRUCT ps;//获取设备上下文句柄
    HDC hDC = BeginPaint(hWnd, &ps);
    RECT rcClient;//获取窗口客户区矩形
    GetClientRect(hWnd, &rcClient);

    //在窗口客户区内显示文本
    DrawText(hDC, _T("hello world"), -1, &rcClient, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    EndPaint(hWnd, &ps);//释放设备上下文

}
HWND CreateMain(LPCTSTR lpClassName,LPCTSTR lpWndName)
{
    HWND hWnd = CreateWindowEx(0, lpClassName, lpWndName,
        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
        NULL, NULL, g_hInstance, _T("hello data")
        );
        
        
    return hWnd;
        
}

//显示窗口
void Display(HWND hWnd)
{
    ShowWindow(hWnd, SW_SHOW);
    UpdateWindow(hWnd);
}

//消息循环
void Message()
{
    MSG nMsg = { 0 };
    while (GetMessage(&nMsg, NULL, 0, 0))
    {
        TranslateMessage(&nMsg);
        DispatchMessage(&nMsg);
    }
}


//主窗口过程函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

    //对不同的消息做不同的处理
    switch (uMsg)
    {
    case WM_SIZE:
        OnSize(hWnd,lParam);
        break;
    case WM_CREATE://窗口绘制消息
        OnCreate(hWnd,lParam);
        break;
    case WM_SYSCOMMAND:
        if (wParam == SC_CLOSE)
        {
            int nRet = MessageBox(hWnd, _T("是否退出"), _T("Infor"), MB_YESNO);

            if (nRet == IDYES)
            {

            }
            else
            {
                return 0;
            }
        }
        break;
    case WM_DESTROY://窗口销毁消息
        PostQuitMessage(0);//发送WM_QUIT消息
        break;
    }

    //对不感兴趣的消息交给缺省窗口过程函数处理
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}


//注册窗口类
void Register(LPCTSTR lpClassName, WNDPROC wndproc)
{
    WNDCLASSEX wce = { 0 };
    wce.cbSize = sizeof(wce);
    wce.cbClsExtra = 0;
    wce.cbWndExtra = 0;
    wce.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wce.hCursor = NULL;
    wce.hIcon = NULL;
    wce.hIconSm = NULL;
    wce.hInstance = g_hInstance;
    wce.lpfnWndProc = wndproc;
    wce.lpszClassName = lpClassName;
    wce.lpszMenuName = NULL;
    wce.style = CS_HREDRAW | CS_VREDRAW;
    RegisterClassEx(&wce);


}



int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPWSTR    lpCmdLine,
    _In_ int       nCmdShow)
{

    AllocConsole();//添加DOS窗口,用cmd窗口输出创建的窗口信息
    g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    g_hInstance = hInstance;
    Register(_T("Main"), WndProc);
    HWND hWnd = CreateMain(_T("Main"), _T("window"));//创建窗口
    Display(hWnd);//显示窗口
    Message();//消息循环
    return 0;

}

转载于:https://www.cnblogs.com/lhfen/p/5978823.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值