【C语言】【windows】--记事框编写
erbi_lucifer吧
全部回复
仅看楼主
level 10
堕erbi 楼主

光影的世界……吾为光为影?



2012年02月22日 04点02分 1
level 10
堕erbi 楼主
程序名称:记事框
编译器:vs2010(其它也可以……)
程序大小:434K
文件包括:记事框.exe,skinh.she,SkinH.dll,msvcr100.dll
程序界面:
界面是使用了皮肤……
程序界面:
在为button设置属性时,text属性可以再前面加‘&’,这样显示的文字就有下划线,程序运行是你可以使用“Alt+显示的字符”来点击按钮。
如图的 S,按下“Alt+S”,打开保存对话框。
按钮:保存S,打开cmd O(java的编译器是在控制台上运行的),清除C,弹窗显示文件内容(确保能得到文件内容再进行保存)D,进入D盘或打开你保存的文件F,
关于A。

2012年02月22日 04点02分 2
level 10
堕erbi 楼主
/*********************************************************************************
今年开始上java的课,由老师的主机控制了我们的机子,上课时虽能够使用“win徽键+D”来返回桌面,但每次进入课程时其它程序不能使用,不在最顶端,开了看不到界面,全让挡住了……%>_<%
于是打算自己制作一个简单的记事本,并让其拥有最前显示的功能,这样就不怕被挡住了……O(∩_∩)O哈哈~
昨晚开工只连续使用5个多小时就完工的【记事框】……
[鲁拉]
*********************************************************************************/

2012年02月22日 04点02分 3
level 10
堕erbi 楼主
/*********************************************************************************
关于让程序置顶……[我爱牛奶]
RECT rect;
GetWindowRect(hwndDlg,&rect);
SetWindowPos(hwndDlg,HWND_TOPMOST,rect.left,rect.top ,0,0,SWP_NOMOVE||SWP_NOSIZE);
*********************************************************************************/
SetWindowPos用于设置窗体的显示形式。
GetWindowRect用于得到窗体的坐标。
以上。我设置了SWP_NOMOVE:维持当前位置(忽略X和Y参数),可还是自己跑到左上角了,于是用GetWindowRect得到目前的位置,设置为X,Y的值,实现窗口坐标不变而让窗体置顶……
/*********************************************************************************
函数原型:BOOL SetWindowPos(HWN hWnd,HWND hWndlnsertAfter,int X,int Y,int cx,int cy,UNIT.Flags);
参数:
hWnd:窗口句柄。
hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。该参数必须为一个窗口句柄,或下列值之一:
HWND_BOTTOM:将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。
HWND_DOTTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口己经是非顶层窗口则该标志不起作用。
HWND_TOP:将窗口置于Z序的顶部。
HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。
x:左边界。
Y:顶边界。
cx:新的宽度。
cy:新的高度。
uFlags:窗口尺寸和定位的标志。该参数可以是下列值的组合:
SWP_ASNCWINDOWPOS:如果调用进程不拥有窗口,系统会向拥有窗口的线程发出需求。这就防止调用线程在其他线程处理需求的时候发生死锁。
SWP_DEFERERASE:防止产生WM_SYNCPAINT消息。
SWP_DRAWFRAME:在窗口周围画一个边框(定义在窗口类描述中)。
SWP_FRAMECHANGED:给窗口发送WM_NCCALCSIZE消息,即使窗口尺寸没有改变也会发送该消息。如果未指定这个标志,只有在改变了窗口尺寸时才发送WM_NCCALCSIZE。
SWP_HIDEWINDOW;隐藏窗口。
SWP_NOACTIVATE:不激活窗口。如果未设置标志,则窗口被激活,并被设置到其他最高级窗口或非最高级组的顶部(根据参数hWndlnsertAfter设置)。
SWP_NOCOPYBITS:清除客户区的所有内容。如果未设置该标志,客户区的有效内容被保存并且在窗口尺寸更新和重定位后拷贝回客户区。
SWP_NOMOVE:维持当前位置(忽略X和Y参数)。
SWP_NOOWNERZORDER:不改变z序中的所有者窗口的位置。
SWP_NOREDRAW:不重画改变的内容。如果设置了这个标志,则不发生任何重画动作。适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出的父窗口的所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口的任何部分和父窗口需要重画的部分。
SWP_NOREPOSITION;与SWP_NOOWNERZORDER标志相同。
SWP_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。
SWP_NOSIZE:维持当前尺寸(忽略cx和Cy参数)。
SWP_NOZORDER:维持当前Z序(忽略hWndlnsertAfter参数)。
SWP_SHOWWINDOW:显示窗口。
*********************************************************************************/

2012年02月22日 04点02分 4
level 10
堕erbi 楼主

/*********************************************************************************
控件
*********************************************************************************/
对于文本框我没有使用,用的是RICHEDIT 2.0,可以设置颜色……
于是需要包括头文件:
#include <Richedit.h>
加载动态链接库:
LoadLibrary(_T("riched20.dll"));
才能使用。
/*********************************************************************************
[正Music]
HWND hwndedit=GetDlgItem(hwnd,IDC_RICHEDIT21);//获取RICHEDIT控件句柄
CHARFORMAT format;
ZeroMemory(&format,sizeof(format));//初始化结构体
format.cbSize=sizeof(format); //申请缓冲区
format.dwMask=CFM_COLOR;
format.crTextColor=0x33FF00;//设置颜色
SendMessage(hwndedit,EM_SETCHARFORMAT,SCF_ALL,(LPARAM)&format); //设置文本颜色(LPARAM)&format
SendMessage(hwndedit,EM_SETBKGNDCOLOR,0,0x000000); //设置背景颜色
*********************************************************************************/
以上放在初始化窗口的消息里进行处理。从后面的代码你可以看出(如果度娘不吞楼的话……[少林寺]),我使用了两次窗口置顶,因为我把它们放在窗口初始化的消息里进行处理,此时窗口还没出现……当只有一次会出现窗口不响应置顶的bug……%>_<%,于是多加了一个……

2012年02月22日 04点02分 5
level 10
堕erbi 楼主
文件:
现在最郁闷的是发代码==吞楼················待会试试·······[星星闪]

2012年02月22日 05点02分 7
level 10
堕erbi 楼主
[摇晃]开始代码吧……
/*********************************************************************************
头文件
*********************************************************************************/
#include <tchar.h>
#include <Windows.h>
#include "resource.h"
#include <commdlg.h> //保存对话框
#include<stdio.h>
extern "C" __declspec(dllimport) int __stdcall SkinH_Attach();
#pragma comment(lib,"SkinH.lib")
//#include "afxwin.h"
#include <Richedit.h> //设置RICHEDIT字体颜色
#include <shlwapi.h> //打开文件
#pragma comment(lib,"shlwapi.lib") void SetSty(HWND hwnd);
BOOL SaveList(HWND hwnd );
TCHAR WenJian[500];
TCHAR FilePath[MAX_PATH]=_T("D:\\");

2012年02月22日 05点02分 8
level 10
堕erbi 楼主
/************************************************************************************
消息处理[旋转]
*************************************************************************************/
INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG :
{
SetSty(hwndDlg);
RECT rect;
GetWindowRect(hwndDlg,&rect);
SetWindowPos(hwndDlg,HWND_TOPMOST,rect.left,rect.top ,0,0,SWP_NOMOVE||SWP_NOSIZE);
}
break;
case WM_LBUTTONDOWN:
{//移动没有标题的窗体
ReleaseCapture(); SendMessage(hwndDlg,WM_NCLBUTTONDOWN,HTCAPTION,0);
}
break;
case WM_COMMAND : //按钮被按下的消息
{
switch (wParam)
{
case IDCANCEL:
{ //ID是 IDCANCEL 的按钮被按下
EndDialog(hwndDlg, IDCANCEL);//结束
}
break;
case IDC_S:
{
SaveList(hwndDlg);
} break; case IDC_O:
{
ShellExecute(NULL,_T("open"),_T("cmd.exe"),NULL,NULL,SW_SHOWNORMAL);
}
break; case IDC_C:
{
SetDlgItemText(hwndDlg,IDC_RICHEDIT21,_T(""));
//清除文本内容
}
break;
case IDC_D:
{
GetDlgItemText(hwndDlg,IDC_RICHEDIT21,WenJian,sizeof(WenJian));
MessageBox(NULL,WenJian,_T(""),MB_OK);
}
break;
case IDC_F:
{
ShellExecute(NULL,_T("open"),FilePath,NULL,NULL,SW_SHOWNORMAL);
} break;
case IDC_A:
{
MessageBoxA(NULL,"光影:Erbi-lucifer\n时间:2012年2月20日23:54:59","关于",MB_OK);
} break;
default:break; }
}
default:break;
} return 0;
}

2012年02月22日 05点02分 9
level 10
堕erbi 楼主
/************************************************************************************
设置颜色[我爱牛奶]
*************************************************************************************/
void SetSty(HWND hwnd){
RECT rect;
GetWindowRect(hwnd,&rect);
SetWindowPos(hwnd,HWND_TOPMOST,rect.left,rect.top ,0,0,SWP_NOMOVE||SWP_NOSIZE);
HWND hwndedit=GetDlgItem(hwnd,IDC_RICHEDIT21);//获取RICHEDIT控件句柄
CHARFORMAT format;
ZeroMemory(&format,sizeof(format));
format.cbSize=sizeof(format);
format.dwMask=CFM_COLOR;
format.crTextColor=0x33FF00;
SendMessage(hwndedit,EM_SETCHARFORMAT,SCF_ALL,(LPARAM)&format); //设置文本颜色
SendMessage(hwndedit,EM_SETBKGNDCOLOR,0,0x000000); //设置背景颜色 //初始化的消息
}
2012年02月22日 05点02分 10
level 10
堕erbi 楼主
/************************************************************************************
主函数[郁闷]
*************************************************************************************/
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) //主函数
{
SkinH_Attach();//加载当前目录下名为“skinh.she”皮肤
//LoadLibrary(L"Msftedit.dll");
LoadLibrary(_T("riched20.dll"));
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc); //弹出对话框
return 0;
}

2012年02月22日 05点02分 11
level 4
[汗]
用c做啊。
这些很明显用vc++做的话会很方便,直接一个单文档,然后使用类向导
2012年12月08日 06点12分 12
[揉脸]学习C的sdk编程不久后写的,重点是C+SDK练手的程序,而不是写出了记事框……另外没有学过MFC……
2012年12月08日 11点12分
1