贊助商連結


目前分類:c++ (16)

瀏覽方式: 標題列表 簡短摘要

c++模擬滑鼠滾輪輸入事件 ,一般可以通過mouse_event()和SendInPut()兩種方法。mouse_event()在windows後期版本中逐漸被SendInPut()取代。

以下函式輸入1可以往上滾,輸入-1可以往下滾

void mouse_wheel(int direction)
{
        INPUT in;
        in.type = INPUT_MOUSE;
        in.mi.dx = 0;
        in.mi.dy = 0;
        in.mi.dwFlags = MOUSEEVENTF_WHEEL;
        in.mi.time = 0;
        in.mi.dwExtraInfo = 0;
        in.mi.mouseData = direction*WHEEL_DELTA;
        SendInput(1, &in, sizeof(in));
}
文章標籤

周宇若 發表在 痞客邦 PIXNET 留言(0) 人氣()

This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.  

 

在微軟的visual c++中,許多ansi c的函式,都會被迫改使用比較安全的_s函式,當然我們開發的大型專案,要這一樣一個一個改也是挺蛋疼的,所以可以考慮把This function or variable may be unsafe.檢察關掉,C++/一般/SDL檢查,如下圖所示

周宇若 發表在 痞客邦 PIXNET 留言(0) 人氣()

 一種特殊的Form/表單/視窗之間切換的教學範例  

文章標籤

周宇若 發表在 痞客邦 PIXNET 留言(0) 人氣()

 Visual C++ 使用KeyDown事件移動pictureBox圖片的位置/座標  

文章標籤

周宇若 發表在 痞客邦 PIXNET 留言(1) 人氣()

Visual C++ 2012中建立Windows Form

文章標籤

周宇若 發表在 痞客邦 PIXNET 留言(0) 人氣()

這個範例是利用 System.Data.OleDb.OleDbConnection 去連接資料庫

而且是唯一用"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb";去連的範例了吧?

所以沒有office 2007就不能用啦~

然後用System.Data.Common.DbCommand去直接下達SQL指令完成查詢、新增、刪除、更新的方法

然後利用System.Data.Common.DbDataReader把資料抓進記憶體做處理

以下是執行檔,程式碼如果不嫌差可以參考自最下面

[Visual C++][.NET] Access 2007 電影資料庫程式設計範例
一打開會看見的畫面


[Visual C++][.NET] Access 2007 電影資料庫程式設計範例
按右上方的箭頭來換資料


[Visual C++][.NET] Access 2007 電影資料庫程式設計範例
最無腦的搜尋方法示範

文章標籤

周宇若 發表在 痞客邦 PIXNET 留言(0) 人氣()

1to100Divisibleby7and5  

#include <iostream>

using namespace std;

int main(void)
        {

        for(int i=1; i<=100; i++)
                {
                if(i%5==0||i%7==0) cout<<i<<"\t";
                } 
        system("pause");
        return 0;
        }
文章標籤

周宇若 發表在 痞客邦 PIXNET 留言(0) 人氣()

mtonsum  

#include <iostream>

using namespace std;

int main(void)
        {
        int m,n,sum=0;
        cin>>m>>n;
        for(int i=m; i<=n; i++ )
                {
                sum+=i;
                } 
        cout<<sum;
        system("pause");
        return 0;
        }
文章標籤

周宇若 發表在 痞客邦 PIXNET 留言(0) 人氣()

1to100Divisibleby3  

#include <iostream>

using namespace std;

int main(void)
{
for(int i=1; i <=100; i++)
{
if(i%3==0) cout<<i<<"\t";
} 

system("pause");
return 0;
}
文章標籤

周宇若 發表在 痞客邦 PIXNET 留言(0) 人氣()

mtonprimecounter  
#include <iostream>
#include <math.h>

using namespace std;

bool isprime(int x)
        {
        if(x==1) return false;
        for(int i=2; i<=sqrt((float)x); i++)
                {
                if(x%i==0) return false;
                }
        return true;
        }

int main(void)
        {
        int m,n,sum=0;
        cin>>m>>n;
        for(int i=m; i<=n; i++) 
                {
                if(isprime(i)==true) sum+=i;
                } 
        cout<<sum;
        system("pause");
        return 0;
        }
文章標籤

周宇若 發表在 痞客邦 PIXNET 留言(0) 人氣()

這次發現網路上貌似沒有視窗環境下而且還用c++編寫的打磚塊

找到的都是一堆vb或著c#的....

所以硬著頭皮利用visual c++弄一個很普通的供人參考

就不多說甚麼,有問題歡迎發問我會儘量解決您的迷惑喔~

底下這是執行檔如不能執行可逕行自最底下下載程式碼自行編譯

給大家鑑賞一下球的類別 (很糟糕請嘴下留情呀!!)

using namespace System::Drawing;
using namespace System::Media;
#pragma once

namespace Breakit{

        static int CBallDiameter=20;
        static int CheckPointsBrick=20;
        static int HitScore;
        static int GameBrickCount;
        static int GameLife;
        static int GameTime;
        static int PropsBall=0;

public ref class ball
{
        static SoundPlayer ^PongBallHit;
        static bool PongBallHitOver;

public:
        int WindowRight,WindowDown;
    int x,y;
        int previousUp,previousDown,previousLeft,previousRight;
        int xspeed,yspeed;
        System::Random^ rand;

        ball()
        {
        xspeed=12,yspeed=-13;
        rand=gcnew System::Random;
        PongBallHit=gcnew SoundPlayer("sound\\PongBallHit.wav");
        PongBallHitOver=false;
        }

        public:

        void updatePoint()
        {
                previousUp=y,previousDown=y+CBallDiameter,previousLeft=x,previousRight=x+CBallDiameter;
        }

        void moving(System::Windows::Forms::PictureBox^ ball)
        {
                x+=xspeed; 
                y+=yspeed;
                ball->Location = Point(x,y);
                if(y<=5){ yspeed*=-1; PongBallHitOver=true;}
                if(x<=5){ xspeed*=-1; PongBallHitOver=true;}
                if(x>=WindowRight-CBallDiameter-5){ xspeed*=-1; PongBallHitOver=true;}
                if(PongBallHitOver){PongBallHit->Play();             PongBallHitOver=false;  }
        }

        bool lose_ball(System::Windows::Forms::PictureBox^ racket)
        {
                if( y>racket->Location.Y ){return true;} else return false; 
        }

        void collision_Racket(System::Windows::Forms::PictureBox^ racket)
        {
                if(y+CBallDiameter>racket->Location.Y &&x>=racket->Location.X&&x<=racket->Location.X+racket->Size.Width) 
                {
                        if(x+CBallDiameter/2>=racket->Location.X+(racket->Width/2)){ if(xspeed<0)   xspeed=rand->Next(-15,-11);  if(xspeed>0)  xspeed=rand->Next(11,15); } //右半邊
                        if(x+CBallDiameter/2<racket->Location.X+(racket->Width/2)){ if(xspeed<0)    xspeed=rand->Next(-15,-11);  if(xspeed>0)  xspeed=rand->Next(11,15); } //左半邊
                        yspeed*=-1; 
                } 
        }

        bool collision_Brick(System::Windows::Forms::PictureBox^  brick) {

                         if(x+CBallDiameter<brick->Location.X){return false;}
                         if(x>brick->Location.X+brick->Width){return false;}
                         if(y>brick->Location.Y+brick->Height){return false;}
                         if(y+CBallDiameter<brick->Location.Y){return false;}
                         if(y<=brick->Location.Y+brick->Height && previousUp>brick->Location.Y+brick->Height) { yspeed*=-1; return true; }
                         if(x+CBallDiameter>=brick->Location.X && previousRight<brick->Location.X) { xspeed*=-1; return true;}
                         if(x<=brick->Location.X+brick->Width && previousRight>brick->Location.X+brick->Width) { xspeed*=-1; return true;}
                         if(y+CBallDiameter>=brick->Location.Y && previousDown<brick->Location.Y ){ yspeed*=-1; return true;}
                         return false;
                         }

        void new_ball(System::Windows::Forms::PictureBox^ ball,System::Windows::Forms::PictureBox^ racket)
        {
                System::Random^ rand=gcnew System::Random;
                x=racket->Location.X+racket->Width/2;  //在球拍中心新增
                y=racket->Location.Y-CBallDiameter;
                xspeed=rand->Next(-11,11);
                ball->Location=Point(x,y);
                ball->Visible=true;
                if(yspeed>0){yspeed*=-1;} //假如球是往下改成往上
        }
        


};
}

 

windows form視窗程式的打磚塊提供初學者參考windows form視窗程式的打磚塊提供初學者參考

文章標籤

周宇若 發表在 痞客邦 PIXNET 留言(4) 人氣()

這是練習物件導向c++的程式作品,是還滿糟糕的。

不過還是從過程中學到不少有意思的東西~

譬如說windows作業系統最重要的事件(訊息)

而且有把iphone手勢滑動顯示框就退位的功能做出來喔!

大家可以下載來玩玩看

c++計算機程式

c++編寫的iphone仿真多功能算機

c++編寫的iphone仿真多功能算機

c++編寫的iphone仿真多功能算機

文章標籤

周宇若 發表在 痞客邦 PIXNET 留言(0) 人氣()

如果不想自己自己寫,可以用c++提供的函式bitset完美轉2進制出來喔

include <bitset>

 

msdn的範例

// bitset_to_string.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>
#include <string>

int main( )
{
   using namespace std;

   bitset<5> b1 ( 7 );

   cout << "The ordered set of bits in the bitset<5> b1( 7 )"
        << "\n that was generated by the number 7 is: ( "
        << b1 << " )" << endl;

   string s1;
   s1 =  b1.template to_string<char, 
   char_traits<char>, allocator<char> >( );
   cout << "The string returned from the bitset b1"
        << "\n by the member function to_string( ) is: "
        << s1 << "." << endl;
}

 

範例是主控台的程式碼,我要用在windows form視窗環境就改用下面那樣


if(radioButton1->Checked&&textBox7->Text!="") //10轉2
{
bitset<15> b1 ( int::Parse(textBox7->Text) );
string *s1=new string ;
*s1 = b1.template to_string<char,char_traits<char>, allocator<char> >( );
String^ str2 = gcnew String(s1->c_str());
textBox8->Text=str2;
delete str2;
delete s1;
}
文章標籤

周宇若 發表在 痞客邦 PIXNET 留言(0) 人氣()

19300001306677131028787525728_950

文章來源:http://hi.baidu.com/deathdog/blog/item/d8d2a37b820745f00ad18738.html

介紹
我們在衡量一個函數運行時間,或者判斷一個演算法的時間效率,或者在程序中我們需要一個定時器,定時執行一個特定的操作,比如在多媒體中、比如在遊戲中等,都會用到時間函數。還比如我們通過記錄函數或者算法開始和截至的時間,然後利用兩者之差得出函數或者演算法的執行時間。編譯器和操作系統為我們提供了很多時間函數,這些時間函數的精度也是各不相同的,所以如果我們想得到準確的結果,必須使用合適的時間函數。現在我就介紹windows下的幾種常用時間函數。

1:Sleep函式
使用:sleep(1000),在Windows和Linux下1000代表的含義並不相同,Windows下的表示1000毫秒,也就是1秒鐘;Linux下表示1000秒,Linux下使用毫秒級別的函數可以使用usleep
原理:sleep函數是使調用sleep函數的線程休眠,線程主動放棄時間片。當經過指定的時間間隔後,再啟動線程,繼續執行代碼。Sleep函數並不能起到定時的作用,主要作用是延時。在一些多線程中可能會看到sleep(0);其主要目的是讓出時間片。
精度:sleep函數的精度非常低,當系統越忙它精度也就越低,有時候我們休眠1秒,可能3秒後才能繼續執行。它的精度取決於線程自身優先級、其他線程的優先級,以及線程的數量等因素。

2:MFC下的timer事件
使用:
  1. 調用函數SetTimer()設置定時間隔,如SetTimer(0,100,NULL)即為設置100毫秒的時間間隔
  2. 在應用程序中增加定時響應函數OnTimer(),並在該函數中添加響應的處理語句,用來完成時間到時的操作
原理:sleep函數一樣。不同的是timer是一個定時器,可以指定回調函數,默認為OnTimer()函數
精度:timer事件的精度範圍在毫秒(ms)級別,系統越忙其精度也就越差。

3:C語言下的Time
使用:time_t t;  time(&t);  Time函數是獲取當前時間。
原理:time函數主要用於獲取當前時間,比如我們做一個電子時鐘程序,就可以使用此函數,獲取系統當前的時間。
精度:秒級別

4:COM對象中的COleDateTimeCOleDateTimeSpan
使用:

 

COleDateTime start_time = COleDateTime::GetCurrentTime();
COleDateTimeSpan end_time = COleDateTime::GetCurrentTime()-start_time;
While(end_time.GetTotalSeconds() < 2)
{
// 處理延時或定時期間能處理其他的消息
DoSomething()
end_time = COleDateTime::GetCurrentTime-start_time;
}
原理:以上代表延時2秒,而這兩秒內我們可以循環調用DoSomething(),從而實現在延時的時候我們也能夠處理其他的函數,或者消息。COleDateTime,COleDateTimeSpan是MFC中CTime,CTimeSpan在COM中的應用,所以,上面的方法對於CTime,CTimeSpa同樣有效。
精度:秒級別

5:C語言下的時鐘週期clock()
文章標籤

周宇若 發表在 痞客邦 PIXNET 留言(0) 人氣()

private Image ReadImageFromUrl(string urlImagePath)
{
           Uri uri = new Uri(urlImagePath);
           WebRequest webRequest = WebRequest.Create(uri);
           Stream stream = webRequest.GetResponse().GetResponseStream();
           Image res = Image.FromStream(stream);
           return res;
 
}
System::Drawing::Image^ ReadImageFromUrl(System::String ^urlImagePath)
        {
        System::Uri ^uri = gcnew Uri(urlImagePath);
        System::Net::WebRequest ^webRequest;
        webRequest = System::Net::WebRequest::Create(uri);
        System::IO::Stream ^stream = webRequest->GetResponse()->GetResponseStream();
        Image ^res = Image::FromStream(stream);
        return res;
        }

接收方法回傳的Image後就可以再利用Bitmap改變圖片大小設定給pictureBox1囉!

         Bitmap ^photo = gcnew Bitmap(ReadImageFromUrl(sctemp),399,537);
                pictureBox1->Image=photo;

參考資料:當麻許

文章標籤

周宇若 發表在 痞客邦 PIXNET 留言(0) 人氣()

#include<iostream>
#include<time.h>
using namespace std;

class Calendar
{
      int count;
      public:
      int year;
      int month;
      int date;
      Calendar& operator++();
      Calendar& operator--();
      Calendar()
      {
                count=0;
                year=rand()%300+1900;
                month=rand()%12+1; 
                date=rand()%30+1;
                while(month==2&&date>28)
                {
                    month=rand()%12+1; 
                    date=rand()%30+1;
                } 
                }
      void show()
      {
      printf("+%d-%2d-%2d+  ",year,month,date); count++;
      if(count%5==0)cout<<endl;
            } 
      };
      

Calendar& Calendar::operator++()
{  //大1 3 5 7 8 10 12  小 2 4 6 11 9 
      switch(month)
      {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            date++; 
            if(date>31){month++; date=1;} 
            break; 
            case 12:
            date++; 
            if(date>31){month=1; date=1; year++;} 
            break; 
            case 2:
            date++;
            if(date>28){month++; date=1;} 
            break; 
            case 4:
            case 6: 
            case 9:
            case 11:
            date++; 
            if(date>30){month++; date=1;} 
            break; 
            } 
      return *this; 
}


Calendar& Calendar::operator--()
{  //大1 3 5 7 8 10 12  小 2 4 6 11 9 
      switch(month)
      {
            case 1:
            date--; 
            if(date<1){month=12; date=31; year--;} 
            break;
            case 12:
            case 10:
            case  8:
            case  7:
            case  5:
            date--; 
            if(date<1){month--; date=30;} 
            break;
            case 11:
            case  9:
            case  6:
            case  4:
            case  2:
            date--; 
            if(date<1){month--; date=31;} 
            break;
            case  3:
            date--; 
            if(date<1){month--; date=28;} 
            break;    
            } 
      return *this; 
}

int main (void)
{
    srand(time(NULL)); 
    Calendar d; 
    d.show(); 
    cout<<"加365次"<<endl; 
    for(int cc=1; cc<=365; cc++)
    { 
    (++d).show(); 
    } 
    cout<<"減365次"<<endl; 
    for(int cc=1; cc<=365; cc++)
    { 
    (--d).show(); 
    } 

    system("pause"); 
    }

 

[C++] 運算子多載左移跟右移-製作日期遞增或遞減的功能  

周宇若 發表在 痞客邦 PIXNET 留言(0) 人氣()