カテゴリー「プログラミング(VC6)」の5件の記事

2010年9月 6日 (月)

[Javascript] Lightboxの作成

数年前からWebページ上の縮小画像等をクリックすると、同一画面上に拡大画像が表示され、拡大画像を閉じると元の画面に戻る機能が色んなサイトで一般的に使われるようになりました。
この機能をLightbox(ライトボックス)と呼ぶそうですが、プログラミング好きとして興味本位で独自に作ってみました(  ̄▽ ̄)ノ
しかも画像だけでなく外部サイトの表示もできるようなものとして、以下のリンク文字列をクリックすると、同一画面上にリンク先の中身を表示し、黒半透明背景をクリックすると元の画面に戻ります。
対応ブラウザは、IE(6以降)、Chrome、Firefox、Safari等でたぶん動くと思います。(何かと抜けはあるだろうけど)

画像1
画像2
画像3
Yahoo!
YouTube

続きを読む "[Javascript] Lightboxの作成"

| | コメント (0) | トラックバック (0)

2008年6月27日 (金)

[VC6] メッセージボックスの[×]ボタンを使用不可にする

メッセージボックスで[OK][キャンセル] や[はい][いいえ]などを表示するときに、
タイトルバーにある[×]ボタンで閉じられると困る場面が出てきたので、
アプリケーション全体でメッセージボックスの[×]ボタンを使用不可にする処理を作ってみた。

CWinAppの派生Appクラス.h
public CWinAppの派生Appクラス : CWindApp{
protected:
  static HHOOK m_hHookMB;
public:
 static LRESULT CALLBACK HookMBProc(int nCode, WPARAM wParam, LPARAM lParam);
 virtual int DoMessageBox(LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt);
};

CWinAppの派生Appクラス.cpp
HHOOK CWinAppの派生Appクラス::m_hHookMB = NULL;

LRESULT CALLBACK CWinAppの派生Appクラス::HookMBProc(int nCode,WPARAM wParam, LPARAM lParam )
{
  if(nCode == HCBT_ACTIVATE){
    HMENU hSysMenu = ::GetSystemMenu((HWND)wParam, FALSE);
      if(hSysMenu != NULL)
        ::RemoveMenu(hSysMenu, SC_CLOSE ,MF_BYCOMMAND);
      ::UnhookWindowsHookEx(CWinAppの派生Appクラス::m_hHookMB);
  }
  return ::CallNextHookEx(CWinAppの派生Appクラス::m_hHookMB, nCode, wParam, lParam);
}

int CWinAppの派生Appクラス::DoMessageBox(LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt)
{
  m_hHookMB = SetWindowsHookEx(WH_CBT, HookMBProc, NULL, GetCurrentThreadId());
  return CWinAppの派生Appクラス::DoMessageBox(lpszPrompt, nType, nIDPrompt);
}

| | コメント (0) | トラックバック (0)

2008年6月13日 (金)

[VC6] 指定URLのファイルダウンロード

VC6環境で、ネット経由で指定URLのファイルをダウンロードする必要がでてきたので、CInternetSessionを利用して、とりあえず土台をを作ってみた。
#include <afxinet.h>

bool FileDownload(LPCTSTR pszURL, LPCTSTR pszSaveFilePath)
{
  bool             bRslt = false;
  CFile*           pNetFile = NULL;
  CInternetSession is;
  try{
    // URLを開く
    pNetFile = is.OpenURL(pszURL);
    if(pNetFile == NULL)
      return bRslt;
    // ファイル保存
    CFile saveFile(pszSaveFilePath, CFile::modeCreate | CFile::modeWrite | CFile::shareDenyNone);
    BYTE  szBuff[1024];
    int   nReadBytes;
    while(0 < (nReadBytes = pNetFile->Read(szBuff, 1024)))
      saveFile.Write(szBuff, nReadBytes);
    saveFile.Close();
    bRslt = true;
  }
  catch(CException* pEx){
    pEx->ReportError();
    pEx->Delete();
  }
  // 後処理
  if(pNetFile != NULL)
    pNetFile->Close();
  delete pNetFile;

  return bRslt;
}
理想としては、#include を追加し、std::autoptrを使用してスッキリさせたかったのだが、コンパイル環境の都合上ここでは使わないこととした。
CFile->Close();もデストラクタで自動的に呼ばれるけれど、念のため。
あとは、pNetFile->GetLength();でダウンロードするサイズが分かるので、関数引数なりを追加すれば、プログレス表示にも対応しやすいかな。

| | コメント (0) | トラックバック (0)

2008年5月19日 (月)

[VC6] リソースファイル(.rc)から外部リソースファイルのインクルード

VC6の一つプロジェクトでリソースファイルの一部分を別のファイルとして切り離し、共通部分はそのまま残したい場面が出てきたので、今日はファイルを分割し外部リソースファイルとしてのインクルードをしてみました。

続きを読む "[VC6] リソースファイル(.rc)から外部リソースファイルのインクルード"

| | コメント (0) | トラックバック (0)

2008年5月 8日 (木)

[VC6] プロジェクトファイルをVSS6.0に関連づけ

VC6(正確にはVisual Studio 6.0?)のプロジェクトファイル名を変更したくなり.dswと.dspのファイル名を変更し、テキストエディタでファイルの中身も全て置換をしました。(もちろんのこと元のファイルは別名で退避)

けれど、ソースセーフ(VSS6.0)の関連づけに失敗するようになったため、一度関連付けを切断し新たに今回プロジェクトファイルとソースセーフの関連づけを行うようにしてみた。

続きを読む "[VC6] プロジェクトファイルをVSS6.0に関連づけ"

| | コメント (0) | トラックバック (0)