C语言实现界面(不通过MFC\避免遗忘)
感觉MFC不属于程序员细究的东西,今实现基本界面避免日后遗忘。
源代码:
#include<windows.h>
#include<stdio.h>
char str[] = {'0'};
char cmd[] = {'0'};
//char hour[10], minute[10];
int num;
int num_text_hour, num_text_minute;
//char num_str[];
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow)
{
HWND hWnd;
MSG Msg;
WNDCLASS WndClass;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
WndClass.lpfnWndProc=WndProc;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hInstance=hInstance;
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName=NULL;
WndClass.lpszClassName="Hello Win"; //窗口类名
//注册窗口
if(!RegisterClass(&WndClass))
{
MessageBox(NULL,"窗口注册失败!","Hello Win",0);
return 0;
}
//创建窗口
hWnd=CreateWindow("Hello Win", "定时关机--junmuzi", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
//显示窗口
ShowWindow(hWnd,nCmdShow);
//更新窗口
UpdateWindow(hWnd);
//进入消息循环:当从应用程序消息队列中捡取的消息是WM_QUIT时,则推出循环
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg); //转换键盘消息
DispatchMessage(&Msg); //分发消息
}
return Msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT Ps;
char strEdit_hour[10], strEdit_minute[10];
static HWND hWndButton_ok, hWndButton_cancel, hWndEdit_hour, hWndEdit_minute;
switch(message)
{
case WM_CREATE:
hWndEdit_hour = CreateWindow("edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,10,60,100,25,hWnd,NULL,NULL,NULL);
hWndEdit_minute = CreateWindow("edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,180,60,100,25,hWnd,NULL,NULL,NULL);
hWndButton_ok = CreateWindow("button","确定",WS_CHILD|WS_VISIBLE|WS_BORDER, 340, 60, 100, 25, hWnd,NULL,NULL,NULL);
hWndButton_cancel = CreateWindow("button","取消定时关机",WS_CHILD|WS_VISIBLE|WS_BORDER, 460, 60, 100, 25, hWnd,NULL,NULL,NULL);
return 0;
case WM_COMMAND:
if(((HWND)lParam==hWndButton_ok)&&(HIWORD(wParam)==BN_CLICKED))
//按下按键hWndButton_ok
{
num_text_hour = GetWindowText(hWndEdit_hour,strEdit_hour,10); //获取编辑框控件hour的内容
//sprintf(str,"The result is: %s",strEdit_hour);
//sprintf(hour, "%s", strEdit_hour);
if (num_text_hour == 0)
{
MessageBox(NULL,"小时不能为空!","错误信息:", MB_OK);
}
num_text_minute = GetWindowText(hWndEdit_minute,strEdit_minute,10); //获取编辑框控件minute的内容
if (num_text_minute == 0)
{
MessageBox(NULL,"分钟不能为空!","错误信息:", MB_OK);
}
if (!((atoi(strEdit_hour) >= 0) && (atoi(strEdit_minute) >= 0) && (atoi(strEdit_minute) <= 60)))
{
MessageBox(NULL,"非法输入(输入的小时必须大于等于0,输入的分钟必须大于等于0,且小于等于60)","错误信息:", MB_OK);
}
if ((num_text_hour != 0) && (num_text_minute != 0) && (atoi(strEdit_hour) >= 0) && (atoi(strEdit_minute) >= 0) && (atoi(strEdit_minute) <= 60))
{
num = atoi(strEdit_hour) * 3600 + atoi(strEdit_minute) * 60; //把小时和分钟数转化为多少秒
//itoa(num, num_str, 10);
//sprintf(str,"The result is: %s",strEdit_minute);
//sprintf(minute, "%s", strEdit_minute);
//strcat(cmd, str_);
//sprintf(cmd, "shutdown -s -t %s %s %d", strEdit_hour, strEdit_minute, num);
sprintf(cmd, "shutdown -s -t %d", num); // 定时关机命令
sprintf(str, "电脑会在%s小时%s分钟后关机!!!", strEdit_hour, strEdit_minute);
system(cmd); //shutdown the computer.
InvalidateRect(hWnd,NULL,TRUE);
}
}
if(((HWND)lParam == hWndButton_cancel)&&(HIWORD(wParam) == BN_CLICKED))
//按下按键hWndButton_cancel
{
sprintf(cmd, "shutdown -a"); //取消定时关机
sprintf(str, "电脑定时关机被取消!!!");
system(cmd); //cancel ”shutdown the computer“.
InvalidateRect(hWnd,NULL,TRUE);
}
case WM_PAINT://设计编辑框
hDC=BeginPaint(hWnd,&Ps);
TextOut(hDC,10,10,"请输入你要设置的多长时间后关机(小时和分钟数):",48);
TextOut(hDC,120,60,"小时",4);
TextOut(hDC,290,60,"分钟",4);
//TextOut(hDC,10,90,str,strlen(str));
TextOut(hDC,10,90,str,strlen(str));
EndPaint(hWnd,&Ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,message,wParam,lParam);
}
//实现自动关机的程序
C语言实现界面(不通过MFC\避免遗忘)的更多相关文章
- 为基于OpenCV的图像处理程序编写界面—关于QT\MFC\CSharp的选择以及GOCW的介绍
基于OpenCV编写图像处理项目,除了算法以外,比较重要一个问题就是界面设计问题.对于c++语系的程序员来说,一般来说有QT/MFC两种考虑.QT的确功能强大,特别是QML编写andr ...
- 【4opencv】为基于OpenCV的图像处理程序编写界面—关于QT\MFC\CSharp的选择以及GOCW的介绍
基于OpenCV编写图像处理项目,除了算法以外,比较重要一个问题就是界面设计问题.对于c++语系的程序员来说,一般来说有QT/MFC两种考虑.QT的确功能强大,特别是QML编写andr ...
- C#实现多国语言的界面切换
在PictureStudio中,我需要实现多国语言的界面切换,而且切换各种语言版本的时候希望程序是动态的加载语言,不希望切换语言后重新启动程序. 实现这样的功能可以有很愚蠢的方法,比如说你可以在程序中 ...
- 美化mfc界面,给mfc界面加上皮肤
注明:里面使用到的资源文件在自己的腾讯微云有. 原图: 添加皮肤后: 通过对比就能知道,加上皮肤后给人的感觉就是耳目一新了. 技术详细说明: 这里用到的是一个轻量型的美化工具SkinSharp又称Sk ...
- C语言进入界面编程准备篇
Win视窗编程和DOS下编程不同,但是类似.Windows应用程序也有它的入口函数,DOS程序中的入口函数是main函数,Windows程序的入口函数是WinMain函数.新建Win32 Applic ...
- java语言登陆界面(菜鸟版)
最近在看的Java入门书是<Head First Java>,一本很棒的Java书. 老师要求的程序流程图我没有,之前我们的做法是写完代码再画流程图,我想这样的做法是不对的,流程图应该是在 ...
- Go语言图形界面开发:Go版GTK
https://www.cnblogs.com/tennysonsky/p/8433888.html package main import ( "os" "github ...
- NX二次开发-MFC对话框获取UG界面句柄,设置MFC对话框在UG界面固定显示位置
extern "C" DllExport void ufusr(char *param, int *retcod, int param_len) { if (UF_initiali ...
- C语言图形界面常用函数集锦
(以下函数均应在图形方式初始之后使用(initgraph(a,b)),在win-tc中使用BGI图形程序模板时,其中已经定义有一个initgr函数,在main函数中应在执行initgr函数之后再使用这 ...
随机推荐
- 使用python发邮件
使用python发邮件 网上有很多发邮件的例子,本人在网上找了一份,稍加修改后使用 上源码 # encoding=utf-8 from email.mime.image import MIMEImag ...
- 继刚接触play framework后,一些心得
我是个小菜鸟,我这些体会跟心得纯属个人观点,仅供参考,勿喷,我想记录下学习的历程,不断成长 在play2.0的框架里面 用到的最多的语言就是scala,对于习惯了java语言的我们来说 看这些语言 ...
- 介绍一个成功的 Git 分支模型 Release 分支
英文原文: http://nvie.com/posts/a-successful-git-branching-model/ 中文版: 在这篇文章中,我提出一个开发模型.我已经将这个开发模型引入到我所有 ...
- Linux安装oracle报错解决
安装报错:[oracle@centos1 database]$ ./runInstaller Starting Oracle Universal Installer... Checking insta ...
- Oracle Sequence与Trigger的使用
一:建立sequence -- Create sequence create sequence SEQ_PUSH minvalue maxvalue start increment cache ; 二 ...
- Codeforces 366C Dima and Salad
http://codeforces.com/problemset/problem/366/C 题意:在一个冰箱里有n种水果,并且这些水果每一种都有一个美味度和一个卡路里的属性, 小明要从这些水果中选出 ...
- Visual studio 使用正则表达查找替换
原文 http://www.cnblogs.com/shineqiujuan/archive/2012/07/04/2575535.html 正则表达式是查找和替换文本模式的一种简洁而灵活的表示法. ...
- UML--核心元素之包
包是一种容器,如同文件夹一样. 包是UML非常常用的一个元素,它最主要的作用就是容纳并为其他元素分类.包可以容纳用例.业务实体.类图等,也包含子包. 分包的原则 1.如果将元素分为三个包A.B.C,那 ...
- Linux 挂载光驱
Linux的硬件设备都在/dev目录下,/dev/cdrom表示光驱,挂载方法如下: 1.挂载光驱 [root@oracle ~]# mount -t iso9660 /dev/cdrom /mnt/ ...
- OnlineJudge 离线题库采集
过段时间要把以前的OJ换掉,我负责VirtualJudge的部分.需要用C与PHP写一个Linux下的VJudge. 在此之前,将以前写给自己学弟学妹用的OJ离线题库的采集程序改进了一下.支持国内一些 ...