01day-pm

三、第一个窗口程序

  3.1、入口函数WinMain

  3.2、窗口处理函数
    当窗口处理消息事件时,系统调用该函数
      LRESULT CALLBACK WindowProc(
                  HWND hwnd, //窗口的句柄
                  UINT uMsg,//消息的ID号
                  WPARAM wParam,//消息所对应的参数
                  LPARAM lParam);//消息所对应的参数

  3.3、注册窗口类型
      typedef struct _WNDCLASS{
                  UINT style; //窗口类的风格
                  WNDPROC lpfnWndProc; //窗口处理函数
                  int cbClsExtra; //窗口类附加数据大小
                  int cbWndExtra; //窗口附加数据大小
                  HANDLE hInstance; //当前应用程序的实例句柄
                  HICON hIcon; //窗口图标
                  HCURSOR hCursor; //窗口的鼠标
                  HBRUSH hbrBackground; //窗口的背景画刷
                  LPCTSTR lpszMenuName; //菜单
                  LPCTSTR lpszClassName; //类型名称
                    }WNDCLASS;

    注册函数 RegisterClass

  3.4、创建窗口
      HWND CreateWindow(
                LPCTSTR lpClassName, //窗口类型名称
                LPCTSTR lpWindowName, //窗口名称
                DWORD dwStyle, //窗口类型
                int x, //窗口的左上角X坐标
                int y, //窗口的左上角Y坐标
                int nWidth, //窗口的宽度
                int nHeight, //窗口的高度
                HWND hWndParent, //父窗口句柄
                HMENU hMenu, //窗口菜单句柄
                HANDLE hlnstance, //应用程序的实例
                LPVOID lpParam); //创建的参数,一般为NULL

  3.5、显示窗口
      ShowWindow 显示窗口
        BOOL ShowWindow(
                HWND hWnd, //显示的窗口句柄
                int nCmdShow);//显示的方式
      UpdateWindow 刷新窗口

  3.6、消息处理
      GetMessage 获取消息
      DispatchMessage 派发消息

  3.7、程序退出
      窗口销毁时,退出程序。在WndProc中实现。
      WM_DESTROY:当窗口销毁时,会调用WndProc传递给使用者。
      PostQuitMessage:发送一个退出消息。

四、资源的处理

  4.1、资源和资源脚本
    资源:ICON/CUSRUR/BITMAP/MENU.....
    资源脚本:扩展名为rc文件。

  4.2、编译资源
    rc.exe编译资源,生成res文件

  4.3、链接资源
    使用link.exe将res文件链接到程序当中。

  4.4、ICON的使用
    LoadIcon从指定程序中加载ICON资源。

    编写一个资源脚本
    新建一个hellowindows.rc文件
    里面写入:
    100 ICON "114.ico"
    然后编译: rc hellowindows.rc
    cl hellowindows.c /c
    link hellowindows.obj hellowindows.res user32.lib
    执行hellowindows,这样可以改变程序外观的图标

    如果改变对话框的图标:
    必须在注册窗口函数里wc.hIcon=LoadIcon(g_hInst,MAKEINTRESOURCE(100));

#include <windows.h>

HINSTANCE g_hInst = NULL;

//2 窗口处理函数
LRESULT CALLBACK WndProc( HWND hWnd,
                          UINT nMsg,
                          WPARAM wParam,
                          LPARAM lParam )
{
    //判断消息ID
    switch( nMsg )
    {
    case WM_DESTROY: //窗口销毁的消息
        PostQuitMessage( 0 ); //发送退出消息
        return 0;
    }
    //调用缺省的消息处理程序
    return DefWindowProc( hWnd, nMsg,
        wParam, lParam );
}

//3 注册窗口类型
BOOL MyRegister( LPSTR pszClassName )
{
    WNDCLASS wc = {0};
    ATOM  nAtom = 0;
    //构造注册窗口的参数
    wc.style         = CS_VREDRAW|CS_HREDRAW;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = g_hInst;
    wc.hIcon         = NULL;
    wc.hCursor       = NULL;
    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = pszClassName;
    //注册窗口
    nAtom = RegisterClass( &wc );
    if( 0 == nAtom )
    {
        MessageBox( NULL, "Register Failed",
          "Error", MB_OK|MB_ICONWARNING );
        return FALSE;
    }
    else
    {
        MessageBox( NULL, "Register Successed",
          "Successed", MB_OK );
    }
    return TRUE;
}

//4 窗口创建
HWND MyCreate( LPSTR pszClassName )
{
    HWND hWnd = NULL;
    //创建窗口
    hWnd = CreateWindow( pszClassName,
            "HelloWnd", WS_OVERLAPPEDWINDOW,
            100, 100, 300, 500, NULL, NULL,
            g_hInst,    NULL );
    if( NULL == hWnd )
    {
        MessageBox( NULL, "CreateWnd Failed",
          "Error", MB_OK );
        return NULL;
    }
  MessageBox( NULL, "CreateWnd Successed",
          "Successed", MB_OK );
    return hWnd;
}

//5 显示窗口
void DisplayWnd( HWND hWnd )
{
    //显示
    ShowWindow( hWnd, SW_SHOW );
    //刷新
    UpdateWindow( hWnd );
}
//6 消息处理
void Message( )
{
    MSG msg = { 0 };
    //消息循环处理,获取消息
    while( GetMessage( &msg, NULL, 0, 0 ) )
    {
        //派发消息
        DispatchMessage( &msg );
    }
}
//1 入口函数
int WINAPI WinMain( HINSTANCE hInst,
                    HINSTANCE hPrevInst,
                    LPSTR pszCmdLine,
                    int   nShowCmd )
{
    HWND hWnd = NULL;
    g_hInst = hInst;
    //注册窗口类型
    MyRegister( "MyWnd" );
    //创建注册类型的窗口
    hWnd = MyCreate( "MyWnd" );
    //显示窗口
    DisplayWnd( hWnd );
    //消息处理
    Message( );
    return 0;
}
时间: 2024-10-13 03:08:52

01day-pm的相关文章

临摹PM百科写的一个页面

1.效果图 HTML: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PM百科</title> <link type="text/css" rel="stylesheet" href="css/style.css"> </he

can&#39;t locate ExtUtils/MakeMaker.pm in @INC

[[email protected] FCGI-0.71]# perl Makefile.PL can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at Makef

关于PM(项目经理)的思考和课后问题解答

这次我要说明的是关于两个关于PM的问题.这里的PM专指我们的软件项目经理,所以这次我们需要从一个更高的角度去看这个问题,假设你可以作为一个团队的领导者和你的团队一同进行软件的设计,同时还需要完成在开发阶段一系列的问题. 好了现在有一个问题摆在我们的面前:一个用户把他的需求交给你去实现,但是你在联系的过程中发现你联系的”客户” 不是真的客户, 而是转手把他接到的活转包给你了,但是你见不到用户,你只跟转包的二道贩子交流. 面对这样的情形我们是否还是要接手呢?首先我们的身份是一个项目的经理,我们的首要

Android下pm 命令详解

Sam在看相关PackageManager代码时,无意中发现Android 下提供一个pm命令,通常放在/system/bin/下.这个命令与Package有关,且非常实用.所以研究之.0. Usage: usage: pm [list|path|install|uninstall] pm list packages [-f] pm list permission-groups pm list permissions [-g] [-f] [-d] [-u] [GROUP] pm list ins

PM Boook项目管理思维导图梳理

采用思维导图的形式来展示项目管理的五大过程组.十大知识领域,能更好的展示框架结构,便于理解.分析. 下图为思维导图化制的项目管理要素:灰色为启动过程组.白色为规划过程组.紫色为执行过程组.蓝色为监控过程组.绿色为收尾过程组. PM Book(第五版),项目管理框架结构更清晰,把干系人管理单独作为一个章节,其他章节梳理的更清晰,推荐参考第五版.

假如BOSS给了PM一个不靠谱的需求

假如BOSS给了一个PM不靠谱的需求,那么站在PM的角度上,我会怎么处理呢?在知乎上看了好多达人以及同行的真知灼见,自己也是有一番小的思考,这里做一个总结吧 其实,这种不靠谱的产生的最主要的原因无非是所处的位置和立场不同,因而会发出不同的声音. 作为一个BOSS,更可能是从当前整个市场的行情,走向去看问题,觉得我们应该做一个XXX产品,实现XXX需求,然后达到XXX目标. 作为一个PM,更多的是考虑一个产品满足这种需求所需要的成本,实现细节以及"性价比",如果PM再厉害点的话,可能技术

Can&#39;t locate XML/Simple.pm in @INC (@INC contains: /opt/local/lib

苹果电脑上使用perl发现下面这个错误: Can't locate XML/Simple.pm in @INC (@INC contains: /opt/local/lib 解决方法: sudo cpan install XML::Simple 这个安装时间有点长. Can't locate XML/Simple.pm in @INC (@INC contains: /opt/local/lib

Arduino + SmartAirFilter 制作智能感应的 PM 空气净化器

先说 SmartAirFilters 知道 SmartAirFilters 源自微博上转发的非常火的那个帖子,和动辄七八千元的商用产品比,几百元的 SmartAirFilters(下面简称电扇) 确实不贵.一次和朋友在清华科技园里附近的咖啡馆聊天,正好遇见他们在那里做 DIY 体验工坊,作为 DIYer 爱好者,理所应当给个赞,就败了个 1.0 试一试. 空气 PM 的监控 空气过滤效果究竟怎样?作为数据控,理所应当必须看数据说话.正好在玩 Arduino Yun,就起意搞个灰尘传感器监控一下.

微软职位内部推荐-Senior PM

微软近期Open的职位: Sr.PM for Whole Page Experience- Search Technology Center Asia Location:Beijing/Suzhou Group Overview As part of the Microsoft Bing team, the Search Technology Center Asia (STCA) is working to deliver innovative Internet search products

&lt;23:34 pm&gt;

今天幸运地在宿舍登上了学校的网,正在看一个自己觉得很有意思的电影——<社交网络>.讲的就是facebook的创立,或者说是一个关于马克·扎克伯格的传记电影.但是感觉今天看不完了,现在已经11:40 pm了,明天还要上学..不能睡太晚,不然还会像今天一样,开始偏头疼. 头疼不是病,疼起来真要命啊!疼了一天,都没法思考了, 回到家开始昏天黑地地睡觉,4:00 pm的时候才醒,发现好多了,于是背着书包又来了学校. 宿舍的几个哥们还在聊天..什么苏联的解体,又什么美国的亚太再平衡战略,大晚上的不睡觉聊