Win32程序简单演示-模拟电子表格移动光标到另一单元格
/*-------------------------------------------------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程序简单演示-模拟电子表格移动光标到另一单元格相关推荐
- 对VS2008生成智能win32程序简单理解
程序中创建了主窗口,所以它必须为主窗口注册一个窗口类,创建窗口并且提供一个消息循环来为窗口处理消息. 注册窗口类 ATOM MyRegisterClass(HINSTANCE hInstance, L ...
- java 单元格拆分合并_java – 在Excel中查找合并的单元格,拆分单元格并将其写入新的电子表格中?...
我得到了一个分配,我需要拆分电子表格的数据并将其写入新的电子表格.条件是,给定电子表格可能有多个合并单元格数,我需要找到那些合并单元格并在新的SpreadSheet中写入这些数据. 即,必须在另一个电 ...
- Win32 程序开发:一个简单的Win32程序
1)什么是Win32 Win32是指Microsoft Windows操作系统的32位环境,与Win64 都为Windows常见环境.如今的Win32操作系统可以一边听音乐,一边编程,一边打印文档.W ...
- VC++6.0 win32 控制台应用程序 简单应用 附代码
**VC++6.0 win32 控制台应用程序 简单应用 附代码 ** .cpp 文件名 注意:在源文件添加如下声明: #include //没有.h using namespace std;//使用 ...
- c语言模拟自动饮料机,C语言--小程序--简单模拟ATM机
原标题:C语言--小程序--简单模拟ATM机 ATM.H #ifndef ATM_h #define ATM_h #include #include #include typedef struct _ ...
- 简单win32程序创建控件
Win32 SDK利用ListView控件. 为了使用ListView控件,我们需要初始化公共控件库,我们需要在程序刚刚启动时调用 InitCommonControls() 函数,如果发生链接错误,说 ...
- win32c语言编程实例,实例分析一个简单的Win32程序
本文较为详细的分析了一个Win32程序的组成.结构.实现方法及运行原理,对于进行Windows程序设计有很好的借鉴参考价值.分享给大家供大家参考之用.具体分析如下: 一.Windows程序与普通C或C ...
- java编写一个简单的模拟抽奖程序
//郑州轻工业大学 //题号:实验一 第四题 //题目: 编写一个简单的模拟抽奖程序(模拟抽奖1.0),抽奖时需要输入5个116的整数号码,每个号码不能重复.程序运行后会随机生成5个116幸运号码,然 ...
- 使用Servlet和JSP开发Java应用程序 ---- 简单模拟天猫购物页面
使用Servlet和JSP开发Java应用程序 ---- 简单模拟天猫购物页面 1. 加载 jar 包 2. 使用URL重写参数 3. 编写 ProductServlet 4. 在 productIn ...
最新文章
- MySQL修改和查看表类型
- [网络应用]Flash中鼠标手势及Ctrl+T问题{Firefox}
- 达达真人漫画秀,微博演绎男版杜拉拉生存记
- 数据结构-----栈
- android 对象数据库中,解析嵌套的JSON对象,并存储在数据库中的Android
- 多服务监听Redis key失效通知,并指定特定机器进行处理业务
- C++False position求根的实现算法(附完整源码)
- SharePoint 2010 大中小架构的部署
- 公用机房计算机主板选购,才知道,IDC机房运维工作居然可以如此简单!
- python不同模式打开文件的完全列表
- canon lbp6200 macos下单面双面打印设置
- matlab矩阵最大值最小值均值,Matlab 处理数据—最小值、最大值、均值、方差
- 阿里云服务器价格表(最新海外地域价格表)
- matlab科研绘图模板,直接奉上源代码!
- Web开发框架——Zheng
- Java实现分割矩形
- 生成验证码并判断用户是否输入正确
- 设计师最常用网站汇总
- 服务器不能创建对象教务系统,[转]解决强智教务系统非IE下无法创建对象错误...
- java点名代码滚动_JAVA多线程实现简单的点名系统
热门文章
- 软件设计原则——合成复用原则
- HttpClient的连接池||HttpClient的请求参数
- Vue body样式修改
- eclipse自动排版快捷键、自动引入包
- JavaScript 技术篇-chrome利用ClipboardEvent写入剪切板,chrome写入剪切板不成功解决方法
- Python+selenium 自动化-获取当前页面的url地址,打开指定的url地址
- Reverse Linked List
- 聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut .
- MATLAB 图像函数(第七章) 图像的代数运算
- 【解决方案】win10连接wifi输入密码之后用户就消失了