| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5818 人关注过本帖
标题:【红烧小鲫鱼】关于在纯C语言中的Shell_NotifyIcon应用
只看楼主 加入收藏
qq492927689
Rank: 1
等 级:新手上路
帖 子:28
专家分:5
注 册:2011-4-27
结帖率:66.67%
收藏
 问题点数:0 回复次数:0 
【红烧小鲫鱼】关于在纯C语言中的Shell_NotifyIcon应用
有如下代码,可以运行,但是程序会崩溃,希望各位帮我看看啦!

// HELLO.cpp : Defines the entry point for the application.
//
#include "resource.h"
#include <windows.h>
#define MYWM_NOTIFYICON WM_USER+1

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
     // TODO: Place code here.
    static TCHAR szAppName[] = TEXT ("HelloWin") ;
    HWND hwnd ;
    MSG msg ;
    WNDCLASS wndclass ;

    wndclass.style = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc = WndProc ;
    wndclass.cbClsExtra = 0 ;
    wndclass.cbWndExtra = 0 ;
    wndclass.hInstance = hInstance ;
    wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor = LoadCursor (hInstance, MAKEINTRESOURCE(IDI_ICON1)) ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName = NULL ;
    wndclass.lpszClassName = szAppName ;

    if (!RegisterClass (&wndclass))
    {
        MessageBox (NULL, TEXT("This program requires Wndows NT !"),
            szAppName, MB_ICONERROR | MB_OK) ;
        return 0 ;
    }

    hwnd = CreateWindow (szAppName,
        TEXT ("The Hello Program"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,            //windows菜单的句柄
        hInstance,
        NULL);

    ShowWindow (hwnd, nCmdShow) ;
    UpdateWindow (hwnd) ;

    while (GetMessage (&msg, NULL, 0, 0))
    {
        TranslateMessage (&msg) ;
        DispatchMessage (&msg) ;
    }

    return msg.wParam;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;
    //DWORD dwMessage;
    NOTIFYICONDATA lpdata;


    switch (message)
    {
    case MYWM_NOTIFYICON :
        {
            if(WM_LBUTTONDBLCLK == lParam)
            {
                ShowWindow (hwnd, SW_SHOW) ;
            }
            else if(WM_RBUTTONDOWN == lParam)
            {
                //弹出式菜单
                MessageBox (hwnd, TEXT("     打开hello对话框      "), TEXT("标题"), MB_OK);
            }
        }
    case WM_CREATE:
        {
            //dwMessage = NIM_ADD;

            lpdata.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
            lpdata.hWnd = hwnd;        //这个句柄的设置其实我觉得是错误的。
            lpdata.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
            lpdata.uCallbackMessage = MYWM_NOTIFYICON ;
            lpdata.uID = IDI_ICON1;
            lpdata.hIcon = LoadIcon(((LPCREATESTRUCT)lParam)->hInstance, MAKEINTRESOURCE(IDI_ICON1));
            strcpy(lpdata.szTip, "系统托盘示例");

            Shell_NotifyIcon(NIM_ADD, &lpdata);
            
               
            //MessageBox (hwnd, TEXT("     打开hello对话框      "), TEXT("标题"), MB_OK);

   
        }
    case WM_PAINT:
        {
            hdc = BeginPaint (hwnd, &ps);

            GetClientRect (hwnd, &rect);

            DrawText (hdc, TEXT ("Hello, Windows NT !"), -1, &rect,
                DT_SINGLELINE | DT_CENTER | DT_VCENTER);

            EndPaint (hwnd, &ps);
            return 0;
        }
    case WM_SYSCOMMAND :
        {
            if(SC_MINIMIZE == wParam)
            {
                ShowWindow (hwnd, SW_HIDE);
            }
            return 0;
        }
    case WM_DESTROY:
        {
            PostQuitMessage (0);
            return 0;
        }
    }
    return DefWindowProc (hwnd, message, wParam, lParam);
}

求指教啊!
搜索更多相关主题的帖子: 希望 include C语言 
2012-08-01 11:15
快速回复:【红烧小鲫鱼】关于在纯C语言中的Shell_NotifyIcon应用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014653 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved