エンジニアX歳定年説の新解釈を思いついた

エンジニアX歳定年説の新解釈を思いついたので書いておく。

エンジニアとしてまじめにコツコツ勉強していれば、
大体X歳(25~40ぐらい?)でよっぽどいい環境にいない限り
現場、会社で一番の実力になってしまい、
自分より実力のない人の下で品質の悪い物を作ることに我慢できなくなるため、
エンジニアとしてより品質にこだわるため
1エンジニア(1メンバー)ではなく、
プロジェクトリーダー,アーキテクト,プロジェクト OR プロダクト マネージャー、etc
などの品質にこだわるために必要な権限を与えられる上位職種を目指すようになる
というもの。

かなり適当
まあ、ただの自分の今の状況なんですけどねw

カテゴリー: その他 | タグ: , , , , , , , | コメントをどうぞ

TFSのExcel連携がエラーで動かない時の解決方法。

Visual Studio 2015からTeam Foundation Server(チーム エクスプローラー) の作業項目機能で
Excelを呼び出そうとするとエラーになるときの解決方法です。

Excelを起動しても「チーム」タブが表示されておらず。
「開発」タブの「COMアドイン」で
Team Foundation Add-inのチェックがOFFになっていて
読み込み時の動作が「アンロードされました」になっていれば、該当の状態です。

レジストリエディタで
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Excel\Addins\TFCOfficeShim.Connect.14 キーの値を調べます。
14の部分はTFSやOfficeのバージョンにより変化するかもしれません。

LoadBehaviorの値が0になっているはずなのでこれを3に修正し、再起動すれば治るはずです。

但し、古いExcel(2000ぐらい?)では、これを3にするとExcelの終了時にエラーが発生するようです。

カテゴリー: TFS | タグ: , , , , , , , , | コメントをどうぞ

TFSのビルド定義で Universal Windows Platform ビルドテンプレート でテストプロジェクトをビルドするとエラーになる件の解決法

最近 Team Foundation Server Express の自動ビルド・ビルド定義機能で遊んでいたのですが、

タイトルの通り標準で用意されていてappxパッケージなどを出力してくれる
「Universal Windows Platform」ビルドテンプレートを使ってテストプロジェクトを含むソリューションをビルドしようとすると失敗してしまいます。

いろいろいじった結果解決法を見つけたのでとりあえず書いておきます。

  1. テストプロジェクトをビルド対象から外す。
    ソリューションのプロパティ→構成プロパティ→構成
    各プラットフォーム(x64,x86,ARM)のRelease構成で
    テストプロジェクトのビルド、配置チェックボックスを外す。
  2. ビルド前に AppxPackages フォルダを削除
    ビルド定義の先頭に以下のビルドステップを追加

    • ビルドステップ:ファイルの削除
    • ソースフォルダ:$(Build.BinariesDirectory)\AppxPackages
    • コンテンツ :**
    • 管理オプション・エラー時に続行 チェックボックスをチェック
  3. ビルド定義・リポジトリクリーンを設定
    ビルド定義→リポジトリ→クリーンのコンボボックスをtrueに設定
  4. Visual Studioのビルド ビルドステップの消去チェックを選択
    Visual Studioのビルド→消去チェックボックスをチェック

もしかしたら要らない手順もあるかもしれないけど、
とりあえずこれだけ設定しておけばビルド成功するはず。

カテゴリー: TFS | タグ: , , , , , , | コメントをどうぞ

ウィンドウメッセージなどのundef,enum化

#undef WM_NULL                         
#undef WM_CREATE                       
#undef WM_DESTROY                      
#undef WM_MOVE                         
#undef WM_SIZE                         
#undef WM_ACTIVATE                     
#undef WM_SETFOCUS                     
#undef WM_KILLFOCUS                    
#undef WM_ENABLE                       
#undef WM_SETREDRAW                    
#undef WM_SETTEXT                      
#undef WM_GETTEXT                      
#undef WM_GETTEXTLENGTH                
#undef WM_PAINT                        
#undef WM_CLOSE                        
#undef WM_QUERYENDSESSION              
#undef WM_QUERYOPEN                    
#undef WM_ENDSESSION                   
#undef WM_QUIT                         
#undef WM_ERASEBKGND                   
#undef WM_SYSCOLORCHANGE               
#undef WM_SHOWWINDOW                   
#undef WM_WININICHANGE                 
#undef WM_SETTINGCHANGE                
#undef WM_DEVMODECHANGE                
#undef WM_ACTIVATEAPP                  
#undef WM_FONTCHANGE                   
#undef WM_TIMECHANGE                   
#undef WM_CANCELMODE                   
#undef WM_SETCURSOR                    
#undef WM_MOUSEACTIVATE                
#undef WM_CHILDACTIVATE                
#undef WM_QUEUESYNC                    
#undef WM_GETMINMAXINFO                
#undef WM_PAINTICON                    
#undef WM_ICONERASEBKGND               
#undef WM_NEXTDLGCTL                   
#undef WM_SPOOLERSTATUS                
#undef WM_DRAWITEM                     
#undef WM_MEASUREITEM                  
#undef WM_DELETEITEM                   
#undef WM_VKEYTOITEM                   
#undef WM_CHARTOITEM                   
#undef WM_SETFONT                      
#undef WM_GETFONT                      
#undef WM_SETHOTKEY                    
#undef WM_GETHOTKEY                    
#undef WM_QUERYDRAGICON                
#undef WM_COMPAREITEM                  
#undef WM_GETOBJECT                    
#undef WM_COMPACTING                   
#undef WM_COMMNOTIFY                  
#undef WM_WINDOWPOSCHANGING            
#undef WM_WINDOWPOSCHANGED             
#undef WM_POWER                        
#undef WM_COPYDATA                     
#undef WM_CANCELJOURNAL                
#undef WM_NOTIFY                       
#undef WM_INPUTLANGCHANGEREQUEST       
#undef WM_INPUTLANGCHANGE              
#undef WM_TCARD                        
#undef WM_HELP                         
#undef WM_USERCHANGED                  
#undef WM_NOTIFYFORMAT                 
#undef WM_CONTEXTMENU                  
#undef WM_STYLECHANGING                
#undef WM_STYLECHANGED                 
#undef WM_DISPLAYCHANGE                
#undef WM_GETICON                      
#undef WM_SETICON                      
#undef WM_NCCREATE                     
#undef WM_NCDESTROY                    
#undef WM_NCCALCSIZE                   
#undef WM_NCHITTEST                    
#undef WM_NCPAINT                      
#undef WM_NCACTIVATE                   
#undef WM_GETDLGCODE                   
#undef WM_SYNCPAINT                    
#undef WM_NCMOUSEMOVE                  
#undef WM_NCLBUTTONDOWN                
#undef WM_NCLBUTTONUP                  
#undef WM_NCLBUTTONDBLCLK              
#undef WM_NCRBUTTONDOWN                
#undef WM_NCRBUTTONUP                  
#undef WM_NCRBUTTONDBLCLK              
#undef WM_NCMBUTTONDOWN                
#undef WM_NCMBUTTONUP                  
#undef WM_NCMBUTTONDBLCLK              
#undef WM_NCXBUTTONDOWN                
#undef WM_NCXBUTTONUP                  
#undef WM_NCXBUTTONDBLCLK              
#undef WM_INPUT_DEVICE_CHANGE          
#undef WM_INPUT                        
#undef WM_KEYFIRST                     
#undef WM_KEYDOWN                      
#undef WM_KEYUP                        
#undef WM_CHAR                         
#undef WM_DEADCHAR                     
#undef WM_SYSKEYDOWN                   
#undef WM_SYSKEYUP                     
#undef WM_SYSCHAR                      
#undef WM_SYSDEADCHAR                  
#undef WM_UNICHAR                      
#undef WM_KEYLAST
#undef WM_IME_STARTCOMPOSITION         
#undef WM_IME_ENDCOMPOSITION           
#undef WM_IME_COMPOSITION              
#undef WM_IME_KEYLAST                  
#undef WM_INITDIALOG                   
#undef WM_COMMAND                      
#undef WM_SYSCOMMAND                   
#undef WM_TIMER                        
#undef WM_HSCROLL                      
#undef WM_VSCROLL                      
#undef WM_INITMENU                     
#undef WM_INITMENUPOPUP                
#undef WM_GESTURE                      
#undef WM_GESTURENOTIFY                
#undef WM_MENUSELECT                   
#undef WM_MENUCHAR                     
#undef WM_ENTERIDLE                    
#undef WM_MENURBUTTONUP                
#undef WM_MENUDRAG                     
#undef WM_MENUGETOBJECT                
#undef WM_UNINITMENUPOPUP              
#undef WM_MENUCOMMAND                  
#undef WM_CHANGEUISTATE                
#undef WM_UPDATEUISTATE                
#undef WM_QUERYUISTATE                 
#undef WM_CTLCOLORMSGBOX               
#undef WM_CTLCOLOREDIT                 
#undef WM_CTLCOLORLISTBOX              
#undef WM_CTLCOLORBTN                  
#undef WM_CTLCOLORDLG                  
#undef WM_CTLCOLORSCROLLBAR            
#undef WM_CTLCOLORSTATIC               
#undef MN_GETHMENU                     
#undef WM_MOUSEFIRST                   
#undef WM_MOUSEMOVE                    
#undef WM_LBUTTONDOWN                  
#undef WM_LBUTTONUP                    
#undef WM_LBUTTONDBLCLK                
#undef WM_RBUTTONDOWN                  
#undef WM_RBUTTONUP                    
#undef WM_RBUTTONDBLCLK                
#undef WM_MBUTTONDOWN                  
#undef WM_MBUTTONUP                    
#undef WM_MBUTTONDBLCLK                
#undef WM_MOUSEWHEEL                   
#undef WM_XBUTTONDOWN                  
#undef WM_XBUTTONUP                    
#undef WM_XBUTTONDBLCLK                
#undef WM_MOUSEHWHEEL                  
#undef WM_MOUSELAST                    
#undef WM_PARENTNOTIFY                 
#undef WM_ENTERMENULOOP                
#undef WM_EXITMENULOOP                 
#undef WM_NEXTMENU                     
#undef WM_SIZING                       
#undef WM_CAPTURECHANGED               
#undef WM_MOVING                       
#undef WM_POWERBROADCAST               
#undef WM_DEVICECHANGE                 
#undef WM_MDICREATE                    
#undef WM_MDIDESTROY                   
#undef WM_MDIACTIVATE                  
#undef WM_MDIRESTORE                   
#undef WM_MDINEXT                      
#undef WM_MDIMAXIMIZE                  
#undef WM_MDITILE                      
#undef WM_MDICASCADE                   
#undef WM_MDIICONARRANGE               
#undef WM_MDIGETACTIVE                 
#undef WM_MDISETMENU                   
#undef WM_ENTERSIZEMOVE                
#undef WM_EXITSIZEMOVE                 
#undef WM_DROPFILES                    
#undef WM_MDIREFRESHMENU               
#undef WM_POINTERDEVICECHANGE          
#undef WM_POINTERDEVICEINRANGE         
#undef WM_POINTERDEVICEOUTOFRANGE      
#undef WM_TOUCH                        
#undef WM_NCPOINTERUPDATE              
#undef WM_NCPOINTERDOWN                
#undef WM_NCPOINTERUP                  
#undef WM_POINTERUPDATE                
#undef WM_POINTERDOWN                  
#undef WM_POINTERUP                    
#undef WM_POINTERENTER                 
#undef WM_POINTERLEAVE                 
#undef WM_POINTERACTIVATE              
#undef WM_POINTERCAPTURECHANGED        
#undef WM_TOUCHHITTESTING              
#undef WM_POINTERWHEEL                 
#undef WM_POINTERHWHEEL                
#undef DM_POINTERHITTEST               
#undef WM_IME_SETCONTEXT               
#undef WM_IME_NOTIFY                   
#undef WM_IME_CONTROL                  
#undef WM_IME_COMPOSITIONFULL          
#undef WM_IME_SELECT                   
#undef WM_IME_CHAR                     
#undef WM_IME_REQUEST                  
#undef WM_IME_KEYDOWN                  
#undef WM_IME_KEYUP                    
#undef WM_MOUSEHOVER                   
#undef WM_MOUSELEAVE                   
#undef WM_NCMOUSEHOVER                 
#undef WM_NCMOUSELEAVE                 
#undef WM_WTSSESSION_CHANGE            
#undef WM_TABLET_FIRST                 
#undef WM_TABLET_LAST                  
#undef WM_DPICHANGED                   
#undef WM_CUT                          
#undef WM_COPY                         
#undef WM_PASTE                        
#undef WM_CLEAR                        
#undef WM_UNDO                         
#undef WM_RENDERFORMAT                 
#undef WM_RENDERALLFORMATS             
#undef WM_DESTROYCLIPBOARD             
#undef WM_DRAWCLIPBOARD                
#undef WM_PAINTCLIPBOARD               
#undef WM_VSCROLLCLIPBOARD             
#undef WM_SIZECLIPBOARD                
#undef WM_ASKCBFORMATNAME              
#undef WM_CHANGECBCHAIN                
#undef WM_HSCROLLCLIPBOARD             
#undef WM_QUERYNEWPALETTE              
#undef WM_PALETTEISCHANGING            
#undef WM_PALETTECHANGED               
#undef WM_HOTKEY                       
#undef WM_PRINT                        
#undef WM_PRINTCLIENT                  
#undef WM_APPCOMMAND                   
#undef WM_THEMECHANGED                 
#undef WM_CLIPBOARDUPDATE              
#undef WM_DWMCOMPOSITIONCHANGED        
#undef WM_DWMNCRENDERINGCHANGED        
#undef WM_DWMCOLORIZATIONCOLORCHANGED  
#undef WM_DWMWINDOWMAXIMIZEDCHANGE     
#undef WM_DWMSENDICONICTHUMBNAIL           
#undef WM_DWMSENDICONICLIVEPREVIEWBITMAP   
#undef WM_GETTITLEBARINFOEX            
#undef WM_HANDHELDFIRST                
#undef WM_HANDHELDLAST                 
#undef WM_AFXFIRST                     
#undef WM_AFXLAST                      
#undef WM_PENWINFIRST                  
#undef WM_PENWINLAST                   
#undef WM_APP                          
#undef WM_USER                         

enum WindowMessages
{
	WM_NULL                         =	0x0000,
	WM_CREATE                       =	0x0001,
	WM_DESTROY                      =	0x0002,
	WM_MOVE                         =	0x0003,
	WM_SIZE                         =	0x0005,
	WM_ACTIVATE                     =	0x0006,
	WM_SETFOCUS                     =	0x0007,
	WM_KILLFOCUS                    =	0x0008,
	WM_ENABLE                       =	0x000A,
	WM_SETREDRAW                    =	0x000B,
	WM_SETTEXT                      =	0x000C,
	WM_GETTEXT                      =	0x000D,
	WM_GETTEXTLENGTH                =	0x000E,
	WM_PAINT                        =	0x000F,
	WM_CLOSE                        =	0x0010,
	WM_QUERYENDSESSION              =	0x0011,
	WM_QUERYOPEN                    =	0x0013,
	WM_ENDSESSION                   =	0x0016,
	WM_QUIT                         =	0x0012,
	WM_ERASEBKGND                   =	0x0014,
	WM_SYSCOLORCHANGE               =	0x0015,
	WM_SHOWWINDOW                   =	0x0018,
	WM_WININICHANGE                 =	0x001A,
	WM_SETTINGCHANGE                = WM_WININICHANGE,
	WM_DEVMODECHANGE                =	0x001B,
	WM_ACTIVATEAPP                  =	0x001C,
	WM_FONTCHANGE                   =	0x001D,
	WM_TIMECHANGE                   =	0x001E,
	WM_CANCELMODE                   =	0x001F,
	WM_SETCURSOR                    =	0x0020,
	WM_MOUSEACTIVATE                =	0x0021,
	WM_CHILDACTIVATE                =	0x0022,
	WM_QUEUESYNC                    =	0x0023,
	WM_GETMINMAXINFO                =	0x0024,
	WM_PAINTICON                    =	0x0026,
	WM_ICONERASEBKGND               =	0x0027,
	WM_NEXTDLGCTL                   =	0x0028,
	WM_SPOOLERSTATUS                =	0x002A,
	WM_DRAWITEM                     =	0x002B,
	WM_MEASUREITEM                  =	0x002C,
	WM_DELETEITEM                   =	0x002D,
	WM_VKEYTOITEM                   =	0x002E,
	WM_CHARTOITEM                   =	0x002F,
	WM_SETFONT                      =	0x0030,
	WM_GETFONT                      =	0x0031,
	WM_SETHOTKEY                    =	0x0032,
	WM_GETHOTKEY                    =	0x0033,
	WM_QUERYDRAGICON                =	0x0037,
	WM_COMPAREITEM                  =	0x0039,
	WM_GETOBJECT                    =	0x003D,
	WM_COMPACTING                   =	0x0041,
	WM_COMMNOTIFY                   =	0x0044,
	WM_WINDOWPOSCHANGING            =	0x0046,
	WM_WINDOWPOSCHANGED             =	0x0047,
	WM_POWER                        =	0x0048,
	WM_COPYDATA                     =	0x004A,
	WM_CANCELJOURNAL                =	0x004B,
	WM_NOTIFY                       =	0x004E,
	WM_INPUTLANGCHANGEREQUEST       =	0x0050,
	WM_INPUTLANGCHANGE              =	0x0051,
	WM_TCARD                        =	0x0052,
	WM_HELP                         =	0x0053,
	WM_USERCHANGED                  =	0x0054,
	WM_NOTIFYFORMAT                 =	0x0055,
	WM_CONTEXTMENU                  =	0x007B,
	WM_STYLECHANGING                =	0x007C,
	WM_STYLECHANGED                 =	0x007D,
	WM_DISPLAYCHANGE                =	0x007E,
	WM_GETICON                      =	0x007F,
	WM_SETICON                      =	0x0080,
	WM_NCCREATE                     =	0x0081,
	WM_NCDESTROY                    =	0x0082,
	WM_NCCALCSIZE                   =	0x0083,
	WM_NCHITTEST                    =	0x0084,
	WM_NCPAINT                      =	0x0085,
	WM_NCACTIVATE                   =	0x0086,
	WM_GETDLGCODE                   =	0x0087,
	WM_SYNCPAINT                    =	0x0088,
	WM_NCMOUSEMOVE                  =	0x00A0,
	WM_NCLBUTTONDOWN                =	0x00A1,
	WM_NCLBUTTONUP                  =	0x00A2,
	WM_NCLBUTTONDBLCLK              =	0x00A3,
	WM_NCRBUTTONDOWN                =	0x00A4,
	WM_NCRBUTTONUP                  =	0x00A5,
	WM_NCRBUTTONDBLCLK              =	0x00A6,
	WM_NCMBUTTONDOWN                =	0x00A7,
	WM_NCMBUTTONUP                  =	0x00A8,
	WM_NCMBUTTONDBLCLK              =	0x00A9,
	WM_NCXBUTTONDOWN                =	0x00AB,
	WM_NCXBUTTONUP                  =	0x00AC,
	WM_NCXBUTTONDBLCLK              =	0x00AD,
	WM_INPUT_DEVICE_CHANGE          =	0x00FE,
	WM_INPUT                        =	0x00FF,
	WM_KEYFIRST                     =	0x0100,
	WM_KEYDOWN                      =	0x0100,
	WM_KEYUP                        =	0x0101,
	WM_CHAR                         =	0x0102,
	WM_DEADCHAR                     =	0x0103,
	WM_SYSKEYDOWN                   =	0x0104,
	WM_SYSKEYUP                     =	0x0105,
	WM_SYSCHAR                      =	0x0106,
	WM_SYSDEADCHAR                  =	0x0107,
	WM_UNICHAR                      =	0x0109,
	WM_KEYLAST                      =	0x0109,
	WM_IME_STARTCOMPOSITION         =	0x010D,
	WM_IME_ENDCOMPOSITION           =	0x010E,
	WM_IME_COMPOSITION              =	0x010F,
	WM_IME_KEYLAST                  =	0x010F,
	WM_INITDIALOG                   =	0x0110,
	WM_COMMAND                      =	0x0111,
	WM_SYSCOMMAND                   =	0x0112,
	WM_TIMER                        =	0x0113,
	WM_HSCROLL                      =	0x0114,
	WM_VSCROLL                      =	0x0115,
	WM_INITMENU                     =	0x0116,
	WM_INITMENUPOPUP                =	0x0117,
	WM_GESTURE                      =	0x0119,
	WM_GESTURENOTIFY                =	0x011A,
	WM_MENUSELECT                   =	0x011F,
	WM_MENUCHAR                     =	0x0120,
	WM_ENTERIDLE                    =	0x0121,
	WM_MENURBUTTONUP                =	0x0122,
	WM_MENUDRAG                     =	0x0123,
	WM_MENUGETOBJECT                =	0x0124,
	WM_UNINITMENUPOPUP              =	0x0125,
	WM_MENUCOMMAND                  =	0x0126,
	WM_CHANGEUISTATE                =	0x0127,
	WM_UPDATEUISTATE                =	0x0128,
	WM_QUERYUISTATE                 =	0x0129,
	WM_CTLCOLORMSGBOX               =	0x0132,
	WM_CTLCOLOREDIT                 =	0x0133,
	WM_CTLCOLORLISTBOX              =	0x0134,
	WM_CTLCOLORBTN                  =	0x0135,
	WM_CTLCOLORDLG                  =	0x0136,
	WM_CTLCOLORSCROLLBAR            =	0x0137,
	WM_CTLCOLORSTATIC               =	0x0138,
	MN_GETHMENU                     =	0x01E1,
	WM_MOUSEFIRST                   =	0x0200,
	WM_MOUSEMOVE                    =	0x0200,
	WM_LBUTTONDOWN                  =	0x0201,
	WM_LBUTTONUP                    =	0x0202,
	WM_LBUTTONDBLCLK                =	0x0203,
	WM_RBUTTONDOWN                  =	0x0204,
	WM_RBUTTONUP                    =	0x0205,
	WM_RBUTTONDBLCLK                =	0x0206,
	WM_MBUTTONDOWN                  =	0x0207,
	WM_MBUTTONUP                    =	0x0208,
	WM_MBUTTONDBLCLK                =	0x0209,
	WM_MOUSEWHEEL                   =	0x020A,
	WM_XBUTTONDOWN                  =	0x020B,
	WM_XBUTTONUP                    =	0x020C,
	WM_XBUTTONDBLCLK                =	0x020D,
	WM_MOUSEHWHEEL                  =	0x020E,
	WM_MOUSELAST                    =	0x020E,
	WM_PARENTNOTIFY                 =	0x0210,
	WM_ENTERMENULOOP                =	0x0211,
	WM_EXITMENULOOP                 =	0x0212,
	WM_NEXTMENU                     =	0x0213,
	WM_SIZING                       =	0x0214,
	WM_CAPTURECHANGED               =	0x0215,
	WM_MOVING                       =	0x0216,
	WM_POWERBROADCAST               =	0x0218,
	WM_DEVICECHANGE                 =	0x0219,
	WM_MDICREATE                    =	0x0220,
	WM_MDIDESTROY                   =	0x0221,
	WM_MDIACTIVATE                  =	0x0222,
	WM_MDIRESTORE                   =	0x0223,
	WM_MDINEXT                      =	0x0224,
	WM_MDIMAXIMIZE                  =	0x0225,
	WM_MDITILE                      =	0x0226,
	WM_MDICASCADE                   =	0x0227,
	WM_MDIICONARRANGE               =	0x0228,
	WM_MDIGETACTIVE                 =	0x0229,
	WM_MDISETMENU                   =	0x0230,
	WM_ENTERSIZEMOVE                =	0x0231,
	WM_EXITSIZEMOVE                 =	0x0232,
	WM_DROPFILES                    =	0x0233,
	WM_MDIREFRESHMENU               =	0x0234,
	WM_POINTERDEVICECHANGE          =	0x238 ,
	WM_POINTERDEVICEINRANGE         =	0x239 ,
	WM_POINTERDEVICEOUTOFRANGE      =	0x23A ,
	WM_TOUCH                        =	0x0240,
	WM_NCPOINTERUPDATE              =	0x0241,
	WM_NCPOINTERDOWN                =	0x0242,
	WM_NCPOINTERUP                  =	0x0243,
	WM_POINTERUPDATE                =	0x0245,
	WM_POINTERDOWN                  =	0x0246,
	WM_POINTERUP                    =	0x0247,
	WM_POINTERENTER                 =	0x0249,
	WM_POINTERLEAVE                 =	0x024A,
	WM_POINTERACTIVATE              =	0x024B,
	WM_POINTERCAPTURECHANGED        =	0x024C,
	WM_TOUCHHITTESTING              =	0x024D,
	WM_POINTERWHEEL                 =	0x024E,
	WM_POINTERHWHEEL                =	0x024F,
	DM_POINTERHITTEST               =	0x0250,
	WM_IME_SETCONTEXT               =	0x0281,
	WM_IME_NOTIFY                   =	0x0282,
	WM_IME_CONTROL                  =	0x0283,
	WM_IME_COMPOSITIONFULL          =	0x0284,
	WM_IME_SELECT                   =	0x0285,
	WM_IME_CHAR                     =	0x0286,
	WM_IME_REQUEST                  =	0x0288,
	WM_IME_KEYDOWN                  =	0x0290,
	WM_IME_KEYUP                    =	0x0291,
	WM_MOUSEHOVER                   =	0x02A1,
	WM_MOUSELEAVE                   =	0x02A3,
	WM_NCMOUSEHOVER                 =	0x02A0,
	WM_NCMOUSELEAVE                 =	0x02A2,
	WM_WTSSESSION_CHANGE            =	0x02B1,
	WM_TABLET_FIRST                 =	0x02c0,
	WM_TABLET_LAST                  =	0x02df,
	WM_DPICHANGED                   =	0x02E0,
	WM_CUT                          =	0x0300,
	WM_COPY                         =	0x0301,
	WM_PASTE                        =	0x0302,
	WM_CLEAR                        =	0x0303,
	WM_UNDO                         =	0x0304,
	WM_RENDERFORMAT                 =	0x0305,
	WM_RENDERALLFORMATS             =	0x0306,
	WM_DESTROYCLIPBOARD             =	0x0307,
	WM_DRAWCLIPBOARD                =	0x0308,
	WM_PAINTCLIPBOARD               =	0x0309,
	WM_VSCROLLCLIPBOARD             =	0x030A,
	WM_SIZECLIPBOARD                =	0x030B,
	WM_ASKCBFORMATNAME              =	0x030C,
	WM_CHANGECBCHAIN                =	0x030D,
	WM_HSCROLLCLIPBOARD             =	0x030E,
	WM_QUERYNEWPALETTE              =	0x030F,
	WM_PALETTEISCHANGING            =	0x0310,
	WM_PALETTECHANGED               =	0x0311,
	WM_HOTKEY                       =	0x0312,
	WM_PRINT                        =	0x0317,
	WM_PRINTCLIENT                  =	0x0318,
	WM_APPCOMMAND                   =	0x0319,
	WM_THEMECHANGED                 =	0x031A,
	WM_CLIPBOARDUPDATE              =	0x031D,
	WM_DWMCOMPOSITIONCHANGED        =	0x031E,
	WM_DWMNCRENDERINGCHANGED        =	0x031F,
	WM_DWMCOLORIZATIONCOLORCHANGED  =	0x0320,
	WM_DWMWINDOWMAXIMIZEDCHANGE     =	0x0321,
	WM_DWMSENDICONICTHUMBNAIL           =	0x0323,
	WM_DWMSENDICONICLIVEPREVIEWBITMAP	=	0x0326,
	WM_GETTITLEBARINFOEX            =	0x033F,
	WM_HANDHELDFIRST                =	0x0358,
	WM_HANDHELDLAST                 =	0x035F,
	WM_AFXFIRST                     =	0x0360,
	WM_AFXLAST                      =	0x037F,
	WM_PENWINFIRST                  =	0x0380,
	WM_PENWINLAST                   =	0x038F,
	WM_APP                          =	0x8000,
	WM_USER                         =	0x0400,
};

#undef     WA_INACTIVE   
#undef     WA_ACTIVE     
#undef     WA_CLICKACTIVE

enum WA
{
	WA_INACTIVE     =	0,
	WA_ACTIVE       =	1,
	WA_CLICKACTIVE  =	2		
};

#undef UNICODE_NOCHAR    

enum
{
	UNICODE_NOCHAR = 0xFFFF
};

#undef PWR_OK            
#undef PWR_FAIL          
#undef PWR_SUSPENDREQUEST
#undef PWR_SUSPENDRESUME 
#undef PWR_CRITICALRESUME

enum PWR
{
	PWR_OK				=	1,
	PWR_FAIL            =	(-1),
	PWR_SUSPENDREQUEST  =	1,
	PWR_SUSPENDRESUME   =	2,
	PWR_CRITICALRESUME  =	3
};


#undef UIS_SET       
#undef UIS_CLEAR
#undef UIS_INITIALIZE
/*
* LOWORD(wParam) values in WM_*UISTATE*
*/
enum UIS
{
	UIS_SET			=	1,
	UIS_CLEAR		=	2,
	UIS_INITIALIZE	=	3
};

#undef UISF_HIDEFOCUS
#undef UISF_HIDEACCEL
#undef UISF_ACTIVE   
enum UISF
{
	UISF_HIDEFOCUS	=	0x1,
	UISF_HIDEACCEL  =	0x2,
	UISF_ACTIVE     =	0x4
};

#undef NFR_ANSI
#undef NFR_UNICODE
#undef NF_QUERY
#undef NF_REQUERY

enum NFR
{
	NFR_ANSI    =	1,
	NFR_UNICODE	=	2
};
enum NF
{
	NF_QUERY	=	3,
	NF_REQUERY	=	4
};

#undef WHEEL_DELTA
#undef WHEEL_PAGESCROLL
enum WHEEL
{
	#define WHEEL_DELTA		=	120,
	#define WHEEL_PAGESCROLL=   (UINT_MAX)

};

#undef XBUTTON1
#undef XBUTTON2

enum XButtons
{
	XBUTTON1	=   0x0001,
	XBUTTON2	=   0x0002
};

#undef PBT_APMQUERYSUSPEND             
#undef PBT_APMQUERYSTANDBY             
#undef PBT_APMQUERYSUSPENDFAILED       
#undef PBT_APMQUERYSTANDBYFAILED       
#undef PBT_APMSUSPEND                  
#undef PBT_APMSTANDBY                  
#undef PBT_APMRESUMECRITICAL           
#undef PBT_APMRESUMESUSPEND            
#undef PBT_APMRESUMESTANDBY            
#undef PBTF_APMRESUMEFROMFAILURE       
#undef PBT_APMBATTERYLOW               
#undef PBT_APMPOWERSTATUSCHANGE        
#undef PBT_APMOEMEVENT                 
#undef PBT_APMRESUMEAUTOMATIC          
#undef PBT_POWERSETTINGCHANGE          

enum PBT
{
	PBT_APMQUERYSUSPEND             =	0x0000,
	PBT_APMQUERYSTANDBY             =	0x0001,
	PBT_APMQUERYSUSPENDFAILED       =	0x0002,
	PBT_APMQUERYSTANDBYFAILED       =	0x0003,
	PBT_APMSUSPEND                  =	0x0004,
	PBT_APMSTANDBY                  =	0x0005,
	PBT_APMRESUMECRITICAL           =	0x0006,
	PBT_APMRESUMESUSPEND            =	0x0007,
	PBT_APMRESUMESTANDBY            =	0x0008,
	PBTF_APMRESUMEFROMFAILURE       =	0x00000001,
	PBT_APMBATTERYLOW               =	0x0009,
	PBT_APMPOWERSTATUSCHANGE        =	0x000A,
	PBT_APMOEMEVENT                 =	0x000B,
	PBT_APMRESUMEAUTOMATIC          =	0x0012,
	PBT_POWERSETTINGCHANGE          =	0x8013
};


#undef WS_OVERLAPPED       
#undef WS_POPUP            
#undef WS_CHILD            
#undef WS_MINIMIZE         
#undef WS_VISIBLE          
#undef WS_DISABLED         
#undef WS_CLIPSIBLINGS     
#undef WS_CLIPCHILDREN     
#undef WS_MAXIMIZE         
#undef WS_CAPTION          
#undef WS_BORDER           
#undef WS_DLGFRAME         
#undef WS_VSCROLL          
#undef WS_HSCROLL          
#undef WS_SYSMENU          
#undef WS_THICKFRAME       
#undef WS_GROUP            
#undef WS_TABSTOP          
#undef WS_MINIMIZEBOX      
#undef WS_MAXIMIZEBOX      
#undef WS_TILED            
#undef WS_ICONIC           
#undef WS_SIZEBOX          
#undef WS_TILEDWINDOW      
#undef WS_OVERLAPPEDWINDOW
#undef WS_POPUPWINDOW      
#undef WS_CHILDWINDOW      
#undef WS_EX_DLGMODALFRAME     
#undef WS_EX_NOPARENTNOTIFY    
#undef WS_EX_TOPMOST           
#undef WS_EX_ACCEPTFILES       
#undef WS_EX_TRANSPARENT       
#undef WS_EX_MDICHILD          
#undef WS_EX_TOOLWINDOW        
#undef WS_EX_WINDOWEDGE        
#undef WS_EX_CLIENTEDGE        
#undef WS_EX_CONTEXTHELP       
#undef WS_EX_RIGHT             
#undef WS_EX_LEFT              
#undef WS_EX_RTLREADING        
#undef WS_EX_LTRREADING        
#undef WS_EX_LEFTSCROLLBAR     
#undef WS_EX_RIGHTSCROLLBAR    
#undef WS_EX_CONTROLPARENT     
#undef WS_EX_STATICEDGE        
#undef WS_EX_APPWINDOW         
#undef WS_EX_OVERLAPPEDWINDOW  
#undef WS_EX_PALETTEWINDOW     
#undef WS_EX_LAYERED           
#undef WS_EX_NOINHERITLAYOUT   
#undef WS_EX_NOREDIRECTIONBITMAP
#undef WS_EX_LAYOUTRTL         
#undef WS_EX_COMPOSITED        
#undef WS_EX_NOACTIVATE        



enum WindowStyles
{
	WS_OVERLAPPED       =	0x00000000L,
	WS_POPUP            =	0x80000000L,
	WS_CHILD            =	0x40000000L,
	WS_MINIMIZE         =	0x20000000L,
	WS_VISIBLE          =	0x10000000L,
	WS_DISABLED         =	0x08000000L,
	WS_CLIPSIBLINGS     =	0x04000000L,
	WS_CLIPCHILDREN     =	0x02000000L,
	WS_MAXIMIZE         =	0x01000000L,
	WS_CAPTION          =	0x00C00000L,     /* WS_BORDER | WS_DLGFRAME  */
	WS_BORDER           =	0x00800000L,
	WS_DLGFRAME         =	0x00400000L,
	WS_VSCROLL          =	0x00200000L,
	WS_HSCROLL          =	0x00100000L,
	WS_SYSMENU          =	0x00080000L,
	WS_THICKFRAME       =	0x00040000L,
	WS_GROUP            =	0x00020000L,
	WS_TABSTOP          =	0x00010000L,
	WS_MINIMIZEBOX      =	0x00020000L,
	WS_MAXIMIZEBOX      =	0x00010000L,
	WS_TILED            =	WS_OVERLAPPED,
	WS_ICONIC           =	WS_MINIMIZE,
	WS_SIZEBOX          =	WS_THICKFRAME,

	WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED
		| WS_CAPTION
		| WS_SYSMENU
		| WS_THICKFRAME
		| WS_MINIMIZEBOX
		| WS_MAXIMIZEBOX),

	WS_TILEDWINDOW      =	WS_OVERLAPPEDWINDOW,

	WS_POPUPWINDOW      =	(WS_POPUP | WS_BORDER | WS_SYSMENU),
	WS_CHILDWINDOW      =	(WS_CHILD),
	WS_EX_DLGMODALFRAME     =	0x00000001L,
	WS_EX_NOPARENTNOTIFY    =	0x00000004L,
	WS_EX_TOPMOST           =	0x00000008L,
	WS_EX_ACCEPTFILES       =	0x00000010L,
	WS_EX_TRANSPARENT       =	0x00000020L,
	WS_EX_MDICHILD          =	0x00000040L,
	WS_EX_TOOLWINDOW        =	0x00000080L,
	WS_EX_WINDOWEDGE        =	0x00000100L,
	WS_EX_CLIENTEDGE        =	0x00000200L,
	WS_EX_CONTEXTHELP       =	0x00000400L,
	WS_EX_RIGHT             =	0x00001000L,
	WS_EX_LEFT              =	0x00000000L,
	WS_EX_RTLREADING        =	0x00002000L,
	WS_EX_LTRREADING        =	0x00000000L,
	WS_EX_LEFTSCROLLBAR     =	0x00004000L,
	WS_EX_RIGHTSCROLLBAR    =	0x00000000L,
	WS_EX_CONTROLPARENT     =	0x00010000L,
	WS_EX_STATICEDGE        =	0x00020000L,
	WS_EX_APPWINDOW         =	0x00040000L,
	WS_EX_OVERLAPPEDWINDOW  =	(WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE),
	WS_EX_PALETTEWINDOW     =	(WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST),
	WS_EX_LAYERED           =	0x00080000,
	WS_EX_NOINHERITLAYOUT   =	0x00100000L, // Disable inheritence of mirroring by children
	WS_EX_NOREDIRECTIONBITMAP	=	0x00200000L,
	WS_EX_LAYOUTRTL				=	0x00400000L, // Right to left mirroring
	WS_EX_COMPOSITED			=	0x02000000L,
	WS_EX_NOACTIVATE			=	0x08000000L

};

#undef CW_USEDEFAULT
enum CW
{
	CW_USEDEFAULT	=	((int)0x80000000)
};
カテゴリー: C++, WinAPI | タグ: , , , , | コメントをどうぞ

C++ による Windows プログラミングの学習 1-6 アプリケーション状態を管理する

MSDN ライブラリ>Windows 開発>C++ による Windows プログラミングの学習>モジュール 1. 初めての Windows プログラム>アプリケーション状態を管理する
https://msdn.microsoft.com/ja-jp/library/ff381400(v=vs.85).aspx

今回は1-3で触れたウィンドウプロシージャをメンバ関数にする話です。

まず、ウィンドウを表すクラスのコンストラクタで呼び出している
CreateWindowEx()の最後の引数lpParamにthisポインタ,作成中のオブジェクト自身を渡します。
渡されたオブジェクトはWM_NCCREATE,WM_CREATEメッセージのlParamに渡される
CREATESTRUCT型のオブジェクトのメlpCreateParamンバに代入されます。

WM_NCCREATEでこれを回収し、 SetWindowLongPtr()関数でウィンドウハンドルと関連付けます。
GetWindowLongPtr()関数でハンドルに関連付けられたオブジェクトを取得できるので、
ウィンドウプロシージャ内でメンバ関数を呼び出すことが出来ます。

WM_NCCREATE,WM_CREATEはCreateWindowEx()の終了前に呼び出されるので
ウィンドウハンドルをウィンドウを表すオブジェクトのメンバに保存する処理は、
これらのメッセージの処理内で行うようにします。

CreateWindowEx
https://msdn.microsoft.com/ja-jp/library/cc410714.aspx

SetWindowLongPtr()
https://msdn.microsoft.com/ja-jp/library/cc411204.aspx

GetWindowLongPtr()
https://msdn.microsoft.com/ja-jp/library/cc364762.aspx

class Form
{
public:
	static LRESULT CALLBACK WindowProc
            (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
				
private:
	LRESULT  WindowProc( UINT uMsg, WPARAM wParam, LPARAM lParam);
	HWND hwnd_;
public:
	Form();
	virtual ~Form();
	bool Show();
};
Form::Form()
{
	// ウィンドウ クラスを登録する
	const wchar_t CLASS_NAME[] = L"Form";
	WNDCLASSEXW wc = {};
	wc.cbSize = sizeof(WNDCLASSEXW);
	wc.lpfnWndProc = Form::WindowProc;
	wc.lpszClassName = CLASS_NAME;

	Application::Instance().RegisterWindowClass(wc);


	// ウィンドウを作成する
	CreateWindowEx(
		0,                              // オプションのウィンドウ スタイル
		CLASS_NAME,                     // ウィンドウ クラス
		L"Title",    // ウィンドウ テキスト
		WS_OVERLAPPEDWINDOW,            // ウィンドウ スタイル
										// サイズと位置
		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
		NULL,       // 親ウィンドウ    
		NULL,       // メニュー
		Application::Instance().getHandle(),  // インスタンス ハンドル
		this        // 追加のアプリケーション データ
	);
}


/// static版ウィンドウプロシージャ
LRESULT CALLBACK Form::WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	// ウィンドウ作成時メッセージ
	if (uMsg == WM_NCCREATE)
	{
		// lParamからCREATESTRUCTを取り出す。
		CREATESTRUCT *pCreate = reinterpret_cast<CREATESTRUCT*>(lParam);

		// CREATESTRUCTからウィンドウオブジェクトを取り出す。
		Form* f = reinterpret_cast<Form*>(pCreate->lpCreateParams);

		// ウィンドウハンドルを保存
		f->hwnd_ = hwnd;
		// ウィンドウオブジェクトとハンドルを関連付け
		SetWindowLongPtr(hwnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(f));

	}

	{
		// ウィンドウハンドルに関連付けられたウィンドウオブジェクトを取得する
		LONG_PTR ptr = GetWindowLongPtr(hwnd, GWLP_USERDATA);
		if (ptr != 0)
		{
			// 関連付けされていた場合
			// メンバ関数版ウィンドウプロシージャを呼び出す。
			Form *f = reinterpret_cast<Form*>(ptr);
			return f->WindowProc(uMsg, wParam, lParam);
		}
		else
		{
			//関連付けられていなければデフォルトの処理を実行
			return DefWindowProc(hwnd, uMsg, wParam, lParam);
		}
	}
}

/// メンバ版ウィンドウプロシージャ
LRESULT Form::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	//とりあえずデフォルト処理
	return DefWindowProc(hwnd_, uMsg, wParam, lParam);
}

最後にこれらの処理をまとめて基底クラスへ移動します。

class Wnd
{
public:
	static LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

protected:

	virtual LRESULT  WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
	HWND hwnd_;
public:
	Wnd();
	virtual ~Wnd();
};

/// static版ウィンドウプロシージャ
LRESULT CALLBACK Wnd::WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	// ウィンドウ作成時メッセージ
	if (uMsg == WM_NCCREATE)
	{
		// lParamからCREATESTRUCTを取り出す。
		CREATESTRUCT *pCreate = reinterpret_cast<CREATESTRUCT*>(lParam);

		// CREATESTRUCTからウィンドウオブジェクトを取り出す。
		Wnd* f = reinterpret_cast<Wnd*>(pCreate->lpCreateParams);

		// ウィンドウハンドルを保存
		f->hwnd_ = hwnd;
		// ウィンドウオブジェクトとハンドルを関連付け
		SetWindowLongPtr(hwnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(f));

	}

	{
		// ウィンドウハンドルに関連付けられたウィンドウオブジェクトを取得する
		LONG_PTR ptr = GetWindowLongPtr(hwnd, GWLP_USERDATA);
		if (ptr != 0)
		{
			// 関連付けされていた場合
			// メンバ関数版ウィンドウプロシージャを呼び出す。
			Wnd *f = reinterpret_cast<Wnd*>(ptr);
			return f->WindowProc(uMsg, wParam, lParam);
		}
		else
		{
			//関連付けられていなければデフォルトの処理を実行
			return DefWindowProc(hwnd, uMsg, wParam, lParam);
		}
	}
}

/// メンバ版ウィンドウプロシージャ
LRESULT Wnd::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	//とりあえずデフォルト処理
	return DefWindowProc(hwnd_, uMsg, wParam, lParam);
}

Wnd::Wnd(){}
Wnd::~Wnd(){}

class Form:public Wnd
{
protected:			
	LRESULT  WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
public:
	Form();
	virtual ~Form();
	bool Show();
};

Form::Form()
{
	// ウィンドウ クラスを登録する
	const wchar_t CLASS_NAME[] = L"Form";
	WNDCLASSEXW wc = {};
	wc.cbSize = sizeof(WNDCLASSEXW);
	wc.lpfnWndProc = Wnd::WindowProc;
	wc.lpszClassName = CLASS_NAME;

	Application::Instance().RegisterWindowClass(wc);

	// ウィンドウを作成する
	//this->hwnd_ = 
	CreateWindowEx(
		0,                              // オプションのウィンドウ スタイル
		CLASS_NAME,                     // ウィンドウ クラス
		L"Title",    // ウィンドウ テキスト
		WS_OVERLAPPEDWINDOW,            // ウィンドウ スタイル
										// サイズと位置
		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
		NULL,       // 親ウィンドウ    
		NULL,       // メニュー
		Application::Instance().getHandle(),  // インスタンス ハンドル
		this        // 追加のアプリケーション データ
	);
}

Form::~Form(){}
bool Form::Show()
{
	BOOL b = ShowWindow(hwnd_, Application::Instance().getCmdShow());
	return (b != 0);
}

/// メンバ版ウィンドウプロシージャ
LRESULT Form::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	return Wnd::WindowProc(uMsg, wParam, lParam);
}

カテゴリー: C++, WinAPI | タグ: , , , , | コメントをどうぞ

C++ による Windows プログラミングの学習 1-5 ウィンドウを閉じる

MSDN ライブラリ>Windows 開発>C++ による Windows プログラミングの学習>モジュール 1. 初めての Windows プログラム>ウィンドウを閉じる
https://msdn.microsoft.com/ja-jp/library/ff381396(v=vs.85).aspx

閉じるボタン,Alt+F4などでウィンドウを閉じようとするとWM_CLOSEメッセージが送信される。
この時点ではまだキャンセルが可能で、ウィンドウプロシージャが0を返すことで、キャンセルが行われる
実際にウィンドウを閉じる場合は、DestroyWindow()メソッドを呼び出すか、
DefWindowProc()メソッドによるデフォルトの処理を呼び出す。

ウィンドウが閉じられた場合WM_DESTORYメッセージが送信される。
ウィンドウを閉じたときにアプリケーション自体も終了する場合、
PostQuitMessage(0)を呼び出す。
するとWM_QUITメッセージが送信され、メッセージループを脱出してアプリケーション終了する。

カテゴリー: C++, WinAPI | タグ: , , , , | コメントをどうぞ

C++ による Windows プログラミングの学習 1-4 ウィンドウに描画する

MSDN ライブラリ>Windows 開発>C++ による Windows プログラミングの学習>モジュール 1. 初めての Windows プログラム>ウィンドウに描画する
https://msdn.microsoft.com/ja-jp/library/ff381401(v=vs.85).aspx

ウィンドウの再描画が必要なの時
(画面を最初に表示されるとき、
他のウィンドウなどと重なっていて表示されていなかった領域が再び表示された時,
ウィンドウサイズの変更により新たな領域が表示された時等)
そのウィンドウに対してWM_PAINTが送信されます。
タイトルバーやウィンドウの周りのフレームはWindowsにより描画されるため、
描画コードを書く必要があるのはクライアント領域のみになります。

BeginPaint関数を呼び出して描画を開始し、終了時にはEndPaint関数を呼び出します。
BeginPaint関数では、引数に渡すPAINTSTRUCT構造体に再描画要求に関する情報が
渡されます。描画が必要な領域はクライアント領域の相対位置として、rcPaint メンバーに代入されています。

	case WM_PAINT:
	{
		PAINTSTRUCT ps;
		HDC hdc = BeginPaint(hwnd, &ps);
		// すべての描画がこの BeginPaint と EndPaint の間で実行される
		::FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
		EndPaint(hwnd, &ps);

		return 0;
	}
カテゴリー: C++, WinAPI | タグ: , , , , | コメントをどうぞ