设为首页 收藏本站
查看: 1367|回复: 0

[经验分享] VS2012+C语言+图形界面窗口+读取TXT文件+显示

[复制链接]

尚未签到

发表于 2018-6-23 12:35:40 | 显示全部楼层 |阅读模式
#include <windows.h>  
#include <stdio.h>
  
#include <stdlib.h>
  
#include <time.h>

  
#define>  
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); //声明回调函数
  
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) //主函数
  
{
  WNDCLASS wnd;
  wnd.style = CS_HREDRAW | CS_VREDRAW;
  wnd.lpfnWndProc = WindowProc;   //与回调函数关联
  wnd.cbClsExtra = 0;
  wnd.cbWndExtra = 0;

  wnd.hIcon = LoadIcon(NULL,>
  wnd.hCursor = LoadCursor(NULL,>  wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    //背景颜色
  wnd.lpszMenuName = NULL;
  wnd.lpszClassName = TEXT("window");
  wnd.hInstance = hInstance;   //窗口句柄
  if (!RegisterClass(&wnd))   //注册窗口类
  {
  MessageBox(NULL, "register fail", "errorMsg", 0);
  return 0;
  }
  HWND hwnd;
  int x_screen;
  //int   y_screen;
  x_screen = GetSystemMetrics(SM_CXSCREEN);//屏幕宽度
  //y_screen = GetSystemMetrics(SM_CYSCREEN);//屏幕高度
  /*创建窗口类,
  WS_EX_TOOLWINDOW,使得程序不在任务栏显示,即程序仅有一个窗口,无其他桌面显示,可在进程中看到;
  TEXT("偷得浮生半日闲"),窗口名称,不过本程序不显示边框,所以看不到;
  WS_POPUPWINDOW,使得程序无边框,即只有客户区;
  接下来四个参数:第一、二个确定程序的左上角X,Y位置,
  第三、四个确定程序的长、宽
  */
  hwnd = CreateWindowEx(WS_EX_TOOLWINDOW,TEXT("window"),TEXT("偷得浮生半日闲"),WS_POPUPWINDOW,x_screen - 532 ,10, 512,192, NULL, NULL, hInstance, NULL);
  ShowWindow(hwnd, nShowCmd); //  显示窗口
  MSG msg;
  while (GetMessage(&msg, NULL, 0, 0))    //消息循环
  {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
  }
  return msg.lParam;
  
}
  
char* ReplaceString(const char *srcStr, const char *src, const char *dest)  //替换字符串,获得文件路径
  
{
  char *ptr;
  int len = strlen(srcStr);
  ptr = (char*)malloc(sizeof(char)*len+1);
  strcpy(ptr, srcStr);
  for ( int i=0; i<len; ++i )
  {
  if ( 0==strncmp(&ptr, src, strlen(src)) )    //查找想要被替换字符串的起始位置
  {
  strncpy(&ptr, dest, strlen(dest));   //替换字符串的长度为目标字符串的长度
  }
  }
  ptr[len+strlen(dest)-strlen(src)] = '\0';   //计算出字符串结束位置,并加上‘/0’
  return ptr;
  
}
  
void ReadFile(HDC hdc)  //读取文件,并打印输出
  
{
  TCHAR szPath[1024];
  GetModuleFileName( NULL, szPath, 1024 );    //获取当前程序的路径
  const char * pFileName = ReplaceString(szPath,"tx.exe","FILE.file");    //替换字符串,得到想要读取文件的路径,tx.exe为当前程序名称,FILE.file为程序要读取文件的名称
  FILE * pFile;
  int Row = 0;    //得到文件中的总行数
  char str[1024]; //用于储存最终要输出的字符串
  char strTry[1024];  //用于储存计算文件行数时读取到的内容
  pFile=fopen(pFileName,"rt");    //以文本方式打开文件
  if ( NULL == pFile )    //判断打开文件成功否
  {
  MessageBox(NULL, "Open File Fail !", "errorMsg", 0);
  Sleep(5000);    //程序睡眠5秒
  PostQuitMessage(0); //退出程序
  return;
  }
  while (!feof(pFile))    //只要文件未读完,就一次一行的读取
  {

  ZeroMemory(strTry,>  fgets(strTry,1024,pFile);   //读取一行内容到strTry中去
  Row++;
  }
  fclose(pFile);  //关闭文件流
  int RowCount = rand()%Row;  //随机得到文件中的某一行
  pFile=fopen(pFileName,"rt");
  while (!feof(pFile) && RowCount >= 0)    //当读取到那一行时,进行操作
  {

  ZeroMemory(str,>  fgets(str,1024,pFile);  //读取随机得到的一行
  //fscanf(pFile, "%s", str);
  RowCount--;
  }
  fclose(pFile);
  char PrintStr[128] = {0};   //用于暂存将要打印的一行字符串
  for(int i = 0; i < 68; i++)  //屏幕上输出的第一行字符,要空两格,具体情况根据客户区的长度决定
  {
  PrintStr = str;
  TextOut ( hdc , 30 , 10 , PrintStr , strlen ( PrintStr ) ) ;    //在屏幕上显示字符
  }

  ZeroMemory(PrintStr,>  for(int CountLine = 0; CountLine < 7; CountLine ++)  //第二行起不用空格,为满行输出,CountLine < 7,这也要根据客户区的高度决定的
  {
  for(int i = 0; i < 70; i++)
  {
  PrintStr = str[i+68+70*CountLine];
  TextOut ( hdc , 0 , 10+20*(CountLine+1) , PrintStr , strlen ( PrintStr ) ) ;
  }

  ZeroMemory(PrintStr,>  }
  
}
  
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)  //回调函数具体实现
  
{
  HDC hdc;
  PAINTSTRUCT ps;
  HFONT hFont;
  switch (msg)
  {
  case WM_CREATE:
  srand((unsigned) time(NULL));   //生成随机函数种子,使得生成随机数时更加随机
  SetTimer(hwnd,ID_TIMER,20000,NULL); //定时器,20000为20秒,每20秒执行一次 case WM_TIMER:下的内容
  return 0;
  case WM_TIMER:
  KillTimer(hwnd,ID_TIMER);   //撤消计时器
  PostQuitMessage(0); //退出程序
  return 0;
  case WM_PAINT:
  hdc=BeginPaint ( hwnd,&ps );
  hFont = CreateFont(20,  //字符的高度值
  0,  //如果此值为0,字体映射器选择一个closest match值
  0,  //指定移位向量和设备X轴之间的一个角度
  0,  //指定每个字符的基线和设备X轴之间的角度
  400,    //指定字体的权值
  FALSE,  //设置为斜体
  FALSE,  //增加下划线
  FALSE,  //增加删除线
  GB2312_CHARSET, //指定字符集
  OUT_DEFAULT_PRECIS, //指定输出精度
  CLIP_DEFAULT_PRECIS,    //指定裁剪精度
  DEFAULT_QUALITY,    //指向输出质量
  FIXED_PITCH|FF_MODERN,  //指定字体间距和字体族
  "微软雅黑");    //指定字体的字样名
  SelectObject(hdc,hFont);  //选入字体
  //TextOut ( hdc , 30 , 10 , str , strlen ( str ) ) ;
  ReadFile(hdc);  //读取文件,并在屏幕上输出
  DeleteObject(hFont);    //删除画笔
  EndPaint ( hwnd,&ps );
  return 0;
  /*case WM_SIZE:
  return 0 ;
  case WM_DESTROY:
  PostQuitMessage(0);
  return 0;*/
  }
  return DefWindowProc(hwnd, msg, wParam, lParam);
  
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-529600-1-1.html 上篇帖子: VS2012+C语言+设置程序开机自动启动+示例 下篇帖子: Windows Azure试用之注册
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表