c++实现右下角弹窗

我们看到有很多程序都有右下角弹出广告的情况,总是弹出广告来,关都关不了,网页上弹窗很好实现,html或者js,都可以做到,但是c++怎么去实习呢,确实,有点奇葩,

首先,我们要吧这个窗口写好,怎么写呢,创建一个vs2013的win32工程项目,创建mfc窗口也可以,代码自己就出来了,然后在,创建窗口的函数里改一下窗口的类型和位置就可以了,
   hWnd = CreateWindow(szWindowClass, szTitle, WS_SYSMENU,
      1250, 565, 350, 300, NULL, NULL, hInstance, NULL);

然后,在消息处理函数WndProc()里去实现,显示字符啊,图片啊,或者播放音乐

hdc = BeginPaint(hWnd, &ps);
  PlaySound(TEXT("C:\\testa.wav"), NULL, SND_FILENAME | SND_ASYNC);//播放音乐
  TextOut(hdc, 0, 0, wszName, 20);//显示字符
  EndPaint(hWnd, &ps);//显示图片

当然,还不够完整对不对,我调用他的时候怎么传数据呢,你可以用共享内存,或者创建一个文件来传递,我的其它文章里面有共享内存的代码,我也是这样用的

写完之后呢,在debug文件夹里面有一个.exe文件,用创建进程的函数CreateProcessW()去调用.exe文件就可以弹出窗口了。

窗口代码:vs2013//win32项目运行

// Win32Project2.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "Win32Project2.h"
#include"mmsystem.h "
#include <fstream>
#define MAX_LOADSTRING 100
#pragma comment(lib, "winmm.lib")
// 全局变量:
HINSTANCE hInst;        // 当前实例
TCHAR szTitle[MAX_LOADSTRING];     // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING];   // 主窗口类名

WCHAR wszName[256];

// 此代码模块中包含的函数的前向声明:
ATOM    MyRegisterClass(HINSTANCE hInstance);
BOOL    InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

typedef struct _TShareMem
{
 char Data[256];
}TShareMem;//创建共享内存结构体
HANDLE hMap;
HANDLE hAddress;
int iErrCode;

int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPTSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
 TShareMem* pShareMem1;
 //打开刚刚创建的共享内存区
 hMap = ::OpenFileMapping(FILE_MAP_WRITE, false, _T("NewMap"));//返回句柄
 if (hMap == 0)
 {
  iErrCode = GetLastError();
  //MessageBox(NULL, L"不能定位内存映射文件块!", L"error", MB_OKCANCEL);
 }
 //读共享内存区
 pShareMem1 = (TShareMem*)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); //返回共享内存地址并强转

if (pShareMem1 == NULL)
  //MessageBox(NULL, L"Can''t View Memory Map!", L"error", MB_OKCANCEL);

if (pShareMem1 != NULL){
   memset(wszName, 0, sizeof(wszName));
   //拷贝共享内存区的内容
   CopyMemory(wszName, pShareMem1, 255);
  }

UNREFERENCED_PARAMETER(hPrevInstance);
 UNREFERENCED_PARAMETER(lpCmdLine);

// TODO:  在此放置代码。
 MSG msg;
 HACCEL hAccelTable;

// 初始化全局字符串
 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
 LoadString(hInstance, IDC_WIN32PROJECT2, szWindowClass, MAX_LOADSTRING);
 MyRegisterClass(hInstance);

// 执行应用程序初始化:
 if (!InitInstance (hInstance, nCmdShow))
 {
  return FALSE;
 }

hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT2));

// 主消息循环:
 while (GetMessage(&msg, NULL, 0, 0))
 {
  if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  {
   TranslateMessage(&msg);
   DispatchMessage(&msg);
  }
 }

return (int) msg.wParam;
}

//
//  函数:  MyRegisterClass()
//
//  目的:  注册窗口类。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
 WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style   = CS_HREDRAW | CS_VREDRAW;
 wcex.lpfnWndProc = WndProc;
 wcex.cbClsExtra  = 0;
 wcex.cbWndExtra  = 0;
 wcex.hInstance  = hInstance;
 wcex.hIcon   = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32PROJECT2));
 wcex.hCursor  = LoadCursor(NULL, IDC_ARROW);
 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
 wcex.lpszMenuName =NULL;
 wcex.lpszClassName = szWindowClass;
 wcex.hIconSm  = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

return RegisterClassEx(&wcex);
}

//
//   函数:  InitInstance(HINSTANCE, int)
//
//   目的:  保存实例句柄并创建主窗口
//
//   注释:
//
//        在此函数中,我们在全局变量中保存实例句柄并
//        创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

hInst = hInstance; // 将实例句柄存储在全局变量中

hWnd = CreateWindow(szWindowClass, szTitle, WS_SYSMENU,
      1250, 565, 350, 300, NULL, NULL, hInstance, NULL);

if (!hWnd)
   {
      return FALSE;
   }

ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

return TRUE;
}

//
//  函数:  WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    处理主窗口的消息。
//
//  WM_COMMAND - 处理应用程序菜单
//  WM_PAINT - 绘制主窗口
//  WM_DESTROY - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 int wmId, wmEvent;
 PAINTSTRUCT ps;
 HDC hdc;

switch (message)
 {
 case WM_COMMAND:
  wmId    = LOWORD(wParam);
  wmEvent = HIWORD(wParam);
  // 分析菜单选择:
  switch (wmId)
  {
  case IDM_ABOUT:
   DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
   break;
  case IDM_EXIT:
   DestroyWindow(hWnd);
   break;
  default:
   return DefWindowProc(hWnd, message, wParam, lParam);
  }
  break;
 case WM_PAINT:
  hdc = BeginPaint(hWnd, &ps);
  PlaySound(TEXT("C:\\testa.wav"), NULL, SND_FILENAME | SND_ASYNC);//播放音乐
  TextOut(hdc, 0, 0, wszName, 20);//显示字符
  // TODO:  在此添加任意绘图代码...
  EndPaint(hWnd, &ps);//显示图片
  break;
 case WM_DESTROY:
  PostQuitMessage(0);
  break;
 default:
  return DefWindowProc(hWnd, message, wParam, lParam);
 }
 return 0;
}

// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
 UNREFERENCED_PARAMETER(lParam);
 switch (message)
 {
 case WM_INITDIALOG:
  return (INT_PTR)TRUE;

case WM_COMMAND:
  if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  {
   EndDialog(hDlg, LOWORD(wParam));
   return (INT_PTR)TRUE;
  }
  break;
 }
 return (INT_PTR)FALSE;
}

调用.exe文件代码vs2013:win32窗口程序运行

// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <string>
#include<windows.h>
#include<iostream>

using namespace std;

typedef struct _TShareMem
{
 char Data[256];
}TShareMem;//创建共享内存结构体
HANDLE hMap;
HANDLE hAddress;
int iErrCode;

int _tmain(int argc, _TCHAR* argv[])
{
 
 char strShare[256] ="共享内存";
 char szBuf[256];
 TShareMem* pShareMem;
 TShareMem* pShareMem1;
 //创建共享内存,这个函数的最后一个参数即是创建的共享内存的名称
 hMap = ::CreateFileMapping((HANDLE)-1, NULL, PAGE_READWRITE, 0, sizeof(TShareMem), _T("NewMap"));

if (hMap == NULL)
 {
  iErrCode = GetLastError();
  MessageBox(NULL,L"不能创建内存映射文件!",L"error",MB_OKCANCEL);
 }
 //写共享内存区,将内存映射为文件
 pShareMem = (TShareMem*)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0);//返回共享内存地址强转类型

memcpy(pShareMem, strShare, strlen(strShare));//将数据拷贝进共享内存

//打开刚刚创建的共享内存区
 hMap = ::OpenFileMapping(FILE_MAP_WRITE, false, _T("NewMap"));//返回句柄
 if (hMap == 0)
 {
  iErrCode = GetLastError();
  MessageBox(NULL, L"不能定位内存映射文件块!", L"error", MB_OKCANCEL);
  
 }
 //读共享内存区
 //hAddress = MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0);
 pShareMem1 = (TShareMem*)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); //返回共享内存地址并强转

if (pShareMem1 == NULL)
  MessageBox(NULL, L"Can''t View Memory Map!", L"error", MB_OKCANCEL);

memset(szBuf, 0, sizeof(szBuf));
 //拷贝共享内存区的内容
 CopyMemory(szBuf, pShareMem1, 255);

wstring szCmdLine = L"C:\\Users\\Jin\\Documents\\Visual Studio 2013\\Projects\\Win32Project2\\Debug\\Win32Project2.exe";
 STARTUPINFO si = { sizeof(si) };
 PROCESS_INFORMATION pi;
 si.wShowWindow = 1;
 //si.dwFlags = STARTF_USESHOWWINDOW;
 BOOL ret = ::CreateProcessW(
  NULL,
  &szCmdLine[0],
  NULL,
  NULL,
  0,
  0,
  NULL,
  NULL,
  &si,
  &pi);
 if(ret)
{
    ::CloseHandle(pi.hProcess);
    ::CloseHandle(pi.hThread);
    std::cout<<"新进程的id:"<<pi.dwProcessId<<std::endl
        <<"Thread id:"<<pi.dwThreadId<<std::endl;
}

return 0;
}

c++实现右下角弹窗相关推荐

  1. php 右下脚弹窗,纯js的右下角弹窗实例代码

    下面小编就为大家带来一篇纯js的右下角弹窗实例代码.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 这个弹窗是如下图的效果: 打开网页的时候,这个弹窗会淡入,之后点击右上 ...

  2. WPF 右下角弹窗的简单实现

    软件中经常出现右下角弹窗,从下面缓缓弹出的,这次就做个简陋的实现, 思路就是在窗口加载和关闭时执行动画DoubleAnimation 今天懒得做界面了,只实现了功能. 看看效果: 下面看看代码: 主窗 ...

  3. 获取大麦网孟鹤堂演出数据并播报和在右下角弹窗提示

    #!/usr/bin/env python # coding=utf-8#!/usr/bin/env python # coding=utf-8 # 获取大麦网孟鹤堂演出数据并播报和在右下角弹窗提示i ...

  4. 【jQuery】纯js的右下角弹窗

    这个弹窗是如下图的效果: 打开网页的时候,这个弹窗会淡入,之后点击右上角的关闭按钮,其实就是一个& times;会淡出. 采用淡入淡出是因为直接Jquery一个fadeIn与fadeOut省事 ...

  5. QML实现桌面右下角弹窗

    实现效果 这次制作的桌面右下角弹窗,主要功能有透明度和位置动画.定时关闭.鼠标放在上面暂留. 实现思路 首先,我们需要获取桌面大小,然后 move 到右下角去,这里借助的 Screen: //初始位置 ...

  6. MFC 右下角弹窗显示关闭实例

    效果类似于下测: 弹窗会在一定时间之后自动关闭,点击内容或者下测的[查看]会自动打开某个设置的网站 代码如下所示: void OnBnClickedButton1() {     CMsgWindow ...

  7. python获取股市股票数据并播报和右下角弹窗提示,利用datetime和win32com模块,有针对性选择大盘晴雨表卡片

    #!/usr/bin/env python # coding=utf-8 # 获取股票数据并播报和弹窗提示import requests, re import win32com.client impo ...

  8. 精仿 QQ 右下角弹窗 / 广告

    VC编写,带原版通知声音,可二次开发,100%一模一样. 1.当前版本仅支持单个广告弹出展示. 2.程序经过反复测试,目前能十分稳定地在目标机器右下角位置弹出所指定的广告. 3.百分百精仿,无论样式. ...

  9. 关于Potplayer右下角弹窗解决方案

    关于Potplayer右下角弹窗解决方案 Potplayer,是KMPlayer的原作者姜勇囍進入Daum公司后的新一代作品,优点很多. 之前使用的是同作者的KMplayer,可惜被收购后因为广告太多 ...

  10. 电脑右下,教您如何屏蔽电脑右下角弹窗

    现在大家使用电脑的频率越来越高,相信不少的用户会遇到这么一种情况,电脑右下角总出现垃圾广告,影响美观,影响心情.而且老弹出,弄的很多人真是要抓狂了,那么电脑右下角弹窗广告怎么办?下面,小编就来跟大家介 ...

最新文章

  1. C++知识点50——虚函数与纯虚函数(上)
  2. 查看iis对应w3wp.exe显示的进程ID号(转载)
  3. C++ STL中vector用法简要总结
  4. 深度学习(五十三)对抗网络
  5. 手机可用熵_时间之矢,生命之熵
  6. 熊猫分发_熊猫下降列和行
  7. 遥感图像——多波段数据存储的方式
  8. php 打印所有常量,php中输出常量
  9. 实验7 多个交换机虚拟局域网
  10. win10 开机自动启动脚本
  11. 苹果技术支持联系方式
  12. 【BDTC 2016】精准医疗和生物医药大数据论坛:探索医疗与大数据结合之路
  13. C++ fabs和abs区别
  14. jq设置保留两位小数_js保留两位小数方法总结
  15. 【干货】MySQL底层架构设计,你了解多少?
  16. PMP之项目经理的角色
  17. 数据存储-前端缓存技术
  18. MGC token GTR社区宇哥教你如何快速升级V5
  19. 在MacBook Air上安装Fedora Linux系统(Fedora 35)
  20. 利用轮播图制作简单游戏页面

热门文章

  1. python第三方库 invalid requirement_python第三方库安装出问题
  2. 由内而外全面造就自己(七)
  3. 5G无线技术基础自学系列 | 时域资源
  4. 酒店预订系统web端Android端,基于WEB的酒店客房预订系统的设计与实现
  5. tom邮箱怎么样,邮箱一天能发多少邮件
  6. 【Decouple】《Improving Semantic Segmentation via Decoupled Body and Edge Supervision》
  7. 李彦宏:离破产永远只有30天
  8. Ubuntu安装NVDIA显卡驱动,CUDA及cuDNN
  9. about cisco DNA
  10. hibernate(lazy加载)的意思