• Win32基础知识整理


    1、定义字符串

      在资源新建String table,增加新字符串;

      (win32加载)

      TCHAR tcIDName[255]=_T("");
      LoadString(hInstance,IDS_NAME,tcIDName,255);

    2、窗口居中

      在WM_CREATE消息中增加如下代码: 

    int scrWidth,scrHeight;
        RECT rect;
        //获得屏幕尺寸
        scrWidth = GetSystemMetrics(SM_CXSCREEN);
        scrHeight = GetSystemMetrics(SM_CYSCREEN);
        //取得窗口尺寸
        GetWindowRect(hwnd,&rect);
        //重新设置rect里的值
        rect.left = (scrWidth-rect.right)/2;
        rect.top = (scrHeight-rect.bottom)/2;
        //移动窗口到指定的位置
        SetWindowPos(hwnd,HWND_TOP,rect.left,rect.top,rect.right,rect.bottom,SWP_SHOWWINDOW);

    3、TChar字符串格式化

        TCHAR tcText[255] = _T("");

       _stprintf(tcText,_T("数字为%d"),1111);  

    4、键盘字符捕捉

    case WM_KEYDOWN:
            switch (wParam) 
            {
                case VK_CONTROL:break;
            }
            break;

     注意:如果点击按钮之后,或者其他控件,焦点就会被夺走,此时则需要通过SetFocus函数重新设置该窗口焦点。

    5、创建按钮步骤(创建控件的方法)

      (1)、定义资源ID,#define ID_BUTTON_CLOSE 100001

      (2)、在WM_COMMAND消息中,添加以下代码:     

        HWND hButton = CreateWindow(_T("button"),
        _T("退出"),//按钮上显示的字符
        WS_CHILD | WS_VISIBLE,
        50,100,70,30, //按钮在界面上出现的位置
        hwnd,(HMENU)ID_BUTTON_CLOSE, //设置按钮IDIDC_BUTTON_CONTINUE = 131自己定义ID
        ((LPCREATESTRUCT)lParam)->hInstance,NULL);

      (3)、在WM_CREATE消息中处理对子控件的点击处理

        WORD wID = LOWORD(wParam);
        WORD wEvent = HIWORD(wParam);
        switch(wID)
        {
          case ID_BUTTON_CLOSE:
          PostQuitMessage(0);
          break;
        }

    6、加载资源图标

      LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON_APP));

    7、绘制矩形并填充颜色

      HBRUSH hbrush = CreateSolidBrush (RGB());
      HBRUSH oldhBrush = (HBRUSH)SelectObject(hdc,hbrush);
      Rectangle(hdc,lx,ty,rx,by);
      SelectObject(hdc,oldhBrush);

      DeleteObject(hbrush);

     8、设置static文本背景颜色

    case WM_CTLCOLORSTATIC:
    {
        if ((HWND)lParam == GetDlgItem(hwnd,ID_TEXT_SORCE))//获得指定标签句柄用来对比
        {
            SetTextColor((HDC)wParam,RGB(255,0,0));//设置文本颜色
            SetBkMode((HDC)wParam,TRANSPARENT);//设置背景透明
        }
        return (INT_PTR)GetStockObject((NULL_BRUSH));//返回一个空画刷(必须)
    }
    break;        

    9、设置win32窗口一直在最上面

      SetWindowPos函数第二个参数设置为HWND_TOPMOST;

    10、获得透明画刷

      HBRUSH hBrush = (HBRUSH)GetStockObject(NULL_BRUSH);

      其返回的是一个标识,所以不需要delete或者release。

    11、在win32中使用GDI+

      1、头文件中加入以下内容,宏可以改变

    #ifndef   AFXSTD_H 
    #define   AFXSTD_H 
    #include <comdef.h>
    #include <Windows.h>  // must be inluded before gdiplus.h, otherwise compile error   
    #include <gdiplus.h>   
    #pragma comment(lib, "gdiplus.lib") 
    #endif 

      2、定义变量  ULONG_PTR m_gdiplusToken;

      3、初始化

    Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);  

      4、使用(根据具体情况而定)

    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(hwnd,&ps);
    Gdiplus::Graphics graphics(hdc);
    Gdiplus::Pen myPen(Gdiplus::Color(255,255,0,0),50);
    graphics.DrawEllipse(&myPen,30,30,50,50);
    graphics.DrawLine(&myPen, 0, 50, 400, 150);  
    EndPaint(hwnd,&ps);

      5、释放GDI+  Gdiplus::GdiplusShutdown(m_gdiplusToken);

  • 相关阅读:
    努力学习吧!
    C# 捕捉键盘事件
    oracle 11g 及 plsqldeveloper 相关操作
    Oracle 建表空间
    窗体程序 防止重复打开子窗体
    asp 下 ewebeditor 上传图片功能,在IE7,IE8 及更高版本上失效解决方法
    StringBuilder 在后台动态输出 html 代码
    起动停止 Oracle11g 三个服务的批处理写法
    MySQL 常用命令语句
    虚拟机—pychrm
  • 原文地址:https://www.cnblogs.com/jlyg/p/8085232.html
Copyright © 2020-2023  润新知