c语言修改窗口名,自制WINDOWS窗口框架(修改完善后实现了输入和显示功能),C+WIN-API,再也不用面对黑框框学C语言了...

代码如下:

#include

//#include

#define IDC_EDIT1 201 //自定义控件识别号

#define IDC_EDIT2 202

#define IDC_STATIC 301

#define IDC_BTN1 101

//回调函数.............................................................................

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{static TCHAR sss[256]; //不同的case分支之间传值一定要定义全局变量,否则会出错

static TCHAR sss1[256];static int len,size,i,j,x=10,y=200;static doublesun;

TCHAR szText[256];

HWND edit1,edit2;

HWND an1;

HWND sta1;switch(uMsg) //消息分支选择,注意SWITCH-CASE结构中,BREAK代表跳出当前SWITCH,RETURN代表结束整个函数。

{caseWM_COMMAND:

{switch(LOWORD(wParam)) //点击不同的控件显示,走不同的处理路径

{case IDC_BTN1: //点击按钮1触发消息

{//MessageBox(hwnd,"提交成功","提示",MB_OK|MB_ICONINFORMATION);

len=GetDlgItemText(hwnd,IDC_EDIT1,sss,255); //获取控件内容函数 ,返回值为控件文本字节长度//MessageBox(hwnd,sss,"输入内容",MB_OK);

GetDlgItemText(hwnd,IDC_EDIT2,sss1,255);

sun=atof(sss)+atof(sss1);/*处理数据输入和涉及到数字运算用这个函数转换数据类型:【atof()】是把字符串转换成整型数的一个函数,扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回.默认返回类型为double类型,包含在头文件stdlib.h中。反方向函数为itoa()将整数转换成字符串*/InvalidateRect(hwnd,NULL,TRUE);//发送刷新指令 ,这个很关键。要不然窗口不会及时显示结果。。

}break;default:break;

}break;

}break;case WM_DESTROY: //当前窗口被销毁时

PostQuitMessage(0); //发出退出程序的消息

break;case WM_CLOSE: //右上角关闭按钮消息

DestroyWindow(hwnd); //销毁窗口

break;case WM_CREATE: //控件创建消息

{

edit1= CreateWindow("EDIT",NULL, WS_CHILD|WS_VISIBLE|WS_BORDER, 220, 30, 100,25,hwnd,(HMENU)IDC_EDIT1, NULL, NULL); //创建编辑框控件

edit2= CreateWindow("EDIT",NULL, WS_CHILD|WS_VISIBLE|WS_BORDER, 220, 60, 100,25,hwnd,(HMENU)IDC_EDIT2, NULL, NULL); //创建编辑框控件

an1= CreateWindow("button","计算",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,340,60,50,25,hwnd,(HMENU)IDC_BTN1,NULL,NULL); //创建按钮控件//sta1= CreateWindow("STATIC","+",WS_CHILD|WS_VISIBLE|SS_CENTER,70,10,300,200,hwnd,(HMENU)IDC_STATIC,NULL,NULL);//创建静态文本框控件,画布,美化作用,下一步再深入研究

}break;case WM_PAINT: //【重绘窗口函消息 】

{

HDC hdc;//定义输出设备句柄//RECT rect;//定义一块显示区域,DrawText 函数需要的参数

PAINTSTRUCT ps = {0}; //定义一个 数组存放字符串

hdc = BeginPaint(hwnd,&ps); //开始重绘

/******************************************核心程序代码区******************************************************************/SetTextColor(hdc, RGB(255,0,0)); //设置字体颜色

Rectangle(hdc,2,2,818,555);

Rectangle(hdc,10,190,810,550); //画矩形,必须在正文之前显示框,否则正文会被覆盖

TextOut(hdc,350,200,TEXT("九九乘法表"),10); //直接文本显示

for(i=1;i<=9;i++)for(j=1;j<=i;j++) {

size= wsprintf(szText,TEXT("%d×%d=%2d"),j,i,i*j); //将变量S,I的值按照格式符号%s%d转换后存入缓冲区szText,返回值为字节长度

/*注意:因为 wsprintf不支持浮点数,所以处理高精度数据计算式要用 swprintf代替*/TextOut(hdc,x+j*80,y+i*25, szText,size);

}

TextOut(hdc,650,530,TEXT("小狗WINDOWS小程序"),17);

Rectangle(hdc,10,10,810,180); //矩形(美化类函数,形成边框效果)

TextOut(hdc,450,30,TEXT("简单的WIN32窗口框架,能够实现输入和显示"),39);

TextOut(hdc,100,30,TEXT("请输入参数A的值:"),16);

TextOut(hdc,100,60,TEXT("请输入参数B的值:"),16);

TextOut(hdc,100,90,TEXT("A+B= :"),len);/*显示数字用以下代码*/size= sprintf(szText,TEXT("%.4lf"),sun);

TextOut(hdc,220,90,szText,size);/*显示文字或字母用以下代码

TextOut(hdc,550,30,sss,len);*/

/******************************************核心程序代码区******************************************************************/EndPaint(hwnd,&ps); //结束重绘

}break;default:returnDefWindowProc(hwnd, uMsg, wParam, lParam);

}return 0;

}/*********************************************以下为主窗口函数**********************************************************************/

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,intnCmdShow){

WNDCLASSEX wzgwind= {0}; //窗口类结构, 为注册窗口类作准备

wzgwind.cbSize = sizeof(wzgwind); //WNDCLASSEX结构的大小

wzgwind.cbWndExtra = 0; //窗口额外内存, 没有, 设为0

wzgwind.hbrBackground = COLOR_WINDOW; //使用系统默认背景//wzgwind.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);//窗口背景, 这里使用灰色背景(另一种表示法)

wzgwind.hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)); //应用程序使用的鼠标类型

wzgwind.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION)); //光标类型

wzgwind.hIconSm = NULL; //应用程序程序的小光标, 不管, 设为 NULL

wzgwind.hInstance = hInstance; //应用程序程序实例句柄, 由 WinMain 函数传递过来

wzgwind.lpfnWndProc = WndProc; //这个很重要, 就是当前窗口的消息处理函数, 传递 WndProc 的地址

wzgwind.lpszClassName = "wzgwind"; //创建类时使用的类名, 可以自定义

wzgwind.lpszMenuName = NULL; //菜单, 没有, 就使用 NULL

wzgwind.style = CS_HREDRAW | CS_VREDRAW; //类的风格, 垂直重绘, 水平重绘

ATOM nAtom= RegisterClassEx(&wzgwind);if (!nAtom )

{

MessageBox(NULL,"注册失败", "Infor", MB_OK);return 0;

}

HWND hwnd= CreateWindowEx(WS_EX_CLIENTEDGE,"wzgwind","win-gou",WS_VISIBLE|WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,/*x*/CW_USEDEFAULT,/*y*/

840, /*width*/

600, /*height*/NULL,NULL,hInstance,NULL);

ShowWindow(hwnd,nCmdShow);

UpdateWindow(hwnd);

MSG msg= { 0 }; //定义并初始化msg

while( msg.message != WM_QUIT ) //使用while循环,如果消息不是WM_QUIT消息,就继续循环

{if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) ) //查看应用程序消息队列,有消息时将队列中的消息派发出去。

{

TranslateMessage(&msg ); //将虚拟键消息转换为字符消息

DispatchMessage( &msg ); //分发一个消息给窗口程序。

}

}

UnregisterClass("wzgwind", wzgwind.hInstance);return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值