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


// 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:17
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
把你的resource.h发出来看看

梅尚程荀
马谭杨奚







                                                       
2012-08-01 11:24
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
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);
        }
        return 0;
    }
    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);

       return 0;
        //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 DefWindowProc (hwnd, message, wParam, lParam);//处理完WM_SYSCOMMAND消息必须将消息控制权返回到DefWindowProc中
    }
    case WM_DESTROY:
    {
        PostQuitMessage (0);
        return 0;
    }
    }
    return DefWindowProc (hwnd, message, wParam, lParam);
}

我们都在路上。。。。。
2012-08-01 11:52
快速回复:【红烧小鲫鱼】关于在纯C语言中的Shell_NotifyIcon应用
数据加载中...
 
   



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

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