- 浏览: 128909 次
- 性别:
- 来自: 北京
-
最新评论
-
C_J:
有必要这么鸡冻咩?
编写自己的ClassLoader知识点 -
jason61719:
你这不是说了等于没说吗……就解析个loadClass(),谁不 ...
编写自己的ClassLoader知识点 -
jiming:
tedeyang 写道很好的改进,不过话说回来,mybatis ...
开源,从关注产品社区做起(ibatis3.x的最近一个issue展示) -
C_J:
独爱Java 写道好像实际用处并不是很大,只是多了解了有这个东 ...
Java内存模型笔记 -
独爱Java:
好像实际用处并不是很大,只是多了解了有这个东西而已。。。
Java内存模型笔记
翻了下自己从前的日志。
发现自己大二的时候写的一个WIN32程序,就随便贴出来,也见证下自己的学习历程
天闛/xy忏 n 发表于2007年04月11日 12:05 阅读(7) 评论(2)
分类: 个人日记 权限: 公开
实现EDIT控件 和BUTTON控件 联合用
部分代码:
//Global variables
LPTSTR lpBuffer;
//stack variables
CJ_hwndButton=CreateWindow("BUTTON","请输入文字,点我保存",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,500,250,150,30,hwnd,(HMENU)IDV_BBUTTON,hInst,NULL); //WS_CHILD声明子窗口
CJ_hwndEdit=CreateWindow(TEXT("EDIT"),NULL,WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_LEFT|ES_MULTILINE|ES_AUTOVSCROLL,500,150,100,100,hwnd,(HMENU)IDV_BEDIT,hInst,NULL);
...
case WM_COMMAND:
{
switch(HIWORD(wParam))
{
case BN_CLICKED:
{
switch(LOWORD(lParam))
{
case IDV_BBUTTON:
{
lpBuffer=(LPTSTR)malloc((GetWindowTextLength(CJ_hwndEdit)+1)*sizeof(TCHAR));
GetDlgItemText(hwnd,IDV_BEDIT,lpBuffer,1000);
TCHAR szBuf[128];
DWORD dwRead;
DWORD dwWritten;
hTextFile=CreateFile("new.txt",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);//创建文件句柄
WriteFile(hTextFile,lpBuffer,strlen(lpBuffer),&dwWritten,NULL);//写入文件
SetFilePointer(hTextFile,0,NULL,FILE_BEGIN);//设置文件指针 指向文件头 在写入文件数据时hTextFile指针指向了文件尾,所以现在还原
if(ReadFile(hTextFile,szBuf,strlen(lpBuffer),&dwRead,NULL))
{
MessageBox(hwnd,szBuf,"Read File",MB_OK);
}
CloseHandle(hTextFile);//解决两进程同时使用同一个文件冲突问题
SetDlgItemText(hwnd,IDV_BEDIT,NULL);
...
}
//还能进一步优化的是 要使IDV_BBUTTON控件在不输入的时候失效
//开始想着是用WM_TIMER消息检测lpBuffer变量是否为空,但是不行.主要原因有两点:1 消耗太大的CPU资源 2,时钟必定是时钟消息,不能马上响应
//使用一个BOOL标记让执行绪正常终止。KillThread函式只有在正常终止执行绪比较困难时才应该使用,原因是执行绪可以配置资源,如果当执行绪终止时没有释放所配置的记忆体,那么记忆体将仍然是被配置了的。它不同于程序能自动释放资源
哈哈 EnableWindow(hwnd,bool)问题解决了
原来 我定义的hwnd在消息处理函数中 , 消息循环每次都会重新创建和更新 ,本来就在一个循环里,肯定会更新的嘛.......
所以在消息处理里面处理EnableWindow()是没有用的 只有把HWND定义为消息外的全局变量 才处理 才能实现.问题继续探索中,在一开始消息循环中,怎么响应文本框的光标消息呢? 着才是解决问题的关键~~
这几天闷闷的,心情好混乱,怎么老是怪怪地~
这一段时间 调用库文件 一直捆饶着我 好几个问题都卡在这里
很无语~ 我家的小老婆 最近耍脾气了?
现在终于又能播放声音了,虽然还是比较简单的创建和调用,但是程序里面多了优美的旋律还是让人陶醉
关于创建音频的几个小细节 音频句柄设置为GLOBAL 可以让音乐在整个程序过程中运行 而不受父消息的影响, 这个问题我提前想到了,所以很顺利.
在子窗口中不要加载WM_CLOSE消息
记得在主消息中 删除音频句柄 学C++的时候就要养成一个好的习惯就是 NEW 对应着 一个DELETE 还好,自从看过林锐写的书后 我对此还是很敏感的~
由加载EXE文件想到的: 方法是把EXE转换为二进制 然后写入文件 最后再转换为EXE文件 于是就想能不能加载其他文件格式的
果然不出所料,同样的想法 , 加载WMA 文件成功了 转为WMA文件后 再MCIWndPlay ()播放文件 这个相当与把WMA和执行文件捆绑在一起了 缺点就是程序必须占用很多资源 这肯定是不提倡的
自己实现的简单ANSI文字输入框和一些细节, 早点写完,睡觉去了...
首先必须注意的是几个变量,虽然开始我没在意,但理解却就在这个几个变量中.
int cxChar,cyChar,cxClient,cyClient,cxBuffer,cyBuffer
cxChar 字符的宽
cyChar 字符的高
cxClient 屏幕的宽
cyClient 屏幕的高
cxBuffer 一行能储存多少个字符个数
cyBuffer 一列能储存多少个字符个数
能很好的理解上面四个变量 对于写一个输入文本框就很容易了.
首先当然是初始化了.
SelectObject ( hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0,
CJ_CharSet, 0, 0, 0, FIXED_PITCH, NULL)) ;
GetTextMetrics (hdc, &tm) ;
cxChar = tm.tmAveCharWidth ;
cyChar = tm.tmHeight ;
取得字体.. 这个用户也可以指定字体
然后是屏幕大小 和 BUFFER
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;
cxBuffer=max(1,cxClient/cxChar)//屏幕长度除字符宽度 就可以获得字符个数了,这个就相当于 求变量的个数了.
cyBuffer=max(1,cyClient/cyChar)//这里用max的道理是 防止cyBuffer为0;
然后是 空间的填充
pBuffer = (TCHAR *) malloc (cxBuffer* cyBuffer * sizeof (TCHAR)) ;
for (y = 0 ; y < cyBuffer ; y++)
for (x = 0 ; x < cxBuffer ; x++)
BUFFER(x,y) = '_' ;
建立光标 ..这里就省略了
case VK_LEFT:
xCaret = max (xCaret - 1, 0) ;
break ;
case VK_RIGHT:
xCaret = min (xCaret + 1, cxBuffer - 1) ;
上面是左右键的处理 光标位置-1 与 0比较 来确定光标位置
for (x = cxBuffer ; x >=xCaret ; x--)
BUFFER (x+1, yCaret)=BUFFER (x , yCaret) ;
学过数组的人 对上面应该很熟悉了,数组的移位 上面是空格键
for (x = xCaret ; x < cxBuffer - 1 ; x++)
BUFFER (x, yCaret) = BUFFER (x + 1, yCaret) ;
DEL键
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
SelectObject (hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0,
CJ_CharSet, 0, 0, 0, FIXED_PITCH, NULL)) ;
for (y = 0 ; y < cyBuffer ; y++)
TextOut (hdc, 0, y * cyChar, & BUFFER(0,y), cxBuffer) ;
DeleteObject (SelectObject (hdc, GetStockObject (SYSTEM_FONT))) ;
EndPaint (hwnd, &ps) ;
绘制代码;//上面这段就有点偷懒了
发现自己大二的时候写的一个WIN32程序,就随便贴出来,也见证下自己的学习历程
天闛/xy忏 n 发表于2007年04月11日 12:05 阅读(7) 评论(2)
分类: 个人日记 权限: 公开
实现EDIT控件 和BUTTON控件 联合用
部分代码:
//Global variables
LPTSTR lpBuffer;
//stack variables
CJ_hwndButton=CreateWindow("BUTTON","请输入文字,点我保存",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,500,250,150,30,hwnd,(HMENU)IDV_BBUTTON,hInst,NULL); //WS_CHILD声明子窗口
CJ_hwndEdit=CreateWindow(TEXT("EDIT"),NULL,WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_LEFT|ES_MULTILINE|ES_AUTOVSCROLL,500,150,100,100,hwnd,(HMENU)IDV_BEDIT,hInst,NULL);
...
case WM_COMMAND:
{
switch(HIWORD(wParam))
{
case BN_CLICKED:
{
switch(LOWORD(lParam))
{
case IDV_BBUTTON:
{
lpBuffer=(LPTSTR)malloc((GetWindowTextLength(CJ_hwndEdit)+1)*sizeof(TCHAR));
GetDlgItemText(hwnd,IDV_BEDIT,lpBuffer,1000);
TCHAR szBuf[128];
DWORD dwRead;
DWORD dwWritten;
hTextFile=CreateFile("new.txt",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);//创建文件句柄
WriteFile(hTextFile,lpBuffer,strlen(lpBuffer),&dwWritten,NULL);//写入文件
SetFilePointer(hTextFile,0,NULL,FILE_BEGIN);//设置文件指针 指向文件头 在写入文件数据时hTextFile指针指向了文件尾,所以现在还原
if(ReadFile(hTextFile,szBuf,strlen(lpBuffer),&dwRead,NULL))
{
MessageBox(hwnd,szBuf,"Read File",MB_OK);
}
CloseHandle(hTextFile);//解决两进程同时使用同一个文件冲突问题
SetDlgItemText(hwnd,IDV_BEDIT,NULL);
...
}
//还能进一步优化的是 要使IDV_BBUTTON控件在不输入的时候失效
//开始想着是用WM_TIMER消息检测lpBuffer变量是否为空,但是不行.主要原因有两点:1 消耗太大的CPU资源 2,时钟必定是时钟消息,不能马上响应
//使用一个BOOL标记让执行绪正常终止。KillThread函式只有在正常终止执行绪比较困难时才应该使用,原因是执行绪可以配置资源,如果当执行绪终止时没有释放所配置的记忆体,那么记忆体将仍然是被配置了的。它不同于程序能自动释放资源
哈哈 EnableWindow(hwnd,bool)问题解决了
原来 我定义的hwnd在消息处理函数中 , 消息循环每次都会重新创建和更新 ,本来就在一个循环里,肯定会更新的嘛.......
所以在消息处理里面处理EnableWindow()是没有用的 只有把HWND定义为消息外的全局变量 才处理 才能实现.问题继续探索中,在一开始消息循环中,怎么响应文本框的光标消息呢? 着才是解决问题的关键~~
这几天闷闷的,心情好混乱,怎么老是怪怪地~
这一段时间 调用库文件 一直捆饶着我 好几个问题都卡在这里
很无语~ 我家的小老婆 最近耍脾气了?
现在终于又能播放声音了,虽然还是比较简单的创建和调用,但是程序里面多了优美的旋律还是让人陶醉
关于创建音频的几个小细节 音频句柄设置为GLOBAL 可以让音乐在整个程序过程中运行 而不受父消息的影响, 这个问题我提前想到了,所以很顺利.
在子窗口中不要加载WM_CLOSE消息
记得在主消息中 删除音频句柄 学C++的时候就要养成一个好的习惯就是 NEW 对应着 一个DELETE 还好,自从看过林锐写的书后 我对此还是很敏感的~
由加载EXE文件想到的: 方法是把EXE转换为二进制 然后写入文件 最后再转换为EXE文件 于是就想能不能加载其他文件格式的
果然不出所料,同样的想法 , 加载WMA 文件成功了 转为WMA文件后 再MCIWndPlay ()播放文件 这个相当与把WMA和执行文件捆绑在一起了 缺点就是程序必须占用很多资源 这肯定是不提倡的
自己实现的简单ANSI文字输入框和一些细节, 早点写完,睡觉去了...
首先必须注意的是几个变量,虽然开始我没在意,但理解却就在这个几个变量中.
int cxChar,cyChar,cxClient,cyClient,cxBuffer,cyBuffer
cxChar 字符的宽
cyChar 字符的高
cxClient 屏幕的宽
cyClient 屏幕的高
cxBuffer 一行能储存多少个字符个数
cyBuffer 一列能储存多少个字符个数
能很好的理解上面四个变量 对于写一个输入文本框就很容易了.
首先当然是初始化了.
SelectObject ( hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0,
CJ_CharSet, 0, 0, 0, FIXED_PITCH, NULL)) ;
GetTextMetrics (hdc, &tm) ;
cxChar = tm.tmAveCharWidth ;
cyChar = tm.tmHeight ;
取得字体.. 这个用户也可以指定字体
然后是屏幕大小 和 BUFFER
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;
cxBuffer=max(1,cxClient/cxChar)//屏幕长度除字符宽度 就可以获得字符个数了,这个就相当于 求变量的个数了.
cyBuffer=max(1,cyClient/cyChar)//这里用max的道理是 防止cyBuffer为0;
然后是 空间的填充
pBuffer = (TCHAR *) malloc (cxBuffer* cyBuffer * sizeof (TCHAR)) ;
for (y = 0 ; y < cyBuffer ; y++)
for (x = 0 ; x < cxBuffer ; x++)
BUFFER(x,y) = '_' ;
建立光标 ..这里就省略了
case VK_LEFT:
xCaret = max (xCaret - 1, 0) ;
break ;
case VK_RIGHT:
xCaret = min (xCaret + 1, cxBuffer - 1) ;
上面是左右键的处理 光标位置-1 与 0比较 来确定光标位置
for (x = cxBuffer ; x >=xCaret ; x--)
BUFFER (x+1, yCaret)=BUFFER (x , yCaret) ;
学过数组的人 对上面应该很熟悉了,数组的移位 上面是空格键
for (x = xCaret ; x < cxBuffer - 1 ; x++)
BUFFER (x, yCaret) = BUFFER (x + 1, yCaret) ;
DEL键
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
SelectObject (hdc, CreateFont (0, 0, 0, 0, 0, 0, 0, 0,
CJ_CharSet, 0, 0, 0, FIXED_PITCH, NULL)) ;
for (y = 0 ; y < cyBuffer ; y++)
TextOut (hdc, 0, y * cyChar, & BUFFER(0,y), cxBuffer) ;
DeleteObject (SelectObject (hdc, GetStockObject (SYSTEM_FONT))) ;
EndPaint (hwnd, &ps) ;
绘制代码;//上面这段就有点偷懒了
发表评论
-
iOS入门(ongoing)
2012-09-13 11:32 1315Record it: The overview of ... -
Stuff about Android
2011-07-09 16:15 1083Foreword: long time ... -
JQuery初体验(Demo)
2011-05-22 13:43 1471Demo:Show <meta content ... -
Java内存模型笔记
2011-04-13 15:48 1551题记: 看到C/C++ ... -
Radiant_The Popular Ruby's CMS Demo篇
2011-04-02 14:49 1259题记: 上篇 记录我第一次安装Rodiant经过和 ... -
Radiant_The Popular Ruby’s CMS安装篇
2011-03-28 00:48 1331题记: 今天第一次参加JE的线下活动,robbin等 ... -
关于Azul 并发垃圾回收器
2011-03-26 14:40 1332题记: 总感觉JE讨论的帖子的东西都比较滞后,所以会 ... -
phpCMS & jQuery是我该做的(阉割了)
2011-02-27 23:02 81WD讲究以plugin挂载为结构,我需要构造一个p ... -
我的玩意:J2ME的Criteria初探
2011-01-20 21:59 1032题记: 前几天跟初中同学聊天,他问我能不能做一个GP ... -
编写自己的ClassLoader知识点
2011-01-13 14:41 1880题记: 看到InfoQ关于ClassLoader的文 ... -
周末好玩,用短信控制你的计算机
2011-01-10 16:34 3015Snapshot: 详情 ... -
About Dock Plugin on Mac
2010-11-21 22:47 1476题记: 第一次接触MAC的开发..... ... -
可变hashcode的隐患和序列化安全
2010-10-25 00:55 1385可变hashcode的隐患 为识别对象,JDK ... -
体验OSGi(helloworld.jar)—富app的热拔插
2010-10-18 23:22 2457记得以前工作的时候,有天direct manager问 ... -
MongoDB on DAO with Java Language
2010-08-26 19:17 1442A Quick Tour Using the Java d ... -
Getting Start on Mongodb
2010-08-26 01:29 1528题记: 最近老和同学聊到non-relational ... -
Java Media Framework本地玩转摄像头
2010-08-04 00:57 17571、简介The JavaTM Media Framework ... -
从WeakLogHandler应用看Java的引用、引用队列
2010-06-14 00:58 1513题记: 前几天讨论到WeakHashMap(这个是个弱引用的 ... -
《重构》读书笔记
2010-05-09 00:05 1063Martin Fowler于2003年出版 ... -
RPC之WebServices&RMI&JMS,phprpc框架?(待续)
2010-05-06 22:31 55前段时间写过基本的WebServices,也没再做深入 ...
相关推荐
It will allow you to graphically design your message box, specify how you want it to look and will create the source code for you and put it into the clipboard where you <END><br>47,vb2word.zip ...
send cash (Euro currency or US Dollars) in an envelop to my street address or buy a gift certificate at Amazon in the UK. I will then use it to buy books. Here is the direct URL at Amazon UK (nearest ...
“The first edition of Professional Excel Development is my most-consulted and most-recommended book on Office development. The second edition expands both the depth and range. It shines because it ...
of space in your Windows folder. If you remove these you will need to have a local source of service pack files available for your operating system. If you purchased 2000lite on CDROM then we have ...
The design time packages are located in the Components directory. Each version of Delphi and C++ Builder has its own package; DragDropD6.dpk for Delphi 6, DragDropD5.dpk for Delphi 5, DragDropC5....
Exceptions to the Rules Existing Non-conformant Code Windows Code Important Note Displaying Hidden Details in this Guide link ▶This style guide contains many details that are initially hidden from ...
start your Visual Basic program with your project code showing, right click and you should see "Rem Builder".<END><br>3 , syntax.zip This is an excellent example of how to highlight HTML code in a...
Where's My Code? Section 1.8. Macros and Security Section 1.9. Write Bug-Free Code Section 1.10. Navigate Samples and Help Section 1.11. What You've Learned Chapter 2. Knowing the Basics ...
IMPORTANT: If installing the registered version, please be sure to always re-install/rebuild the components (VCLZip and VCLUnZip) to the component pallette (or rebuild the design time package) so that...
<END><br>32,Shcmbbox1.zip ShComboBox ActiveX Control v1.0 behaves exactly like the Combo box in Windows Explorer showing all the folders and even files in the Shell's namespace<END><br>33,fldrvw21...
in)”更多的内存。(映射是一个表示一一对应关系的数学术语 —— 当内存的虚拟地址有一个对应的物理地址来存储内存内容时,该内存将被映射。) 基于 UNIX 的系统有两个可映射到附加内存中的基本系统调用: brk...
Table of Contents Preface, Notes, Licenses . . . . . . . . ....1. Licenses for Third-Party Components ....1.1. FindGTest.cmake License ....1.2. LPeg Library License ....1.3. LuaFileSystem Library License ....