/*-------------------------------------------------bobo,2020-01-18-------------------------------------------------*/ #include <windows.h>#define DIVISIONS 10    //单元格横向纵向个数
int         cxBlock, cyBlock;LRESULT CALLBACK WndProc   (HWND, UINT, WPARAM, LPARAM) ;
LRESULT CALLBACK ChildWndProc (HWND, UINT, WPARAM, LPARAM) ;TCHAR szChildClass[] = TEXT ("caret_Child") ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{static TCHAR szAppName[] = TEXT ("Cell Caret Demo") ;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 = szAppName ;if (!RegisterClass (&wndclass)){MessageBox (NULL, TEXT ("Program requires Windows NT!"), szAppName, MB_ICONERROR) ;return 0 ;}wndclass.lpfnWndProc   = ChildWndProc ;wndclass.cbWndExtra    = sizeof (long) ;wndclass.hIcon         = NULL ;wndclass.lpszClassName = szChildClass ;RegisterClass (&wndclass) ;hwnd = CreateWindow (szAppName, TEXT ("Cell Caret Demo"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,NULL, NULL, hInstance, NULL) ;ShowWindow (hwnd, iCmdShow) ;UpdateWindow (hwnd) ;while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg) ;DispatchMessage (&msg) ;}return msg.wParam ;
}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{static HWND hwndChild[DIVISIONS][DIVISIONS] ;int        x, y ;switch (message){case WM_CREATE :for (x = 0 ; x < DIVISIONS ; x++)for (y = 0 ; y < DIVISIONS ; y++)hwndChild[x][y] = CreateWindow (szChildClass, NULL,WS_CHILDWINDOW | WS_VISIBLE,0, 0, 0, 0,hwnd, (HMENU) (y << 8 | x),(HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE),NULL) ;return 0 ;case WM_SIZE :cxBlock = LOWORD (lParam) / DIVISIONS ;cyBlock = HIWORD (lParam) / DIVISIONS ;for (x = 0 ; x < DIVISIONS ; x++)for (y = 0 ; y < DIVISIONS ; y++)MoveWindow (hwndChild[x][y],x * cxBlock, y * cyBlock,cxBlock, cyBlock, TRUE) ;return 0 ;case WM_LBUTTONDOWN :return 0 ;case WM_DESTROY :PostQuitMessage (0) ;return 0 ;}return DefWindowProc (hwnd, message, wParam, lParam) ;
}LRESULT CALLBACK ChildWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{HDC         hdc ;PAINTSTRUCT ps ;RECT        rect ;switch (message){case WM_CREATE :return 0 ;case WM_LBUTTONDOWN :CreateCaret(hwnd,NULL,10,50); SetCaretPos(cxBlock/2,cyBlock/2);ShowCaret(hwnd);return 0 ;case WM_PAINT :hdc = BeginPaint (hwnd, &ps) ;GetClientRect (hwnd, &rect) ;Rectangle (hdc, 0, 0, rect.right, rect.bottom) ;if (GetWindowLong (hwnd, 0)){MoveToEx (hdc, 0,          0, NULL) ;LineTo   (hdc, rect.right, rect.bottom) ;MoveToEx (hdc, 0,          rect.bottom, NULL) ;LineTo   (hdc, rect.right, 0) ;}EndPaint (hwnd, &ps) ;return 0 ;}return DefWindowProc (hwnd, message, wParam, lParam) ;
}

代码说明;

#define DIVISIONS 10    //单元格横向纵向个数

创建子窗口的个数;

LRESULT CALLBACK WndProc   (HWND, UINT, WPARAM, LPARAM) ;
LRESULT CALLBACK ChildWndProc (HWND, UINT, WPARAM, LPARAM) ;

窗口过程和子窗口过程;此处一个子窗口是一个单元格;

在主窗口的WM_CREATE消息中创建子窗口;

在主窗口的WM_SIZE 消息中改变子窗口大小;并获取更改后的单元格大小到cxBlock、cyBlock;

这一段是在子窗口的WM_PAINT中把子窗口的边线画出;

MoveToEx (hdc, 0,          0, NULL) ;
               LineTo   (hdc, rect.right, rect.bottom) ;
               MoveToEx (hdc, 0,          rect.bottom, NULL) ;
               LineTo   (hdc, rect.right, 0) ;

子窗口发生鼠标左键单击时设置光标到本子窗口;

CreateCaret(hwnd,NULL,10,50); 
          SetCaretPos(cxBlock/2,cyBlock/2);
          ShowCaret(hwnd);
     这个脱字符要调3个API才会出来;创建、设置坐标、显示;创建和显示的第一个参数是窗口句柄;

至于实际的电子表格的单元格,是一个个子窗口,还是都是绘制的,就不了解了;

Win32程序简单演示-模拟电子表格移动光标到另一单元格相关推荐

  1. 对VS2008生成智能win32程序简单理解

    程序中创建了主窗口,所以它必须为主窗口注册一个窗口类,创建窗口并且提供一个消息循环来为窗口处理消息. 注册窗口类 ATOM MyRegisterClass(HINSTANCE hInstance, L ...

  2. java 单元格拆分合并_java – 在Excel中查找合并的单元格,拆分单元格并将其写入新的电子表格中?...

    我得到了一个分配,我需要拆分电子表格的数据并将其写入新的电子表格.条件是,给定电子表格可能有多个合并单元格数,我需要找到那些合并单元格并在新的SpreadSheet中写入这些数据. 即,必须在另一个电 ...

  3. Win32 程序开发:一个简单的Win32程序

    1)什么是Win32 Win32是指Microsoft Windows操作系统的32位环境,与Win64 都为Windows常见环境.如今的Win32操作系统可以一边听音乐,一边编程,一边打印文档.W ...

  4. VC++6.0 win32 控制台应用程序 简单应用 附代码

    **VC++6.0 win32 控制台应用程序 简单应用 附代码 ** .cpp 文件名 注意:在源文件添加如下声明: #include //没有.h using namespace std;//使用 ...

  5. c语言模拟自动饮料机,C语言--小程序--简单模拟ATM机

    原标题:C语言--小程序--简单模拟ATM机 ATM.H #ifndef ATM_h #define ATM_h #include #include #include typedef struct _ ...

  6. 简单win32程序创建控件

    Win32 SDK利用ListView控件. 为了使用ListView控件,我们需要初始化公共控件库,我们需要在程序刚刚启动时调用 InitCommonControls() 函数,如果发生链接错误,说 ...

  7. win32c语言编程实例,实例分析一个简单的Win32程序

    本文较为详细的分析了一个Win32程序的组成.结构.实现方法及运行原理,对于进行Windows程序设计有很好的借鉴参考价值.分享给大家供大家参考之用.具体分析如下: 一.Windows程序与普通C或C ...

  8. java编写一个简单的模拟抽奖程序

    //郑州轻工业大学 //题号:实验一 第四题 //题目: 编写一个简单的模拟抽奖程序(模拟抽奖1.0),抽奖时需要输入5个116的整数号码,每个号码不能重复.程序运行后会随机生成5个116幸运号码,然 ...

  9. 使用Servlet和JSP开发Java应用程序 ---- 简单模拟天猫购物页面

    使用Servlet和JSP开发Java应用程序 ---- 简单模拟天猫购物页面 1. 加载 jar 包 2. 使用URL重写参数 3. 编写 ProductServlet 4. 在 productIn ...

最新文章

  1. MySQL修改和查看表类型
  2. [网络应用]Flash中鼠标手势及Ctrl+T问题{Firefox}
  3. 达达真人漫画秀,微博演绎男版杜拉拉生存记
  4. 数据结构-----栈
  5. android 对象数据库中,解析嵌套的JSON对象,并存储在数据库中的Android
  6. 多服务监听Redis key失效通知,并指定特定机器进行处理业务
  7. C++False position求根的实现算法(附完整源码)
  8. SharePoint 2010 大中小架构的部署
  9. 公用机房计算机主板选购,才知道,IDC机房运维工作居然可以如此简单!
  10. python不同模式打开文件的完全列表
  11. canon lbp6200 macos下单面双面打印设置
  12. matlab矩阵最大值最小值均值,Matlab 处理数据—最小值、最大值、均值、方差
  13. 阿里云服务器价格表(最新海外地域价格表)
  14. matlab科研绘图模板,直接奉上源代码!
  15. Web开发框架——Zheng
  16. Java实现分割矩形
  17. 生成验证码并判断用户是否输入正确
  18. 设计师最常用网站汇总
  19. 服务器不能创建对象教务系统,[转]解决强智教务系统非IE下无法创建对象错误...
  20. java点名代码滚动_JAVA多线程实现简单的点名系统

热门文章

  1. 软件设计原则——合成复用原则
  2. HttpClient的连接池||HttpClient的请求参数
  3. Vue body样式修改
  4. eclipse自动排版快捷键、自动引入包
  5. JavaScript 技术篇-chrome利用ClipboardEvent写入剪切板,chrome写入剪切板不成功解决方法
  6. Python+selenium 自动化-获取当前页面的url地址,打开指定的url地址
  7. Reverse Linked List
  8. 聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut .
  9. MATLAB 图像函数(第七章) 图像的代数运算
  10. 【解决方案】win10连接wifi输入密码之后用户就消失了