签到

05月06日
尚未签到

共有回帖数 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 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知