MFC初步----用C语言调用winapi在HDC上画图或字符

HDC是一种“可画”的设备,WIN_PAINT是windows的一种消息事件,所有窗体可见部分都是他的杰作

实验环境:win7下vs2010

  • 定义hdc设备,并利用WIN_PAINT绘画
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT pt;
    HDC hdc;//DC句柄,可供画的设备
    RECT rect;//方框,也就是窗体的空白部分,可供放置组件和其他元素
    switch (message)
    {
        case WM_PAINT:
            hdc=BeginPaint(hwnd,&pt);
            GetClientRect(hwnd,&rect);
            Ellipse(hdc,0,0,200,100);
            DrawText(hdc,TEXT("想带小松鼠去看顺溜和包打听他们的搏击训练"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
            EndPaint(hwnd,&pt);
            return 0;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        //其他类型消息转给windows操作系统处理
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}
  • 调用API,定义窗体属性(基本每次直接调用即可)
#include<windows.h>
//窗口回调函数H是handler(句柄)的简写
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int nCmdShow)
{
    //MessageBox(NULL,TEXT("会员注册成功"),TEXT("欢迎来到松鼠搏击!"),MB_OK);
    HWND hWnd;
    MSG msg;//微软用C语言做出的api
    WNDCLASS wc;
    //memset(&wc, 0, sizeof(WNDCLASS));
    wc.style = 0;
    wc.lpfnWndProc = (WNDPROC)WndProc;//当窗口接收到消息时,按照WndProc方式定义的方法处理接收到的消息
    //return msg.wParam;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;//句柄的实例---当前实例----所谓句柄的实例,假设我们打开了三个记事本文件,那么每一个记事本即为一个实例,三个就是三个实例
    wc.hIcon = LoadIcon(NULL,IDI_WINLOGO);//左上角图标
    wc.hCursor = LoadCursor(NULL,IDC_ARROW);//光标----箭头形状,微软定义好的
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = "MyWndClass";//窗口名字,后续创建窗口时,根据名字来创建
    //-------------------------注册窗口----------------------------------------
    RegisterClass(&wc);
    //-------------------------创建窗口----------------------------------------
    hWnd = CreateWindow(
        TEXT("MyWndClass"),//窗口类名
        TEXT("李顺溜,包达廷,高超,尚誉"),//标题
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,//窗口位置之---x轴
        CW_USEDEFAULT,//窗口位置之---y轴
        CW_USEDEFAULT,//宽
        CW_USEDEFAULT,//高
        NULL,//窗口的父窗口句柄
        NULL,//窗口的菜单句柄
        hInstance,//窗口的句柄
        NULL);
    //显示和更新窗口
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    //消息循环
    while (GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);//把键盘输入处理为ASCII码
        DispatchMessage(&msg);//把消息转发给窗口过程
    }
    //return 0;
    return msg.wParam;
}

输出结果:

原文地址:https://www.cnblogs.com/saintdingspage/p/12116895.html

时间: 2024-10-11 03:37:39

MFC初步----用C语言调用winapi在HDC上画图或字符的相关文章

MFC初步----在C语言文件实现Windows窗口调用

新建项目----Windows桌面向导: 选择配置项目 上机环境win7操作系统下vs2017,新建一个.c文件 简单窗口程序 #include<windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MessageBox(NULL,TEXT("会员注册成功"),TEXT("欢迎来到松鼠搏击!")

Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用

目录: 一.什么是Thrift? 1) Thrift内部框架一瞥 2) 支持的数据传输格式.数据传输方式和服务模型 3) Thrift IDL 二.Thrift的官方网站在哪里? 三.在哪里下载?需要哪些组件的支持? 四.如何安装? 五.Golang.Java.Python.PHP之间通过Thrift实现跨语言调用 1) Golang 客户端和服务端的实现及交互 2) python 客户端的实现与golang 服务端的交互 3) php 客户端的实现与golang 服务端的交互 4) java

易语言调用csharp写的COM组件的程序在Win2008上奔溃的解决办法

易语言调用csharp写的COM组件,除了要注册csharp写的dll之外(由于是.net代码,需要用.net自带的注册工具RegAsm.exe注册,具体注册方法为: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe dotnet_lib.dll /tlb 这种调用的方法,在大部分的机器下捣鼓之后能成功,但是也有不成功的案例,具体表现如下: 一开始我以为是少了哪些dll,后来上百度,一找关键字“StackHash_0a9e”,还真能

使用c语言调用python小结

最近在做一个漏洞展示平台,攻击实现部分使用python实现,c语言实现部分使用libcli库做一个类似telnet的东东,回调函数run的时候调用python模块.针对c调用python,做个了小demo python模块:demo.py def print_arg(str): print str def add(a,b): print 'a=', a print 'b=', b return a + b class Class_A: def __init__(self): print "ini

C语言调用汇编实现字符串对换

1. 前面配置arm交叉编译环境. 2. 配置好qemu-arm C语言代码string-switch.c: #include <stdio.h> #include <stdlib.h> extern void strswp(char *str1, char *str2); int main(void) { char str1[10] = "123456789"; char str2[10] = "abcde"; strswp(str1, s

C#写的dll跨语言调用

C#写的dll为非标准的windows下dll,故 一般其他语言不能直接调用,当然基于.net平台下的编程语言是可以调用,要让其他语言调用C#写的dll一般通过webservice服务或者是Com 方式.经过在网上找资料以及自身的实践发现可以通过以下方式在Delphi和VB语言中调用. 1.编写C#写dll,用VS新建一个类库项目TestDll,源码如下: using System; using System.Collections.Generic;using System.Text;using

C语言调用COM组件

调用COM组件最简单的语言当然是C++,但在某些情况下,不得不用C语言.本文介绍用C语言调用COM组件的方法. 为了更好的理解C的做法,我们要先看一看C++调用COM组件是怎么做的. 一.C++方式 从 Windows 7 开始,任务栏可以显示进度条,就以这个接口为例吧. ITaskbarList4 *pTaskbar = nullptr; HRESULT hResult = ::CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC

(转)使用Thrift0.9.1实现跨语言调用Golang、Php、Python、Java

问题导读:什么是Thrift?Thrift的官方网站在哪里?Golang.Java.Python.PHP之间如何通过Thrift实现跨语言调用? 一.什么是Thrift Thrift是一种可伸缩的跨语言服务的发展软件框架.它结合了功能强大的软件堆栈的代码生成引擎,以建设服务. Thrift是facebook开发的,07年4月开放源代码,08年5月进入apache孵化器.创造Thrift是为了解决facebook系统中各系统间大数据量的传 输通信以及系统之间语言环境不同需要跨平台的特性.所以thr

Linux下用C语言调用GAS汇编——综合实例

紧接上一篇博文,上篇写的是用GAS汇编调用C语言,这次讲用C语言调用GAS汇编.在内核编写中主要用的是前者,但是在日常程序优化中,主要用的是后者. 还是同样的功能,实现两个数值的交换,把参数从C语言传递进汇编,再用C语言接收从汇编函数返回的返回值,返回值又分为普通整数返回值和字符串返回值. 建立三个文件,分别为main.c.retstr.s.swapint.s.其中main.c是C语言文件,也就是主函数所在,swapint.s是汇编函数,用于交换两个变量数值并返回一个整数值给C语言函数,rets