共有回帖数 0 个
-
大神勿喷。。。某大水B,你敢进来水,我立马召唤小吧
-------------------------------------------------------------------------------------------------------------
#include windows.h
//引用头文件
HWND Window_ClassNameSearch ( char* );//搜索指定类名的窗口
int SetWindowFont ( HWND );//设置子窗口字体
//声明自定义函数
HWND HWND_ACE;//保存返回的窗口句柄 HWND
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain ( HINSTANCE hinstance,//实例句柄
HINSTANCE hpirehinstance, //MSDN中说此参数总是无效的 所以为NULL
LPSTR Cmdtext,//命令行
int winshow)//窗口显示方式
{
char *ClassName = "varietyfox";//设置类名
MSG msg;
unsigned short RegClass;
WNDCLASS WINCLASS;
CreateMutex ( NULL, 0, "{F750E8AD-899B-4DFF-BA18-ADCDBC6764E6}|varietyfox" );//创建互斥体 GUID+DIYNAME 以保证唯一性 这个API实际上是有返回值的 类型 HANDLE
if ( GetLastError() == ERROR_ALREADY_EXISTS )//判断互斥体存在
{
HWND_ACE = Window_ClassNameSearch ( ClassName );//获取已存在窗口句柄
if ( IsIconic ( HWND_ACE ) != 0 )//判断窗口最小化
{
OpenIcon (HWND_ACE);//恢复最小化窗口
}
SetForegroundWindow ( HWND_ACE );//窗口置前台
PostQuitMessage( 0 );//退出程序
return 0;
}
WINCLASS.cbClsExtra = 0;//扩展窗口属性
WINCLASS.cbWndExtra = 0;//扩展窗口属性
WINCLASS.hbrBackground = (HBRUSH) GetStockObject ( WHITE_BRUSH );//获取指定刷子并采用 用于绘制背景颜色
WINCLASS.hCursor = LoadCursor ( NULL, IDC_ARROW );//获取系统固有指针给窗口使用
WINCLASS.hIcon = LoadIcon ( NULL, IDI_APPLICATION );//获取默认图标给窗口使用
WINCLASS.lpfnWndProc = WndProc;//指定窗口消息回调函数
WINCLASS.hInstance = hinstance;//窗口实例句柄
WINCLASS.lpszClassName = ClassName;//类名
WINCLASS.lpszMenuName = NULL;//菜单名
WINCLASS.style = 0;//样式风格 一般主窗口设置为0
RegClass = RegisterClass ( &WINCLASS );//注册指定的窗口类
if ( RegClass == 0 )
{
MessageBox ( NULL, TEXT ("WndClass Reg Error!"), TEXT ("警告:"), MB_ICONEXCLAMATION | MB_OK ); //返回注册类错误信息
return 0;
}
HWND_ACE = CreateWindowEx ( 0, ClassName, TEXT("超简单的窗口__By: 风吹云动"), WS_OVERLAPPEDWINDOW, (GetSystemMetrics(SM_CXSCREEN)-600)/2, (GetSystemMetrics(SM_CYSCREEN)-300)/2, 600, 300, NULL, NULL, hinstance, NULL );
CreateWindow ("EDIT",NULL,WS_CHILD | WS_VISIBLE | ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP | ES_OEMCONVERT | WS_BORDER,20,20,120,20,HWND_ACE,(HMENU)0,(HINSTANCE) GetWindowLong(HWND_ACE, GWL_HINSTANCE),NULL);
CreateWindow ( "BUTTON","确定",WS_CHILD | WS_VISIBLE | WS_TABSTOP,160,20,50,20,HWND_ACE,(HMENU)1,(HINSTANCE) GetWindowLong(HWND_ACE, GWL_HINSTANCE),NULL );//按钮
SetWindowFont ( HWND_ACE );//设置字体
ShowWindow ( HWND_ACE, winshow );//显示窗口
SetWindowPos ( HWND_ACE, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW );//设置窗口处于绝对置顶状态 如果只是置顶一次 参数二 为 HWND_TOP
UpdateWindow ( HWND_ACE );//刷新窗口
while ( GetMessage ( &msg, NULL, 0, 0 ) )//消息过程
{
if (msg.message == WM_KEYDOWN && msg.wParam == VK_TAB)
{
IsDialogMessage ( HWND_ACE, &msg );
}
TranslateMessage ( &msg );//转换消息
DispatchMessage ( &msg );//分发消息
}
return msg.wParam;
}
LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) //窗口消息回调 或 窗口消息处理函数
{
TCHAR *text;
switch(message) //这里用来判断消息 当接收到指定消息时 可以执行相应的代码
{
case WM_COMMAND:
switch ( LOWORD(wparam) )
{
case 1://确定按钮
if ( HIWORD(wparam) == BN_CLICKED )//单击
{
text = (TCHAR*) calloc ( GetWindowTextLength(GetDlgItem ( HWND_ACE, 0 )), sizeof(TCHAR*));
GetWindowText ( GetDlgItem ( HWND_ACE, 0 ), text, GetWindowTextLength ( GetDlgItem ( HWND_ACE, 0 ) )+1 );
MessageBox ( HWND_ACE, text, TEXT("编辑框内容为:"), 0 );
if ( GetWindowTextLength(GetDlgItem ( HWND_ACE, 0 )) 0)//若编辑框中没有内容 释放内存会出错 所以有此判断
{
free ( text );
}
}
return 0;
}
case WM_CREATE: //窗口被创建完成消息
return 0;
case WM_DESTROY: //处理窗口关闭时的消息 意思是当用户关闭本窗口时 系统会发送一个WM_DESTROY消息给本窗口 既然窗口关闭了 那么就要把进程也关闭了 当然这不是绝对
PostQuitMessage( 0 ) ;//关闭进程
return 0;
}
return DefWindowProc ( hwnd, message, wparam, lparam ) ;//调用缺省窗口消息过程 这里返回后系统自动处理消息
}
HWND Window_ClassNameSearch ( char *ClassName) //根据指定的ClassName搜索窗口
{
HWND a;
a = FindWindowEx ( NULL, 0, ClassName, NULL );//寻找第一个窗体
if ( a != NULL)
{
return a;
}
return (HWND)0;
}
int SetWindowFont(HWND hwnd)//set window font
{
HWND zwnd;
HFONT font = CreateFont(
13,0,//字体 高宽
0,0,
0,//权值 表示标准体 黑体 ....
0,0,0, //斜体 下划线 栅格线
GB2312_CHARSET,//字符集 参数不正确会显示乱码
OUT_CHARACTER_PRECIS,//未用
CLIP_CHARACTER_PRECIS,//未用
DRAFT_QUALITY,//字体外观重要性
FF_MODERN,//字体间距 这里选择固定
"宋体");//font name SYSTEM_FONT
zwnd = FindWindowEx ( hwnd, NULL, NULL, NULL );//寻找第一个子窗口
SendMessage ( zwnd, (UINT) WM_SETFONT, (WPARAM) font, (LPARAM) NULL );//发送WM_SETFONT消息
while ( zwnd != NULL )
{
if( zwnd != NULL)
{
zwnd = FindWindowEx ( hwnd, zwnd, NULL, NULL);//下一个子窗口
SendMessage ( zwnd, (UINT) WM_SETFONT, (WPARAM) font, (LPARAM) NULL );//发送设置字体消息
}else { break; }
}//循环子窗口WM_SETFONT消息
return 0;
}
楼主 2015-08-21 16:58 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知