FormatMessage,setWindowText,CreateWindow等函数讲解

我之前写了一个类似于VS中错误查找对话框,那么此处我将贴出我的代码以供大家学习和使用,里面还有一些函数的使用。比如FormatMessage等函数。这个程序大家可以创建一个win32工程,把代码直接添加进去即可使用。

代码的运行结果图,如下所示:
FormatMessage,setWindowText,CreateWindow等函数讲解


这里是函数ErrorCodeShow.cpp:
// ErrorCodeShow.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "ErrorCodeShow.h"

#define MAX_LOADSTRING 100

// 全局变量:
HINSTANCEhInst; 
                                              //当前实例
TCHARszTitle[MAX_LOADSTRING];                              //标题栏文本
TCHARszWindowClass[MAX_LOADSTRING];                  //主窗口类名
HWNDg_hWndSearch;                                                //查找代码信息的window句柄
HWNDg_hWndClose;                                                //关闭对话框的window句柄
HWNDg_hWndEdit;;                                                //编辑框的window句柄
HWNDg_hWndStatic;                                                //静态文字区的window句柄

// 此代码模块中包含的函数的前向声明:
ATOM                        MyRegisterClass(HINSTANCE hInstance);
BOOL                        InitInstance(HINSTANCE, int);
LRESULTCALLBACK      WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTRCALLBACK      About(HWND, UINT, WPARAM, LPARAM);
BOOL SetStaticInfo(HWND hWnd, LPARAM lParam);
BOOL SetEditInfo(HWND hWnd, LPARAM lParam);
BOOL SetSearchButton(HWND hWnd, LPARAM lParam);
BOOL SetCloseButton(HWND hWnd, LPARAM lParam);
BOOL SetStaticShowInfo(HWND hWnd, LPARAM lParam);
VOID GetEditInfomation();
VOID SearchInfomation(UCHAR);
void ShowErrorInfo(TCHAR str[]);

int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                                        _In_opt_ HINSTANCE hPrevInstance,
                                        _In_ LPTSTR      lpCmdLine,
                                        _In_int            nCmdShow)
{
      UNREFERENCED_PARAMETER(hPrevInstance);
      UNREFERENCED_PARAMETER(lpCmdLine);

        // TODO:  在此放置代码。
      MSGmsg;
      HACCELhAccelTable;

      //初始化全局字符串
      LoadString(hInstance, IDS_APP_TITLE, szTitle,MAX_LOADSTRING);
      LoadString(hInstance, IDC_ERRORCODESHOW, szWindowClass,MAX_LOADSTRING);
      MyRegisterClass(hInstance);

      //执行应用程序初始化:
      if(!InitInstance (hInstance, nCmdShow))
      {
            returnFALSE;
      }

      hAccelTable= LoadAccelerators(hInstance,MAKEINTRESOURCE(IDC_ERRORCODESHOW));

      //主消息循环:
      while(GetMessage(&msg, NULL, 0, 0))
      {
            if(!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
            {
                  TranslateMessage(&msg);
                  DispatchMessage(&msg);
            }
      }

      return (int)msg.wParam;
}



//
//  函数:  MyRegisterClass()
//
//  目的:  注册窗口类。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
      WNDCLASSEXwcex;

      wcex.cbSize= sizeof(WNDCLASSEX);

      wcex.style                  = CS_HREDRAW| CS_VREDRAW;
      wcex.lpfnWndProc      = WndProc;
      wcex.cbClsExtra            = 0;
      wcex.cbWndExtra            = 0;
      wcex.hInstance            =hInstance;
      wcex.hIcon                  =LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ERRORCODESHOW));
      wcex.hCursor            =LoadCursor(NULL, IDC_ARROW);
      wcex.hbrBackground      = (HBRUSH)(COLOR_WINDOW+2);
      wcex.lpszMenuName      = MAKEINTRESOURCE(IDC_ERRORCODESHOW);
      wcex.lpszClassName      = szWindowClass;
      wcex.hIconSm            =LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

      returnRegisterClassEx(&wcex);
}

//
//    函数:  InitInstance(HINSTANCE, int)
//
//    目的:  保存实例句柄并创建主窗口
//
//    注释:
//
//              在此函数中,我们在全局变量中保存实例句柄并
//              创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    HWND hWnd;

    hInst = hInstance; //将实例句柄存储在全局变量中

    hWnd =CreateWindow(szWindowClass, szTitle, WS_SYSMENU |WS_MINIMIZEBOX,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance,NULL);

    if (!hWnd)
    {
          return FALSE;
    }

    MoveWindow(hWnd, 300, 100,400, 400, TRUE);
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);

    return TRUE;
}

//
//  函数:  WndProc(HWND, UINT,WPARAM, LPARAM)
//
//  目的:      处理主窗口的消息。
//
//  WM_COMMAND      -处理应用程序菜单
//  WM_PAINT      -绘制主窗口
//  WM_DESTROY      -发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,LPARAM lParam)
{
      int wmId,wmEvent;
      PAINTSTRUCTps;
      HDChdc;

      switch(message)
      {
      caseWM_KEYDOWN:
            switch(wParam)
            {
            caseVK_LEFT:
                  MessageBox(NULL, L"左键按下", L"Success", MB_OK);

                 

                  break;
            }
            break;
      caseWM_CREATE:
            SetStaticInfo(hWnd, lParam);
           
            SetEditInfo(hWnd, lParam);
           
            SetSearchButton(hWnd, lParam);
           
            SetCloseButton(hWnd, lParam);

            SetStaticShowInfo(hWnd, lParam);
            break;
      caseWM_COMMAND:
            wmId      =LOWORD(wParam);
            wmEvent =HIWORD(wParam);
            //分析菜单选择:
            switch(wmId)
            {
            caseIDC_BUTTON_SEARCH:            //响应查找消息
                  GetEditInfomation();
                  break;
            caseIDC_BUTTON_CLOSE:            //相应退出消息
                  PostQuitMessage(0);
                  break;
            caseIDM_ABOUT:
                  DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                  break;
            caseIDM_EXIT:
                  DestroyWindow(hWnd);
                  break;
            default:
                  returnDefWindowProc(hWnd, message, wParam, lParam);
            }
            break;
      caseWM_PAINT:
            hdc =BeginPaint(hWnd, &ps);
            //TODO:  在此添加任意绘图代码...
            EndPaint(hWnd, &ps);
            break;
      caseWM_DESTROY:
            PostQuitMessage(0);
            break;
      default:
            returnDefWindowProc(hWnd, message, wParam, lParam);
      }
      return0;
}

// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam,LPARAM lParam)
{
      UNREFERENCED_PARAMETER(lParam);
      switch(message)
      {
      caseWM_INITDIALOG:
            return(INT_PTR)TRUE;

      caseWM_COMMAND:
            if(LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                  EndDialog(hDlg, LOWORD(wParam));
                  return(INT_PTR)TRUE;
            }
            break;
      }
      return(INT_PTR)FALSE;
}

BOOL SetStaticInfo(HWND hWnd, LPARAM lParam)
{
      HWNDhWndStatic;
      hWndStatic =CreateWindowW(L"static",
            L"错误代码:",
            WS_CHILD |WS_VISIBLE | SS_CENTER,
            20, 10, 70,20,
            hWnd,(HMENU)1,
            ((LPCREATESTRUCT)lParam)->hInstance, NULL);
      if (NULL ==hWndStatic)
      {
            returnFALSE;
      }
      returnTRUE;
}


BOOL SetEditInfo(HWND hWnd, LPARAM lParam)
{
     
      g_hWndEdit =CreateWindowW(L"edit",
            NULL,
            WS_CHILD |WS_VISIBLE ,
            110, 10, 70,20,
            hWnd,
            NULL, NULL,NULL);
      if (NULL ==g_hWndEdit)
      {
            returnFALSE;
      }
      returnTRUE;
}

BOOL SetSearchButton(HWND hWnd, LPARAM lParam)
{
      g_hWndSearch= CreateWindow(L"button",
            L"查找",
            WS_CHILD |WS_VISIBLE,
            210, 10, 70,20,
            hWnd,(HMENU)IDC_BUTTON_SEARCH,
            ((LPCREATESTRUCT)lParam)->hInstance, NULL);
      if (NULL ==g_hWndSearch)
      {
            returnFALSE;
      }
      returnTRUE;
}

BOOL SetCloseButton(HWND hWnd, LPARAM lParam)
{
      g_hWndClose= CreateWindowW(L"button",
            L"退出",
            WS_CHILD |WS_VISIBLE,
            290, 10, 70,20,
            hWnd,(HMENU)IDC_BUTTON_CLOSE,
            ((LPCREATESTRUCT)lParam)->hInstance, NULL);
      if (NULL ==g_hWndClose)
      {
            returnFALSE;
      }
      returnTRUE;
}

BOOL SetStaticShowInfo(HWND hWnd, LPARAM lParam)
{

      g_hWndStatic= CreateWindowW(L"static",
            NULL,
            WS_CHILD |WS_VISIBLE | SS_LEFT,
            20, 50, 340,280,
            hWnd,(HMENU)1,
            ((LPCREATESTRUCT)lParam)->hInstance, NULL);
      if (NULL ==g_hWndStatic)
      {
            returnFALSE;
      }
      returnTRUE;
}

VOID GetEditInfomation()
{
      WCHARwcEditInfo[128];
      GetWindowText(g_hWndEdit, wcEditInfo, sizeof(wcEditInfo));
      unsigned intuiErrorvalue= (unsigned int)atoi((const char*)wcEditInfo);
      SearchInfomation(uiErrorvalue);
}

VOID SearchInfomation(UCHAR ucErrorValue)
{
      TCHARstr[MAXBYTE] = L"\0";
      memset(str,0, sizeof(str));
      DWORD count= 0;
      count =FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS ,
            NULL,ucErrorValue, NULL, str, sizeof(str), NULL);
      if(count)
      {
            ShowErrorInfo(str);
            LocalFree(str);
      }
      else
      {
            //HMODULEhModule = LoadLibrary(L"netmsg.dll");
            //if(hModule)
            //{
            //      count =FormatMessage(FORMAT_MESSAGE_FROM_HMODULE |FORMAT_MESSAGE_IGNORE_INSERTS ,
            //            hModule,ucErrorValue, NULL, str, sizeof(str), NULL);
            //      if(count)
            //      {
            //            ShowErrorInfo(str);
            //            //LocalFree(str);
            //      }
            //      FreeLibrary(hModule);
            //}
            ShowErrorInfo((TCHAR*)L"没有找到错误信息");
      }
     
}

VOID ShowErrorInfo(TCHAR str[])
{
      //SetWindowTextW(g_hWndStatic, L"");
      SetWindowTextW(g_hWndStatic,str);
}

我们在Resource.h中添加这样的代码。
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by ErrorCodeShow.rc
//

#defineIDS_APP_TITLE                  103

#defineIDR_MAINFRAME                  128
#defineIDD_ERRORCODESHOW_DIALOG      102
#defineIDD_ABOUTBOX                  103
#defineIDM_ABOUT                        104
#defineIDM_EXIT                        105
#defineIDI_ERRORCODESHOW                  107
#defineIDI_SMALL                        108
#defineIDC_ERRORCODESHOW                  109
#defineIDC_BUTTON_SEARCH       111
#defineIDC_BUTTON_CLOSE      112
#defineIDC_MYICON                        2
#ifndef IDC_STATIC
#defineIDC_STATIC                        -1
#endif
// 新对象的下一组默认值
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS

#define_APS_NO_MFC                              130
#define_APS_NEXT_RESOURCE_VALUE      129
#define_APS_NEXT_COMMAND_VALUE            32771
#define_APS_NEXT_CONTROL_VALUE            1000
#define_APS_NEXT_SYMED_VALUE            110
#endif
#endif

这两行是对应的button按钮的ID值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值